vLLM と Arena を使用し、ACK の単一の A10 または T4 GPU ノードに Qwen1.5-4B-Chat を推論サービスとしてデプロイします。
前提条件
以下を確認してください。
-
Kubernetes 1.22 以降を実行し、それぞれが少なくとも 16 GB の GPU メモリを持つ GPU 高速化ノードを備えた ACK Pro クラスター。 詳細については、「ACK マネージドクラスターの作成」をご参照ください。
-
最新の Arena クライアント。 詳細については、「Arena クライアントの設定」をご参照ください。
GPU ドライバーバージョン 525 を使用します。GPU 高速化ノードにack.aliyun.com/nvidia-driver-version:525.105.17 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 |
| [アクセス証明書] | OSS バケットの AccessKey ID と AccessKey シークレット |
| [バケットID] | OSS バケットの名前 |
| [OSSパス] | モデルへのパス (例: /Qwen1.5-4B-Chat/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 は --max-model-len 8192 (A10 の場合は 16384) を使用し、T4 のメモリ制約に合わせるために --dtype half を追加します。
Arena パラメーター:
| パラメーター | 説明 |
|---|---|
--name |
推論サービス名 |
--version |
推論サービスバージョン |
--gpus |
レプリカあたりのGPU数 |
--replicas |
レプリカ数 |
--restful-port |
推論サービスのポート |
--readiness-probe-action |
readiness プローブのタイプ。 有効値: HttpGet、Exec、gRPC、および tcpSocket |
--readiness-probe-action-option |
readiness プローブの接続方法 |
--readiness-probe-option |
readiness プローブの設定 |
--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 リポジトリ」をご参照ください。