Jetson Orin Nano Superのセットアップ

実は、手元にラズパイが嫌ってほどある。Raspberry Pi 2 1.2は、中身がほぼRaspberry Pi 3。それらはノイズ源になるため無線が不要なオーディオ用。それ以外のRaspberry Piは、VMwareに在籍していたときの師匠から譲ってもらったもの。実は時間がなくて、最近暇なことが多かったのセットアップ。LEDがついているので、GPUサーバのGPUメーター+地震アラートを表示させていたりしている。
昔ならゴニョゴニョコードを書いて動かしていたが、今やAIが全部コードを書いてくれる。いわば、知識よりも何をしたいかのほうがかなり重要。
 
 
閑話休題
 
 
DGX Sparkと違って、Jetson Orin Nano Super Developer Kitにはストレージが付属していない。そのため、ラズパイのように、まずOSを入れるストレージを用意するところから始まる。
ストレージはmicroSDカード、NVMe SSDのどちらにもインストール可能だが、個人的にはNVMe SSDへのインストールをおすすめする。
JetsonのOSは、Ubuntu Desktop 24.04ベースのOS。ここは少し注意が必要で、Ubuntu Serverのような最小構成のOSが入るわけではない。Jetson ISOからインストールすると、普通にGUI付きのUbuntu Desktop環境が構築される。以前はSDK ManagerをUbuntu PCで動かし、USB経由でJetsonを焼く方式が定番だったが、JetPack 7.2以降のOrin Nano Developer Kitでは「Jetson ISO」という方法が使えるようになった。
USBメモリからJetson自身を起動し、NVMe SSDやmicroSDカードへ直接Jetson Linuxをインストールできる。今回はこの方法を使用した。

1. 必要なもの

必要なもの
  • DisplayPortが接続できるディスプレイ(HDMIではないことに注意。地味にハマる。アダプタで変換でも可能)
  • USBキーボード
  • USBマウス(デスクトップ画面で無線LAN、ホスト名とユーザ名を設定する)
  • USBメモリ 8GB以上
  • Jetson ISO OSイメージ (Jetson ISO r39.2.1 / JetPack 7.2.1 release.)
となる。
 
OSイメージはNVIDIAのJetson Orin Nano Developer Kit Quick Start Guideからダウンロードをする。

2. インストーラーの作成

Balena Etcherなどのアプリで作成することも可能だが、今回はMacからddで作成した。
必ずUSBメモリのデバイスを確認すること。間違えると別のディスクを破壊するので注意。
diskutil list
diskutil unmountDisk /dev/disk4
 
sudo dd \
if=”$HOME/Downloads/jetsoninstaller-r39.2.1-2026-08-07-18-30-47-arm64.iso” \
of=/dev/rdisk4 \
bs=4m
 
sync
diskutil eject /dev/disk4
 

3. USBメモリからの起動

USBメモリを挿してACアダプタを接続すると起動する。
確実にUSBメモリから起動したい場合は、NVIDIAロゴ表示時にEscを押してUEFI Boot Managerを開き、USBメモリを選択する。
Jetson ISOのインストール途中でQSPI Firmwareの更新を求められた場合は、Yを押して更新する。
Firmware更新ではJetsonが何度か再起動する。
触らずに待つ。
ただし、非常に古いFactory Firmwareの個体では、JetPack 7.2.1 ISOを直接起動できない場合がある。その場合は、NVIDIAが案内しているJetPack 6.x Update Pathを先に実行する必要がある。
Firmware更新後、Jetson ISOのインストーラーが起動する。
 
インストール先としてNVMe SSDまたはmicroSDカードを選択してインストールする。(それくらいしか選択肢がない。)
 
途中、一瞬ハングしたように見えることがある。
自分の環境ではUbuntu Desktop関連のパッケージを大量に展開しているところで表示がしばらく止まり、「これ死んだ?」となったが、15分くらい放っておいたら普通に進んだ。
 
インストール終了後に再起動するとUbuntuの初期設定画面が表示される。
無線LAN、ホスト名、ユーザー名、パスワードなどを設定する。
 
そしてUbuntu Desktopが表示される。それもオシャレ壁紙。
ここで、
「ん? DGX Spark?」
感がちょっと味わえる。
デスクトップアプリから、Superモードへ移行できたりする。コマンドラインでできるのであまりやることはないけど(汗)
 

4. JetPack 7.2.1インストール

Jetson LinuxのBSPを入れただけでは、CUDA、cuDNN、TensorRTなどJetPackのSDKコンポーネントが全部揃っているわけではない。
そこでJetPackをインストールする。
sudo apt update
sudo apt dist-upgrade
sudo apt install -y nvidia-jetpack
sudo apt -y autoremove
これでCUDA、cuDNN、TensorRTなどのJetPackコンポーネントが導入される。
 
自分の環境では、その後のapt upgradeで以下のNVIDIAパッケージが更新対象になり、JetPack側との整合性で問題になる状態になった。
そこで、通常運用中は以下をholdした。
apt-mark hold nvidia-cuda-dev nvidia-cudnn nvidia-cudnn-dev
apt-mark showhold
JetPack自体を更新するときには、このholdを解除して依存関係を確認してから更新する。
ここはJetPack 7.2.1 / Ubuntu 24.04環境で自分が実際に遭遇した回避策であり、すべての環境で必須という意味ではない。

5. CUDA PATHをsystem-wide設定

nvccのパスが入っていないので追加

sudo tee /etc/profile.d/cuda.sh >/dev/null <<‘EOF’
# NVIDIA CUDA Toolkit system-wide PATH
export PATH=”/usr/local/cuda/bin${PATH:+:${PATH}}”
EOF
 
sudo chmod 644 /etc/profile.d/cuda.sh
 
source /etc/profile.d/cuda.sh
 
nvcc –version
 
reboot
 

6. オンボードカメラ設定(オプション)

Yahboom IMX219 CSIカメラ 8MP 対応 Jetson Orin Super開発者キット
 
以下で設定を行う
sudo apt install -y v4l-utils
sudo /opt/nvidia/jetson-io/jetson-io.py
 
カメラの接続したポートによって選択が変わる。
Jetson-IO設定
意味
 
Camera IMX219-A
CAM0側にIMX219を1台
 
Camera IMX219-C
CAM1側にIMX219を1台
 
Camera IMX219 Dual
CAM0 + CAM1両方にIMX219
IMX219を2台使う場合

無事動いたが、超マゼンダが強い。WBなどの調整が必要か。カメラはオンボードにつけずにTP-Linkなどのカメラから撮ったほうが苦労しないかもしれないw

 

7. Yahboom CubeNano ケース設定

Yahboom Jetsonケース Jetson Nano Orin Nano Orin NX スーパーヒートメタルミニプロテクトケース
 
Jetsonから、RGB LEDとOLEDディスプレイが制御できる。
メーカーのページからドライバがダウンロードできるが、今回のJetPack 7.2.1環境では、実はUbuntu標準パッケージだけで制御できた
apt-get update
apt-get install -y \
python3-pil \
python3-smbus \
i2c-tools
 
以下のコマンドで認識されているかを確認。
i2cdetect -y -r -a 7
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: — — — — — — — — — — — — — — 0e —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — 3c — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — — — — — — — — — —
0eと3cの両方が見えることを確認
 
どう使うかはあなた次第。
  • RGB LEDは赤、黄、青での表示
  • OLEDは、3−4行くらいのステータス表示(白黒のみ)
ができる。
 
自分は、なんとなくアプラインス的な表示をするためにAIにスクリプトとsystemdの設定を書いてもらった。
  • RGB LED:GPUと温度状態で色が変わる
  • OLED:ステータスやIPアドレスを表示
 

8. Docker CE

Dockerもインストール可能なので、インストールしておいた。
Docker公式repositoryを追加。
apt update
apt install -y ca-certificates curl
 
install -m 0755 -d /etc/apt/keyrings
 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
 
chmod a+r /etc/apt/keyrings/docker.asc
 
. /etc/os-release
 
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
${VERSION_CODENAME} stable” \
> /etc/apt/sources.list.d/docker.list
 
apt update
 
apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
 
systemctl enable –now docker
確認:
docker version
docker compose version
docker info | grep -i runtime
構築時:
Docker CE 29.8.0
Compose 5.5.1
containerd.io 2.3.4
runc 1.5.1
 
Runtimes:
io.containerd.runc.v2
nvidia
runc
 
Default Runtime:
runc
JetPack導入済みのNVIDIA Container Toolkitによって nvidia runtimeが認識されたため、Docker導入後のNVIDIA runtime追加設定は不要
 

9. NVIDIA GPU Containerでの動作確認

CUDAのバージョンを調べる。
root@jetson01:~# nvidia-smi
Sat Sep 12 08:49:10 2026
+—————————————————————————————–+
| NVIDIA-SMI 595.78 Driver Version: 595.78 CUDA Version: 13.2 |
+—————————————–+————————+———————-+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Orin (nvgpu) N/A | N/A N/A | N/A |
| N/A N/A N/A N/A / N/A | Not Supported | N/A N/A |
| | | N/A |
+—————————————–+————————+———————-+
 
+—————————————————————————————–+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+—————————————————————————————–+
 
今回のr39.2.1環境でCUDA Containerを動かす場合、CUDA 13.2.1では問題が発生したため、CUDA 13.3を使用した。

CUDA 13.2.1 — NG

docker run –rm \
–runtime=nvidia \
nvidia/cuda:13.2.1-base-ubuntu24.04 \
nvidia-smi
失敗:
nvidia-cdi-hook/cudacompat
 
panic: runtime error:
slice bounds out of range [:73] with capacity 71
 

CUDA 13.3.0 — 起動成功

NVIDIA Forumで同じR39.2 / Orin Nano問題が報告されており、新しいCUDA 13.3 containerと、
NVIDIA_DISABLE_REQUIRE=true
を使用する回避策あり。
 
実機でも、
docker run \
-e NVIDIA_DISABLE_REQUIRE=true \
–runtime=nvidia \
-itd –rm \
nvcr.io/nvidia/cuda:13.3.0-runtime-ubuntu24.04
コンテナ起動成功
 
したがって現状は、
Docker GPU機能そのもの OK
CUDA 13.2.1 container NG
CUDA 13.3.0 container OK(workaround必要)
となる。
 
最新のOllamaのイメージは、問題なく動作した。
ということで、ようやくLLMを動かせるところまで来た。これでMini DGX Spark的(あくまでも的な)な部分が完成。ケースだけは、DGX Sparkに勝っているw
 
次は、8GBしかないJetson Orin Nano Superで、実際どこまでLLMが動くのか試してみる。

コメントする