@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Jetson Nanoで遊んだ記録

Jetson Nanoで遊ぶ機会があったのでその記録をだらだらと書き残す。 結局うまく行ってない

製品、外観の感想

こういうの

NVIDIA製。GPUを積んでいるRaspberry Piのようなもの

ヒートシンクがついている。

Official Documentらしきもの(pdf) ググって出てきた。

起動までの感想

microSDに書き込むOSイメージがでかい。ダウンロードが5GBで展開すると13GBくらいになる。 普段Alpine Linuxとか使ってるからそんなにいる?という気持ちになってしまう。 (しかも2MB/sくらいしか出ないからdisownして一晩放置した)

USB給電するには 5V 2.4A以上必要だが、iPad用の充電器や近くに転がっている充電器では起動処理で落ちた。

NVIDIAロゴが表示されて死ぬ。

起動することができれば、このコマンドで5Wモードに切り替えられるらしいが、それでも起動時は5Wを超えるようで、同様に死んだ。

$ sudo nvpmodel -m 1

戻すなら

$ sudo nvpmodel -m 0

今どちらなのか知るには

$ sudo nvpmodel -q
NVPM WARN: fan mode is not set!
NV Power Mode: MAXN
0

MAXNが10Wモード、5Wが5Wモード

参考

www.jetsonhacks.com

RaspberryPi用の5V 2.5Aのmicro USB給電できるやつで給電すれば無事起動した。

こういうやつ。 Amazon | iTrunk Raspberry Pi 3 電源 usb acアダプター ラズベリーパイ PSE認証 5V 2.5A Raspberry Pi 3 Model B/B+ Raspberry Pi 2 Model B Raspberry Pi Model B+ B Plus適用 | iTrunk | 電源ケーブル 通販

起動してからの感想

こういうのはヘッドレスにしたいけど、初回設定がHDMI接続のディスプレイとUSB接続のキーボード、マウスが必要だった。

キーボードだけで行けるかと思いきや、タイムゾーンを選択するのがマウスじゃないと変更できなかった。 あとでターミナルで変更するならマウスがなくてもディスプレイとキーボードだけでいける。

起動してしまったら普通のUbuntuという感じ。 すでにsshdが起動しててパスワード認証が有効になってるので、そういう感じ。

avahi-daemonも勝手に動いているようで、macからならホスト名.localですぐ繋がった。

その他メモ

  • GUIを止める

ランレベルを下げる。

sudo systemctl set-default multi-user.target

戻すなら

sudo systemctl set-default graphical.target

GUIじゃないときにstartx的なことをする

sudo systemctl start gdm3.service

How to boot Jetson Nano in text mode? - NVIDIA Developer Forums

これでメモリが500MBほどあく。もともとメモリは4GB。

  • docker

標準でdockerはインストールされてた。アーキテクチャが aarch64なのでDocker Hubに上がってるイメージそのままだと大体動かない。
Dockerfileを持ってきてビルドすれば動く。
ただしmicroSDの容量をもりもり消費する。

  • nvtop

GPUの情報も出力するhtopのようなものがあった。 dockerでビルドするには容量不足だった。 aptで入れるにもUbuntu 18.04だったので自分でビルドしないといけない。

github.com

github.com

  • htop htopはこのDockerfileをビルドしてパスの通ったところにdocker起動コマンドをおいた

github.com

  • 空き容量を増やす

Headless OS - NVIDIA Developer Forums

sudo apt purge whoopsie modemmanager && sudo apt autoremove

その他インストールされてるものを眺めて消してみる。

sudo apt list --installed

/dev/mmcblk0p1 15G 14G 107M 100% /

sudo apt purge chromium-browser desktop-file-utils gedit libreoffice-core media-player-info nautilus whoopsie-preferences && sudo apt autoremove

www.makeuseof.com

xorg - Remove packages to transform Desktop to Server? - Ask Ubuntu

sudo apt purge unity-session unity && sudo apt autoremove
sudo apt purge ubuntu-session gdm3 && sudo apt autoremove

↓これはかなり空き容量があくが、必要なものも消えてそう。。。

sudo apt purge libx11.* libqt.* libgtk.* && sudo apt autoremove

jupiter-notebookを試す

tensorflow/tensorflow - Docker Hub

sudo docker pull tensorflow/tensorflow:latest-gpu-py3-jupyter
sudo docker run -it --rm --runtime=nvidia -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter

エラー出た

