スタートガイド


Red Hat AI Inference Server 3.2

Red Hat AI Inference Server のスタートガイド

Red Hat AI Documentation Team

概要

モデルサービングと推論に 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 によるコスト削減とパフォーマンス向上を確認するには、次の手順を実行します。

  1. AI Inference Server を使用したサービングおよび推論
  2. 主要なメトリクスを使用した Red Hat AI Inference Server の利点の検証

第2章 製品とバージョンの互換性

次の表は、Red Hat AI Inference Server 3.2 でサポートされている製品バージョンを示しています。

Expand
表2.1 製品とバージョンの互換性
製品サポート対象バージョン

Red Hat AI Inference Server

3.2

vLLM core

v0.10.0

LLM Compressor (テクノロジープレビュー)

LLM Compressor は、Red Hat AI Inference Server 3.2.1 コンテナーイメージに同梱されていません。AI Inference Server で LLM Compressor を使用するには、以前の 3.2.0 コンテナーイメージをプルします。

第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 サーバーにアクセスできる。

注記

アクセラレーターでサポートされている vLLM 量子化スキームの詳細は、Supported hardware を参照してください。

手順

  1. サーバーホストでターミナルを開き、registry.redhat.io にログインします。

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、関連する NVIDIA CUDA イメージを取得します。

    $ podman pull registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.1
    Copy to Clipboard Toggle word wrap
  3. システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。

    $ sudo setsebool -P container_use_devices 1
    Copy to Clipboard Toggle word wrap
  4. ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。

    $ mkdir -p rhaiis-cache
    Copy to Clipboard Toggle word wrap
    $ chmod g+rwX rhaiis-cache
    Copy to Clipboard Toggle word wrap
  5. HF_TOKEN Hugging Face トークンを作成するか、private.env ファイルに追加します。source コマンドで private.env ファイルを読み込みます。

    $ echo "export HF_TOKEN=<your_HF_token>" > private.env
    Copy to Clipboard Toggle word wrap
    $ source private.env
    Copy to Clipboard Toggle word wrap
  6. AI Inference Server コンテナーイメージを起動します。

    1. 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/
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

      $ systemctl start nvidia-fabricmanager
      Copy to Clipboard Toggle word wrap
      重要

      NVIDIA Fabric Manager は、NVswitch を使用する複数の GPU を搭載したシステムにのみ必要です。詳細は、NVIDIA Server Architectures を参照してください。

      1. 次のコマンドを実行して、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
        Copy to Clipboard Toggle word wrap

        出力例

        +-----------------------------------------------------------------------------------------+
        | 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                                                             |
        +-----------------------------------------------------------------------------------------+
        Copy to Clipboard Toggle word wrap

      2. コンテナーを起動します。

        $ 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.2.1 \
        --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \
        --tensor-parallel-size 2 
        6
        Copy to Clipboard Toggle word wrap
        1
        SELinux が有効になっているシステムに必要です。--security-opt=label=disable は、SELinux がボリュームマウント内のファイルを再ラベル付けするのを防ぎます。この引数を使用しない場合、コンテナーが正常に実行されない可能性があります。
        2
        共有メモリーに問題が発生する場合は、--shm-size8GB に増やしてください。
        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 を設定します。
  7. ターミナルの別のタブで、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
    Copy to Clipboard Toggle word wrap

    出力例

    {
        "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
        }
    }
    Copy to Clipboard Toggle word wrap

第4章 AMD ROCm AI アクセラレーターを使用した Podman によるサービングと推論

AMD ROCm AI アクセラレーター上で実行される Podman と Red Hat AI Inference Server を使用して、大規模言語モデルのサービングおよび推論を行います。

前提条件

注記

アクセラレーターでサポートされている vLLM 量子化スキームの詳細は、Supported hardware を参照してください。

