第3章 NVIDIA CUDA AI アクセラレーターを使用した Podman によるサービングと推論
NVIDIA CUDA AI アクセラレーター上で実行される Podman と Red Hat AI Inference Server を使用して、大規模言語モデルのサービングおよび推論を行います。
前提条件
- Podman または Docker がインストールされている。
- sudo アクセス権を持つユーザーとしてログインしている。
-
registry.redhat.io
にアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face アクセストークンが生成されている。
データセンターグレードの NVIDIA AI アクセラレーターがインストールされた Linux サーバーにアクセスできる。
NVIDIA GPU の場合:
- NVIDIA ドライバーがインストールされている
- NVIDIA Container Toolkit がインストールされている
- システムに NVswitch を使用する NVIDIA GPU が複数ある場合は、Fabric Manager を起動するための root アクセスが割り当てられている。
アクセラレーターでサポートされている vLLM 量子化スキームの詳細は、Supported hardware を参照してください。
手順
サーバーホストでターミナルを開き、
registry.redhat.io
にログインします。podman login registry.redhat.io
$ podman login registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、関連する NVIDIA CUDA イメージを取得します。
podman pull registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.2
$ podman pull registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
sudo setsebool -P container_use_devices 1
$ sudo setsebool -P container_use_devices 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。
mkdir -p rhaiis-cache
$ mkdir -p rhaiis-cache
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chmod g+rwX rhaiis-cache
$ chmod g+rwX rhaiis-cache
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HF_TOKEN
Hugging Face トークンを作成するか、private.env
ファイルに追加します。source コマンドでprivate.env
ファイルを読み込みます。echo "export HF_TOKEN=<your_HF_token>" > private.env
$ echo "export HF_TOKEN=<your_HF_token>" > private.env
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source private.env
$ source private.env
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AI Inference Server コンテナーイメージを起動します。
NVIDIA CUDA アクセラレーターの場合、ホストシステムに複数の GPU があり、NVSwitch を使用している場合は、NVIDIA Fabric Manager を起動します。システムで NVSwitch が使用されているかどうかを検出するには、まず
/proc/driver/nvidia-nvswitch/devices/
にファイルが存在するかどうかを確認してから NVIDIA Fabric Manager を起動します。NVIDIA Fabric Manager を起動するには root 権限が必要です。ls /proc/driver/nvidia-nvswitch/devices/
$ ls /proc/driver/nvidia-nvswitch/devices/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start nvidia-fabricmanager
$ systemctl start nvidia-fabricmanager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要NVIDIA Fabric Manager は、NVswitch を使用する複数の GPU を搭載したシステムにのみ必要です。詳細は、NVIDIA Server Architectures を参照してください。
次のコマンドを実行して、Red Hat AI Inference Server コンテナーがホスト上の NVIDIA GPU にアクセスできることを確認します。
podman run --rm -it \ --security-opt=label=disable \ --device nvidia.com/gpu=all \ nvcr.io/nvidia/cuda:12.4.1-base-ubi9 \ nvidia-smi
$ podman run --rm -it \ --security-opt=label=disable \ --device nvidia.com/gpu=all \ nvcr.io/nvidia/cuda:12.4.1-base-ubi9 \ nvidia-smi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを起動します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- SELinux が有効になっているシステムに必要です。
--security-opt=label=disable
は、SELinux がボリュームマウント内のファイルを再ラベル付けするのを防ぎます。この引数を使用しない場合、コンテナーが正常に実行されない可能性があります。 - 2
- 共有メモリーに問題が発生する場合は、
--shm-size
を8GB
に増やしてください。 - 3
- ホスト UID をコンテナー内の vLLM プロセスの有効な UID にマッピングします。
--user=0
を渡すこともできますが、--userns
オプションよりもセキュリティーが低くなります。--user=0
を設定すると、コンテナー内で vLLM が root として実行されます。 - 4
- Hugging Face API アクセストークン を使用して
HF_TOKEN
を設定してエクスポートします。 - 5
- SELinux が有効になっているシステムに必要です。Debian または Ubuntu オペレーティングシステムの場合、または SELinux なしで Docker を使用する場合は、
:Z
接尾辞は使用できません。 - 6
- AI Inference Server コンテナーを複数の GPU で実行する場合は、GPU の数に合わせて
--tensor-parallel-size
を設定します。
ターミナルの別のタブで、API を使用してモデルにリクエストを送信します。
curl -X POST -H "Content-Type: application/json" -d '{ "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jq
curl -X POST -H "Content-Type: application/json" -d '{ "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow