すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:GPU 共有推論サービスのデプロイ

最終更新日:Mar 26, 2026

GPU アクセラレーテッドノードは高価であり、単一の推論サービスが GPU 全体を飽和させることはほとんどありません。共有 GPU スケジューリングを使用すると、GPU のメモリを固定サイズの割り当てにスライスすることで、1 つの GPU 上で複数の推論サービスを実行できます。このガイドでは、KServe と Arena を使用して、単一の V100 GPU 上に 2 つの Qwen1.5-0.5B-Chat 推論サービスをデプロイする方法を示します。各サービスには 6 GB のメモリスライスが割り当てられます。

仕組み

ACK の共有 GPU スケジューリングコンポーネントは、GPU メモリのスライスを実装します。各推論サービスは、--gpumemory フラグを介して必要な GPU メモリの量を宣言し、スケジューラは、要求されたメモリの合計がノードの物理 GPU 容量内に収まる限り、複数の Pod を同じ GPU ノードに配置します。

サービス間の障害分離よりも GPU 使用率の最大化が重要な場合は、共有 GPU スケジューリングを使用します。厳密な隔離が必要なワークロードには、専用 GPU ノードを使用してください。

制限事項

  • ノード上のすべての Pod で要求される GPU メモリの合計は、ノードの物理 GPU メモリを超えてはなりません。

  • GPU アクセラレーテッドノードは、デフォルトで CUDA 11 を使用します。このガイドでは、CUDA 12.0 以降が必要です。

  • ack-kserve は Raw Deployment モードである必要があります。

前提条件

開始する前に、以下を準備してください。

ステップ 1: モデルデータの準備

モデルを Object Storage Service (OSS) バケットまたは Apsara File Storage NAS ファイルシステムに保存します。このガイドでは OSS を使用します。詳細については、「ossfs 1.0 静的プロビジョニングボリュームの使用」または「静的プロビジョニング NAS ボリュームのマウント」をご参照ください。

  1. Qwen1.5-0.5B-Chat モデルをダウンロードします。

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen1.5-0.5B-Chat.git
    cd Qwen1.5-0.5B-Chat
    git lfs pull
  2. モデルファイルを OSS バケットにアップロードします。

    ossutil のインストールと使用方法については、「ossutil のインストール」をご参照ください。
    ossutil mkdir oss://<your-bucket-name>/models/Qwen1.5-0.5B-Chat
    ossutil cp -r ./Qwen1.5-0.5B-Chat oss://<your-bucket-name>/models/Qwen1.5-0.5B-Chat
  3. 次の構成を使用して、クラスターの永続ボリューム (PV) を作成します。

    設定項目
    永続ボリュームタイプOSS
    名前llm-model
    証明書アクセスOSS バケットの AccessKey ID と AccessKey Secret
    バケット ID前のステップで作成した OSS バケット
    OSS パス/Qwen1.5-0.5B-Chat
  4. PV にバインドされた永続ボリューム要求 (PVC) を作成します。

    設定項目
    永続ボリューム要求タイプOSS
    名前llm-model
    割り当てモード既存の永続ボリューム
    既存の永続ボリューム既存の永続ボリュームを選択 をクリックし、前のステップで作成した PV を選択します。

ステップ 2: 推論サービスのデプロイ

それぞれ 6 GB の GPU メモリを要求する 2 つの Qwen 推論サービスをデプロイします。コマンドは --name 以外は同じです。

最初のサービスを開始するには、次のコマンドを実行します。

arena serve kserve \
    --name=qwen1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \
    --gpumemory=6 \
    --cpu=3 \
    --memory=8Gi \
    --data="llm-model:/mnt/models/Qwen1.5-0.5B-Chat" \
    "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen1.5-0.5B-Chat --dtype=half --max-model-len=4096"

2 番目のサービスを開始するには、--name=qwen2 を指定して同じコマンドを実行します。

