Jetson AGX Xavierセットアップ トラブルシューティング

Jetson AGX Xavierのセットアップ関連でつまづいたところを自分用にメモしておく。

JetPackのアップグレード

Jetsonの新規インストール手順などは色んな所に書いてるので下記などを参照。
ホストマシンとの接続方法や、Force recoveryモードでのJetson起動方法(電源ボタンの押し方)などはこれらと同じ。
ただ、アップグレードの場合は最初のJetson側のUbuntuインストールがない。これをどうにかする必要がある。

JetPack 4.4以前から新しいバージョンのJetPackにアップグレードしたい場合は、基本的にクリーンインストールしかない。 4.4以降はupgradeできるようになるよ、と本家ドキュメントにはあるが定かではない。期待せずに待つことにする。

なんでアップグレードしたいか

そもそもなぜアップグレードしたかったかというと、以前までTensorflow 1.14 + JetPack 4.2という組み合わせでやっていた。
JetPack 4.2ではCUDA 10.0が使われるのだが、Tensorflow 2.2が使いたくなりCUDA 10.1以上が必要になった。
CUDA 10.1を使うにはJetPack 4.4が必要、という流れ。

で、JetPack 4.2上でCUDA 10.1をセットアップしようと試みたが、これがまったくうまくいかない。
普通のゲーミングPCみたいにnvidia-driverを上げて、新しいバージョンのCUDAを入れて、とかをaptで簡単にできない。
JetsonはARMベースのため、必要なパッケージがaptになかったり、そもそもドライバが独自のものだったりするので
ドライバ一式を含んでいるJetPackから入れ直さないとダメだという結論に至った。

JetPackのバージョン確認

そもそも今入っているJetPackのバージョン確認をするための便利ツールがある。
参考: Jetson NanoでDeepStreamを使う

$ git clone https://github.com/jetsonhacks/jetsonUtilities
$ cd jetsonUtilities
$ python jetsonInfo.py

 NVIDIA Jetson TX1
 L4T 32.2.0 [ JetPack 4.2.1 ]
 Ubuntu 18.04.3 LTS
 Kernel Version: 4.9.140-tegra
 CUDA 10.0.326

Ubuntu 18.04マシンの準備

Jetsonと接続してインストールするために、ホストOSとしてUbuntu 18.04が動く物理マシンが必要。
仮想マシンではダメらしい。 Mac + VirtualBoxでやっている人も見かけたが、物理マシンを用意できるならそれが無難。(JetPackのエラーは分かりづらいので変なところでつまづくとワケ分からなくなる)

ホストのマシンが準備できたら、アップグレードしたいJetPackのバージョンをインストールできる NVIDIA SDK ManagerをUbuntuにインストールする。
このとき、GUIのパッケージマネージャーからインストールすると固まることがあるので、dpkg コマンドでインストールすると良い。

ちなみに他の小さなJetson Xavier NXとかNanoとかだとSD Cardにイメージを焼いてセットアップするらしい。

NVIDIA SDK ManagerからJetsonを再セットアップ

上記の新規インストール手順と同様に、NVIDIA SDK Managerからインストールを進めればOK。

で、ここからがつまづいたところ。

ネット回線

数GBのダウンロードが走るので、ネット回線は安定していて太いものがあると良い。
細いと途中でエラーになる。

Connection refused connecting via SSH

NVIDIA SDK Managerからのセットアップがある程度すすむと、sshでJetsonに接続するプロンプトが出る。(下記、公式ドキュメントから画像転用)

JetsonとのSSH接続(公式ドキュメントから転用)

このssh接続はUSBケーブルでホストOSとJetsonをつないで行う。
Jetson側のIPアドレスは固定で 192.168.55.1 になっている。(ちなみにホストOS側は 192.168.55.100 になるはず)

が、このssh接続で「Connection refused connecting via SSH」が出て進まなくなる。

これはNVIDIA SDK Managerが

  1. JetsonのOSを再インストールし始める
  2. OSの再インストール中にssh接続しようとする
  3. OSの再インストールを完了する

という流れで動いているからのように見える。つまりJetsonのOSがセットアップされていないからssh接続できない。

そのため、一旦このSSH接続はSkipして諦める。

その後、Jetson側のOSの再インストールが終わるのでSDK Managerを終了する。

で、今度は しばらく待ってから(10分くらい) Jetsonを再起動し、Jetson側にHDMIケーブルをつないでディスプレイで起動を確認する。
この しばらく待ってから が重要だったみたいで、待たずに再起動するとOSのインストールが完了する前に電源が落ちてシステムが壊れたことがあった。

無事OSのインストールが終わったら、Jetsonの画面でUbuntuのGUIが立ち上がり、初期セットアップになる。
ここでJetson側のUbuntuユーザをセットアップできるので、ユーザ名に nvidia , パスワードに nvidia とか適当なジョーアカウントで良いので設定しておく。

これを終わらせた後、再度ホストOSとJetsonをUSB接続し、改めてNVIDIA SDK Managerを起動する。
今度は 「Jetson OS」という項目のチェックを外して セットアップを進める。
これをしないとまたOSが上書きされて、SSH接続できない、の繰り返し。

残りのセットアップ(公式ドキュメントから転用)

これが終われば、無事CUDAやdockerなど必要なツール類もインストールされてJetPackのアップグレード(と言っても上書きインストールだが)が完了する。

その他

jtopのインストール

htopのJetson版みたいなツール。入れておくと良い。

$ pip install jetson-stats
mukiudo
mukiudo
Software Engineer