関連サイト
- NVIDIA Jetson Nano高速化
https://www.usagi1975.com/201906272044/
- Nvidia Jetson NanoでDeepStreamを使う
https://www.usagi1975.com/202001120052/
久々にクリーンインストールする必要が出てきたのと、Jetpackのバージョンがだいぶ進んでいたので、あらためてメモっておく。
今回はJetPack4.4をインストールします。JetPackをインストールすることによって、様々なミドルウェアや開発フレームワークはインストールされますが、TensorFlowなど割とメンドクサイものは入ってないです。
L4T 32.4.3 [ JetPack 4.4 ]
最近調べてみると、jetcard
なるコミコミパックみたいなイメージが本家から公開されています。
https://github.com/NVIDIA-AI-IOT/jetcard
- jupyter notebook
- TensorFlow, Pytourch
- USB device mode
などがインストールされる。詳細はReadmeを見るとして、インストール済みのイメージやインストールスクリプトが公開されています。
本来インストール済みイメージをSDカードに焼けば良いですが、最新のJetPack4.4がベースになってないような気がする(リリース日が古い)ので、今回はJetPack4.4イメージを焼いた後にスクリプトを実行してみる。
JetPack4.4イメージをSDカードに焼いたあと、そのSDカードでJetsonを起動します。
> git clone https://github.com/NVIDIA-AI-IOT/jetcard.git
> cd jetcard
> ./install.sh <your sudo passwd>
どうも、masterブランチのものは最新のJetpack4.4に対応してない模様。
https://github.com/NVIDIA-AI-IOT/jetcard/issues/17
どうも、別のブランチで動作するように対応してるようです。ここにjetpack_4.4dp
という恐らくDeveloper Preview版のものがあったので、切り替えてみる。スクリプトを見ると、sudoコマンド用のパスワードがハードコードされているので、自身のパスワードに変更&保存してスクリプトを実行。
> git checkout jetpack_4.4dp
> vi install.sh
#!/bin/sh
set -e
password='jetson' <= ここを変更
> ./install.sh
ところが、torchvision
のインストールでエラーで止まってしまいました。まだ最新のJetpack4.4に対応してないようなので、フォークして上記jetpack_4.4dp
を修正したスクリプトをjetpack_4.4_r32.4.3
にUP。
https://github.com/c-doi/jetcard
install.sh
ファイルの先頭にパスワードjetson
がハードコードされているので、自身の環境に合わせて変更する。インストールが完了したら、念のためpytorchとtorchvisionのインポートぐらいを確認するスクリプトもUPしたので確認する。
インストール完了まで1H~2Hほどかかるので注意。
> git clone --branch jetpack_4.4_r32.4.3 https://github.com/c-doi/jetcard
> cd jetcard
> ./install.sh
> python3 check.py
pytorch version : 1.6.0
CUDA available: True
cuDNN version: 8000
Tensor a = tensor([0., 0.], device='cuda:0')
Tensor b = tensor([2.0397, 0.0186], device='cuda:0')
Tensor c = tensor([2.0397, 0.0186], device='cuda:0')
torchvision version : 0.7.0a0+e2d415c
> check.py
公式サイトのどこかにあったサンプルを切り出しています
```python
# check.py
import torch
print('pytorch version : ' + torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print('cuDNN version: ' + str(torch.backends.cudnn.version()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))
import torchvision
print('torchvision version : ' + torchvision.__version__)
DeepStreamも含めるか検討中