次の表は、主要なパラメーターについて説明しています。

パラメータータイプ必須説明
--name文字列はい推論サービスの名前。グローバルに一意である必要があります。
--image文字列はい推論サービスのコンテナイメージ。
--gpumemory整数 (GB)いいえこのサービスに割り当てる GPU メモリ (GB 単位)。たとえば、--gpumemory=6 は 6 GB を割り当てます。ノード上のすべてのサービスによって要求される GPU メモリの合計は、ノードの物理 GPU メモリを超えてはなりません。
--cpu整数いいえ推論サービスの vCPU 数。
--memory文字列いいえ推論サービスの RAM 容量。例: 8Gi
--data文字列いいえ<pvc-name>:<container-path>PVC からコンテナへのマウントパス。形式は です。この例では、llm-model PVC はコンテナ内の /mnt/models/ にマウントされます。

ステップ 3: 推論サービスの検証

  1. 両方の Pod が同じ GPU ノードで実行されていることを確認します。

    kubectl get pod -owide | grep qwen

    期待される出力:

    qwen1-predictor-856568bdcf-5pfdq   1/1     Running   0          7m10s   10.130.XX.XX   cn-beijing.172.16.XX.XX   <none>           <none>
    qwen2-predictor-6b477b587d-dpdnj   1/1     Running   0          4m3s    10.130.XX.XX   cn-beijing.172.16.XX.XX   <none>           <none>

    両方の Pod が同じノード (cn-beijing.172.16.XX.XX) に表示され、GPU 共有がアクティブであることを確認できます。

  2. 各 Pod に割り当てられた GPU メモリを確認します。サービスごとに次のコマンドを実行します。

    kubectl exec -it qwen1-predictor-856568bdcf-5pfdq -- nvidia-smi   # 最初のサービス
    kubectl exec -it qwen2-predictor-6b477b587d-dpdnj -- nvidia-smi   # 2 番目のサービス

    各 Pod の期待される出力: 最初の推論サービスに割り当てられた GPU メモリ

    Fri Jun 28 06:20:43 2024
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | 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  Tesla V100-SXM2-16GB           On  | 00000000:00:07.0 Off |                    0 |
    | N/A   39C    P0              53W / 300W |   5382MiB /  6144MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    +---------------------------------------------------------------------------------------+

    2 番目の推論サービスに割り当てられた GPU メモリ

    Fri Jun 28 06:40:17 2024
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | 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  Tesla V100-SXM2-16GB           On  | 00000000:00:07.0 Off |                    0 |
    | N/A   39C    P0              53W / 300W |   5382MiB /  6144MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    +---------------------------------------------------------------------------------------+

    各 Pod の GPU メモリ制限は 6 GB (6,144 MiB) です。これにより、両方のサービスが設定どおりにノードの GPU メモリを共有していることが確認されます。

  3. NGINX Ingress ゲートウェイを介して推論サービスにテストリクエストを送信します。

    curl -H "Host: $(kubectl get inferenceservice qwen1 -o jsonpath='{.status.url}' | cut -d "/" -f 3)" \
         -H "Content-Type: application/json" \
         http://$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}'):80/v1/chat/completions \
         -d '{
                "model": "qwen",
                "messages": [{"role": "user", "content": "This is a test."}],
                "max_tokens": 10,
                "temperature": 0.7,
                "top_p": 0.9,
                "seed": 10
             }'

    期待される出力:

    {"id":"cmpl-bbca59499ab244e1aabfe2c354bf6ad5","object":"chat.completion","created":1719303373,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}

    モデルが応答を返し、推論サービスが正常に機能していることを確認できます。

(オプション) ステップ 4: クリーンアップ

不要になったリソースは削除します。

推論サービスを削除します。

arena serve delete qwen1
arena serve delete qwen2

PVC と PV を削除します。

kubectl delete pvc llm-model
kubectl delete pv llm-model