手順

  1. サーバーホストでターミナルを開き、registry.redhat.io にログインします。

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、AMD ROCm イメージをプルします。

    $ podman pull registry.redhat.io/rhaiis/vllm-rocm-rhel9:3.2.1
    Copy to Clipboard Toggle word wrap
  3. システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。

    $ sudo setsebool -P container_use_devices 1
    Copy to Clipboard Toggle word wrap
  4. ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。

    $ mkdir -p rhaiis-cache
    Copy to Clipboard Toggle word wrap
    $ chmod g+rwX rhaiis-cache
    Copy to Clipboard Toggle word wrap
  5. HF_TOKEN Hugging Face トークンを作成するか、private.env ファイルに追加します。source コマンドで private.env ファイルを読み込みます。

    $ echo "export HF_TOKEN=<your_HF_token>" > private.env
    Copy to Clipboard Toggle word wrap
    $ source private.env
    Copy to Clipboard Toggle word wrap
  6. AI Inference Server コンテナーイメージを起動します。

    1. AMD ROCm アクセラレーターの場合:

      1. 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.1 \
        amd-smi static -a
        Copy to Clipboard Toggle word wrap
        1
        GPU を使用するには、AMD システムのビデオグループとレンダリンググループの両方に属している必要があります。GPU にアクセスするには、--group-add=keep-groups で補助グループオプションをコンテナーに渡す必要があります。
      2. コンテナーを起動します。

        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.2.1 \
        --model RedHatAI/Llama-3.2-1B-Instruct-FP8 \
        --tensor-parallel-size 2 
        3
        Copy to Clipboard Toggle word wrap
        1
        --security-opt=label=disable は、SELinux がボリュームマウント内のファイルを再ラベル付けするのを防ぎます。この引数を使用しない場合、コンテナーが正常に実行されない可能性があります。
        2
        共有メモリーに問題が発生する場合は、--shm-size8GB に増やしてください。
        3
        AI Inference Server コンテナーを複数の GPU で実行する場合は、GPU の数に合わせて --tensor-parallel-size を設定します。
  7. ターミナルの別のタブで、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
    Copy to Clipboard Toggle word wrap

    出力例

    {
        "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
        }
    }
    Copy to Clipboard Toggle word wrap

第5章 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 を参照してください。

手順

  1. TPU サーバーホストでターミナルを開き、registry.redhat.io にログインします。

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、Red Hat AI Inference Server イメージをプルします。

    $ podman pull registry.redhat.io/rhaiis/vllm-tpu-rhel9:3.2.1
    Copy to Clipboard Toggle word wrap
  3. オプション: ホストで TPU が使用可能であることを確認します。

    1. 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.1
      Copy to Clipboard Toggle word wrap
    2. コンテナーシェルプロンプトで次の 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')
      "
      Copy to Clipboard Toggle word wrap

      出力例

      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.
      Copy to Clipboard Toggle word wrap

    3. シェルプロンプトを終了します。

      $ exit
      Copy to Clipboard Toggle word wrap
  4. ボリュームを作成してコンテナーにマウントします。コンテナーが使用できるようにコンテナーの権限を調整します。

    $ mkdir ./.cache/rhaiis
    Copy to Clipboard Toggle word wrap
    $ chmod g+rwX ./.cache/rhaiis
    Copy to Clipboard Toggle word wrap
  5. HF_TOKEN Hugging Face トークンを private.env ファイルに追加します。

    $ echo "export HF_TOKEN=<huggingface_token>" > private.env
    Copy to Clipboard Toggle word wrap
  6. HF_HOME 変数を private.env ファイルに追加します。

    $ echo "export HF_HOME=./.cache/rhaiis" >> private.env
    Copy to Clipboard Toggle word wrap

    source コマンドで private.env ファイルを読み込みます。

    $ source private.env
    Copy to Clipboard Toggle word wrap
  7. AI 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.1 \
      --model Qwen/Qwen2.5-1.5B-Instruct \
      --tensor-parallel-size 1 \ 
    1
    
      --max-model-len=256 \
      --host=0.0.0.0 \
      --port=8000
    Copy to Clipboard Toggle word wrap
    1
    TPU の数に合わせて --tensor-parallel-size を設定します。

検証

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
Copy to Clipboard Toggle word wrap

出力例

{
  "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
}
Copy to Clipboard Toggle word wrap

第6章 主要なメトリクスを使用した 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 以降

