このトピックでは、Qwen1.5-4B-ChatモデルとA10 GPUを使用して、LMDeployフレームワークを使用してContainer service for Kubernetes (ACK) にQwenモデル推論サービスをデプロイする方法を示します。
背景情報
Qwen1.5-4B-チャット
Qwen1.5-4B-Chatは、Transformerに基づいてAlibaba Cloudによって開発された40億パラメータモデルの大規模言語モデル (LLM) です。 このモデルは、さまざまなwebベースのテキスト、専門分野の本、およびコードをカバーする超大量のトレーニングデータに基づいてトレーニングされます。 詳細については、「Qwen GitHubリポジトリ」をご参照ください。
LMDeploy
LMDeployは、次のようにLLMを圧縮、デプロイ、および提供するためのツールキットです。
モデル圧縮と最適化: LMDeployは、LLMに対して重み量子化とキー値 (KV) キャッシュ量子化を実行して、モデルサイズとメモリ使用量を削減できます。 また、テンソル並列処理やKVキャッシュなどの最適化手法を使用して、モデル推論の効率とスループットを向上させることもできます。
デプロイの利便性: LMDeployは、シングルマシン、マルチマシン、マルチGPU環境など、さまざまな環境への最適化モデルのデプロイをサポートします。 また、分散配置をサポートし、サービスの拡張性と高可用性を確保します。
サービス管理: LMDeployは、キャッシュテクノロジーを通じて、繰り返しコンピューティングを削減し、応答速度を向上させることができます。
LMDeployフレームの詳細については、「LMDeploy GitHubリポジトリ」をご参照ください。
前提条件
GPU高速化ノードを含むACK Proクラスターが作成されます。 クラスターのKubernetesバージョンが1.22以降です。 各GPU高速化ノードは、16 GB以上のGPUメモリを提供します。 詳細については、「ACK管理クラスターの作成」をご参照ください。
バージョンが525のGPUドライバをインストールすることを推奨します。
ack.aliyun.com/nvidia-driver-version:525.105.17
ラベルをGPUアクセラレーションノードに追加して、GPUドライバーのバージョンを525.105.17に指定できます。 詳細については、「ラベルの追加によるノードのNVIDIAドライバーバージョンの指定」をご参照ください。Arenaクライアントの最新バージョンがインストールされています。 詳細については、「Arenaクライアントの設定」をご参照ください。
ステップ1: モデルデータの準備
このトピックでは、Qwen1.5-4B-Chatモデルを使用して、モデルをダウンロードし、モデルをObject Storage Service (OSS) にアップロードし、対応する永続ボリューム (PV) と永続ボリューム要求 (PVC) をACKクラスターに作成する方法を示します。
モデルをNASにアップロードする方法の詳細については、「NAS静的永続ボリュームの使用」をご参照ください。
モデルファイルをダウンロードします。
次のコマンドを実行してGitをインストールします。
# Run yum install git or apt install git. yum install git
次のコマンドを実行して、Git Large File Support (LFS) プラグインをインストールします。
# Run yum install git-lfs or 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バケットの名前を表示および記録します。
OSSバケットの作成方法の詳細については、「バケットの作成」をご参照ください。
ossutilをインストールして設定し、OSSリソースを管理します。 詳細については、「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を設定します。 詳細については、「静的にプロビジョニングされたOSSボリュームのマウント」をご参照ください。
次の表に、PVのパラメータを示します。
項目
説明
PVタイプ
OSS
ボリューム名
llm-モデル
アクセス証明書
OSSバケットへのアクセスに使用するAccessKey IDとAccessKey secretを指定します。
バケットID
作成したOSSバケットの名前を指定します。
OSSパス
/models/Qwen1.5-4B-Chatなど、モデルのパスを選択します。
次の表に、PVCのパラメータを示します。
項目
説明
PVCタイプ
OSS
ボリューム名
llm-モデル
割り当てモード
[既存のボリューム] を選択します。
既存のボリューム
[既存のボリューム] ハイパーリンクをクリックし、作成したPVを選択します。
手順2: 推論サービスのデプロイ
次のコマンドを実行して、LMDeployツールに基づいて
Qwen1.5-4B-Chat
という名前のカスタム推論サービスをデプロイします。arena serve custom \ --name=lmdeploy-qwen \ --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=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/lmdeploy:v0.4.2 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "lmdeploy serve api_server /model/Qwen1.5-4B-Chat --server-port 8000"
次の表に、パラメーターを示します。
パラメーター
説明
-- name
推論サービスの名前。
-- version
推論サービスのバージョン。
-- gpus
各推論サービスレプリカのGPUの数。
-- レプリカ
推論サービスレプリカの数。
-- 安らかポート
公開する推論サービスのポート。
-- 準備-プローブ-アクション
準備プローブの接続タイプ。 有効な値: HttpGet、Exec、gRPC、およびTCPSocket。
-- readiness-probe-action-option
準備プローブの接続方法。
-- readiness-probe-option
準備完了プローブの設定。
-- データ
共有PVCをランタイム環境にマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側にあるPVCの名前を指定します。
arena data list
コマンドを実行して、クラスター内の既存のPVCのリストを照会できます。 コロンの右側にあるランタイム環境を指定します。 トレーニングデータまたはモデルのローカルパスを指定することもできます。 これにより、スクリプトは指定されたPVのデータまたはモデルにアクセスできます。-- イメージ
推論サービスイメージのアドレス。
期待される出力:
service/lmdeploy-qwen-v1 created deployment.apps/lmdeploy-qwen-v1-custom-serving created INFO[0002] The Job lmdeploy-qwen has been submitted successfully INFO[0002] You can run `arena serve get lmdeploy-qwen --type custom-serving -n default` to check the job status
を確認できます。
出力は、推論サービスが正常にデプロイされたことを示します。
次のコマンドを実行してサービスの詳細情報を照会し、サービスの準備が整うまで待ちます。
arena serve get lmdeploy-qwen
期待される出力:
Name: lmdeploy-qwen Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1m Address: 192.168.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- lmdeploy-qwen-v1-custom-serving-8476b9dd8c-8b4d2 Running 1m 1/1 0 1 cn-beijing.172.16.XX.XX
出力は、ポッド (lmdeploy-qwen-v1-custom-serving-8476b9dd8c-8b4d2) が推論サービスにデプロイされ、サービスを提供する準備ができていることを示します。
手順3: 推論サービスの検証
次のコマンドを実行して、推論サービスとローカル環境間のポート転送を設定します。
重要kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingress overview」をご参照ください。
kubectl port-forward svc/lmdeploy-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": "qwen", "messages": [{"role": "user", "content": "Test it out."}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
期待される出力:
{"id":"1","object":"chat.completion","created":1719833349,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"Sure, do you have any testing requirements or issues?"},"logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":21,"total_tokens":32,"completion_tokens":11}}
出力は、モデルが所与のプロンプトに基づいて適切な応答を生成できることを示す。 この例では、プロンプトはテスト要求です。
(オプション) ステップ4: データのクリア
リソースが不要になった場合は、すぐにリソースを削除してください。
次のコマンドを実行して、推論サービスを削除します。
arena serve del lmdeploy-qwen
次のコマンドを実行して、PVとPVCを削除します。
kubectl delete pvc llm-model kubectl delete pv llm-model