A10 または T4 GPU を使用して、ACK 上に Qwen1.5-4B-Chat 推論サービスを rtp-llm でデプロイします。
背景情報
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat は、Alibaba Cloud が開発したトランスフォーマー アーキテクチャに基づく 40 億パラメーターの大規模言語モデルです。ウェブテキスト、専門書籍、コードなど、多様かつ大規模な事前学習データでトレーニングされています。詳細については、「Qwen GitHub リポジトリ」をご参照ください。
rtp-llm
rtp-llm は、Alibaba の大規模モデル予測チームが大規模言語モデル (LLM) 向けに特化して開発した推論アクセラレーションエンジンです。このエンジンにより、推論効率とパフォーマンスが向上します。rtp-llm には以下の特徴があります。
-
高性能 CUDA カーネル(PagedAttention、FlashAttention、FlashDecoding を含む)
-
WeightOnly INT8 および INT4 量子化
-
GPTQ (General Purpose Quantization) や AWQ (Approximate Weight Quantization) などの一般的な量子化アルゴリズムへの対応
-
動的バッチ処理におけるオーバーヘッドを詳細に最適化した、適応型 KVCache 量子化フレームワーク
-
V100 GPU ハードウェア向けの最適化
詳細については、「rtp-llm」をご参照ください。
前提条件
-
GPU ノードを備えた ACK Pro マネージドクラスター が必要です。クラスターは Kubernetes 1.22 以降を実行している必要があり、各 GPU ノードには少なくとも 16 GB の GPU メモリが必要です。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
GPU ノードでは NVIDIA ドライバー バージョン 525 の使用を推奨します。ノードプールに
ack.aliyun.com/nvidia-driver-version:525.105.17ラベルを追加することで、ドライバー バージョンを 525.105.17 に固定できます。詳細については、「バージョン番号を指定してノードの GPU ドライバー バージョンをカスタマイズする」をご参照ください。 -
Arena クライアントの最新バージョンがインストールされている必要があります。詳細については、「Arena クライアントの設定」をご参照ください。
ステップ 1:モデルデータの準備
Qwen1.5-4B-Chat モデルをダウンロードし、OSS にアップロードして、ACK クラスター内に PV および PVC を作成します。
モデルを NAS にアップロードする方法については、「静的 NAS 永続ボリュームの使用」をご参照ください。
-
モデルファイルをダウンロードします。
-
次のコマンドを実行して Git をインストールします。
# このコマンドは Red Hat 系システム用です。Debian 系システムの場合は 'apt install git' を使用してください。 yum install git -
次のコマンドを実行して Git Large File Storage (LFS) プラグインをインストールします。
# このコマンドは Red Hat 系システム用です。Debian 系システムの場合は '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 ディレクトリに移動し、LFS で管理されている大容量ファイルをプルします。
cd Qwen1.5-4B-Chat git lfs pull
-
-
ダウンロードした Qwen1.5-4B-Chat ファイルを OSS にアップロードします。
-
OSS コンソール にログインし、ご利用のバケット名を確認・記録します。
バケットの作成方法については、「バケットの作成」をご参照ください。
-
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 を構成します。詳細については、「静的にプロビジョニングされた ossfs 1.0 ボリュームの使用」をご参照ください。
-
以下の表は、サンプルの PV 構成を示しています。
パラメーター
説明
ストレージタイプ
OSS
名前
llm-model
AccessKey
OSS にアクセスするために使用する AccessKey ID および AccessKey Secret です。
バケット ID:
作成した OSS バケットです。
OSS パス
モデルが保存されているパス(例:/models/Qwen1.5-4B-Chat)を選択します。
-
以下の表は、サンプルの PVC 構成を示しています。
パラメーター
説明
ボリュームタイプ
OSS
名前
llm-model
割り当てモード
既存ボリューム を選択します。
既存ボリューム
ボリュームの選択 をクリックし、作成した PV を選択します。
-
ステップ 2:推論サービスのデプロイ
-
Qwen1.5-4B-Chat モデルの推論サービスをデプロイします。
Arena を使用してカスタム推論サービスをデプロイします。サービス rtp-llm-qwen (v1) は 1 台の GPU 上で 1 つのレプリカと readiness プローブを使用して実行されます。
--dataは、llm-modelPVC をコンテナ内の/model/Qwen1.5-4B-Chatにマウントします。単一 A10 GPU
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat python3 -m maga_transformer.start_server"単一 T4 GPU
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat MAX_SEQ_LEN=2048 python3 -m maga_transformer.start_server"期待される出力:
service/rtp-llm-qwen-v1 created deployment.apps/rtp-llm-qwen-v1-custom-serving created INFO[0001] The Job rtp-llm-qwen has been submitted successfully INFO[0001] You can run `arena serve get rtp-llm-qwen --type custom-serving -n default` to check the job status推論サービスがデプロイされました。
-
推論サービスの詳細を表示し、準備完了状態になるまで待ちます。
arena serve get rtp-llm-qwen期待される出力:
Name: rtp-llm-qwen Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1h Address: 192.168.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- rtp-llm-qwen-v1-custom-serving-696f699485-mn56v Running 1h 1/1 0 1 cn-beijing.192.168.XX.XX推論サービスの Pod
rtp-llm-qwen-v1-custom-serving-696f699485-mn56vは実行中で、準備完了状態です。
ステップ 3:推論サービスの検証
-
推論サービスへのポート フォワーディングを設定します。
重要kubectl port-forwardを使用したポート フォワーディングは、信頼性、セキュリティ、スケーラビリティが不足しているため、本番環境には適していません。開発およびデバッグ目的でのみ使用してください。Kubernetes クラスターにおける本番レベルのネットワーキング ソリューションについては、「Ingress 管理」をご参照ください。kubectl port-forward svc/rtp-llm-qwen-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": "Run a quick test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'期待される出力:
{"id":"chat-","object":"chat.completion","created":1717383026,"model":"AsyncModel","choices":[{"index":0,"message":{"role":"assistant","content":"Sure. What would you like me to test for you?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}モデルはテストメッセージに対する応答を生成しました。
(オプション)ステップ 4:環境のクリーンアップ
リソースが不要になった場合は、不要な課金を回避するために速やかに削除してください。
-
モデル推論サービスを削除します。
arena serve del rtp-llm-qwen -
PV および PVC を削除します。
kubectl delete pvc llm-model kubectl delete pv llm-model
付録:コマンド パラメーター リファレンス
| パラメーター | 説明 | 例 |
|---|---|---|
serve custom |
Arena サブコマンド。 tfserving や triton などのプリセットタイプではなく、カスタムモデルサービスをデプロイします。 |
— |
--name |
サービス名。 ログの確認やサービスの削除など、後続の操作で使用する一意の識別子です。 | modelscope |
--version |
サービス バージョン。 サービスのバージョンラベルで、バージョン管理や段階的リリースに役立ちます。 | v1 |
--gpus |
GPU 数。 各 Pod に割り当てる GPU の数です。モデルが推論に GPU を必要とする場合に必須です。 | 1 |
--replicas |
レプリカ数。 実行する Pod の数です。レプリカを増やすことで同時スループットと可用性が向上します。 | 1 |
--restful-port |
RESTful API ポート。 推論リクエストを受信するためにサービスが RESTful API を公開するポートです。 | 8000 |
--readiness-probe-action |
readiness プローブ タイプ。 Kubernetes の readiness プローブがコンテナがトラフィックを受信可能な状態かどうかを判断するために使用するチェック方法です。 | tcpSocket |
--readiness-probe-action-option |
プローブ タイプ オプション。 選択したプローブ タイプのパラメーターです。tcpSocket の場合は、チェック対象のポートを指定します。 |
port: 8000 |
--readiness-probe-option |
追加のプローブ設定。 readiness プローブの追加パラメーターです。このフラグは繰り返し使用可能です。初期遅延時間とチェック間隔を設定します。 | initialDelaySeconds: 30、periodSeconds: 30 |
--data |
ボリューム マウント。 コンテナ内の指定パスに PVC をマウントします。形式は <pvc-name>:<mount-path> です。事前にロードされたモデルファイルをマウントするために使用します。 |
llm-model:/Qwen1.5-4B-Chat |
--image |
コンテナイメージ。 サービスの実行環境を定義するコンテナイメージの完全な URL です。 | kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 |
[COMMAND] |
起動コマンド。 コンテナ起動後に実行するコマンドです。MODEL_ID 環境変数を設定し、server.py を起動します。 |
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py" |