Docker
TensorFlow
Jetson
JetsonNano

Jetson NanoでDockerを動かす(実践編)


はじめに

この記事は「Jetson NanoでDockerを動かす(後編)」でJetson Nanoにデフォルトで含まれているdockerでGPUにアクセスできることを確認できたので実際に何か動かしてみる。ここではResNet50を使って画像を識別する。


準備

Dockerfile等はgithubに置いた。

https://github.com/yamamo-to/jetson_nano/tree/master/docker_example

使い方は下記の通り。


ターミナル

git clone https://github.com/yamamo-to/jetson_nano.git

cd jetson_nano/docker_example
./build.sh
./run.sh

build.shの実行でイメージを作成する。1時間程度掛かる。

またrun.shでコンテナを作成する。


サンプルの実行

コンテナが実行された後、必要なライブラリをインストールしてサンプルを実行する。


コンテナ内

pip3 install pillow

python3 scripts/resnet50_keras.py data/boss.jpg


結果

以下に実行結果を貼る。ResNet50がコンテナ内から正しく実行されていることが分かる1

docker_result.png


問題点



以下に記載されている問題点は「Jetson NanoでDockerを動かす(解決編)」で解決済み。

前の画像では分かりにくいが、CUDAが利用可能なデバイスが見つからないと表示されている。TensorFlowは動いたけれどもCUDAは使われていないのだろうか。

failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

GPUの使用状況を確認すると確かにGPUは動作している。

GPU_log.png

考えられることの一つは/procを参照していないことだろうか。追って調査する予定だが、そろそろ環境を手間なく分けるためのDockerの導入が、Docker+GPUに関する環境構築そのものが面倒になってきた。


まとめ

Jetson NanoでDockerを立ち上げ、TensorFlowを使ってResNet50による画像識別を行った。GPUは使われていたようだが、CUDAデバイスが見つからないなど課題点が残る。





  1. Jetson NanoでDockerを動かす(解決編)」でも触れているが、これは正しく実行されていない。