AIの片隅で(12) Jetson NanoでChainer

JosephHalfmoon

前回は Jetson Nanoを立ち上げて CUDA が使えることを確認いたしました。今日は、CUDAにそれらしいことをやらせたい。やっぱりAIネタですね。それであれば、既にOSイメージに含まれている

NVIDIA JetPack SDK

というライブラリを使うことになります。JetPackには肝心のCUDAも含まれているので勿論使わせていただくのですが、こちらはこちらで、以前 Raspberry Pi にChainerをインストールし、人工知能業界のHello World! である MNIST を動かして、モデル間の速度を比べてみたりしております。そこで、 Chainer+MNISTの組み合わせで Raspberry Piと速度を比べてみました。

まずは、NVIDIA社発行のJetson Nano Developer Kit User Guideという文書から、Jetpack SDKになにが含まれているのか記述している部分を引用させていただきましょう。

JetPack libraries and APIs include:
• TensorRT and cuDNN for high-performance deep learning applications
• CUDA for GPU accelerated applications across multiple domains
• Multimedia API package for camera applications and sensor driver development
• VisionWorks and OpenCV for visual computing applications

これには Chainer は含まれていません。しかし、JetsonのOSは Ubuntu なので特別なこともせず、Chainerをインストールすることは可能でした。なお、先に書かせていただいております通り、来年頭のPython2のサポート終了を睨み、つい数週間前に重い腰をあげてPython3への鞍替えを決意したところです。今回は全てPython3でやっています。

Chainerから、GPUを使うためにはCupyが必要なのでまずは、Cupyインストールしてみました。Numpyもはいっていなかったので一緒にインストールされました。このインストール PIP3経由でやったのですが、結構時間かかりました(数十分)。裏で何かいろいろビルドしている?のかな。Cupy入れた後にChainerをPIP3でインストールいたしましたが、すでにNumpyなど必要なモジュールがインストール済だったせいか、こちらはごく短時間でインストールが済みました。なお、ChainerのMNISTサンプルプログラムを走らせるときは、matplotlibつかってグラフを書くので、忘れずにmatplotlibも入れておくと良いです。インストール後、ChainerがちゃんとCUDAを使えていそうか確認しました。

Chainerチュートリアル 14.2 Chainerの準備

というページにPython上でChainerモジュールをインポートして調べるやり方(といってたった2行ですが)が書いてあるので、その通りにいたしました。前回、CUDAのサンプルプログラムで確認してあった、CUDA 10.0 がちゃんとChainerから見えていたのでOK。

後は、ChainerのMNISTのサンプルプログラムである train_mnist.py のファイル(ChainerのGitHubに置いてある)をJetson Nano上にもってきて実行するだけです。しかし、Raspberry Piのときの、夜間実行の途中でPC上の仮想端末との接続が切れてプロセスが死んだ件を思い出しました。screen コマンドを走らせて、いつでもプロセスをデタッチできるようにいたしました(多少は学んだ?)。でも、結局デタッチする必要などなかったんでありますがね。また、CPU上のNumpyでなく、CUDA上のCupyを使ってくれるように -g オプションも忘れずにつけときます。起動するとこんな感じ。

最初の行、

Device: @cupy:0

萌えます。ちゃんとGPUで走っております(当然か)。準備にちょっと時間がかかりましたが、見てる目の前で次々と epochが処理されていく。画面が変わらず大丈夫かと不安になった Raspberry Pi上の実行とは段違いの速さです。結局、御覧のとおり、約341秒で完了。

  1. Jetson Nano、341秒
  2. i5 3210M@2.5GHz Windows 10 PC(WSL上のUbuntu環境)、1084秒
  3. Raspberry Pi 3 model B+、50204秒(14時間)
  4. Raspberry Pi 1 model B+、epoch1のみで50645秒、20epochに単純換算すると1012900秒(281時間)

Jetson NanoはMaxwell兄弟の長兄(?)のTitan-Xと比べるとコア数24分の1のチビですが、流石に速い。

AIの片隅で(11) NVIDIA Jetson Nano セットアップ に戻る

AIの片隅で(13) Jetson NanoでLチカ に進む