![見出し画像](https://assets.st-note.com/production/uploads/images/94208595/rectangle_large_type_2_c8ab52da6047d1441447be66aa3d2778.png?width=1200)
UbuntuでNVIDIA triton inference serverを動かすまで
Computer VisionやAIの開発を行なっていると、GPUの必要性に駆られる。ここでは、Ubuntu PCを使用して、NVIDIA triton inference serverを動かすまでを記録する。自分用の備忘録。
まず、条件は以下の通り。
Ubuntuのバージョンは18.04.4 LTS
NVIDIA driver、未インストール状態
Video Card はNVIDIA製 RTX 3060Tiが取り付けられた状態
そもそもなぜUbuntu PCが必要だったかというと、NVIDIA Triton ServerはローカルホストにもGPUが搭載されていることを前提としており、手持ちのmac book airでは対応できない。そもそもmacOSには対応していないので手元にたまたまあったUbuntuで進める。https://github.com/triton-inference-server/server/issues/1042
まず、普段GPGPUを目的として使用していないこともあり、NVIDIA driverがインストールされていない。インストールする前に確認しておかなければならない項目は以下の4つ。
Verify the system has a CUDA-capable GPU
Verify the system is running a supported version of Linux
Verify the system has build tools such as make, gcc installed
Verify the system has correct Linux kernel headers
ここにやるべきことはまとめられている。
本家の説明によれば方法は次の3つ。
普段GPGPUを目的として使用していないこともあり、かつ、PCを汚したくないため、dockerを使用することとした。こちらにもまとめられているが、要するにdockerで引っ張ってきた方が楽そうだ。
ここで使うのがこちら。
以下に記載の通りの手順に沿って進める。dockerが入っていることは前提。
まず、nvidia container toolkitをインストールするためのパッケージレポジトリとGPGkeyを用意する。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
次にnvidia-docker2のパッケージをインストールして再起動したりする。
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
そしてCUDA containerをrunさせるが、ここでUbuntuのversionに合ったコンテナを動作させなくてはならない。以下より今回使用しているUbuntu 18.04.4 LTSに合うものを探し、nvidia/cuda:11.5.1-base-ubuntu18.04を使用することとした。
コマンドは以下の通り。
sudo docker run --rm --gpus all nvidia/cuda:11.5.1-base-ubuntu18.04 nvidia-smi
次の結果が表示された。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.86.01 Driver Version: 515.86.01 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| 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 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |
| 0% 32C P8 7W / 200W | 17MiB / 8192MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
ここまででNVIDIA Container Toolkitのコンテナを走らせることができた。こちらにもある通り、色々と名前が変わっているサービスのようだ。
そして使うのがこれ。
まずは適当なフォルダをUbuntu上に作成して、次のコマンドを打つ。
git clone -b r22.12 https://github.com/triton-inference-server/server.git
cd server/docs/examples
./fetch_models.sh
そんでtritonをローンチ
docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:21.12-py3 tritonserver --model-repository=/models
ここでtriton serverのヴァージョンを自分の環境に合わせないと怒られるので、以下より確認。上記で回ったが、合っているのか要確認。
次に別コンソールで以下を打ち込む。上記とバージョンあっていないが回ったのは何故かはまだ分かっていない。
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:22.12-py3-sdk
するとdocker内に入るので以下を打ち込む。
/workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg
予測が返ってくる。とりあえず、繋がった。
Image '/workspace/images/mug.jpg':
15.346230 (504) = COFFEE MUG
13.224326 (968) = CUP
10.422965 (505) = COFFEEPOT
詳しいことはこちらに書いてある。
ここにyoloを組み込む予定。