😇

Jetson orin nanoやるぜ

2024/09/23に公開

3連休暇なので才能の無駄使いをやりたくなった。具体的にはラズパイクラスターみたいなJetsonクラスタを作って、MPIでCUDAな開発環境を作りたくなった。
それでJetson orin nanoに手を出したのだが、俺様のあふれる才能が虚無の彼方に吸い込まれてしまった。
一応、2台のJetsonのセットアップは完了したのだが、それだけで3連休が終わってしもうた。
誰だこんなハマりどころ満載のおもちゃを作ったやつだ。
とりあえず今回は恨み言と愚痴を垂れ流しておく。
※一応、まだJetson orin nanoはやるつもりなので、今後評価は変わるかも。

2台のJetson

2台Jetsonを用意していたのだが、1台はなぜかSDカードスロットが付いていなかった。
Amazonで購入したのだけど、なんかJetsonの他にもセットでいろいろついているやつを1個選んだので
それがSDカード付いていなかったのかも、どうせM.2 SSDにするからいいかと思ったけど、後々苦しんだ。

SDK Managerはクソ

SDK Managerはぜんぜんダメ。話にならん。これで何でヨシ!としているかわからん。
以下、ダメなところを列挙しておく。

  • Ubuntu依存: HostマシンがUbuntuである必要がある。VMでもいけるらしいが、ベアメタルUbuntu推奨らしい。(というか、いろいろ依存や不安定なので、もしSDK Manager使うならUbuntuマシンを用意した方がよいであろう)わしは、UbuntuベースのMint Linuxなので、使う事ができなんだ。/usr/lib/os-releaseを偽装して、立ち上げて使ってたけど。(そういう非推奨な事をするから嵌まる)もろもろの理由で諦めた。
  • バージョン依存: 意味がわからないのだけど、JetPackのバージョンとHostのUbuntuのバージョンが依存している。JetPack 5系はUbuntu20.04系である必要があり、JetPack 6系は、Ubuntu22.04系である必要があるらしい。なぜこういう仕様にしたのか問い詰めたい。そんな依存する事ある?
  • 最新のJetPack 6をインストールするためには、Jetson側のQSPI bootloaderをアップデートする必要があるらしい。SDカードがないJetsonは、この時点でかなり厳しくなる。(意味がわからん)なぜそんな下位互換性のないアップデートするの?bootloaderの重要性わかってる?
  • SDK Managerから書き込む際には、Jetsonをリカバリモードで起動する必要がある。そのためにディップスイッチでショートさせておく必要がある。(ここまではよい)しかし、ショートさせたままではダメで、SDK Managerで認識させた後に、フラッシュする前には、ディップスイッチを抜いておく必要があるらしい。(そんなの知らんがな)フラッシュした後にJetsonが自動で再起動するのだが、リカバリーモードだと立ち上がってこないので、その先に進めない。更にリカバリーモードだとディスプレイをJetsonにつなげていても表示されないので、意味不明になる。SDKManageのログは、SSHのタイムアウトエラーが表示される。(最初これを見てもなんもわからん。なぜSSH?ってなる)
  • しかも、ディスプレイは依存が厳しい?っぽく、わしの大型ディスプレイは映らなかった。モバイルディスプレイに移して作業しなおした。
  • しかも、ディスプレイのポートはDisplayPort(HDMIじゃない)DisplayPortが優れているのは知っているけど、わざわざHDMIから変更しなくてもよいんじゃない?わざわざ変換ポートさすだけだよ。むだむだむだむだ。
  • フラッシュモードがautoとmanualがあるがそれの違いがわかりにくい。(結局、SDK Managerでのセットアップは成功しなかったので、しらんけど。多分manualが自分で初期セットアップをやるモードと思われる。後ほど、SDカードにイメージを焼き付けて、起動してセットアップするのだが、それと同じ感じだと思われる。そして、autoはその初期セットアップを自動でやるのだが、そのためにSSH接続してやると思われる。けどそれがうまくいかない。っていうかいろいろ手順的におかしい気がする。ディップスイッチの件とか)
  • ディップスイッチの件は、新しいSDK Manager?では、ソフトウェア的に対処しているような事が書いてあったがもはや信用できない
  • そもそも、組み込みの出来損ないなんだから、SDカードを使うのもいいけど、USBメモリから起動するようにしてくれればいいと思った。何故か謎のネットワークブートできるようだけど。(ほんとセンスがあわない)

SDカードにイメージを焼く

ということで、素直に自前でイメージをダウンロードして、SDカードに焼いてブートするとよい。
手順は以下の通り
Jetson Orin NanoのSDカードを使ったOSイメージのセットアップ手順 #NVIDIA - Qiita

これで作ったSDカードをJetsonにぶっ刺せば、立ち上がって初期セットアップが始まる。
GUIで操作する必要があるので、ディスプレイとキーボードとネットワークケーブル(無線LANでも可)が必要。イケてない。(せっかくL4TでUSBでネットワーク接続できるのになぁ)

これでSDカードが付いているJetsonは初回セットアップはできた。問題はSDカードが付いていない方である。こいつは、JetPackのイメージをddでM2.SSDに書き込む事により、M2.SSDから起動できて初回セットアップができる。
手順は以下の通り
Jetson Orin Nano のセットアップ -- 煩悩分画
つまりSDカードが付いているJetsonを初回セットアップした後、イメージをSSDに書き込んでそのSSDをSDカードが付いていない方につけてセットアップした。
最初、SDカードが付いていない方のJetsonのディップスイッチがささってて、リカバリーモードになっていて、無駄に時間の浪費があった。(無駄なリカバリーモード。マジでイケてない)

SDカードが付いているJetsonで、イメージを書き込んだSSDでの起動はなぜかできなかった。
無限、再起動になる。原因は不明。

SDカードからM2.SSDへ移行

SDカードが付いているJetsonは、SDカードなのでディスクIOが遅い。なので、M2.SSD化したい。
素直にイメージをSSDに書いて、初期セットアップすれば良い気もするのだけれど、それがうまくいかない。(なぜ?)
なので、以下の手順で、起動時にSSDにCHROOTするようにした。
この場合、ブートはSDカードなので両方が必要になる。(イケてないけど、とりあえずヨシ!とする)
M.2 SSDによるJetson Orin Nano開発者キットのディスク読み込み高速化 | Yutaka Kondo

TANG nano のススメ

アホみたいに時間が取られるので、TANG nanoを触りながら、Jetson orin nanoのセットアップをやっていた。同じnanoでもTANG nanoはイケている。こっちはFPGAだけど
CPUコンパイラ自作ワークショップのテキスト - uchan
で、TANG nanoと基盤と部品を買えば、CPUコンパイラ自作ができるらしい。
Jetsonよりこっちやるべきだったお。(ぽちりました)

Discussion