Jetson Orin Nano Docker環境構築完全ガイド【コンテナ活用でAI開発高速化】

Jetson Orin Nano Docker環境構築完全ガイド【コンテナ活用でAI開発高速化】

Jetson Orin NanoでDockerを使うと、AI開発環境をクリーンに管理でき、プロジェクトごとに環境を切り替えることができる。本記事では初期設定からGPU対応コンテナの起動まで、実機で確認した手順を丁寧に解説する。

この記事でわかること

  • Jetson Orin NanoでDockerを使う前の事前準備と注意点
  • NVIDIAが提供するL4T(Linux for Tegra)ベースコンテナの使い方
  • GPUをコンテナ内から使うためのNVIDIA Container Runtimeの設定方法
  • docker-composeを使った開発環境の管理方法
  • よくあるエラーとその対処法
  • なぜJetson Orin NanoでDockerを使うのか

    Jetson Orin Nano NVIDIA Jetson Orin Nano 開発者キット(Amazon) を使い始めると、最初はホスト環境に直接ライブラリをインストールしがちだ。しかし複数のプロジェクトを並行して進めると、PythonのバージョンやCUDAライブラリの依存関係がすぐに壊れてしまう。

    Dockerを使うことで得られるメリットは以下の3点だ。

  • プロジェクトごとに独立した環境を持てる
  • 環境構築の手順をDockerfileとして記録・再利用できる
  • NVIDIAが公式に提供するJetson向けコンテナイメージをそのまま使える
  • 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を使うポイントをまとめると次の通りだ。

  • JetPackバージョンに合ったL4Tコンテナイメージを使う
  • NVIDIA Container Runtimeの設定でdefault-runtimeをnvidiaにしておく
  • 大容量のイメージを扱うためNVMe SSDの導入は必須に近い
  • docker-composeで環境をコード化しておくと再構築が楽になる
  • ホスト環境を汚さずにAI開発を進められるDockerは、Jetsonを使い続けるうえで欠かせないスキルだ。最初の設定に少し手間がかかるが、一度整えてしまえばその後の開発効率が大きく上がる。

    次はこちら

    Docker環境が整ったら、次は実際にAIモデルを動かしてみよう。

  • Jetson Orin NanoでYOLOv8をリアルタイム物体検出する方法
  • Jetson Orin Nano TensorRT高速化チュートリアル
  • Jetson Orin Nano 初期設定 JetPackインストール手順
  • コメント

    タイトルとURLをコピーしました