スタートガイド
Red Hat AI Inference Server のスタートガイド
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat AI Inference Server は、LLM でのサービングと推論を最適化するコンテナーイメージです。AI Inference Server を使用すると、コストを削減しながらパフォーマンスを向上させる方法でモデルをサービングおよび推論できます。
第1章 AI Inference Server について リンクのコピーリンクがクリップボードにコピーされました!
AI Inference Server は、アップストリームのオープンソースソフトウェアを基盤として、エンタープライズグレードの安定性とセキュリティーを提供します。AI Inference Server は、最先端の推論機能を提供するアップストリーム vLLM プロジェクト を活用します。
たとえば、AI Inference Server は、完全なバッチが蓄積されるまで待つのではなく、継続的なバッチ処理を使用して、リクエストが到着するとすぐに処理します。テンソル並列処理により、LLM ワークロードが複数の GPU に分散されます。これらの機能により、レイテンシーが短縮され、スループットが向上します。
推論モデルのコストを削減するために、AI Inference Server はページングされたアテンションを使用します。LLM は、ユーザーとの会話を理解するためにアテンションと呼ばれるメカニズムを使用します。通常、アテンションは大量のメモリーが使用され、その多くは無駄になっています。ページングアテンションは、オペレーティングシステムの仮想メモリーの動作と同様に、LLM にメモリーをプロビジョニングすることで、このメモリーの浪費に対処します。このアプローチではメモリーの消費量が少なくなり、コストが削減されます。
AI Inference Server によるコスト削減とパフォーマンス向上を確認するには、次の手順を実行します。
- AI Inference Server を使用したサービングおよび推論
- 主要なメトリクスを使用した Red Hat AI Inference Server の利点の検証
第2章 製品とバージョンの互換性 リンクのコピーリンクがクリップボードにコピーされました!
次の表は、Red Hat AI Inference Server 3.2、Red Hat Enterprise Linux AI 3.0、および Red Hat OpenShift AI 3.0 でサポートされている製品バージョンを示しています。
| 製品バージョン | vLLM コアのバージョン | LLM Compressor のバージョン |
|---|---|---|
| 3.2.5 | v0.11.2 | v0.8.1 |
| 3.2.4 | v0.11.0 | v0.8.1 |
| 3.2.3 | v0.11.0 | v0.8.1 |
| 3.2.2 | v0.10.1.1 | v0.7.1 |
| 3.2.1 | v0.10.0 | このリリースには含まれていません |
| 3.2.0 | v0.9.2 | このリリースには含まれていません |
| 製品バージョン | vLLM コアのバージョン | LLM Compressor のバージョン |
|---|---|---|
| 3.0 | v0.11.0 | v0.8.1 |
| 製品バージョン | vLLM コアのバージョン | LLM Compressor のバージョン |
|---|---|---|
| 3.0 | v0.11.0 | v0.8.1 |
第3章 AI Inference Server の Python パッケージのレビュー リンクのコピーリンクがクリップボードにコピーされました!
Podman を使用してコンテナーを実行し、pip list package の出力を確認することで、Red Hat AI Inference Server コンテナーイメージにインストールされている Python パッケージを確認できます。
前提条件
- Podman または Docker がインストールされている。
- sudo アクセス権を持つユーザーとしてログインしている。
-
registry.redhat.ioにアクセスでき、ログインしている。
手順
インストールされているすべての Python パッケージを表示するには、
pip list packageコマンドを使用して Red Hat AI Inference Server コンテナーイメージを実行します。以下に例を示します。$ podman run --rm --entrypoint=/bin/bash \ registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ -c "pip list"特定のパッケージの詳細情報を表示するには、
pip show <package_name>で Podman コマンドを実行します。以下に例を示します。$ podman run --rm --entrypoint=/bin/bash \ registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ -c "pip show vllm"出力例
Name: vllm Version: v0.11.2
第4章 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次のコマンドを実行して、関連する NVIDIA CUDA イメージを取得します。
$ podman pull registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5システムで 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" \ -v ./rhaiis-cache:/opt/app-root/src/.cache:Z \5 registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ --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を設定します。
ターミナルの別のタブで、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 } }
第5章 AMD ROCm AI アクセラレーターを使用した Podman によるサービングと推論 リンクのコピーリンクがクリップボードにコピーされました!
AMD ROCm AI アクセラレーター上で実行される Podman と Red Hat AI Inference Server を使用して、大規模言語モデルのサービングおよび推論を行います。
前提条件
- Podman または Docker がインストールされている。
- sudo アクセス権を持つユーザーとしてログインしている。
-
registry.redhat.ioにアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face アクセストークンが生成されている。
データセンターグレードの AMD ROCm AI アクセラレーターがインストールされた Linux サーバーにアクセスできる。
AMD GPU の場合:
アクセラレーターでサポートされている vLLM 量子化スキームの詳細は、Supported hardware を参照してください。
手順
サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.io次のコマンドを実行して、AMD ROCm イメージをプルします。
$ podman pull registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.2.5システムで 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 コンテナーイメージを起動します。
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.2.5 \ 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" \ -v ./rhaiis-cache:/opt/app-root/src/.cache \ registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.2.5 \ --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 } }
第6章 Google TPU AI アクセラレーターを使用した Podman による言語モデルのサービングと推論 リンクのコピーリンクがクリップボードにコピーされました!
Google TPU AI アクセラレーターが利用可能な Google クラウド仮想マシンで、Podman または Docker と Red Hat AI Inference Server を使用して大規模言語モデルのサービングおよび推論を行います。
前提条件
Google TPU AI アクセラレーターが設定された Google Cloud TPU 仮想マシンにアクセスできる。詳細は以下を参照してください。
- Podman または Docker がインストールされている。
- sudo アクセス権を持つユーザーとしてログインしている。
-
registry.redhat.ioイメージレジストリーにアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face アクセストークンが生成されている。
アクセラレーターでサポートされている vLLM 量子化スキームの詳細は、Supported hardware を参照してください。
手順
TPU サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.io次のコマンドを実行して、Red Hat AI Inference Server イメージをプルします。
$ podman pull registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.5オプション: ホストで TPU が使用可能であることを確認します。
Red Hat AI Inference Server コンテナーでシェルプロンプトを開きます。以下のコマンドを実行します。
$ podman run -it --net=host --privileged -e PJRT_DEVICE=TPU --rm --entrypoint /bin/bash registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.5コンテナーシェルプロンプトで次の Python コードを実行して、システム TPU アクセスと基本操作を確認します。
$ python3 -c " import torch import torch_xla try: device = torch_xla.device() print(f'') print(f'XLA device available: {device}') x = torch.randn(3, 3).to(device) y = torch.randn(3, 3).to(device) z = torch.matmul(x, y) import torch_xla.core.xla_model as xm torch_xla.sync() print(f'Matrix multiplication successful') print(f'Result tensor shape: {z.shape}') print(f'Result tensor device: {z.device}') print(f'Result tensor: {z.data}') print('TPU is operational.') except Exception as e: print(f'TPU test failed: {e}') print('Try restarting the container to clear TPU locks') "出力例
XLA device available: xla:0 Matrix multiplication successful Result tensor shape: torch.Size([3, 3]) Result tensor device: xla:0 Result tensor: tensor([[-1.8161, 1.6359, -3.1301], [-1.2205, 0.8985, -1.4422], [ 0.0588, 0.7693, -1.5683]], device='xla:0') TPU is operational.シェルプロンプトを終了します。
$ exit
ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。
$ mkdir ./.cache/rhaiis$ chmod g+rwX ./.cache/rhaiisHF_TOKENHugging Face トークンをprivate.envファイルに追加します。$ echo "export HF_TOKEN=<huggingface_token>" > private.envHF_HOME変数をprivate.envファイルに追加します。$ echo "export HF_HOME=./.cache/rhaiis" >> private.envsource コマンドで
private.envファイルを読み込みます。$ source private.envAI Inference Server コンテナーイメージを起動します。
podman run --rm -it \ --name vllm-tpu \ --network=host \ --privileged \ --shm-size=4g \ --device=/dev/vfio/vfio \ --device=/dev/vfio/0 \ -e PJRT_DEVICE=TPU \ -e HF_HUB_OFFLINE=0 \ -v ./.cache/rhaiis:/opt/app-root/src/.cache \ registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.5 \ --model Qwen/Qwen2.5-1.5B-Instruct \ --tensor-parallel-size 1 \1 --max-model-len=256 \2 --host=0.0.0.0 \ --port=8000
検証
AI Inference Server サーバーが起動していることを確認します。ターミナルで別のタブを開き、API を使用してモデルリクエストを作成します。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"messages": [
{"role": "user", "content": "Briefly, what colour is the wind?"}
],
"max_tokens": 50
}' | jq
出力例
{
"id": "chatcmpl-13a9d6a04fd245409eb601688d6144c1",
"object": "chat.completion",
"created": 1755268559,
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The wind is typically associated with the color white or grey, as it can carry dust, sand, or other particles. However, it is not a color in the traditional sense.",
"refusal": null,
"annotations": null,
"audio": null,
"function_call": null,
"tool_calls": [],
"reasoning_content": null
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}
],
"service_tier": null,
"system_fingerprint": null,
"usage": {
"prompt_tokens": 38,
"total_tokens": 75,
"completion_tokens": 37,
"prompt_tokens_details": null
},
"prompt_logprobs": null,
"kv_transfer_params": null
}
第7章 IBM Spyre AI アクセラレーターを使用した IBM Power での Podman による推論 リンクのコピーリンクがクリップボードにコピーされました!
IBM Spyre AI アクセラレーターを備えた IBM Power で実行されている Podman および Red Hat AI Inference Server を使用して大規模な言語モデルを提供し、推論します。
前提条件
- RHEL 9.6 を実行している IBM Spyre for Power AI アクセラレーターがインストールされている IBM Power 11 サーバーにアクセスできる。
- sudo アクセス権を持つユーザーとしてログインしている。
- Podman をインストールしている。
-
registry.redhat.ioにアクセスでき、ログインしている。 - Service Report ツールがインストールされている。IBM Power Systems サービスおよび生産性ツール を参照してください。
-
送信済みセキュリティーグループを
作成し、Spyre ユーザーをグループに追加しました。
手順
サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.ioservicereportコマンドを実行して、IBM Spyre ハードウェアを確認します。$ servicereport -r -p spyre出力例
servicereport 2.2.5 Spyre configuration checks PASS VFIO Driver configuration PASS User memlock configuration PASS sos config PASS sos package PASS VFIO udev rules configuration PASS User group configuration PASS VFIO device permission PASS VFIO kernel module loaded PASS VFIO module dep configuration PASS Memlock limit is set for the sentient group. Spyre user must be in the sentient group. To add run below command: sudo usermod -aG sentient <user> Example: sudo usermod -aG sentient abc Re-login as <user>.次のコマンドを実行して、Red Hat AI Inference Server イメージをプルします。
$ podman pull registry.redhat.io/rhaiis/vllm-spyre:3.2.5システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
$ sudo setsebool -P container_use_devices 1lspci -vを使用して、コンテナーがホストシステムの IBM Spyre AI アクセラレーターにアクセスできることを確認します。$ podman run -it --rm --pull=newer \ --security-opt=label=disable \ --device=/dev/vfio \ --group-add keep-groups \ --entrypoint="lspci" \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5出力例
0381:50:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0382:60:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0383:70:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0384:80:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02)コンテナーにマウントするボリュームを作成し、コンテナーが使用できるようにコンテナーのパーミッションを調整します。
$ mkdir -p ~/models && chmod g+rwX ~/models-
granite-
3.3-8b-instructモデルはmodels/フォルダーにダウンロードします。詳細は、Downloading models を参照してください。 VLLM_AIU_PCIE_IDS変数の Spyre ID を収集します。$ lspci出力例
0381:50:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0382:60:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0383:70:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0384:80:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02)SPYRE_IDS変数を設定します。$ SPYRE_IDS="0381:50:00.0 0382:60:00.0 0383:70:00.0 0384:80:00.0"AI 推論サーバーコンテナーを起動します。たとえば、エンティティー抽出の推論サービス用に設定された granite-3.3-8b-instruct モデルをデプロイします。
podman run \ --device=/dev/vfio \ -v $HOME/models:/models \ -e AIU_PCIE_IDS="${SPYRE_IDS}" \ -e VLLM_SPYRE_USE_CB=1 \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 200G \ --shm-size 64G \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/granite-3.3-8b-instruct \ -tp 4 \ --max-model-len 32768 \ --max-num-seqs 32
検証
ターミナルの別のタブで、API を使用してモデルにリクエストを送信します。
curl -X POST -H "Content-Type: application/json" -d '{ "model": "/models/granite-3.3-8b-instruct" "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jq出力例
{ "id": "cmpl-b94beda1d5a4485c9cb9ed4a13072fca", "object": "text_completion", "created": 1746555421, "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 } }
7.1. IBM Power with IBM Spyre AI アクセラレーターの推奨モデルの推論設定 リンクのコピーリンクがクリップボードにコピーされました!
以下は、IBM Spyre AI アクセラレーターを備えた IBM Power システムに推奨されるモデルと AI 推論サーバー会議です。
| Model | バッチサイズ | 最大入力コンテキストサイズ | 最大出力コンテキストサイズ | コンテナーあたりのカード数 |
|---|---|---|---|---|
| granite3.3-8b-instruct | 16 | 3K | 3K | 1 |
| Model | バッチサイズ | 最大入力コンテキストサイズ | 最大出力コンテキストサイズ | コンテナーあたりのカード数 |
|---|---|---|---|---|
| 最大 256 | 512 | サイズ 768 のベクトル | 1 |
| 最大 256 | 512 | サイズ 384 のベクトル | 1 |
| Model | バッチサイズ | 最大入力コンテキストサイズ | 最大出力コンテキストサイズ | コンテナーあたりのカード数 |
|---|---|---|---|---|
| granite3.3-8b-instruct | 32 | 4K | 4K | 4 |
| 16 | 8K | 8K | 4 | |
| 8 | 16K | 16K | 4 | |
| 4 | 32K | 32K | 4 |
7.2. IBM Power 上の IBM Spyre AI アクセラレーターの推論提供設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、IBM Spyre AI アクセラレーターと IBM Power 上の一般的な Red Hat AI 推論サーバーのワークロードを示しています。
- エンティティー抽出
lspciコマンドの出力が含まれる Spyre カード ID を 1 つ選択します。以下に例を示します。$ SPYRE_IDS="0381:50:00.0"Podman エンティティー抽出の例
$ podman run -d \ --device=/dev/vfio \ --name vllm-api \ -v $HOME/models:/models:Z \ -e VLLM_AIU_PCIE_IDS="$SPYRE_IDS" \ -e VLLM_SPYRE_USE_CB=1 \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 100GB \ --shm-size 64GB \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/granite-3.3-8b-instruct \ -tp 1 \ --max-model-len 3072 \ --max-num-seqs 16- RAG の推論提供
lspciコマンドの出力で、4 Spyre カード ID を選択します。以下に例を示します。$ SPYRE_IDS="0381:50:00.0 0382:60:00.0 0383:70:00.0 0384:80:00.0"Podman RAG inference serving example
$ podman run -d \ --device=/dev/vfio \ --name vllm-api \ -v $HOME/models:/models:Z \ -e VLLM_AIU_PCIE_IDS="$SPYRE_IDS" \ -e VLLM_MODEL_PATH=/models/granite-3.3-8b-instruct \ -e VLLM_SPYRE_USE_CB=1 \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 200GB \ --shm-size 64GB \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/granite-3.3-8b-instruct \ -tp 4 \ --max-model-len 32768 \ --max-num-seqs 32- RAG 埋め込み
lspciコマンドの出力が含まれる Spyre カード ID を 1 つ選択します。以下に例を示します。$ SPYRE_IDS="0384:80:00.0"Podman RAG 埋め込み会議の例
$ podman run -d \ --device=/dev/vfio \ --name vllm-api \ -v $HOME/models:/models:Z \ -e VLLM_AIU_PCIE_IDS="$SPYRE_IDS" \ -e VLLM_MODEL_PATH=/models/granite-embedding-125m-english \ -e VLLM_SPYRE_WARMUP_PROMPT_LENS=64 \ -e VLLM_SPYRE_WARMUP_BATCH_SIZES=64 \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 200GB \ --shm-size 64GB \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/granite-embedding-125m-english \ -tp 1- Re-ranker inference serving
lspciコマンドの出力が含まれる Spyre AI アクセラレーターカード ID を 1 つ選択します。以下に例を示します。$ SPYRE_IDS="0384:80:00.0"Podman re-ranker inference serving の例
$ podman run -d \ --device=/dev/vfio \ --name vllm-api \ -v $HOME/models:/models:Z \ -e VLLM_AIU_PCIE_IDS="$SPYRE_IDS" \ -e VLLM_MODEL_PATH=/models/bge-reranker-v2-m3 \ -e VLLM_SPYRE_WARMUP_PROMPT_LENS=1024 \ -e VLLM_SPYRE_WARMUP_BATCH_SIZES=4 \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 200GB \ --shm-size 64GB \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/bge-reranker-v2-m3 \ -tp 1
第8章 IBM Spyre AI アクセラレーターを備えた IBM Z での Podman による推論 リンクのコピーリンクがクリップボードにコピーされました!
IBM Spyre AI アクセラレーターを備えた IBM Z で実行されている Podman および Red Hat AI Inference Server を使用して大規模な言語モデルを提供し、推論します。
前提条件
- RHEL 9.6 を実行している IBM Spyre for Z AI アクセラレーターがインストールされている IBM Z (s390x)サーバーにアクセスできる。
- sudo アクセス権を持つユーザーとしてログインしている。
- Podman をインストールしている。
-
registry.redhat.ioにアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face アクセストークンが生成されている。
IBM Spyre AI アクセラレーターカードは、FP16 形式のモデルの重みのみをサポートします。互換性のあるモデルの場合、Red Hat AI Inference Server 推論エンジンは起動時に自動的に重みを FP16 に変換します。追加の設定は必要ありません。
手順
サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.io次のコマンドを実行して、Red Hat AI Inference Server イメージをプルします。
$ podman pull registry.redhat.io/rhaiis/vllm-spyre:3.2.5システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
$ sudo setsebool -P container_use_devices 1lspci -vを使用して、コンテナーがホストシステムの IBM Spyre AI アクセラレーターにアクセスできることを確認します。$ podman run -it --rm --pull=newer \ --security-opt=label=disable \ --device=/dev/vfio \ --group-add keep-groups \ --entrypoint="lspci" \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5出力例
0381:50:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0382:60:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0383:70:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0384:80:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02)コンテナーにマウントするボリュームを作成し、コンテナーが使用できるようにコンテナーのパーミッションを調整します。
$ mkdir -p ~/models && chmod g+rwX ~/models-
granite-
3.3-8b-instructモデルはmodels/フォルダーにダウンロードします。詳細は、Downloading models を参照してください。 利用可能な Spyre デバイスの IOMMU グループ ID を収集します。
$ lspci出力例
0000:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0001:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0002:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev ff) 0003:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02)各行は PCI デバイスアドレスで始まります(例
: 0000:00:00.0)。PCI アドレスを使用して、必要な Spyre カードの IOMMU グループ ID を確認します。以下に例を示します。
$ readlink /sys/bus/pci/devices/<PCI_ADDRESS>/iommu_group出力例
../../../kernel/iommu_groups/0IOMMU グループ ID (0)は、
readlink出力の末尾番号です。必要な Spyre カードごとに繰り返します。
readlink出力を使用して、必要な Spyre カードのIOMMU_GROUP_ID変数を設定します。以下に例を示します。IOMMU_GROUP_ID0=0 IOMMU_GROUP_ID1=1 IOMMU_GROUP_ID2=2 IOMMU_GROUP_ID3=3AI 推論サーバーコンテナーを起動し、必要な Spyre デバイスの IOMMU グループ ID 変数を渡します。たとえば、4 つの Spyre デバイス全体でエンティティー抽出用に設定された granite-3.3-8b-instruct モデルをデプロイします。
podman run \ --device /dev/vfio/vfio \ --device /dev/vfio/${IOMMU_GROUP_ID0}:/dev/vfio/${IOMMU_GROUP_ID0} \ --device /dev/vfio/${IOMMU_GROUP_ID1}:/dev/vfio/${IOMMU_GROUP_ID1} \ --device /dev/vfio/${IOMMU_GROUP_ID2}:/dev/vfio/${IOMMU_GROUP_ID2} \ --device /dev/vfio/${IOMMU_GROUP_ID3}:/dev/vfio/${IOMMU_GROUP_ID3} \ -v $HOME/models:/models:Z \ --pids-limit 0 \ --userns=keep-id \ --group-add=keep-groups \ --memory 200G \ --shm-size 64G \ -p 8000:8000 \ registry.redhat.io/rhaiis/vllm-spyre:3.2.5 \ --model /models/granite-3.3-8b-instruct \ -tp 4 \ --max-model-len 32768 \ --max-num-seqs 32
検証
ターミナルの別のタブで、API を使用してモデルにリクエストを送信します。
curl -X POST -H "Content-Type: application/json" -d '{ "model": "/models/granite-3.3-8b-instruct", "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jq出力例
{ "id": "cmpl-7c81cd00ccd04237ac8b5119e86b32a5", "object": "text_completion", "created": 1764665204, "model": "/models/granite-3.3-8b-instruct", "choices": [ { "index": 0, "text": "\nThe answer is Paris. Paris is the capital and most populous city of France, located in the northern part of the country. It is renowned for its history, culture, fashion, and art, attracting", "logprobs": null, "finish_reason": "length", "stop_reason": null, "token_ids": null, "prompt_logprobs": null, "prompt_token_ids": null } ], "service_tier": null, "system_fingerprint": null, "usage": { "prompt_tokens": 7, "total_tokens": 57, "completion_tokens": 50, "prompt_tokens_details": null }, "kv_transfer_params": null }
第9章 主要なメトリクスを使用した Red Hat AI Inference Server の利点の検証 リンクのコピーリンクがクリップボードにコピーされました!
AI Inference Server でサービングされる LLM モデルのパフォーマンスを評価するには、次のメトリクスを使用します。
- Time to first token (TTFT): 要求が送信されてから応答の最初のトークンが受信されるまでの時間。
- Time per output token (TPOT): 最初のトークンの後に各トークンの生成にかかる平均時間。
- レイテンシー: 完全な応答の生成に必要な合計時間。
- スループット: モデルがすべてのユーザーとリクエストを合わせた全体で同時に生成できる出力トークンの合計数。
AI Inference Server およびその他の推論サーバーがこれらのメトリクスに従ってどのように動作するかを示すベンチマークテストを実行するには、以下の手順を実行します。
前提条件
- AI Inference Server コンテナーイメージ
- GitHub アカウント
- Python 3.9 以降
手順
ホストシステムで、AI Inference Server を起動し、モデルをサービングします。
$ podman run --rm -it --device nvidia.com/gpu=all \ --shm-size=4GB -p 8000:8000 \ --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \ --env "HF_HUB_OFFLINE=0" \ -v ./rhaiis-cache:/opt/app-root/src/.cache \ --security-opt=label=disable \ registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8別のターミナルタブで、ベンチマークツールの依存関係をインストールします。
$ pip install vllm pandas datasetsvLLM Git repository のクローンを作成します。
$ git clone https://github.com/vllm-project/vllm.git./vllm/benchmarks/benchmark_serving.pyスクリプトを実行します。$ python vllm/benchmarks/benchmark_serving.py --backend vllm --model RedHatAI/Llama-3.2-1B-Instruct-FP8 --num-prompts 100 --dataset-name random --random-input 1024 --random-output 512 --port 8000
検証
結果は、主要なサーバーメトリクスをもとにした AI Inference Server のパフォーマンスを示しています。
============ Serving Benchmark Result ============
Successful requests: 100
Benchmark duration (s): 4.61
Total input tokens: 102300
Total generated tokens: 40493
Request throughput (req/s): 21.67
Output token throughput (tok/s): 8775.85
Total Token throughput (tok/s): 30946.83
---------------Time to First Token----------------
Mean TTFT (ms): 193.61
Median TTFT (ms): 193.82
P99 TTFT (ms): 303.90
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 9.06
Median TPOT (ms): 8.57
P99 TPOT (ms): 13.57
---------------Inter-token Latency----------------
Mean ITL (ms): 8.54
Median ITL (ms): 8.49
P99 ITL (ms): 13.14
==================================================
このベンチマークのパラメーターを変更して、再度実行してみてください。バックエンドとしての vllm が他のオプションとどのように比較されるかに注目してください。スループットは一貫して高くなり、レイテンシーは低くなるはずです。
-
--backendの他のオプションは、tgi、lmdeploy、deepspeed-mii、openai、openai-chatです。 -
--dataset-nameの他のオプションはsharegpt、burstgpt、sonnet、random、hfです。
関連情報
- vLLM ドキュメント
- LLM Inference Performance Engineering: Best Practices、Mosaic AI Research 著。スループットやレイテンシーなどのメトリクスを解説しています。
第10章 トラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat AI Inference Server 3.2.5 のトラブルシューティング情報は、モデルの読み込み、メモリー、モデル応答の品質、ネットワーク、GPU ドライバーに関連する一般的な問題について説明しています。一般的な問題に対する回避策 (ある場合) が説明されています。
vLLM で最も一般的な問題は、インストール、モデルの読み込み、メモリー管理、および GPU 通信などに関連するものです。ほとんどの問題は、正しく設定された環境を使用し、互換性のあるハードウェアとソフトウェアのバージョンを確保し、推奨の設定方法に従うことで解決できます。
問題が解決しない場合は、VLLM_LOGGING_LEVEL=DEBUG をエクスポートしてデバッグログを有効にし、ログを確認してください。
$ export VLLM_LOGGING_LEVEL=DEBUG
10.1. モデル読み込みエラー リンクのコピーリンクがクリップボードにコピーされました!
ユーザー namespace 指定せずに Red Hat AI Inference Server コンテナーイメージを実行すると、認識されないモデルエラーが返されます。
podman run --rm -it \ --device nvidia.com/gpu=all \ --security-opt=label=disable \ --shm-size=4GB -p 8000:8000 \ --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \ --env "HF_HUB_OFFLINE=0" \ -v ./rhaiis-cache:/opt/app-root/src/.cache \ registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.5 \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8出力例
ValueError: Unrecognized model in RedHatAI/Llama-3.2-1B-Instruct-FP8. Should have a model_type key in its config.jsonこのエラーを解決するには、最初の Podman パラメーターでコンテナーが root
ユーザーで実行されるように、--userns=keep-id:uid=1001を渡します。podman run --rm -it \ --userns=keep-id:uid=1001 \ --device nvidia.com/gpu=all \ --security-opt=label=disable \ --shm-size=4GB -p 8000:8000 \ --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \ --env "HF_HUB_OFFLINE=0" \ -v ./rhaiis-cache:/opt/app-root/src/.cache \ registry.redhat.io/rhaiis/vllm-cuda-rhel9:{rhaiis-version} \ --model RedHatAI/Llama-3.2-1B-Instruct-FP8Red Hat AI Inference Server がモデルをダウンロードするときに、ダウンロードが失敗したり、停止したりすることがあります。モデルのダウンロードがハングしないようにするには、まず
huggingface-cliを使用してモデルをダウンロードします。以下に例を示します。$ huggingface-cli download <MODEL_ID> --local-dir <DOWNLOAD_PATH>モデルをサービングするときは、モデルが再度ダウンロードされないように、ローカルモデルパスを vLLM に渡します。
Red Hat AI Inference Server がディスクからモデルをロードすると、プロセスが停止することがあります。大規模なモデルはメモリーを消費し、メモリーが不足すると、RAM とディスク間でデータをスワップするため、システムの速度が低下します。ネットワークファイルシステムの速度が遅いか、使用可能なメモリーが不足すると、過剰なスワップが発生する可能性があります。これは、ファイルシステムがクラスターノード間で共有されているクラスターで発生する可能性があります。
可能な場合は、モデルをローカルディスクに保存して、モデルの読み込み時の速度が低下しないようにします。システムに十分な CPU メモリーがあることを確認してください。
システムにモデルを処理するのに十分な CPU 容量があることを確認してください。
場合によっては、Red Hat AI Inference Server がモデルの検査に失敗することがあります。エラーはログに報告されます。以下に例を示します。
#... File "vllm/model_executor/models/registry.py", line xxx, in \_raise_for_unsupported raise ValueError( ValueError: Model architectures [''] failed to be inspected. Please check the logs for more details.このエラーは、vLLM がモデルファイルのインポートに失敗した場合に発生します。これは通常、vLLM ビルド内の依存関係が欠落しているか、バイナリーが古くなっていることに関連しています。
モデルのアーキテクチャーによってはサポートされないものがあります。検証済みモデル のリストを参照してください。たとえば、次のエラーは、使用しようとしているモデルがサポートされていないことを示しています。
Traceback (most recent call last): #... File "vllm/model_executor/models/registry.py", line xxx, in inspect_model_cls for arch in architectures: TypeError: 'NoneType' object is not iterable#... File "vllm/model_executor/models/registry.py", line xxx, in \_raise_for_unsupported raise ValueError( ValueError: Model architectures [''] are not supported for now. Supported architectures: #...注記DeepSeekV2VLなどの一部のアーキテクチャーでは、--hf_overridesフラグを使用してアーキテクチャーを明示的に指定する必要があります。次に例を示します。--hf_overrides '{\"architectures\": [\"DeepseekVLV2ForCausalLM\"]}8 ビット浮動小数点 (FP8) モデルをロードすると、特定のハードウェアでランタイムエラーが発生することがあります。FP8 には GPU ハードウェアアクセラレーションが必要です。
deepseek-r1などの FP8 モデルや、F8_E4M3テンソルタイプでタグ付けされたモデルをロードすると、エラーが発生します。以下に例を示します。triton.compiler.errors.CompilationError: at 1:0: def \_per_token_group_quant_fp8( \^ ValueError("type fp8e4nv not supported in this architecture. The supported fp8 dtypes are ('fp8e4b15', 'fp8e5')") [rank0]:[W502 11:12:56.323757996 ProcessGroupNCCL.cpp:1496] Warning: WARNING: destroy_process_group() was not called before program exit, which can leak resources. For more info, please see https://pytorch.org/docs/stable/distributed.html#shutdown (function operator())注記特定のアクセラレーターがサポートされていることを確認するには、スタートガイド を参照してください。現在 FP8 モデルに対応するアクセラレーターは次のとおりです。
モデルをサービングするときに、ホストシステムに関連するランタイムエラーが発生することがあります。たとえば、以下のようなエラーがログに表示される場合があります。
INFO 05-07 19:15:17 [config.py:1901] Chunked prefill is enabled with max_num_batched_tokens=2048. OMP: Error #179: Function Can't open SHM failed: OMP: System error #0: Success Traceback (most recent call last): File "/opt/app-root/bin/vllm", line 8, in <module> sys.exit(main()) .......................... raise RuntimeError("Engine core initialization failed. " RuntimeError: Engine core initialization failed. See root cause above.この問題は、
vllmの起動時に--shm-size=2g引数を渡すことで回避できます。
10.2. メモリーの最適化 リンクのコピーリンクがクリップボードにコピーされました!
- モデルが大きすぎて単一の GPU で実行できない場合は、メモリー不足 (OOM) エラーが発生します。量子化、テンソル並列化、精度の低下などのメモリー最適化オプションを使用して、メモリー消費を削減します。詳細は、Conserving memory を参照してください。
10.3. 生成されたモデルの応答品質 リンクのコピーリンクがクリップボードにコピーされました!
シナリオによっては、更新後に生成されたモデル応答の品質が低下する可能性があります。
新しいバージョンでは、デフォルトのサンプリングパラメーターソースが更新されました。vLLM バージョン 0.8.4 以降の場合、デフォルトのサンプリングパラメーターは、モデル作成者によって提供される
generation_config.jsonファイルから取得されます。ほとんどの場合、モデル作成者はどのサンプリングパラメーターがモデルに最適かを把握している可能性が高いため、このパラメーターにより応答の品質が向上するはずです。ただし、場合によっては、モデル作成者が提供するデフォルトが原因でパフォーマンスが低下する可能性があります。この問題が発生した場合は、
--generation-config vllmサーバー引数を使用して、古いデフォルトでモデルをサービングしてみてください。重要--generation-config vllmサーバー引数を適用することでモデル出力が改善される場合は、引き続き vLLM のデフォルトを使用し、Hugging Face のモデル作成者に、より質の高い生成結果が得られるように、デフォルトのgeneration_config.jsonを更新するよう依頼してください。
10.4. CUDA アクセラレーターエラー リンクのコピーリンクがクリップボードにコピーされました!
CUDA アクセラレーターを使用してモデルを実行すると
self.graph.replay()エラーが発生する可能性があります。vLLM がクラッシュし、エラートレースが
vllm/worker/model_runner.pyモジュールのself.graph.replay()メソッドの付近でエラーが発生した場合、CUDAGraphクラス内で発生する CUDA エラーである可能性が最も高くなります。エラーの原因となる特定の CUDA 操作を特定するには、
vllmコマンドラインに--enforce-eagerサーバー引数を追加してCUDAGraphの最適化を無効にし、問題のある CUDA 操作を分離します。ハードウェアまたはドライバーの設定が誤っているために、アクセラレーターと CPU の通信に問題が発生する可能性があります。
一部の NVIDIA GPU タイプが搭載されたマルチ GPU システムでは、NVIDIA Fabric Manager が必要です。
nvidia-fabricmanagerパッケージおよび関連する systemd サービスがインストールされていないか、パッケージが実行されていない可能性があります。diagnostic Python script を実行して、NVIDIA Collective Communications Library (NCCL) と Gloo ライブラリーコンポーネントが正しく通信しているかどうかを確認します。
NVIDIA システムでは、次のコマンドを実行して Fabric Manager のステータスを確認します。
$ systemctl status nvidia-fabricmanager正常に設定されたシステムでは、サービスはアクティブになり、エラーなく実行されるはずです。
-
テンソル並列処理を有効にして vLLM を実行し、NVIDIA マルチインスタンス GPU (MIG) ハードウェアで
--tensor-parallel-sizeを 1 より大きく設定すると、初期モデルの読み込みフェーズまたはシェイプチェックフェーズでAssertionErrorが発生します。これは通常、vLLM を起動したときに最初に発生するエラーです。
10.5. ネットワークエラー リンクのコピーリンクがクリップボードにコピーされました!
複雑なネットワーク設定ではネットワークエラーが発生する可能性があります。
ネットワークの問題のトラブルシューティングを行うには、以下のように誤った IP アドレスが表示されている DEBUG ステートメントのログを検索します。
DEBUG 06-10 21:32:17 parallel_state.py:88] world_size=8 rank=0 local_rank=0 distributed_init_method=tcp://<incorrect_ip_address>:54641 backend=ncclこの問題を修正するには、以下のように
VLLM_HOST_IP環境変数で正しい IP アドレスを設定します。$ export VLLM_HOST_IP=<correct_ip_address>NCCL および Gloo の IP アドレスに関連付けられたネットワークインターフェイスを指定します。
$ export NCCL_SOCKET_IFNAME=<your_network_interface>$ export GLOO_SOCKET_IFNAME=<your_network_interface>
10.6. Python マルチプロセスエラー リンクのコピーリンクがクリップボードにコピーされました!
Python マルチプロセスの警告またはランタイムエラーが発生する可能性があります。これは、コードが Python マルチプロセス用に適切に構造化されていない場合に発生する可能性があります。以下は、コンソールの警告の例です。
WARNING 12-11 14:50:37 multiproc_worker_utils.py:281] CUDA was previously initialized. We must use the `spawn` multiprocessing start method. Setting VLLM_WORKER_MULTIPROC_METHOD to 'spawn'.以下は Python ランタイムエラーの例です。
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ = "__main__": freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable. To fix this issue, refer to the "Safe importing of main module" section in https://docs.python.org/3/library/multiprocessing.htmlランタイムエラーを解決するには、Python コードを更新し、
if__name__ = "__main__":ブロックの背後でvllmの使用を保護します。以下に例を示します。if __name__ = "__main__": import vllm llm = vllm.LLM(...)
10.7. GPU ドライバーまたはデバイスパススルーの問題 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat AI Inference Server コンテナーイメージを実行すると、デバイスパススルーエラーが GPU ドライバーによって発生しているのか、NVIDIA Container Toolkit などのツールによって発生しているのか不明な場合があります。
ホストマシンにインストールされている NVIDIA Container Toolkit がホスト GPU を認識できることを確認します。
$ nvidia-ctk cdi list出力例
#... nvidia.com/gpu=GPU-0fe9bb20-207e-90bf-71a7-677e4627d9a1 nvidia.com/gpu=GPU-10eff114-f824-a804-e7b7-e07e3f8ebc26 nvidia.com/gpu=GPU-39af96b4-f115-9b6d-5be9-68af3abd0e52 nvidia.com/gpu=GPU-3a711e90-a1c5-3d32-a2cd-0abeaa3df073 nvidia.com/gpu=GPU-6f5f6d46-3fc1-8266-5baf-582a4de11937 nvidia.com/gpu=GPU-da30e69a-7ba3-dc81-8a8b-e9b3c30aa593 nvidia.com/gpu=GPU-dc3c1c36-841b-bb2e-4481-381f614e6667 nvidia.com/gpu=GPU-e85ffe36-1642-47c2-644e-76f8a0f02ba7 nvidia.com/gpu=allNVIDIA アクセラレーター設定がホストマシンに作成されていることを確認します。
$ sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml次のコマンドを実行して、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 | +-----------------------------------------------------------------------------------------+
10.8. IBM Power に関する問題のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
AI Inference Server コンテナーからモデルデータにアクセスできない場合は、次の手順を実行します。
-
コンテナーへの
/modelsフォルダーのマッピングが正しいことを確認します。 - ホストの SELinux 設定の確認
$HOME/modelsディレクトリーに適切なパーミッションを適用していることを確認します。次に例を示します。$ chmod -R 755 $HOME/modelsPodman ボリュームマウントに
:Zオプションを使用していることを確認してください。$ podman run -d --device=/dev/vfio \ -v $HOME/models:/models:Z \ # ...-
デコードモデルに
VLLM_SPYRE_USE_CB=1を設定するようにしてください。
10.8.1. IBM Spyre for Power AI acclerator カードの問題 リンクのコピーリンクがクリップボードにコピーされました!
-
IBM Spyre AI アクセラレーターカードがホスト上で表示されていることを確認します。
lspciを使用して、カードが利用可能であることを確認します。 -
ユーザーが送信グループに属していることを
確認します。 - Service Report ツールを使用して、カードアクセスの問題を診断し、修正します。IBM Power Systems サービスおよび生産性ツール を参照してください。
10.8.2. IBM Spyre for Power のパフォーマンス問題 リンクのコピーリンクがクリップボードにコピーされました!
- すべての Spyre カードが、IBM Power サーバーの I/O ドロワーの最初の 4 つのスロットでセキュアに固定されていることを確認します。最初の 4 つのスロットは、最高速度の PCIe インターフェイスを持っています。
- LPAR に割り当てられたカードがすべて同じドロワーにあることを確認します。L/O レイテンシーが増加するため、ドロワー間でカードを分離しないでください。詳細は、IBM Power11 ドキュメント を参照して ください。
IBM Spyre AI アクセラレーターカードでエラーが発生した場合は、プロファイルするワークロードと共に
aiu-smiツールを使用できます。以下の手順を実行します。- モデルを開始します。
2 つ目のターミナルから、モデルをクエリーします。以下に例を示します。
$ curl http://127.0.0.1:8000/v1/completions -H "Content-Type: application/json" \ -d '{ "model": "/models/granite-3.3-8b-instruct", "prompt": "Write me a long story about surfing dogs in Malibu.", "max_tokens": 8128, "temperature": 1, "n": 10 }'3 つ目のターミナルから、
aiu-smiツールを実行します。$ podman exec -it <CONTAINER_ID> -c aiu-smiまたは、実行中のコンテナーに対して実行し、
aiu-smiを実行します。以下に例を示します。$ podman exec -it <CONTAINER_ID> bashコンテナー内で
aiu-smiツールを実行します。[senuser@689230aca2ba ~]$ aiu-smiaiu-smi 出力の例
#MetricFiles # 0 /tmp/metrics.0181:50:00.0 # 1 /tmp/metrics.0182:60:00.0 # 2 /tmp/metrics.0183:70:00.0 # 3 /tmp/metrics.0184:80:00.0 #ID Date Time hostcpu hostmem pwr gtemp busy rdmem wrmem rxpci txpci rdrdma wrrdma rsvmem # YYYYMMDD HH:MM:SS % % W C % GB/s GB/s GB/s GB/s GB/s GB/s MB 0 20251103 20:18:36 951.6 11.5 33.8 34.1 96 41.221 5.480 0.967 0.964 0.000 0.000 0.000 1 20251103 20:18:36 951.6 11.5 30.6 33.0 96 41.201 5.464 0.967 0.964 0.000 0.000 0.000 2 20251103 20:18:36 951.6 11.5 40.5 34.7 96 41.266 5.473 0.969 0.966 0.000 0.000 0.000 3 20251103 20:18:36 951.6 11.5 37.3 39.2 96 41.358 5.484 0.971 0.968 0.000 0.000 0.000
第11章 vLLM 環境収集スクリプトを使用したシステム情報の収集 リンクのコピーリンクがクリップボードにコピーされました!
AI Inference Server のデプロイメントのトラブルシューティングに必要なシステム情報を収集するには、Red Hat AI Inference Server コンテナーから実行する vllm collect-env コマンドを使用します。このスクリプトは、デプロイメントの問題やモデル推論サービングの問題の診断に役立つシステムの詳細、ハードウェア設定、依存関係情報を収集します。
前提条件
- Podman または Docker がインストールされている。
- sudo アクセス権を持つユーザーとしてログインしている。
- データセンターグレードの AI アクセラレーターがインストールされた Linux サーバーにアクセスできる。
- Red Hat AI Inference Server コンテナーをプルして正常にデプロイした。
手順
ターミナルを開き、
registry.redhat.ioにログインします。$ podman login registry.redhat.ioインストールされている AI アクセラレーター用の特定の Red Hat AI Inference Server コンテナーイメージをプルします。たとえば、Google Cloud TPU 用の Red Hat AI Inference Server コンテナーをプルするには、次のコマンドを実行します。
$ podman pull registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.5コンテナー内で環境収集スクリプトを実行します。
$ podman run --rm -it \ --name vllm-tpu \ --network=host \ --privileged \ --device=/dev/vfio/vfio \ --device=/dev/vfio/0 \ -e PJRT_DEVICE=TPU \ -e HF_HUB_OFFLINE=0 \ -v ./.cache/rhaiis:/opt/app-root/src/.cache:Z \ --entrypoint vllm collect-env \ registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.5
検証
vllm collect-env コマンドの出力には、次のような環境情報が詳細に表示されます。
- システムハードウェアの詳細
- オペレーティングシステムの詳細
- Python 環境と依存関係
- GPU/TPU アクセラレーターの情報
出力を確認し、設定の問題を示している可能性のある警告やエラーがないか確認します。Red Hat サポートに問題を報告するときは、システムの collect-env 出力を含めてください。
以下に、Google Cloud TPU レポートの例を示します。
==============================
System Info
==============================
OS : Red Hat Enterprise Linux 9.6 (Plow) (x86_64)
GCC version : (GCC) 11.5.0 20240719 (Red Hat 11.5.0-5)
Clang version : Could not collect
CMake version : version 4.1.0
Libc version : glibc-2.34
==============================
PyTorch Info
==============================
PyTorch version : 2.9.0.dev20250716
Is debug build : False
CUDA used to build PyTorch : None
ROCM used to build PyTorch : N/A
==============================
Python Environment
==============================
Python version : 3.12.9 (main, Jun 20 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] (64-bit runtime)
Python platform : Linux-6.8.0-1015-gcp-x86_64-with-glibc2.34
==============================
CUDA / GPU Info
==============================
Is CUDA available : False
CUDA runtime version : No CUDA
CUDA_MODULE_LOADING set to : N/A
GPU models and configuration : No CUDA
Nvidia driver version : No CUDA
cuDNN version : No CUDA
HIP runtime version : N/A
MIOpen runtime version : N/A
Is XNNPACK available : True
==============================
CPU Info
==============================
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 52 bits physical, 57 bits virtual
Byte Order: Little Endian
CPU(s): 44
On-line CPU(s) list: 0-43
Vendor ID: AuthenticAMD
Model name: AMD EPYC 9B14
CPU family: 25
Model: 17
Thread(s) per core: 2
Core(s) per socket: 22
Socket(s): 1
Stepping: 1
BogoMIPS: 5200.00
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx512_bf16 clzero xsaveerptr wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 704 KiB (22 instances)
L1i cache: 704 KiB (22 instances)
L2 cache: 22 MiB (22 instances)
L3 cache: 96 MiB (3 instances)
NUMA node(s): 1
NUMA node0 CPU(s): 0-43
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Mitigation; Safe RET
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
==============================
Versions of relevant libraries
==============================
[pip3] numpy==1.26.4
[pip3] pyzmq==27.0.1
[pip3] torch==2.9.0.dev20250716
[pip3] torch-xla==2.9.0.dev20250716
[pip3] torchvision==0.24.0.dev20250716
[pip3] transformers==4.55.2
[pip3] triton==3.3.1
[conda] Could not collect
==============================
vLLM Info
==============================
ROCM Version : Could not collect
Neuron SDK Version : N/A
vLLM Version : 0.10.0+rhai1
vLLM Build Flags:
CUDA Archs: Not Set; ROCm: Disabled; Neuron: Disabled
GPU Topology:
Could not collect
==============================
Environment Variables
==============================
VLLM_USE_V1=1
VLLM_WORKER_MULTIPROC_METHOD=spawn
VLLM_NO_USAGE_STATS=1
NCCL_CUMEM_ENABLE=0
PYTORCH_NVML_BASED_CUDA_CHECK=1
TORCHINDUCTOR_COMPILE_THREADS=1
TORCHINDUCTOR_CACHE_DIR=/tmp/torchinductor_default