見出し画像

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つ。

  1. Verify the system has a CUDA-capable GPU

  2. Verify the system is running a supported version of Linux

  3. Verify the system has build tools such as make, gcc installed

  4. 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を組み込む予定。

この記事が気に入ったらサポートをしてみませんか?