2016年4月10日日曜日

Jetson TK1に外部SDをmount

さて、一通り設定が終わり、chainerもかなり苦労しましたが無事インストールできました。(Jetson TK1にはcuDNNが入っていると聞いていたんですが、chainerインストール時に、なぜかcコンパイラが動き出し(CUDAを使えるとインストーラが自動的に認識し、再ビルドしだしたのか?)、"cudnn.hがない”と散々怒られました。ただ、このインストーラが素晴らしく、それでも何とかpyCudaは使えるようにしてくれたようです。
後で調べたら、TK1だとcuda-6.5くらいまでが無難にインストールできて(自分もそうしましたが)、cudnnはcuda-7.0からだそうです。(最新は7.5ですが、それがインストールできたら、一度chainerを pip uninstall chainer して再度入れ直さないとダメだそうです。

1. cudaの威力を確認する
何か時間のかかるもので、威力を確認したくなります。調べていたら、chainer-goghというのが面白そうです。詳細は省きますが、元イメージ + スタイルイメージ = 合成イメージ を作ってくれます。何でこれがDeepLearningなのかよくわかりませんが、caffeの出来合いのモデルを使うそうです。
まず、MacBookProで試してみると、2時間ちょっとかかりました。(下手な古いPC使うと、1日くらいかかるらしいです)
さて、Jeton TK1ですが30分で処理が終わりました。(他のブログにも記事があり、そちらでも30分くらいなので、設定はうまくいっているのでしょう)
速いといえば、速いのですが意外にMacBookProが早くてびっくりです。(こいつのビデオチップはintel内蔵を使っていますので、OpenCVはできてもCUDAは動きません)

2. 外部SDを使えるようにする
Jetson TK1の内蔵SDは16GBしかなく、しかもubuntuのOSやらcudaの設定で5GB以上使ってしまいます。このままchainerを試すそうとしても、すぐにSDが一杯になるのは目に見えてます。
そこで外部SDをつけて、ファイルシステムとして使えるようにしました。

(1)ext4でフォーマットする
基本、SDカードの初期状態はwindowsで使うことを考えてvfatです。しかしそれでは都合が悪いので、ext4でフォーマットします。

$ sudo cfdisk (デバイス名)  # これでまずvfatのパーティションを削除します

デバイズ名は自分の場合は、/dev/mmcblk1でした。(内蔵SDが/dev/mmcblk0でした)調べる一番簡単な方法は、Jetsonを起動しておいて、SDをさすと自動的にマウントされます。そこで、df -h してみるなり、dmesg | tail なりすればわかります。
次にフォーマットです。

$ sudo mkfs.ext4 (デバイス名)-L (ラベル名)

最後の「ラベル名」は必須ではありませんが、つけておくとfstabを書くのが楽になります。

(2)SDカードをマウントする
さてここで/etc/fstab の設定になるのですが、なぜか自分のJetsonでは中身が空っぽです。これどうやって、内蔵SDのマウントしてるんだ?しかもコメントとして、"UNCONFIGURED FSTAB FOT BASE SYSTEM"と書いてあるし不安になってきました。とりあえず調べた通り以下の設定を追加しました。

LABEL=(ラベル名) (マウントポイント) ext4 defaults 2 0

ためしに、sudo mount -a で問題なくマウントできることを確認します。

(3)Jetsonを再起動して自動的にマウントされるかを確認する
自分の場合、ここまでくるのに随分失敗しました。試行錯誤して、これまでのコマンドを何度もやり直しましたし、(2)のmountコマンドでうまくいくのに、起動時はダメとか大変でした。そんなときは起動時にエラーを出力してきますので、メッセージしたがいとりあえずSkipして、dmesg等で何が悪いのかを調べます。
とりあえず、自分の場合はこれでうまくいくようになりました。

64GBのSDをつけましたので、ちょっと大きなものも試せそうです。(本気でやるなら、SATAのI/Fもっているので、そちらに繋いだ方がいいでしょう。)

0 件のコメント:

コメントを投稿