Jetson Nano : JetPack4.4(L4T 32.4.3)版インストール手順

関連サイト

  • NVIDIA Jetson Nano高速化

https://www.usagi1975.com/201906272044/

久々にクリーンインストールする必要が出てきたのと、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も含めるか検討中