Jetson Orin Nano Docker環境構築完全ガイド【コンテナ活用でAI開発高速化】
Jetson Orin NanoでDockerを使うと、AI開発環境をクリーンに管理でき、プロジェクトごとに環境を切り替えることができる。本記事では初期設定からGPU対応コンテナの起動まで、実機で確認した手順を丁寧に解説する。
この記事でわかること
—
なぜJetson Orin NanoでDockerを使うのか
Jetson Orin Nano NVIDIA Jetson Orin Nano 開発者キット(Amazon) を使い始めると、最初はホスト環境に直接ライブラリをインストールしがちだ。しかし複数のプロジェクトを並行して進めると、PythonのバージョンやCUDAライブラリの依存関係がすぐに壊れてしまう。
Dockerを使うことで得られるメリットは以下の3点だ。
JetsonはARMアーキテクチャのため、一般的なx86向けDockerイメージはそのまま動かない。ただしNVIDIAのNGCカタログにはJetson(ARM64)向けのイメージが多数用意されているため、実際の開発では困ることはほぼない。
—
事前準備:JetPackのバージョン確認
Dockerの設定に入る前に、JetPackのバージョンを確認しておく。JetPackのバージョンによってCUDAやcuDNNのバージョンが決まり、対応するコンテナイメージが変わるためだ。
cat /etc/nv_tegra_release
実行結果の例は以下のようになる。
# R36 (release), REVISION: 4.1, GCID: 39600000, BOARD: generic, EABI: aarch64, DATE: ...
R36であればJetPack 6系(最新6.1)に対応している。NVIDIAのNGCカタログでイメージを検索する際に必要になるので覚えておこう。Jetson Orin Nano Super Developer Kitでは最大67 TOPSの性能を発揮し、生成AIタスクで優れたベンチマークを示す。
ストレージについても確認が必要だ。Dockerイメージはサイズが大きく、AIフレームワーク入りのイメージは10GBを超えるものも多い。microSDカードだけでは容量と速度の両面で不安があるため、NVMe SSD Western Digital SN770 500GB NVMe(Amazon) の導入を強く推奨する。
—
DockerとNVIDIA Container Runtimeのセットアップ
Dockerのインストール確認
JetPack 6以降ではDockerがデフォルトでインストール済みの場合が多い。まず確認してみよう。
docker --version
インストールされていない場合は以下のコマンドでインストールする。
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \
"deb [arch=arm64 signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
sudoなしでDockerコマンドを実行できるようにするため、現在のユーザーをdockerグループに追加する。
sudo usermod -aG docker $USER
newgrp docker
NVIDIA Container Runtimeの設定
JetsonでGPUをコンテナから使うにはNVIDIA Container Runtimeの設定が必要だ。JetPack 6以降ではnvidia-container-toolkitが利用可能だが、念のため確認する。
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
設定が完了したら/etc/docker/daemon.jsonを確認する。
cat /etc/docker/daemon.json
以下のような内容が記載されていれば正しく設定されている。
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
default-runtimeがnvidiaになっていない場合は手動で追記する。この設定をしておくことで、docker run時に--runtime nvidiaを毎回指定しなくて済む。
GPU認識の動作確認
以下のコマンドでコンテナからGPUが認識できるか確認する。
docker run --rm --runtime nvidia nvcr.io/nvidia/l4t-base:r36.4.3 nvidia-smi
nvidia-smiの出力が表示されれば、GPU対応コンテナが正常に動作している。
—
L4Tベースイメージを使った環境構築
NVIDIAはL4T(Linux for Tegra)をベースにした公式コンテナイメージを複数提供している。代表的なものを以下に示す。
| イメージ名 | 用途 |
|—|—|
| l4t-base | 基本的なCUDA環境 |
| l4t-ml | TensorFlow・PyTorchが同梱 |
| l4t-pytorch | PyTorchに特化した環境 |
| l4t-tensorflow | TensorFlowに特化した環境 |
PyTorchを使った開発環境を構築する場合は以下のコマンドを実行する。
docker pull nvcr.io/nvidia/l4t-pytorch:r36.4.3-pth2.4-py3
イメージのサイズが数GBあるため、ダウンロードには時間がかかる。NVMe SSDへのDockerデータルート移行をしていない場合、microSDカードの空き容量に注意しよう。Realsenseカメラ使用時はnvidia/cuda:12.4.1-cudnn9-runtime-ubuntu22.04ベースを推奨。
コンテナを起動して動作確認する。
docker run --rm -it \
--runtime nvidia \
--network host \
-v /home/$USER:/workspace \
nvcr.io/nvidia/l4t-pytorch:r36.4.3-pth2.4-py3 \
python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
Trueが表示されればPyTorchからGPUが使えている状態だ。
—
docker-composeで開発環境を管理する
毎回長いdockerコマンドを打つのは面倒だ。docker-composeを使うことで、設定をファイルとして管理できる。
docker-composeのインストール
Jetsonではapt版が古い場合があるため、最新版を直接取得。
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose.ymlの作成例
プロジェクトディレクトリにdocker-compose.ymlを作成する。
version: "3.8"
services:
jetson-dev:
image: nvcr.io/nvidia/l4t-pytorch:r36.4.3-pth2.4-py3
runtime: nvidia
network_mode: host
volumes:
- ./workspace:/workspace
- /tmp/.X11-unix:/tmp/.X11-unix
environment:
- DISPLAY=$DISPLAY
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
stdin_open: true
tty: true
working_dir: /workspace
command: /bin/bash
起動は以下のコマンドで行う。
docker compose up -d
docker compose exec jetson-dev bash
—
よくあるエラーと対処法
permission denied エラー
permission denied while trying to connect to the Docker daemon socketと表示される場合は、dockerグループへの追加が反映されていない。一度ログアウトして再ログインするか、newgrp dockerを実行する。
イメージのアーキテクチャ不一致
exec format errorが出る場合は、x86向けのイメージを誤って使っている可能性が高い。NGCカタログでイメージを探す際はarm64またはaarch64タグのものを選ぶ。JetPack 6.1以降ではJetson Linux 36.4系に対応。
ストレージ不足
no space left on deviceエラーが出たら、DockerのデータルートをmicroSDからより容量の大きいNVMe SSDに移動する。
sudo systemctl stop docker
sudo vim /etc/docker/daemon.json
daemon.jsonに以下を追記する。
{
"data-root": "/mnt/nvme/docker"
}
その後Dockerを再起動する。
sudo systemctl start docker
—
まとめ
Jetson Orin NanoでDockerを使うポイントをまとめると次の通りだ。
default-runtimeをnvidiaにしておくホスト環境を汚さずにAI開発を進められるDockerは、Jetsonを使い続けるうえで欠かせないスキルだ。最初の設定に少し手間がかかるが、一度整えてしまえばその後の開発効率が大きく上がる。
—
次はこちら
Docker環境が整ったら、次は実際にAIモデルを動かしてみよう。

コメント