毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
NVIDIA Jetson AGX Orin Developer KitにJetpack 6.0をインストールしたらはまった(無限に再起動するようになった)話 #NVIDIA - Qiita
https://qiita.com/ynott/items/94de1d1dad2ff7d11f95
上記の記事で、Jetson AGX Orin Developer KitにJetpack 6.0を日本最速(当社調べ)でインストールしてはまりました。
問題も解消し、ぼちぼち動かそうということで、Triton Inference Serverを動かしてみました。
1. 環境
jetson_releaseの情報は以下の通りです(jetson_releaseについてはこちらを参照)
$ sudo jetson_release
Software part of jetson-stats 4.2.8 - (c) 2024, Raffaello Bonghi
Model: NVIDIA Jetson AGX Orin Developer Kit - Jetpack 6.0 [L4T 36.3.0]
NV Power Mode[0]: MAXN
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
- P-Number: p3701-0000
- Module: NVIDIA Jetson AGX Orin
Platform:
- Distribution: Ubuntu 22.04 Jammy Jellyfish
- Release: 5.15.136-tegra
jtop:
- Version: 4.2.8
- Service: Active
Libraries:
- CUDA: 12.2.140
- cuDNN: 8.9.4.25
- TensorRT: 8.6.2.3
- VPI: 3.1.5
- Vulkan: 1.3.204
- OpenCV: 4.8.0 - with CUDA: NO
2. Dockerのインストール
何も入ってないので、Dockerをインストールします。
2-1. Dockerをインストールするまえの周辺パッケージのインストール
sudo nala update
sudo nala install \
ca-certificates \
curl \
gnupg \
lsb-release
2-2. Dockerのリポジトリ用の鍵をインストールしてリポジトリを追加
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo nala update
2-3. Dockerのインストール
特にこだわりも無いので最新版をインストールしました。
sudo nala install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
aptを使う人は、nalaはaptに読み替えてください(以下同じ)
2-4. インストール確認
$ sudo docker -v
Docker version 26.1.3, build b72abbb
2-5. 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER
セッションを再接続しておく
2-5. nvidia container toolkit を有効にする
Jetpackにはnvidia contaier toolkitは入っているはずですが、default-runtimeがnvidiaになってないと思うので、/etc/docker/daemon.json
を以下のように書き換える
sudo vi /etc/docker/daemon.json
以下のようにする
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
dockerを再起動しておく
sudo systemctl restart docker
3. Triton Inference Serverを動かす
3-1. Modelのダウンロード
以下を実行するとModelがダウンロードされる。
git clone -b r24.04 https://github.com/triton-inference-server/server.git
cd server/docs/examples
./fetch_models.sh
以下のようにmodelが入る
3-2. Triton Inference Serverを動かす
Dockerで動かすのは簡単
docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models \
nvcr.io/nvidia/tritonserver:24.05-py3-igpu tritonserver --model-repository=/models
- コンテナイメージは、igpuと付いているものを使う事
(チュートリアルとは違うので注意)
- model_repositoryがあるディレクトリで実行する事
- Disk空きが12GB以上空きがあること(コンテナイメージが10.9GB)
- 途中起動メッセージで
could not open file to read NUMA node: /sys/bus/pci/devices/0000:00:00.0/numa_node
とか出ますが、無視する
I0527 08:24:47.947393 1 grpc_server.cc:2463] "Started GRPCInferenceService at 0.0.0.0:8001"
I0527 08:24:47.948125 1 http_server.cc:4692] "Started HTTPService at 0.0.0.0:8000"
I0527 08:24:47.990732 1 http_server.cc:362] "Started Metrics Service at 0.0.0.0:8002"
まで出ればOK
3-3. Triton Inference Serverをテストする
Serverが動いても何もしてくれないので、何か画像を投げてテストします。
別のターミナルを起動して、以下のコマンドを打ちます。
こちらはファイルを投げつけるだけなので、tritonserverコンテナである必要もありませんが、チュートリアルに沿ってテストします。
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:24.04-py3-sdk
コンテナ内に入るので、以下のコマンドを実行
/workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION \
/workspace/images/mug.jpg
こんな風に返ればOK
4. まとめ
Jetsonには罠が一杯
20GBぐらい容量を利用するので注意する