EnsekiTT Blog

EnsekiTTが書くブログです。

Jetson Nanoの推論チュートリアルでGPUが動いていることを確認した話

つまりなにしたの?

使い慣れていくためのJetson Nanoのチュートリアルを順番に試していく。
オリジナル要素はほぼ無いので原文を当たれるならそのほうがいい。
f:id:ensekitt:20190527211615j:plain

その前に

毎回ディスプレイとキーボードとマウスを繋ぐのがめんどくさいので、
ホスト名を指定してSSHでつながるようにしておく。

自分でホスト名解釈してくれるavahi-daemonを導入する。
(ここはディープもラーニングも関係ないコンピュータとしての設定)

$ sudo apt-get install avahi-daemon
$ hostname
my-jetson # ここはインストール時に決めたホスト名になる

SSHは各家庭のポリシーに従ってください。

jetson-inferenceを使えるようにする

やることは
github.com
のまま。

パッケージの準備

gitとcmakeが必要

$ sudo apt-get update
$ sudo apt-get install git cmake tree
# ここでtreeはBlogようにディレクトリ構造を可視化するために入れた。

リポジトリの準備

$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ git submodule update --init

CMakeでビルドしていく

$ mkdir build
$ cd build
$ cmake ../
#
# めっちゃログが流れる
#
$ make
$ sudo make install

Jetson Nanoはaarch64ディレクトリの中にビルドされて入ってくる。

build/
├── aarch64
│   ├── bin
│   │   └── networks -> /home/ensekitt/dev/jetson-inference/data/networks
│   ├── include
│   └── lib
# 以下つづく

ImageNetを使った画像のクラス分類をやってみる(動作確認)

めちゃくちゃ親切なことに実行ディレクトリに、分類するべき写真まで入れてくれている。
情報量が0なので動作確認のために実行する。

$ cd jetson-inference/build/aarch64/bin
$ ./imagenet-console orange_0.jpg output_0.jpg

# ずらずらっと実行結果が出て

class 0950 - 0.979228  (orange)
class 0951 - 0.020643  (lemon)
# AI < 絶対オレンジだよ、レモンだったら木の下に埋めて貰っても構わないよ!
# などといい出す

f:id:ensekitt:20190527204032j:plain

ほんとにGPUが動いてるの?

ほんとにGPU動いてるの?1枚のJPGだし実はCPUでやっているんじゃないの??
というわけでリソースをモニタリングしながらさっきと同じことをしてみる。
*1

ターミナルを2窓(それぞれShell1, Shell2とする)開いてJetson Nanoに接続する。
(Screenとかtmuxを使っても良いと思う)

Shell1

$ tegrastats --interval 1000
# ここにリソースの利用量などが1000ミリ秒毎に表示される(必要に応じて変更できる)
# 以下整形済
RAM 907/3965MB (lfb 251x4MB)  # RAMの利用状況
CPU [2%@102,0%@102,0%@102,0%@102]  # CPUの利用状況
EMC_FREQ 0%  # 外部メモリコントローラの動作周波数
GR3D_FREQ 0%  # GPUの動作周波数
PLL@25C 
CPU@29.5C 
PMIC@100C 
GPU@29C 
AO@39C 
thermal@29C 
POM_5V_IN 1030/1033 
POM_5V_GPU 0/0 
POM_5V_CPU 118/122

tegrastatsのドキュメントはこのフォーラムからダウンロードした
https://devtalk.nvidia.com/default/topic/1035340/tegrastats-documentation-jetpack-3-2/


Shell2

./imagenet-console orange_0.jpg output_0.jpg

ここはさっきと同じ

出力結果
RAM 938/3965MB (lfb 226x4MB) CPU [1%@102,0%@102,0%@102,0%@102] EMC_FREQ 0% GR3D_FREQ 0% PLL@26.5C CPU@31C PMIC@100C GPU@30C AO@40C thermal@30.25C POM_5V_IN 1030/1030 POM_5V_GPU 0/0 POM_5V_CPU 118/118
RAM 938/3965MB (lfb 226x4MB) CPU [2%@102,1%@102,0%@102,0%@102] EMC_FREQ 0% GR3D_FREQ 0% PLL@26C CPU@30.5C PMIC@100C GPU@30C AO@40.5C thermal@30.5C POM_5V_IN 1030/1030 POM_5V_GPU 0/0 POM_5V_CPU 118/118
RAM 1132/3965MB (lfb 214x4MB) CPU [90%@1428,5%@1428,4%@1428,11%@1428] EMC_FREQ 0% GR3D_FREQ 22% PLL@27.5C CPU@33C PMIC@100C GPU@31C AO@41C thermal@31.75C POM_5V_IN 2778/1612 POM_5V_GPU 115/38 POM_5V_CPU 1078/438
RAM 1308/3965MB (lfb 200x4MB) CPU [39%@1428,69%@1428,3%@1428,4%@1428] EMC_FREQ 0% GR3D_FREQ 36% PLL@27C CPU@32C PMIC@100C GPU@31C AO@40.5C thermal@31.75C POM_5V_IN 2778/1904 POM_5V_GPU 77/48 POM_5V_CPU 1080/598
RAM 1507/3965MB (lfb 194x4MB) CPU [35%@1428,15%@1428,53%@1428,10%@1428] EMC_FREQ 0% GR3D_FREQ 20% PLL@27.5C CPU@31.5C PMIC@100C GPU@30.5C AO@41C thermal@31.5C POM_5V_IN 2404/2004 POM_5V_GPU 77/53 POM_5V_CPU 851/649
RAM 1555/3965MB (lfb 197x4MB) CPU [57%@1428,4%@1428,4%@1428,36%@1428] EMC_FREQ 0% GR3D_FREQ 4% PLL@27C CPU@33C PMIC@100C GPU@31C AO@41C thermal@31.25C POM_5V_IN 2774/2132 POM_5V_GPU 308/96 POM_5V_CPU 886/688
RAM 946/3965MB (lfb 225x4MB) CPU [90%@1428,0%@1428,10%@1428,2%@1428] EMC_FREQ 0% GR3D_FREQ 0% PLL@27C CPU@32.5C PMIC@100C GPU@31C AO@41C thermal@32C POM_5V_IN 2705/2214 POM_5V_GPU 38/87 POM_5V_CPU 1080/744
RAM 939/3965MB (lfb 225x4MB) CPU [4%@102,1%@102,1%@102,7%@102] EMC_FREQ 0% GR3D_FREQ 0% PLL@26C CPU@31C PMIC@100C GPU@30C AO@41C thermal@30.75C POM_5V_IN 1030/2066 POM_5V_GPU 0/76 POM_5V_CPU 118/666

GR3Dを見ると0%から徐々に36%まで上がってまた0に戻っていくのがわかる。
HDMIになにかつないでいるとこうはならないかも)

どうやら本当にGPUを使っているらしい。

*1:オリジナル要素はもうここくらいしかない。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。