手順

  1. ホストシステムで、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.1 \
    --model RedHatAI/Llama-3.2-1B-Instruct-FP8
    Copy to Clipboard Toggle word wrap
  2. 別のターミナルタブで、ベンチマークツールの依存関係をインストールします。

    $ pip install vllm pandas datasets
    Copy to Clipboard Toggle word wrap
  3. vLLM Git repository のクローンを作成します。

    $ git clone https://github.com/vllm-project/vllm.git
    Copy to Clipboard Toggle word wrap
  4. ./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
    Copy to Clipboard Toggle word wrap

検証

結果は、主要なサーバーメトリクスをもとにした 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
==================================================
Copy to Clipboard Toggle word wrap

このベンチマークのパラメーターを変更して、再度実行してみてください。バックエンドとしての vllm が他のオプションとどのように比較されるかに注目してください。スループットは一貫して高くなり、レイテンシーは低くなるはずです。

  • --backend の他のオプションは、tgilmdeploydeepspeed-miiopenaiopenai-chat です。
  • --dataset-name の他のオプションは sharegptburstgptsonnetrandomhf です。

関連情報

第7章 トラブルシューティング

Red Hat AI Inference Server 3.2.1 の次のトラブルシューティング情報では、モデルの読み込み、メモリー、モデルの応答品質、ネットワーク、および GPU ドライバーに関連する一般的な問題を説明します。一般的な問題に対する回避策 (ある場合) が説明されています。

vLLM で最も一般的な問題は、インストール、モデルの読み込み、メモリー管理、および GPU 通信などに関連するものです。ほとんどの問題は、正しく設定された環境を使用し、互換性のあるハードウェアとソフトウェアのバージョンを確保し、推奨の設定方法に従うことで解決できます。

重要

問題が解決しない場合は、VLLM_LOGGING_LEVEL=DEBUG をエクスポートしてデバッグログを有効にし、ログを確認してください。

$ export VLLM_LOGGING_LEVEL=DEBUG
Copy to Clipboard Toggle word wrap

7.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" \
    --env=VLLM_NO_USAGE_STATS=1 \
    -v ./rhaiis-cache:/opt/app-root/src/.cache \
    registry.redhat.io/rhaiis/vllm-cuda-rhel9:3.2.1 \
    --model RedHatAI/Llama-3.2-1B-Instruct-FP8
    Copy to Clipboard Toggle word wrap

    出力例

    ValueError: Unrecognized model in RedHatAI/Llama-3.2-1B-Instruct-FP8. Should have a model_type key in its config.json
    Copy to Clipboard Toggle word wrap

    このエラーを解決するには、コンテナーが root ユーザーで実行されるように、Podman パラメーターとして --userns=keep-id:uid=1001 を渡します。

  • Red Hat AI Inference Server がモデルをダウンロードするときに、ダウンロードが失敗したり、停止したりすることがあります。モデルのダウンロードがハングしないようにするには、まず huggingface-cli を使用してモデルをダウンロードします。以下に例を示します。

    $ huggingface-cli download <MODEL_ID> --local-dir <DOWNLOAD_PATH>
    Copy to Clipboard Toggle word wrap

    モデルをサービングするときは、モデルが再度ダウンロードされないように、ローカルモデルパスを 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.
    Copy to Clipboard Toggle word wrap

    このエラーは、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
    Copy to Clipboard Toggle word wrap
    #...
      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:
    #...
    Copy to Clipboard Toggle word wrap
    注記

    DeepSeekV2VL などの一部のアーキテクチャーでは、--hf_overrides フラグを使用してアーキテクチャーを明示的に指定する必要があります。次に例を示します。

    --hf_overrides '{\"architectures\": [\"DeepseekVLV2ForCausalLM\"]}
    Copy to Clipboard Toggle word wrap
  • 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())
    Copy to Clipboard Toggle word wrap
    注記

    特定のアクセラレーターがサポートされていることを確認するには、スタートガイド を参照してください。現在 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.
    Copy to Clipboard Toggle word wrap

    この問題は、vllm の起動時に --shm-size=2g 引数を渡すことで回避できます。

7.2. メモリーの最適化

  • モデルが大きすぎて単一の GPU で実行できない場合は、メモリー不足 (OOM) エラーが発生します。量子化、テンソル並列化、精度の低下などのメモリー最適化オプションを使用して、メモリー消費を削減します。詳細は、Conserving memory を参照してください。

7.3. 生成されたモデルの応答品質

  • シナリオによっては、更新後に生成されたモデル応答の品質が低下する可能性があります。

    新しいバージョンでは、デフォルトのサンプリングパラメーターソースが更新されました。vLLM バージョン 0.8.4 以降の場合、デフォルトのサンプリングパラメーターは、モデル作成者によって提供される generation_config.json ファイルから取得されます。ほとんどの場合、モデル作成者はどのサンプリングパラメーターがモデルに最適かを把握している可能性が高いため、このパラメーターにより応答の品質が向上するはずです。ただし、場合によっては、モデル作成者が提供するデフォルトが原因でパフォーマンスが低下する可能性があります。

    この問題が発生した場合は、--generation-config vllm サーバー引数を使用して、古いデフォルトでモデルをサービングしてみてください。

    重要

    --generation-config vllm サーバー引数を適用することでモデル出力が改善される場合は、引き続き vLLM のデフォルトを使用し、Hugging Face のモデル作成者にデフォルトの generation_config.json を更新して、より品質の高い世代を生成するように依頼してください。

7.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
    Copy to Clipboard Toggle word wrap

    正常に設定されたシステムでは、サービスはアクティブになり、エラーなく実行されるはずです。

  • テンソル並列処理を有効にして vLLM を実行し、NVIDIA マルチインスタンス GPU (MIG) ハードウェアで --tensor-parallel-size を 1 より大きく設定すると、初期モデルの読み込みフェーズまたはシェイプチェックフェーズで AssertionError が発生します。これは通常、vLLM を起動したときに最初に発生するエラーです。

7.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
    Copy to Clipboard Toggle word wrap

    この問題を修正するには、以下のように VLLM_HOST_IP 環境変数で正しい IP アドレスを設定します。

    $ export VLLM_HOST_IP=<correct_ip_address>
    Copy to Clipboard Toggle word wrap

    NCCL および Gloo の IP アドレスに関連付けられたネットワークインターフェイスを指定します。

    $ export NCCL_SOCKET_IFNAME=<your_network_interface>
    Copy to Clipboard Toggle word wrap
    $ export GLOO_SOCKET_IFNAME=<your_network_interface>
    Copy to Clipboard Toggle word wrap

7.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'. See
        https://docs.vllm.ai/en/latest/getting_started/troubleshooting.html#python-multiprocessing
        for more information.
    Copy to Clipboard Toggle word wrap

    以下は 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
    Copy to Clipboard Toggle word wrap

    ランタイムエラーを解決するには、Python コードを更新し、if__name__ = "__main__": ブロックの背後で vllm の使用を保護します。以下に例を示します。

    if __name__ = "__main__":
        import vllm
    
        llm = vllm.LLM(...)
    Copy to Clipboard Toggle word wrap

7.7. GPU ドライバーまたはデバイスパススルーの問題

  • Red Hat AI Inference Server コンテナーイメージを実行すると、デバイスパススルーエラーが GPU ドライバーによって発生しているのか、NVIDIA Container Toolkit などのツールによって発生しているのか不明な場合があります。

    • ホストマシンにインストールされている NVIDIA Container Toolkit がホスト GPU を認識できることを確認します。

      $ nvidia-ctk cdi list
      Copy to Clipboard Toggle word wrap

      出力例

      #...
      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=all
      Copy to Clipboard Toggle word wrap

    • NVIDIA アクセラレーター設定がホストマシンに作成されていることを確認します。

      $ sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
      Copy to Clipboard Toggle word wrap
    • 次のコマンドを実行して、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
      Copy to Clipboard Toggle word wrap

      出力例

      +-----------------------------------------------------------------------------------------+
      | 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                                                             |
      +-----------------------------------------------------------------------------------------+
      Copy to Clipboard Toggle word wrap

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat