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

Container Service for Kubernetes:Triton を使用した ACK における Qwen 推論サービスのデプロイ

最終更新日:Mar 01, 2026

大規模言語モデル (LLM) は、スケールに応じた推論処理を実行するために GPU 加速インフラストラクチャと最適化されたサービングスタックを必要とします。本ドキュメントでは、T4 または A10 GPU 上で vLLM バックエンドを備えた NVIDIA Triton Inference Server を使用し、Container Service for Kubernetes (ACK) 上で Qwen1.5-4B-Chat モデルを推論サービスとしてデプロイする方法について説明します。

背景情報

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat は、Alibaba Cloud が Transformer アーキテクチャに基づいて開発した 40 億パラメーターの LLM です。このモデルは、Web テキスト、特定分野の書籍、コードなど、大規模なデータセットで学習されています。詳細については、「Qwen GitHub リポジトリ」をご参照ください。

Triton Inference Server

Triton Inference Server は、NVIDIA が開発したオープンソースの推論サービングフレームワークです。TensorRT、TensorFlow、PyTorch、ONNX、vLLM など、複数の機械学習フレームワークバックエンドをサポートしています。

主な特徴:

  • 複数の機械学習および深層学習フレームワークをサポート

  • 同時実行モデル実行

  • 連続バッチ処理(Continuous batching)

  • 組み込み推論メトリック:GPU 利用率、リクエスト遅延、スループット

詳細については、「Triton Inference Server GitHub リポジトリ」をご参照ください。

vLLM

vLLM は、Qwen モデルを含むほとんどの主要な LLM をサポートする高性能 LLM 推論フレームワークです。vLLM は、PagedAttention 最適化、連続バッチ処理、モデル量子化を活用することで、LLM 推論のスループットを大幅に向上させます。詳細については、「vLLM GitHub リポジトリ」をご参照ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • GPU 加速ノードを備えた ACK Pro マネージドクラスター(Kubernetes 1.22 以降、ノードあたり GPU メモリ 16 GB 以上)。詳細については、「マネージドクラスターの作成」をご参照ください。

  • GPU ノードに GPU ドライバー バージョン 525 がインストールされていること。ドライバー バージョンを固定するため、GPU 加速ノードに ack.aliyun.com/nvidia-driver-version:525.105.17 のラベルを追加します。詳細については、「ラベルを追加してノードの NVIDIA ドライバー バージョンを指定する」をご参照ください。

  • 最新版 Arena クライアントがインストール済みであること。詳細については、「Arena クライアントの設定」をご参照ください。

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

Qwen1.5-4B-Chat モデルをダウンロードし、Object Storage Service (OSS) にアップロードした後、ACK クラスター内に永続ボリューム (PV) および永続ボリューム要求 (PVC) を作成します。

その他の vLLM 対応モデルをデプロイする場合は、「対応モデル」をご参照ください。OSS の代わりに File Storage NAS を使用する場合は、「静的プロビジョニング NAS ボリュームのマウント」をご参照ください。

モデルのダウンロード

  1. Git をインストールします。

       # yum install git または apt install git を使用
       yum install git
  2. Git Large File Storage (LFS) プラグインをインストールします。

       # yum install git-lfs または apt install git-lfs を使用
       yum install git-lfs
  3. ModelScope から Qwen1.5-4B-Chat リポジトリをクローンします。

       GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
  4. ディレクトリに移動し、大規模ファイルをプルします。

       cd Qwen1.5-4B-Chat
       git lfs pull

モデルの OSS へのアップロード

  1. OSS コンソール にログインし、ご利用の OSS バケット名を確認します。バケットを作成する場合は、「バケットの作成」をご参照ください。

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

  3. OSS 内にディレクトリを作成し、モデルをアップロードします。

       ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
       ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat

PV および PVC の作成

OSS モデルデータをクラスターにマウントするため、PV および PVC を作成します。詳細については、「静的プロビジョニング OSS ボリュームのマウント」をご参照ください。

PV のパラメーター

パラメーター
PV の種類OSS
ボリューム名llm-model
アクセス証明書OSS バケットへのアクセスに使用する AccessKey ID および AccessKey Secret
バケット IDご利用の OSS バケット名
OSS パスモデルパス(例:/models/Qwen1.5-4B-Chat)

PVC のパラメーター

パラメーター
PVC の種類OSS
ボリューム名llm-model
割り当てモード既存のボリューム
既存のボリューム作成した PV を選択

ステップ 2:vLLM を使用した Triton の構成

Triton バックエンド用の config.pbtxt および vLLM エンジンパラメーター用の model.json の 2 つの構成ファイルを作成します。

バックエンド構成の作成

作業ディレクトリおよび config.pbtxt ファイルを作成します。

mkdir triton-vllm

cat << EOF > triton-vllm/config.pbtxt
backend: "vllm"

# デバイスの使用は vLLM エンジンに委任されます
instance_group [
  {
    count: 1
    kind: KIND_MODEL
  }
]

version_policy: { all { }}
EOF

モデル構成の作成

model.json ファイルは、vLLM エンジンにパラメーターを渡します。ご利用の GPU の種類に合った構成を選択してください。

重要

vLLM は起動時に GPU メモリを積極的に確保します。gpu_memory_utilization パラメーターでこの動作を制御できます。この値を 0.95 に設定すると、モデルに GPU メモリの 95 % を確保します。他のワークロードが同じ GPU を共有する場合は、メモリ不足エラーを回避するためにこの値を低く設定してください。

