さてこれまではほとんどAWS IoTの話でしたが、Jetson Nanoを利用し、エッジで機械学習 × IoTみたないことをやっていきます。
弊社はクラウドの会社なのでこういったデバイスを扱うことはほとんどないのですが、今回はPytorchのMNISTのサンプルを動かしてJetson Nanoの性能を見てみます。Pytorchなんで正確には「エッジでディープラーニング」というべきでしょうか。
なので今回はJetson Nanoの話です。
1. jtopコマンドのインストール
jtopはJetson Nanoの負荷状況を表示するコマンドです。まずはこれをpipでインストールしておきます。 pipがインストールされてなければ先にそちらをインストールしてください。
sudo -H pip install jetson-stats
2. サンプルのクローン
サンプルとして動かすノートブックをGitHubへあげておきました。
これをクローンします。jupyterがインストールされてなければ先にそちらをインストールしてください。
git clone https://github.com/KSMN455/pytorch-gpu-sample.git
こちらのサンプルはPytorchのMNISTのサンプルをもとに記述しています。
3. GPU vs. CPU
こちらのサンプルを使い、GPUで学習を実施した場合とCPUで学習を実施した場合で負荷と速度を比較したいと思います。
まあ結果は予想できますが。。。
ノートブックを上から順に実施してください。
3-1. GPUの場合
まずはGPUを使って学習。
train("cuda")
ワタシの環境では時間はこんな感じでした。
Pprocessing Time(sec): 951.2301895618439
だいたい16分くらい。
ちなみに学習中のjtopの表示はこんな感じ。GPU使用率が100%あたりで張り付いているのがわかります。
この後、温度が60℃以上まであがったので、うちわであおぎました。。。ファンを取り付けてないので人力冷却です。。。
3-2. CPUの場合
まずはCPUを使って学習。
train("cpu")
ワタシの環境では時間はこんな感じでした。
Pprocessing Time(sec): 9837.17104125022
遅ぇ。。。GPUの場合の約10倍で、2時間以上かかってます。。。
ちなみに学習中のjtopの表示はこんな感じ。各コアの使用率が100%あたりで張り付いているのがわかります。
こちらを実行中も温度が上がってきたのでうちわであおぎました。。。
4. まとめ
当たり前ですがGPUを利用した学習の方が圧倒的に早いです。MNISTの手書き文字くらいであればJetson Nanoでもやれてしまいますが、大規模なものだとクラウドで学習→エッジへデプロイとするのが良いかと思います。
次回はモデルの予測結果をデバイス-クラウド間・デバイス-デバイス間で連携する方法を検証したいと思います。
Yusuke Mine(書いた記事を見る)
I get drunk but it's not enough 'Cause the morning comes and you're not my baby.