NVIDIA Jetson TX2にChainerインストール
ROS Japan UG #12 Raspberry Pi Mouseハッカソン
本日開催するROS Japan UG #12 Raspberry Pi Mouseハッカソンには、Raspberry Pi Mouseの教科書の著者である @ryuichiueda 先生もいらっしゃる予定です。 ぜひ教科書を持参の上、サインしてもらいましょう!僕はもちろん持参します。
日経BP社
売り上げランキング: 102,273
@OTL さんのROSではじめるロボットプログラミング本よりも、内容は実践寄りで読み応えがあります。 ROSの話以外にも、シェルプログラミング、テスト自動化まで多岐に渡って取り上げられています。 これまたROSとは直接関係ありませんが、付録のデバイスドライバのプログラミングの章は、それ単体で本として扱って欲しいくらい興味深いです。
当日のハッカソンの様子は次回のブログで取り上げます。お楽しみに。
Chainerインストール
さて話を戻しまして、前回のブログで開発ツールなどが一式セットアップできたNVIDIA Jetson TX2に対して、ディープラーニングができるように準備を進めていきます。
僕はディープラーニングのためのライブラリにChainerを用いることにしました。 日本産ディープラーニングツールの発展にも少しは寄与していきたい気持ちがあります。 その他のライブラリでもいいのですが、最低限、NVIDIA CUDAに対応していてGPGPUを活用した高速計算ができるものがいいですね。
インストールはpip
を使って簡単に行えました。
sudo apt insatll python-pip
sudo pip install -U pip
sudo pip install chainer cupy
MNISTテスト
CUDAの効果を見るために、まずはディープラーニングにおけるHello World的な存在であるMNISTの分類をGPUありなしで学習させます。 これは手書きの0〜9の数字を学習し、正しい数字に分類する問題です。
git clone git@github.com:chainer/chainer.git
cd chainer/examples/mnist
GPU未使用
GPUを未使用の場合は、あまりに時間がかかりすぎるので、途中で実行中止しました。 途中経過から考えて、学習時間は3時間半ほどはかかるのではないでしょうか。 これでは、より難しい問題を分類させようとしたら、現実的な時間で終わらせられそうにありません。
$ time ./train_mnist.py
GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20
epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time
1 0.193281 0.107172 0.941033 0.9662 645.259
2 0.0764993 0.0803331 0.976033 0.9758 1290.04
3 0.0465235 0.0842069 0.984667 0.9747 1935.12
4 0.0374998 0.0666212 0.987933 0.9799 2579.93
total [###########.......................................] 23.33%
this epoch [#################################.................] 66.67%
2800 iter, 4 epoch / 20 epochs
0.93675 iters/sec. Estimated time to finish: 2:43:41.225938.
^CTraceback (most recent call last):
...
KeyboardInterrupt
real 51m46.617s
user 51m44.628s
sys 0m0.460s
GPU使用
それに対してGPUを使用した場合には、3分半で実行完了しました。ざっと60倍速です。 メーターがグイグイ伸びていくので、見ていて気持ちよかったです。 これなら、いろいろと挑戦しがいがありそうです。 いやぁ、聞きしに勝るNVIDIA CUDAの偉大さですね。
$ time ./train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20
epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time
1 0.18935 0.0838907 0.9424 0.9733 57.9702
2 0.0754558 0.0762302 0.976233 0.9766 65.2712
3 0.0479685 0.0700408 0.984449 0.9791 72.6336
4 0.0352682 0.0785474 0.988582 0.9772 79.9061
5 0.0268053 0.076637 0.991298 0.9788 87.2597
6 0.026624 0.0723842 0.991782 0.9813 94.7486
7 0.0190461 0.0847303 0.993915 0.9782 102.095
8 0.0192349 0.0736709 0.993782 0.9812 109.402
9 0.0171142 0.0736259 0.994665 0.9828
116.784
10 0.0163547 0.0897696 0.994648 0.9802 124.146
11 0.0126375 0.0841518 0.995966 0.9824 131.527
12 0.0126419 0.0946676 0.996082 0.9798 138.999
13 0.0126528 0.0908915 0.996382 0.9826 146.342
14 0.012 0.0913361 0.996199 0.9818 153.704
15 0.0103322 0.081647 0.996932 0.9854 161.114
16 0.00833038 0.104685 0.997332 0.9789 168.561
17 0.011705 0.0942782 0.997082 0.9824 176.086
18 0.0115295 0.108648 0.996582 0.982 183.487
19 0.00649577 0.098805 0.997982 0.9836 190.932
20 0.00939677 0.107089 0.997516 0.9815 198.213
real 3m28.758s
user 3m20.184s
sys 0m9.120s
デスクトップPCと比べた訳ではありませんが、それでもGPU内蔵ではないので、ここまでの高速化はできないでしょう。 これだけの性能でNVIDIA Jetson TX2は消費電力が10Wなんだから、魔法みたいですね。学習屋さんがこぞってNVIDIAのGPUカードを購入する訳です。
これから、ROSのトピックをSubscribeしてChainerの学習、推論データとして入力できるような仕組みを作っていきたいと思っています。 まずは、XtionのデプスデータやGazeboシミュレーションのセンシングデータを食わせてみたいです。
Comments powered by Disqus.