第3章 AI Inference Server を使用したサービングおよび推論
Red Hat AI Inference Server で大規模な言語モデルをサービングし、推論します。
前提条件
- Podman または Docker がインストールされている。
NVIDIA または AMD GPU を使用する Linux サーバーにアクセスでき、root 権限のあるユーザーとしてログインしている。
NVIDIA GPU の場合:
- NVIDIA ドライバーがインストールされている
- NVIDIA Container Toolkit がインストールされている
- システムに NVswitch を使用する NVIDIA GPU が複数ある場合は、Fabric Manager を起動するための root アクセスが割り当てられている。
AMD GPU の場合:
- ROCm ソフトウェアがインストールされている
-
registry.redhat.ioにアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face トークンが生成されている。
-
注記AMD GPU は FP8 (W8A8) および GGUF 量子化スキームのみをサポートします。詳細は、サポートされているハードウェア を参照してください。
手順
以下の表を使用して、インフラストラクチャーの正しいイメージを特定します。
Expand GPU AI Inference Server イメージ NVIDIA CUDA (T4、A100、L4、L40S、H100、H200)
registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.0.0AMD ROCm (MI210、MI300X)
registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.0.0サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.ioGPU に該当するイメージをプルします。
$ podman pull registry.redhat.io/rhaiis/vllm-<gpu_type>-rhel9:3.0.0システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
$ sudo setsebool -P container_use_devices 1ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。
$ mkdir -p rhaiis-cache$ chmod g+rwX rhaiis-cacheHF_TOKENHugging Face トークンを作成するか、private.envファイルに追加します。source コマンドでprivate.envファイルを読み込みます。$ echo "export HF_TOKEN=<your_HF_token>" > private.env$ source private.envAI 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/出力例
0000:0c:09.0 0000:0c:0a.0 0000:0c:0b.0 0000:0c:0c.0 0000:0c:0d.0 0000:0c:0e.0$ systemctl start nvidia-fabricmanager重要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出力例
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.124.06 Driver Version: 570.124.06 CUDA Version: 12.8 | |-----------------------------------------+------------------------+----------------------+ | 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 A100-SXM4-80GB Off | 00000000:08:01.0 Off | 0 | | N/A 32C P0 64W / 400W | 1MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+------------------------+----------------------+ | 1 NVIDIA A100-SXM4-80GB Off | 00000000:08:02.0 Off | 0 | | N/A 29C P0 63W / 400W | 1MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+コンテナーを起動します。
$ podman run --rm -it \ --device nvidia.com/gpu=all \ --security-opt=label=disable \1 --shm-size=4g -p 8000:8000 \2 --userns=keep-id:uid=1001 \3 --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \4 --env "HF_HUB_OFFLINE=0" \ --env=VLLM_NO_USAGE_STATS=1 \ -v ./rhaiis-cache:/opt/app-root/src/.cache:Z \5 registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.0.0 \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \ --tensor-parallel-size 26 - 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を設定します。
AMD ROCm アクセラレーターの場合:
amd-smi static -aを使用して、コンテナーがホストシステムの GPU にアクセスできることを確認します。$ podman run -ti --rm --pull=newer \ --security-opt=label=disable \ --device=/dev/kfd --device=/dev/dri \ --group-add keep-groups \1 --entrypoint="" \ registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.0.0 \ amd-smi static -a- 1
- GPU を使用するには、AMD システムのビデオグループとレンダリンググループの両方に属している必要があります。GPU にアクセスするには、
--group-add=keep-groupsで補助グループオプションをコンテナーに渡す必要があります。
コンテナーを起動します。
podman run --rm -it \ --device /dev/kfd --device /dev/dri \ --security-opt=label=disable \1 --group-add keep-groups \ --shm-size=4GB -p 8000:8000 \2 --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \ --env "HF_HUB_OFFLINE=0" \ --env=VLLM_NO_USAGE_STATS=1 \ -v ./rhaiis-cache:/opt/app-root/src/.cache \ registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.0.0 \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \ --tensor-parallel-size 23
ターミナルの別のタブで、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出力例
{ "id": "cmpl-b84aeda1d5a4485c9cb9ed4a13072fca", "object": "text_completion", "created": 1746555421, "model": "RedHatAI/Llama-3.2-1B-Instruct-FP8", "choices": [ { "index": 0, "text": " Paris.\nThe capital of France is Paris.", "logprobs": null, "finish_reason": "stop", "stop_reason": null, "prompt_logprobs": null } ], "usage": { "prompt_tokens": 8, "total_tokens": 18, "completion_tokens": 10, "prompt_tokens_details": null } }