docker: Error response from daemon: OCI runtime create failed: 
container_linux.go:344: starting container process caused 
  "process_linux.go:424: container init caused 
    \"process_linux.go:407: running prestart hook 1 caused 
      \\\"error running hook: exit status 1, stdout: 
src: /usr/lib/aarch64-linux-gnu/libnvcaffe_parser.so.5, 
src_lnk: libnvparsers.so.5.1.6, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvcaffe_parser.so.5, 
dst_lnk: libnvparsers.so.5.1.6\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvcaffe_parser.so.5.1.6, 
src_lnk: libnvparsers.so.5.1.6, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvcaffe_parser.so.5.1.6, 
dst_lnk: libnvparsers.so.5.1.6\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvinfer.so.5, 
src_lnk: libnvinfer.so.5.1.6, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvinfer.so.5, 
dst_lnk: libnvinfer.so.5.1.6\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.5, 
src_lnk: libnvinfer_plugin.so.5.1.6, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.5, 
dst_lnk: libnvinfer_plugin.so.5.1.6\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvonnxparser.so.0, 
src_lnk: libnvonnxparser.so.0.1.0, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvonnxparser.so.0, 
dst_lnk: libnvonnxparser.so.0.1.0\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvonnxparser_runtime.so.0, 
src_lnk: libnvonnxparser_runtime.so.0.1.0, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvonnxparser_runtime.so.0, 
dst_lnk: libnvonnxparser_runtime.so.0.1.0\\\\n
src: /usr/lib/aarch64-linux-gnu/libnvparsers.so.5, 
src_lnk: libnvparsers.so.5.1.6, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libnvparsers.so.5, 
dst_lnk: libnvparsers.so.5.1.6\\\\n
src: /usr/lib/aarch64-linux-gnu/libcudnn.so.7, 
src_lnk: libcudnn.so.7.5.0, 
dst: /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged/usr/lib/aarch64-linux-gnu/libcudnn.so.7, 
dst_lnk: libcudnn.so.7.5.0\\\\n
, stderr: exec command: 
[/usr/bin/nvidia-container-cli --load-kmods configure --ldconfig=@/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411 --pid=11040 /var/lib/docker/overlay2/126d559ef7a808c9d617677d09d57a364ea069fec87405ca062ff0b9a31eecdb/merged]\\\\n
nvidia-container-cli: mount error: stat failed: /dev/nvhost-nvdec1: no such file or directory\\\\n
\\\"\"": unknown.
sudo docker run -it --rm --runtime=nvidia \
 -v $PWD/home:/home/$DOCKER_USER \
 -v /usr/local/cuda-10.0:/usr/local/cuda-10.0 \
 -v /usr/lib/aarch64-linux-gnu/tegra:/usr/lib/aarch64-linux-gnu/tegra \
 -v /usr/lib/aarch64-linux-gnu/libcudnn.so.7.3.1:/usr/lib/aarch64-linux-gnu/libcudnn.so.7.3.1 \
 -v /usr/lib/aarch64-linux-gnu/libcudnn.so.7:/usr/lib/aarch64-linux-gnu/libcudnn.so.7 \
 --device=/dev/nvmap \
 --device=/dev/nvhost-ctrl \
 --device=/dev/nvhost-ctrl-gpu \
-v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter

あかん。。。

docker を 18から19にする

19からGPUサポートされるようになった。

medium.com

collabnix.com

https://docs.docker.com/v17.09/engine/installation/linux/docker-ce/ubuntu/

medium.com

curl -sSL https://get.docker.com/ | sh

/etc/docker/daemon.jsonにデフォルトのruntimeをnvidiaにする記述を追加する。

{default-runtime”: “nvidia”,
  “runtimes”: {nvidia”: {path”: “nvidia-container-runtime”,
      “runtimeArgs”: []
     }
   }
}
$ sudo systemctl restart docker
$ sudo docker info|grep untime
 Runtimes: nvidia runc
 Default Runtime: nvidia

動作確認

$ sudo docker run --rm -it jitteam/devicequery ./deviceQuery
...

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS

あ、

Note that since Jetson Nano is ARM64 based, standard Tensorflow Docker images WILL NOT WORK!

jupyter再挑戦

sudo docker run --rm -it jitteam/jetson-nano-tf-gpu:latest bash

github.com

これをみるとTensorFlowが動いていればpipでJupyterNotebookを入れられるっぽい

その他リンク

qiita.com

wakame.hatenablog.jp

desertbot.io

qiita.com

qiita.com

qiita.com