Jetson Nano 2GB セットアップあれこれ
Image 焼き
当初32GBの micro SDカードでやっていた
イメージ焼いて起動して、4GBのswap領域含めるとすでに29GB中20GBぐらい使っていたので32GBじゃ空き容量つらそう。
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 でセットアップしてうまく動くことを確認。
code:bash
$ sudo mount -o ro /opt/nvidia/l4t-usb-device-mode/filesystem.img /mnt
$ less /mnt/README-vnc.txt
無線LAN
ファンの回転数の自動制御
/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で使えない) とりあえず使えるかどうかを見る
の通り。なおハマりどころとしては、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
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
いちおうファイルのミラー
Docker
ラズパイではなくあえて Jetson Nano でやりたいことは、ほとんどがGPU (CUDA) を使った処理
CUDAを使うディープラーニングフレームワークなどの環境をクリーンに作るのは CUDA のバージョン切り替えが絡むと面倒なので、いい感じの docker 環境を使いたい
nVidia が "Machine Learning Container for Jetson and JetPack" なコンテナを用意している
pytorch や tensorflow のバージョンもある程度選べる。
Dockerfile
残念どころは JetPack 4.x のベースになっている Ubuntu が 18 で、その python をママ使うので、python のバージョンが 3.6 のところか…。
自分が書くコードは、型周りが書きやすい 3.7 以上ばかりなので。
Anaconda (miniconda)
↓いれてみたけど、jetson nano では tensorflow を conda 環境で動かすことがすんなりできず tf 使いたい場合は役に立たないので注意な!!
なれない環境での Docker はなかなか大変…なので使い慣れている anaconda (GUIいらないのでminiconda)を入れる
Miniconda3 Linux-aarch64 64-bit
なんか conda が 4.10.3 だと Illegal instruction (core dumped) で死ぬので、4.9.2 を入れる。
conda-forge 使う設定をする
python 3.6 環境を作って、tf2 を入れる
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
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. チュートリアル各種