第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.ioCopy 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.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
sudo setsebool -P container_use_devices 1
$ sudo setsebool -P container_use_devices 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。
mkdir -p rhaiis-cache
$ mkdir -p rhaiis-cacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod g+rwX rhaiis-cache
$ chmod g+rwX rhaiis-cacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow HF_TOKENHugging Face トークンを作成するか、private.envファイルに追加します。source コマンドでprivate.envファイルを読み込みます。echo "export HF_TOKEN=<your_HF_token>" > private.env
$ echo "export HF_TOKEN=<your_HF_token>" > private.envCopy to Clipboard Copied! Toggle word wrap Toggle overflow source private.env
$ source private.envCopy 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.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start nvidia-fabricmanager
$ systemctl start nvidia-fabricmanagerCopy 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-smiCopy 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 | jqcurl -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 | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow