現場で使える!TensorFlow開発入門 Kerasによる深層学習モデル構築手法
この本を写経したりサンプルをダウンロードして動かそうとしたのだけど、 tensorflowのバージョンが1.15のため、Nvidia NGCが提供する NVIDIA L4T MLでは素直に動かせなかった。
なので、tensorflow 1.15のサンプルをほぼそのままで動かせるよう Docker環境を構築した。
※ 今 NVIDIA L4T MLを確認したら "* TensorFlow 1.15"って書いてた...最初に動かしたときは確かに 2.x系になっていたはずなのだが。といってもせっかく作った Dockerfileがもったいないので、学習の記録として記事に残しておくことにする (opencvなんかも必要だし)。
準備
Jetson nanoに swapを追加しないとビルドに失敗した。6GBくらいのスワップファイルを作っておく。
→ https://qiita.com/n-yamanaka/items/dd82996312ab333fe9b2
Dockerfile
githubに上げた。
→ https://github.com/Nunocky/JetsonNano_Docker_Containers
FROM nvcr.io/nvidia/l4t-tensorflow:r32.4.4-tf1.15-py3
RUN apt-get update
RUN apt-get install -y fonts-ipaexfont
RUN apt-get install -y libffi-dev
RUN apt-get install -y python-pip
RUN apt-get install -y python3-pip
RUN pip3 install -U pip
RUN pip3 install notebook
RUN pip3 install matplotlib
RUN pip3 install pandas
RUN pip3 install scipy
RUN pip3 install opencv-contrib-python
RUN mkdir /tf
RUN chmod 777 /tf
ADD jupyter_notebook_config.py /root/.jupyter/
CMD ["jupyter", "notebook"]
Dockerfileと同じ場所に jupyter_notebook_config.pyを用意する。
Jupyter notebookのパスワードは jetsonnano に設定した。 パスワードを変えたい場合は
ここを参考にすると良い。
c.NotebookApp.notebook_dir = '/tf'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$kDrfziXaxPvbrLZfP2oTKA$zSNR85lqmziWEVjx/ApauQ'
ここまで出来たらビルド
sudo docker build -t tensorflow:1 .
matplotlib, opencvなどのビルドで数時間かかる。
実行
sudo docker run -it --rm --runtime nvidia --network host tensorflow:1
起動時に -v
オプションでホストのディレクトリと dockerコンテナ上の /tf
を関連付ければ作業記録を消さなくても済むが、それは dockerの基本の話なので割愛
tensorboardは Jetson nano上から docker execで実行。
sudo docker exec -it <container id> tensorboard --host 0.0.0.0 --logdir /tf/log --port 6006
注意
大量の画像を扱う 10章以降のサンプルはそのままでは ResourceExhaustedError が出て動かせないことがある。
動いたが止まった pic.twitter.com/g4wxNOIi7V
— NUNOKAWA Masato (@Nunocky) December 28, 2020
その時はバッチやエポックの数を調整し、GPUに渡すデータの大きさを変えると良い。