2021年12月にJetson Nanoのインストール作業をしている時のメモです。
OSインストール
-
nVidiaの開発者サイトからOSイメージダウンロード
ここではjetson-nano-jp46-sd-card-image.zip
をダウンロードしたOSイメージとします。 -
ZIPファイルを展開する
unzip jetson-nano-jp46-sd-card-image.zip
-
マイクロSDカードに書込む
sudo dd if=./sd-blob-b01.img of=/dev/sdX
/dev/sdXはdmesg等のコマンドでSDカードに割り当てられたデバイス名を指定してください。
SWAP領域の作成
SWAP領域がないとTensorflowのインストール中で止まるみたいなのでSWAT領域を追加します。
USBメモリをSWAPに割り当てた方が性能よさそうですが、その辺を丸っと無視してSDカード上にSWAP領域を作成します。
サイズとしては4GB~8GBが推奨されてるらしい。
sudo dd if=/dev/zero of=/swap bs=1G count=8
sudo chmod 600 /swap
sudo mkswap /swap
sudo swapon /swap
-
SWAP領域の有効確認
cat /proc/swaps
-
fstabの編集
sudo sh -c "echo '/swap none swap sw 0 0' >> /etc/fstab"
リダイレクトの不等号の数を間違えて悲しい思いをしたことがあります...
-
swappinessの調整
swappinessは、(たぶん)物理メモリの残りが何%になったらSWAPを使うか指定するパラメータです。
「0」を設定すると、物理メモリをすべて使用するまでSWAPを使わないようにできるため、(たぶん)無駄なSDカードアクセスを防止できます。sudo sh -c "echo 'vm.swappiness=0' >> /etc/sysctl.conf" sudo sysctl -p
Swapファイルの設定についてはinstallSwapfileというツールを使用する方法もあります。
Jetpack のバージョンの確認
- バージョンだけを確認する場合
$ sudo apt show nvidia-jetpack
- CUDA や cuDNN 等のバージョンも確認する
$ git clone https://github.com/jetsonhacks/jetsonUtilities
$ cd jetsonUtilities
$ python jetsonInfo.py
NVIDIA Jetson Nano (Developer Kit Version)
L4T 32.6.1 [ JetPack 4.6 ]
Ubuntu 18.04.6 LTS
Kernel Version: 4.9.253-tegra
CUDA 10.2.300
CUDA Architecture: 5.3
OpenCV version: 4.1.1
OpenCV Cuda: NO
CUDNN: 8.2.1.32
TensorRT: 8.0.1.6
Vision Works: 1.6.0.501
VPI: ii libnvvpi1 1.1.15 arm64 NVIDIA Vision Programming Interface library
Vulcan: 1.2.70
機械学習フレームワークのインストール
tensorlow
Installing TensorFlow For Jetson Platform :: NVIDIA Deep Learning Frameworks Documentation に従ってインストールします。
# tensorflow 依存パッケージのインストール
$ sudo apt-get update
$ sudo apt-get install \
libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip \
libjpeg8-dev liblapack-dev libblas-dev gfortran
# pip3 の更新
$ sudo apt-get install python3-pip
$ sudo pip3 install -U pip testresources setuptools==49.6.0
# その他の依存パッケージのインストール
$ sudo pip3 install -U --no-deps \
numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 \
keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig
$ sudo env H5PY_SETUP_REQUIRES=0 pip3 install -U h5py==3.1.0
$ sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 tensorflow
2021年12月現在、インストールされる tensorflow のバージョンは v2.6.2 のようです。
あと、h5py をインストールする時、結構時間がかかり、しばらくコマンドの応答がなくなります。
PyTorch
PyTorch for Jetson Nano - NVIDIA Developer Forums
$ wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl \
-O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
$ sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
$ pip3 install Cython
$ pip3 install numpy torch-1.10.0-cp36-cp36m-linux_aarch64.whl torchvision
sikitlean
$ sudo pip3 install scikit-learn
import 時に、ModuleNotFoundError: No module named 'numpy.testing.nosetester'
のエラーが出る場合は scipy
を更新すると直るはずです。
Chainer
pip3 install fastrlock cupy
pip3 install chainer
cupyのインストールに1時間くらいかかります。
OpenCV
Install OpenCV 4.5 on Jetson Nano - Q-engineering でインストールスクリプトとその中身の解説が公開されていました。
内容をざっくり要約すると、
-
SWAP メモリを 4GB 用意する。
-
下記コマンド実行
OpenCV4.5.5インストール$ wget https://github.com/Qengineering/Install-OpenCV-Jetson-Nano/raw/main/OpenCV-4-5-5.sh $ chmod u+x ./OpenCV-4-5-5.sh $ ./OpenCV-4-5-5.sh Installing OpenCV 4.5.5 on your Jetson Nano It will take 3 hours ! ・・・
OpenCV-4-5-5.sh
を実行すると「インストールに3時間かかるよ」と教えてくれます。
実際、time コマンドで測ってみましたところ、約150分かかりました。
OpenCV のビルドが長すぎて sudo がパスワードの再入力を求めてくるので、初めから root でOpenCV-4-5-5.sh
を実行した方が良いかもしれません。インストール後、下記を実行してエラーが出なければ正しくインストールできています。
OpenCVインストール確認$ python3 Python 3.6.9 (default, Dec 8 2021, 21:08:43) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.5.5'
VS Code
昔はソースからインストールする必要がありましたが、最近では Visual Studio Code – コード エディター | Microsoft Azure から arm64
版の deb パッケージをダウンロードするだけでインストールできるようになりました。
GPU負荷のモニタリング方法
git clone https://github.com/JetsonHacksNano/gpuGraph
cd gpuGraph
python3 gpuGraph.py
その他
luaが有効なVimのインストール
T4L標準のVimはluaが無効っぽいので有効にします。neocompleteとかを使わない人には無縁の機能です。
export ROOTFS="$HOME/rootfs"
mkdir -p $ROOTFS
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
pushd lua-5.3.5
make linux test
make install INSTALL_TOP=$ROOTFS
popd
git clone https://github.com/vim/vim.git
pushd vim/src
make distclean
./configure \
--prefix=$ROOTFS \
--enable-fail-if-missing \
--with-features=huge \
--disable-selinux \
--enable-luainterp \
--enable-perlinterp \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3.6/config-3.6m-aarch64-linux-gnu/ \
--enable-cscope \
--enable-fontset \
--enable-multibyte \
--with-lua-prefix=$ROOTFS \
vi_cv_path_python3=/usr/bin/python3.6
make && make install
popd
mkdir -p $HOME/.vim/pack/mypackage/opt
mkdir -p $HOME/.vim/pack/mypackage/start
pushd $HOME/.vim/pack/mypackage/start
git clone https://github.com/Shougo/neocomplete.vim.git
popd
echo "let g:neocomplete#enable_at_startup = 1" >> $HOME/.vimrc
echo "export PATH=$HOME/rootfs/bin:$PATH" >> $HOME/.bashrc
source $HOME/.bashrc
pyenv-virtualenvのインストール
複数バージョンのpython環境が必要になった時、インストールしておくと便利です。
-
pyenvのインストール
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv
-
$HOME/.bashrcへの追加 その1
$HOME/.bashrcexport PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" fi
-
$HOME/.bashrcの再読込み その1
$ source $HOME/.bashrc
-
pyenv-virtualenvのインストール
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
-
$HOME/.bashrcへの追加 その2
$HOME/.bashrceval "$(pyenv virtualenv-init -)"
-
$HOME/.bashrcの再読込み その2
source $HOME/.bashrc
python3.6環境の作成と有効化
T4Lのpython3はもともの3.6なので、あえて切り替える必用はありませんが。。。
1. pythonのコンパイルに必要なツールをインストール
sudo apt install -y gcc make \
libssl-dev libbz2-dev \
libreadline-dev libsqlite3-dev zlib1g-dev
2. python3.6実行環境のインストール
pyenv install 3.6.8
pyenv virtualenv 3.6.8 py36
pyenv activate py36
pip install --upgrade pip
参考サイト
-
Jetson全般
-
Chainer
- CuPy
- Chainer
-
VS Code