vLLM と Arena を使用して、Container Service for Kubernetes (ACK) の単一の A10 または T4 GPU ノードに Qwen1.5-4B-Chat を推論サービスとしてデプロイします。
前提条件
以下が用意されていることを確認してください:
-
Kubernetes 1.22 以降を実行する GPU 高速化ノードを備え、各ノードに 16 GB 以上の GPU メモリがある ACK Pro クラスターが必要です。 詳細については、「ACK マネージドクラスターの作成」をご参照ください。
-
最新の Arena クライアントが必要です。 詳細については、「Arena クライアントの設定」をご参照ください。
GPU ドライバーバージョン 525 を使用します。 GPU 高速化ノードに ack.aliyun.com/nvidia-driver-version:525.105.17 label を追加します。 詳細については、「label を追加してノードの NVIDIA ドライバーバージョンを指定する」をご参照ください。
背景情報
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat は、Alibaba Cloud が開発した 40 億パラメータの Transformer ベースの LLM で、Web テキスト、ドメイン固有の書籍、コードでトレーニングされています。 詳細については、「Qwen GitHub リポジトリ」をご参照ください。
vLLM
vLLM は、高スループットと低レイテンシーに最適化されたオープンソースの LLM 推論フレームワークです。 Qwen を含む、広く使用されているほとんどの LLM をサポートし、PagedAttention、連続バッチング、量子化を使用して効率を向上させます。 詳細については、「vLLM GitHub リポジトリ」をご参照ください。
ステップ 1:モデルデータの準備
Qwen1.5-4B-Chat をダウンロードし、Object Storage Service (OSS) にアップロードして、ACK クラスターに PersistentVolume (PV) と PersistentVolumeClaim (PVC) を作成します。
OSS の代わりに File Storage NAS にモデルを保存することもできます。 詳細については、「静的にプロビジョニングされた NAS ボリュームのマウント」をご参照ください。
モデルのダウンロード
-
Git をインストールします:
# yum install git または apt install git を実行します。 yum install git -
Git Large File Storage (Git LFS) をインストールします:
# yum install git-lfs または apt install git-lfs を実行します。 yum install git-lfs -
ModelScope から Qwen1.5-4B-Chat をクローンします:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Qwen1.5-4B-Chat ディレクトリに移動し、Git LFS ファイルをプルします:
cd Qwen1.5-4B-Chat git lfs pull
OSS へのモデルのアップロード
-
ossutil をインストールして設定します。 詳細については、「ossutil のインストール」をご参照ください。
-
OSS バケットに
Qwen1.5-4B-Chatディレクトリを作成します:ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat -
モデルファイルを OSS にアップロードします:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
PV と PVC の作成
ACK クラスターに PV と PVC を作成して、OSS からモデルをマウントします。 詳細については、「静的にプロビジョニングされた OSS ボリュームのマウント」をご参照ください。
PV パラメーター:
| パラメーター | 説明 |
|---|---|
| [PV タイプ] | OSS |
| [ボリューム名] | llm-model |
| [Access Certificate] | OSS バケットの AccessKey ID と AccessKey secret |
| [Bucket ID] | OSS バケットの名前 |
| [OSS パス] | モデルへのパス (例:/models/Qwen1.5-4B-Chat) |
PVC パラメーター:
| パラメーター | 説明 |
|---|---|
| [PVC タイプ] | OSS |
| [ボリューム名] | llm-model |
| [割り当てモード] | [既存のボリューム] を選択します |
| [既存のボリューム] | [既存のボリューム] をクリックし、PV を選択します |
ステップ 2:推論サービスのデプロイ
Arena はモデルファイルをデータセットとして扱います。 --data を使用して、モデルをコンテナにマウントします。 この例では、マウントパスは /model/Qwen1.5-4B-Chat です。
--max-model-len パラメーターは、モデルが処理できる最大トークン長を設定します。 値を大きくするとインタラクションの品質が向上しますが、より多くの GPU メモリを消費します。 利用可能なすべてのパラメーターについては、「GitHub の vLLM コードリポジトリ」をご参照ください。
GPU タイプの選択
| GPU | ユースケース | max-model-len | 追加パラメーター |
|---|---|---|---|
| NVIDIA A10 | 本番環境 (高性能) | 16384 | なし |
| NVIDIA T4 | テスト (低コスト) | 8192 | --dtype half |
サービスのデプロイ
GPU タイプに基づいてコマンドを選択します。
NVIDIA A10 (本番環境に推奨)
arena serve custom \
--name=vllm-qwen-4b-chat \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 16384"
NVIDIA T4 (テスト用)
arena serve custom \
--name=vllm-qwen-4b-chat \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half"
T4 は、T4 のメモリ制約に合わせるために、--max-model-len 8192 (A10 の 16384 と比較) を使用し、--dtype half を追加します。
Arena パラメーター:
| パラメーター | 説明 |
|---|---|
--name |
推論サービス名 |
--version |
推論サービスのバージョン |
--gpus |
レプリカあたりの GPU 数 |
--replicas |
レプリカ数 |
--restful-port |
推論サービスのポート |
--readiness-probe-action |
Readiness Probe のタイプ。 有効な値: HttpGet、Exec、gRPC、TCPSocket |
--readiness-probe-action-option |
Readiness Probe アクションのオプション |
--readiness-probe-option |
Readiness Probe のオプション |
--data |
共有 PVC をマウントします。 形式: PVCName:MountPath。 arena data list を使用して、利用可能な PVC を照会できます |
--image |
推論サービス用のコンテナイメージ |
期待される出力:
service/vllm-qwen-4b-chat-v1 created
deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created
INFO[0008] The Job vllm-qwen-4b-chat has been submitted successfully
INFO[0008] You can run `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` to check the job status
デプロイの検証
推論サービスの状態を確認します:
arena serve get vllm-qwen-4b-chat
期待される出力:
Name: vllm-qwen-4b-chat
Namespace: default
Type: Custom
Version: v1
Desired: 1
Available: 1
Age: 36m
Address: 172.16.XX.XX
Port: RESTFUL:8000
GPU: 1
Instances:
NAME STATUS AGE READY RESTARTS GPU NODE
---- ------ --- ----- -------- --- ----
vllm-qwen-4b-chat-v1-custom-serving-6d7c786b9f-z6nfk Running 36m 1/1 0 1 cn-beijing.192.168.XX.XX
Available が Desired と一致し、インスタンスのステータスが Running になると、サービスは準備完了です。
ステップ 3:推論サービスのテスト
ポートフォワーディングの設定
kubectl port-forward を使用したポートフォワーディングは、開発およびデバッグ専用です。 本番環境では、Ingress を使用してください。
ポート 8000 をローカルマシンに転送します:
kubectl port-forward svc/vllm-qwen-4b-chat-v1 8000:8000
期待される出力:
Forwarding from 127.0.0.1:8000 -> 8000
Forwarding from [::1]:8000 -> 8000
テストリクエストの送信
新しいターミナルを開き、推論リクエストを送信します:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "Test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
期待される出力:
{"id":"cmpl-503270b21fa44db2b6b3c3e0abaa3c02","object":"chat.completion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":30,"completion_tokens":9}}
vLLM は、/v1/chat/completions エンドポイントで OpenAI 互換の API を公開します。
(オプション) リソースのクリーンアップ
不要なコストを避けるために、未使用のリソースを削除します。
推論サービスを削除します:
arena serve delete vllm-qwen-4b-chat
PVC と PV を削除します:
kubectl delete pvc llm-model
kubectl delete pv llm-model
次のステップ
-
本番環境で推論サービスを公開するために Ingress を設定します。
-
他の Qwen モデルをデプロイするには、モデルサイズと GPU メモリに基づいて
--max-model-lenと--gpu-memory-utilizationを調整します。 -
設定オプションについては、「vLLM GitHub リポジトリ」をご参照ください。