Jetson Nano 2GB セットアップあれこれ
Jetson Nano 2021年9月頭時点の Jetpack 4.6 でのセットアップ
Image 焼き
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-2gb-devkit の通りに進める
当初32GBの micro SDカードでやっていた
イメージ焼いて起動して、4GBのswap領域含めるとすでに29GB中20GBぐらい使っていたので32GBじゃ空き容量つらそう。
なので 64GB の UHS-I U3 の SDSQXA2-064G-GN6MN を購入
image 書き込みの速度が 72MB/s ぐらい出て快適。(UHS-I U1 のSDは30MB/sほど)
Headless でセットアップ
display など繋がない予定なので、最初から headless でセットアップ
microUSB に接続すると、シリアルコンソールとしてつなげる
自分の Windows からは COM4 で認識されていたので、putty からシリアル接続で速度 115200 で接続。
https://gyazo.com/6c6711eef36ebf5bd5a3e032e16a86d1
通常のGUIで行われるセットアップの殆どがCUIのインターフェイスで行える
無線LANのUSBドングルを刺しておいたので、途中で SSID / password 聞かれて簡単にセットアップできた
思った以上に headless セットアップ簡単であった
あとは wifi 経由でssh して作業できる
が、結局 VNC から繋ぎたくなって、headless GUI 環境を xserver-xorg-video-dummy を入れて作ってみようとするも、うまく立ち上げることができず普通にセットアップする…
VNC
JetPack 4.6 環境で headless setup すると GUI 周りの設定がすんなりいかず vino-server が立ち上がらず。
ので、普通に headless でなく GUI でセットアップしてうまく動くことを確認。
https://developer.nvidia.com/embedded/learn/tutorials/vnc-setup
https://zenn.dev/tunefs/articles/9774eb8f229e1bf97a8c
code:bash
$ sudo mount -o ro /opt/nvidia/l4t-usb-device-mode/filesystem.img /mnt
$ less /mnt/README-vnc.txt
無線LAN
Jetson Nano + USB WiFi セットアップ
ファンの回転数の自動制御
https://github.com/Pyrestone/jetson-fan-ctl
/sys/devices/virtual/thermal/thermal_zone0/temp の値に応じて自動制御してくれる。
systemd のサービス化も自動で行ってくれる。
標準の閾値だと割とすぐファンがMAX回転してうるさいのでこんな感じの設定で運用してみてる。
code:json
// cat /etc/automagic-fan/config.json
{
"FAN_OFF_TEMP":40,
"FAN_MAX_TEMP":65,
"UPDATE_INTERVAL":2,
"MAX_PERF":1
}
カメラ
CSI カメラで広角レンズの SainSmart IMX219 を購入。SainSmartは中華な会社だけど、過去に色々購入していて、そこそこ信頼している。なお Jetson Nano にしか対応していない(raspiで使えない)
とりあえず使えるかどうかを見る
https://developer.nvidia.com/embedded/learn/tutorials/first-picture-csi-usb-camera
の通り。なおハマりどころとしては、VNC 環境では nvgstcapture-1.0 を実行してもレンダリングされない。
sudo apt install v4l-utils webcam
fswebcam -p yuyv -r 640x480 --jpeg 85 -D 1 web-cam-shot.jpg
カメラの色味がおかしい問題
設定を上書きすることで解決
code:sh
wget https://www.arducam.com/downloads/Jetson/Camera_overrides.tar.gz
tar zxvf Camera_overrides.tar.gz
sudo cp camera_overrides.isp /var/nvidia/nvcam/settings/
sudo chmod 664 /var/nvidia/nvcam/settings/camera_overrides.isp
sudo chown root:root /var/nvidia/nvcam/settings/camera_overrides.isp
いちおうファイルのミラー
https://gist.githubusercontent.com/hotchpotch/826c2e2f1d750bd3aa01d4d2c89bf976/raw/a91d0f89a9c73da10b9d6b54c53e5cdae724a310/camera_overrides.isp
Docker
ラズパイではなくあえて Jetson Nano でやりたいことは、ほとんどがGPU (CUDA) を使った処理
Jetson Nano は AArch64 + CUDA という環境のため、各種ライブラリ(とりわけtensorflow)を入れるのが面倒
CUDAを使うディープラーニングフレームワークなどの環境をクリーンに作るのは CUDA のバージョン切り替えが絡むと面倒なので、いい感じの docker 環境を使いたい
nVidia が "Machine Learning Container for Jetson and JetPack" なコンテナを用意している
https://ngc.nvidia.com/catalog/containers/nvidia:l4t-ml
pytorch や tensorflow のバージョンもある程度選べる。
Dockerfile
https://github.com/dusty-nv/jetson-containers
残念どころは JetPack 4.x のベースになっている Ubuntu が 18 で、その python をママ使うので、python のバージョンが 3.6 のところか…。
自分が書くコードは、型周りが書きやすい 3.7 以上ばかりなので。
Anaconda (miniconda)
↓いれてみたけど、jetson nano では tensorflow を conda 環境で動かすことがすんなりできず tf 使いたい場合は役に立たないので注意な!!
なれない環境での Docker はなかなか大変…なので使い慣れている anaconda (GUIいらないのでminiconda)を入れる
https://docs.conda.io/en/latest/miniconda.html
Miniconda3 Linux-aarch64 64-bit
なんか conda が 4.10.3 だと Illegal instruction (core dumped) で死ぬので、4.9.2 を入れる。
https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-aarch64.sh
https://qiita.com/karaage0703/items/b14c249aa33112669ee4#pythonでimportしようとするとillegal-instruction-core-dumpedが発生 これで 4.10.3 でもうまくいくかも?
conda-forge 使う設定をする
https://conda-forge.org/docs/user/introduction.html#how-can-i-install-packages-from-conda-forge
python 3.6 環境を作って、tf2 を入れる
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html を conda で使えるようにしつつ入れる
code:bash
sudo apt install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
conda create -n py36 python=3.6
conda activate py36
pip install -U pip testresources setuptools==49.6.0
pip install -U numpy==1.19.4 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
と思ったら tf のインストール中にext のコンパイルで失敗…。apt でいれた python36じゃないとうまく行かなさそう…?
code:bash
$ pip install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 tensorflow
ERROR: Command errored out with exit status -4: /home/hotchpotch/miniconda3/envs/py36/bin/python3.6 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv0 = '"'"'/tmp/pip-install-efwgmhnb/h5py_e650455f75834071907bce1aec37c19d/setup.py'"'"'; __file__='"'"'/tmp/pip-install-efwgmhnb/h5py_e650455f75834071907bce1aec37c19d/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-fg2dmn7j/install-record.txt --single-version-externally-managed --compile --install-headers /home/hotchpotch/miniconda3/envs/py36/include/python3.6m/h5py Check the logs for full command output.
チュートリアル各種
https://github.com/dusty-nv/jetson-inference