8月14日の投稿で、NVIDIA Jetson Nano到着、と書きました。しかし時はお盆。15日は作業を中断、本日再開であります。結論から言えば、特に大きな問題もなく、セットアップを完了し、CUDAが使えるという確認をとるところまで行えました。でも、細かい事を言えば、引っかかるところいろいろありました。
まず、パッケージを開くと現れる「説明書」をご紹介したいと思います。これ以上ない程シンプルですが、見れば分かる素晴らしい説明かと思います。
所定のページにある説明を読みながらJetson Nanoの立ち上げ作業を行っていくわけですが、パッケージには上記の説明書以外にもう一枚「紙」が入っているのです。それがこちら。
これも一目瞭然。このボール紙を図のとおりに折りたたんで、パッケージの内箱にはめ込んで、Jetson Nanoを置くための「スペーサ」にせよとの思し召しでしょう。Jetson Nanoには四隅に穴が開いている(Raspberry Pi系同様、ネジはM3不可、M2ならOK)ので、六角のスペーサを立てても良い(手元に無い無いと言っていた、M2のスペーサがようやく届いていた)ですが、折角なのでNVIDIAの人の思し召しに従うことにいたしました。これ結構、座りが良いです。
次にやることはと言えば、OSイメージをmicroSDカードに書き込むことです。(NVIDIA発行のJetson Nano Developer Kitなる文書によれば独立にSDK Managerからインストールする方法も書かれていましたが、OSイメージからの方が遥かに簡単に見えたのでそちらにします。)
UHS-I規格のカードは最低必須ということであったので、1枚だけ手元にあった虎の子のUHS-IカードをJetson Nanoに割り当てます。
OSイメージは上記のサイトから辿っていけば入手できました。5Gバイトくらい、結構速く落とせました。microSDへのイメージ書き込みは「一応」2ステップです。
- microSDカードのフォーマット
- OSイメージ(ZIPファイルのままでよい)を指定してmicroSDへのコピー
特に難しいことは何もないのですが、2番目のステップでご指定の
BalenaEtcher
UIはカッコよく、また、5Gの書き込みにも大して時間はかからなかったのですが、書き込み完了後、Windowsでは認識できないフォーマットのmicroSDになってしまうためなのか、警告ウインドウが開きます。そんなものは無視してカードを取り出してしまえばよいのですが、ちとウザイ。
後は、Raspberry Piのセットアップで度々お世話になっている
-
- キーボード
- マウス
- モニタ
を接続し、Jetson Nano用に新規購入の電源を接続。電源については、Jetson Nano Developer Kitの記述を1箇所引用させていただきます。
If the developer kit’s total load is expected to exceed 2A, e.g., due to peripherals attached to the carrier board, connect the J48 Power Select Header pins to disable power supply via Micro-USB and enable 5V⎓4A via the J25 power jack. Another option is to supply 5V⎓6A via the J41 expansion header (3A per pin).
というわけで、J48に手持ちのジャンパピンを刺し(回路図によれば、これでUSB側の電源供給回路をアクティブにしている信号がインアクティブになる)5V4Aの電源をJ25ジャックに接続しました。
電源投入、電源LEDが緑に輝きますが、画面が出てきません。
どうも不安に思っていたことが起きたようでした。HDMIのモニタではなく、VGAのモニタにHDMIからVGAへの変換器をつけてずっとRaspberry Piの初期化を行ってきたのです。画面サイズも小さい 1280×720。同じものをJetson Nanoにも使ったのですが、画面でないっす。なんか実行している感じでLEDチカチカしているのですがねえ。
仕方がないので、フルHDのHDMIモニタを別の部屋から持ってきて取り換えました。こんどはOK、ちゃんと画面に出力されます。ともかく最初の画面の
ライセンス契約をポチっと
から、ユーザの設定まではやってしまわないとモニタ無しでは手も足もでません。なお、
ssh でリモートログインできるような初期設定になっていたです。
ともかく、最低限のユーザ設定だけはモニタ、キーボードをつなげてやってしまわないとなりませんな。その後は、それらを外してしまってこんな感じ。
左側の赤いのがJ48ピンヘッダをショートしてジャンパピンです。USBでなく、ピンジャックの電源を使う場合には準備必須アイテム。
さて、立ち上がっていつものようにTeratermで接続したところで、OSのリリースバージョンをまず確認。以下でした。
その後、いろいろ設定値をいじって、リモートでの作業をしやすくして行きましたが、Raspberry Piとは違うところを発見
Raspberry Pi はデフォルトでReal VNCサーバがインストールされていた
よってPC側に「無償の」Real VNCクライアントだけインストールすればVNCできました。Raspberry PiのRaspbianは何気に「本来有償」のソフトウエアを使用できるように談合済のケースがあって素晴らしいのですが、Jetson上のUbuntuの場合はその辺は「素」のままなのでReal VNCは無いようでした。しかし、みれば「デスクトップの共有」という項目あり、しらべるとVinoというVNCサーバーが含まれているようなのです。しかし、設定しようとしたらナゼか落ちました。トラ技の記事を参考に他のVNCを入れようかとも思ったのですが、それほどGUIを使うとは思えないので、.bashrcに
DISPLAY環境変数をPCに向けて設定
を1行書き入れておしまいにしました。PC側でXサーバー動かしているので、ほれこのように、Jetson上のGUIウインドウをPCに写し出すことができます(ちょっと動きがぬるぬるして気持ちが悪いですがね)。
さて、.bashrcと言えば、他にもいくつか必須な追加項目があります。まず、cudaのソースのコンパイラドライバである nvcc、 そのままではパスに含まれていないです。cudaのライブラリパスも同じ。
/usr/local/cuda
配下に、バイナリ、ドキュメント、ライブラリ等各種格納されているので、自分でパスを設定しないと肝心のものが走りませぬ。
設定すれば、このように、nvccも起動に成功。いよいよCUDAな感じが高まります。
さて、サンプルソースなどコンパイルしてCUDAできることを確認したいですが、それにはもうワンステップ。
CUDAのサンプルソースをインストールディレクトリから、自前のワーキングディレクトリにコピーしてくれるスクリプト cuda-install-samples-10.0.shというのが含まれているので、これを実行。ワーキングディレクトリ名は cuda_trainといたしました。
最初にビルドして試すのは、1_Utilites内の deviceQuery プログラムです。そのマシン上のCUDAの諸元を調べて報告してくれるプログラム。何も考えず、make一発でビルド成功。
途中略、末尾を見れば、Result=PASSと。
ともかくこれで、Jetsonの上でCUDAできることが確認できたかな。