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

Container Service for Kubernetes:vLLM モデルの推論サービスとしてのデプロイ

最終更新日:Aug 28, 2026

vLLM は、複数のモデル形式とバックエンドアクセラレーターをサポートする大規模言語モデル用の推論ライブラリで、大規模言語モデルのサービングに適しています。このチュートリアルでは、V100 GPU 上で Qwen-7B-Chat-Int8 モデルを使用して、HTTP 経由でクエリできる推論サービスを構築します。

vLLM の詳細については、vllm-project をご参照ください。

前提条件

ステップ1:モデルデータの準備と永続ボリュームの設定

モデルデータは、OSS または NAS に準備できます。詳細については、「ossfs 1.0 静的ボリュームの使用」および「静的 NAS ボリュームの使用」をご参照ください。このチュートリアルでは OSS を使用します。

ローカルマシンへのモデルのダウンロード

このチュートリアルでは、Qwen-7B-Chat-Int8 モデルを使用します。

  1. 次のコマンドを実行して Git をインストールします:

    sudo yum install git
  2. 次のコマンドを実行して Git LFS (Large File Storage) プラグインをインストールします:

    sudo yum install git-lfs
  3. 次のコマンドを実行して、ModelScope から Qwen-7B-Chat-Int8 リポジトリをローカルマシンにクローンします:

    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git
  4. 次のコマンドを実行して、Qwen-7B-Chat-Int8 リポジトリのディレクトリに移動します:

    cd Qwen-7B-Chat-Int8
  5. Qwen-7B-Chat-Int8 ディレクトリで次のコマンドを実行して、LFS によって管理されている大きなファイルをダウンロードします:

    git lfs pull
OSS へのモデルファイルのアップロード
  1. OSS コンソールにログインし、作成したバケットの名前を記録します。バケットの作成方法の詳細については、「バケットの作成」をご参照ください。

  2. ossutil をインストールして設定します。詳細については、「ossutil のインストール」をご参照ください。

  3. 次のコマンドを実行して、OSS に Qwen-7B-Chat-Int8 という名前のディレクトリを作成します:

    ossutil mkdir oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
  4. 次のコマンドを実行して、モデルファイルを OSS にアップロードします:

    ossutil cp -r . oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
PV と PVC の設定

対象のクラスター用に、llm-model という名前の永続ボリューム (PV) と永続ボリューム要求 (PVC) を設定します。詳細については、「ossfs 1.0 静的ボリュームの使用」をご参照ください。

  • PV の基本設定:

    設定項目

    説明

    [ストレージタイプ]

    OSS

    [ボリューム名:]

    llm-model

    [アクセス証明書]

    OSS へのアクセスに使用する AccessKey ID と AccessKey Secret を設定します。

    [バケット ID:]

    「OSS へのモデルファイルのアップロード」で作成した OSS バケットを選択します。

    OSS パス

    モデルが格納されているパス (例:/Qwen-7B-Chat-Int8) を選択します。

  • PVC の基本設定:

    設定項目

    説明

    [ボリュームタイプ]

    OSS

    [名前]

    llm-model

    [割り当てモード]

    既存ボリューム を選択します。

    [既存ボリューム]

    ボリュームの選択 をクリックし、作成した PV を選択します。

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

このステップでは、利用可能な GPU リソースを確認し、vLLM 推論サービスを開始します。

  1. 次のコマンドを実行して、クラスターで利用可能な GPU リソースを確認します:

    arena top node
  2. 次のコマンドを実行して、vllm 推論サービスを開始します:

    arena serve kserve \
        --name=qwen \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \
        --gpus=1 \
        --cpu=4 \
        --memory=12 Gi \
        --data="llm-model:/mnt/models/Qwen-7B-Chat-Int8" \
        "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"

    パラメーター

    必須

    説明

    --name

    はい

    送信する推論サービスの名前。名前はグローバルに一意である必要があります。

    --image

    はい

    推論サービスのイメージアドレス。

    --gpus

    いいえ

    推論サービスが使用する GPU の数。デフォルト値:0。

    --cpu

    いいえ

    推論サービスが使用する CPU の数。

    --memory

    いいえ

    推論サービスが使用するメモリ量。

    --data

    いいえ

    サービスのモデルアドレス。このチュートリアルでは、モデルは llm-model に格納され、コンテナの /mnt/models/ ディレクトリにマウントされます。

    期待される出力:

    inferenceservice.serving.kserve.io/qwen created
    INFO[0006] The Job qwen has been submitted successfully 
    INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job status

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

このステップでは、デプロイステータスを確認し、推論サービスにテストリクエストを送信します。

  1. 次のコマンドを実行して、KServe 推論サービスのデプロイステータスを確認します:

    arena serve get qwen

    期待される出力:

    クリックして推論サービスのデプロイステータスを表示

    Name:       qwen
    Namespace:  default
    Type:       KServe
    Version:    1
    Desired:    1
    Available:  1
    Age:        2m
    Address:    http://qwen-default.example.com
    Port:       :80
    GPU:        1
    
    
    Instances:
      NAME                             STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                             ------   ---  -----  --------  ---  ----
      qwen-predictor-5485d6d8d5-kvj7g  Running  2m   1/1    0         1    cn-beijing.XX.XX.XX.XX

    出力は、KServe 推論サービスが http://qwen-default.example.com にデプロイされたことを示しています。

  2. 次のコマンドを実行して、Nginx Ingress ゲートウェイ経由で推論サービスにアクセスします:

    # Nginx Ingress の IP アドレスを取得します。
    NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}')
    # 推論サービスのホスト名を取得します。
    SERVICE_HOSTNAME=$(kubectl get inferenceservice qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3)
    # リクエストを送信して推論サービスにアクセスします。
    curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "Run a test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

    期待される出力:

    クリックして期待される出力を表示

    {"id":"cmpl-b7579597aa284f118718b22b83b726f8","object":"chat.completion","created":1715589652,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"好的,请问您有什么需要测试的?<|im_end|>"},"logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":10,"total_tokens":20,"completion_tokens":10}}

    出力は、リクエストがサービスに送信され、期待される JSON レスポンスが返されたことを示しています。

(オプション) ステップ4:推論サービスの削除

重要

サービスを削除する前に、サービスとその関連リソースが不要になったことを確認してください。

次のコマンドを実行して、推論サービスを削除します:

arena serve delete qwen

関連ドキュメント