A10 GPU(本番環境向け)

A10 GPU は高いスループットを提供し、bfloat16 精度をサポートします。本番ワークロードには A10 をご使用ください。

cat << EOF > triton-vllm/model.json
{
    "model":"/model/Qwen1.5-4B-Chat",
    "disable_log_requests": "true",
    "gpu_memory_utilization": 0.95,
    "trust_remote_code": "true",
    "dtype": "half",
    "max_model_len": 8192
}
EOF

T4 GPU(テスト向け)

T4 GPU は広く利用可能でコスト効率が高く、bfloat16(bf16)精度をサポートしません。dtypehalf(FP16)に設定し、max_model_len を低く設定して、16 GB のメモリ制限内に収める必要があります。

cat << EOF > triton-vllm/model.json
{
    "model":"/model/Qwen1.5-4B-Chat",
    "disable_log_requests": "true",
    "gpu_memory_utilization": 0.95,
    "trust_remote_code": "true",
    "dtype": "half",
    "max_model_len": 8192
}
EOF

主なパラメーター

パラメーター説明
max_model_lenモデルが処理可能な最大トークンシーケンス長。値が高いほど会話品質が向上しますが、GPU メモリ消費量も増加します。
dtypeモデル読み込み時の浮動小数点精度。T4 のような bf16 非対応 GPU では half(FP16)を指定します。
gpu_memory_utilizationモデルに割り当てる GPU メモリの割合。デフォルト値は 0.9 です。

設定可能なパラメーターの一覧については、vLLM の「Engine Arguments」ドキュメントをご参照ください。その他の構成例については、「Triton で vLLM モデルをデプロイする」をご参照ください。

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

Arena を使用して、Triton および vLLM を用いた Qwen1.5-4B-Chat 推論サービスをデプロイします。

  1. 構成ファイルのパスを環境変数としてエクスポートします。

       export triton_config_file="triton-vllm/config.pbtxt"
       export model_config_file="triton-vllm/model.json"
  2. 推論サービスをデプロイします。予想される出力:

    パラメーター

    パラメーター説明
    --name推論サービスの名前。
    --version推論サービスのバージョン。
    --imageTriton サーバー用コンテナーイメージ。
    --gpusレプリカあたりの GPU 数。
    --cpuレプリカあたりの CPU コア数。
    --memoryレプリカあたりのメモリ割り当て量。
    --dataPVC のマウント(<pvc-name>:<mount-path> 形式)。利用可能な PVC を一覧表示するには、arena data list を実行します。
    --config-fileローカルファイルのマウント(<local-path>:<container-path> 形式)。
    --model-repositoryTriton モデルリポジトリディレクトリ。各サブディレクトリはモデルを表し、その構成ファイルを含む必要があります。詳細については、「Triton モデルリポジトリ」をご参照ください。
    --http-portTriton サービスの HTTP ポート。
    --grpc-portTriton サービスの gRPC ポート。
    --allow-metrics推論メトリック(GPU 利用率、遅延、スループット)を公開します。
       arena serve triton \
           --name=triton-vllm \
           --version=v1 \
           --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \
           --gpus=1 \
           --cpu=6 \
           --memory=30Gi \
           --data="llm-model:/model/Qwen1.5-4B-Chat" \
           --model-repository /triton-config \
           --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \
           --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \
           --http-port=8000 \
           --grpc-port=9000 \
           --allow-metrics=true
       configmap/triton-vllm-v1-4bd5884e6b5b6a3 created
       configmap/triton-vllm-v1-7815124a8204002 created
       service/triton-vllm-v1-tritoninferenceserver created
       deployment.apps/triton-vllm-v1-tritoninferenceserver created
       INFO[0007] The Job triton-vllm has been submitted successfully
       INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job status
  3. サービスが実行中であることを確認します。Available1 になるまで待ちます。予想される出力:

       arena serve get triton-vllm
       Name:       triton-vllm
       Namespace:  default
       Type:       Triton
       Version:    v1
       Desired:    1
       Available:  1
       Age:        3m
       Address:    172.16.XX.XX
       Port:       RESTFUL:8000,GRPC:9000
       GPU:        1
    
       Instances:
         NAME                                                  STATUS   AGE  READY  RESTARTS  GPU  NODE
         ----                                                  ------   ---  -----  --------  ---  ----
         triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6  Running  3m   1/1    0         1    cn-beijing.172.16.XX.XX

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

ポート フォワーディング(開発のみ)

重要

kubectl port-forward を使用したポート フォワーディングは、開発およびデバッグ専用です。本番環境でのネットワーキングには信頼性、セキュリティ、スケーラビリティが不足しており、推奨されません。本番環境向けのネットワーキングについては、「Ingress の概要」をご参照ください。

  1. ポート フォワーディングを設定します。予想される出力:

       kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000
       Forwarding from 127.0.0.1:8000 -> 8000
       Forwarding from [::1]:8000 -> 8000
  2. Triton generate エンドポイントにテストリクエストを送信します。qwen-4b は実際のモデル名に置き換えてください。予想される出力:

       curl -X POST localhost:8000/v2/models/qwen-4b/generate \
         -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'
       {"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}

(任意)クリーンアップ

推論サービスおよびストレージリソースが不要になった場合、以下のコマンドで削除します。

# 推論サービスの削除
arena serve del triton-vllm

# PVC および PV の削除
kubectl delete pvc llm-model
kubectl delete pv llm-model