このガイドでは、Hugging Face の Text Generation Inference (TGI) フレームワークを使用して、Container Service for Kubernetes (ACK) 上に Qwen1.5-4B-Chat 推論サービスをデプロイする方法について説明します。ターゲットハードウェアとして A10 GPU を使用します。
背景情報
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat は、Alibaba Cloud が Transformer アーキテクチャに基づいて開発した 40 億パラメーターの LLM です。このモデルは、Web テキスト、特定分野の書籍、コードなど、大規模なデータセットで学習されています。詳細については、「Qwen GitHub リポジトリ」をご参照ください。
Text Generation Inference (TGI)
TGI は、Hugging Face による、LLM を推論サービスとして提供するためのオープンソースツールキットです。FlashAttention、ページ化アテンション、継続的バッチ処理、テンソル並列処理などの推論高速化技術をサポートしています。詳細については、「TGI ドキュメント」をご参照ください。
前提条件
開始する前に、以下の要件を満たしていることを確認してください。
GPU 加速ノード (A10 GPU) を持つ ACK クラスターがあり、Kubernetes 1.22 以降を実行していること。詳細については、「GPU 加速ノードを持つ ACK クラスターの作成」をご参照ください。
バージョンが 525 の GPU ドライバーをインストールすることをお勧めします。 GPU 高速化ノードにラベル
ack.aliyun.com/nvidia-driver-version:525.105.17を追加して、GPU ドライバーのバージョンを 525.105.17 に指定できます。 詳細については、「ラベルを追加してノードの NVIDIA ドライバーバージョンを指定する」をご参照ください。最新バージョンの Arena クライアントがインストールされていること。詳細については、「Arena クライアントの設定」をご参照ください。
ステップ 1: モデルデータの準備
Qwen1.5-4B-Chat モデルをダウンロードし、Object Storage Service (OSS) にアップロードし、ACK クラスターに永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成して、推論サービスが実行時にモデルをロードできるようにします。
代替手段として File Storage NAS (NAS) を使用する方法については、「静的にプロビジョニングされた NAS ボリュームのマウント」をご参照ください。
モデルの重みのダウンロード
Git のインストール:
# RHEL/CentOS yum install git # Debian/Ubuntu # apt install gitGit Large File Storage (LFS) のインストール:
# RHEL/CentOS yum install git-lfs # Debian/Ubuntu # apt install git-lfsLFS ダウンロードをスキップし、ModelScope から Qwen1.5-4B-Chat リポジトリをクローンします。
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.gitLFS で管理されている大規模なモデルの重みファイルをプルします。
cd Qwen1.5-4B-Chat git lfs pull
モデルの OSS へのアップロード
OSS コンソールにログインし、OSS バケットの名前を記録します。バケットを作成するには、「バケットの作成」をご参照ください。
ossutil をインストールして設定します。詳細については、「ossutil のインストール」をご参照ください。
OSS にモデル用のディレクトリを作成します。
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 |
[ボリューム名] |
|
[アクセス証明書] | OSS バケット用の AccessKey ID と AccessKey Secret |
[バケット ID] | OSS バケットの名前 |
[OSS パス] | モデルディレクトリへのパス、たとえば |
PVC パラメータ
パラメータ | 値 |
[PVC タイプ] | OSS |
[ボリューム名] |
|
[割り当てモード] | 既存のボリューム |
[既存のボリューム] | 作成した PV を選択します |
ステップ 2: 推論サービスのデプロイ
TGI は V100 または T4 GPU をサポートしていません。A10 またはより新しいアーキテクチャの GPU を使用してください。
次の Arena コマンドを実行して、推論サービスをデプロイします。
arena serve custom \
--name=tgi-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/text-generation-inference:2.0.2-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"text-generation-launcher --model-id /model/Qwen1.5-4B-Chat --num-shard 1 -p 8000"次の表では、パラメータについて説明します。
パラメータ | 説明 |
| 推論サービスの名前 |
| 推論サービスのバージョン |
| レプリカあたりの GPU 数 |
| レプリカ数 |
| 推論サービスが公開するポート |
| readiness プローブの接続タイプ。有効な値: |
| readiness プローブの接続方法 |
| readiness プローブの設定 |
| コンテナに PVC をマウントします。形式: |
| 推論サービスのコンテナイメージ |
次のような出力が表示されます。
service/tgi-qwen-4b-chat-v1 created
deployment.apps/tgi-qwen-4b-chat-v1-custom-serving created
INFO[0001] The Job tgi-qwen-4b-chat has been submitted successfully
INFO[0001] You can run `arena serve get tgi-qwen-4b-chat --type custom-serving -n default` to check the job statusサービスが実行されていることを確認します。
arena serve get tgi-qwen-4b-chat次のような出力が表示されます。
Name: tgi-qwen-4b-chat
Namespace: default
Type: Custom
Version: v1
Desired: 1
Available: 1
Age: 3m
Address: 172.16.XX.XX
Port: RESTFUL:8000
GPU: 1
Instances:
NAME STATUS AGE READY RESTARTS GPU NODE
---- ------ --- ----- -------- --- ----
tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq Running 3m 1/1 0 1 cn-beijing.192.168.XX.XXAvailable: 1 と STATUS: Running は、ポッドがリクエストを処理する準備ができたことを示します。
ステップ 3: 推論サービスの検証
ローカルマシンからサービスにアクセスするために、ポートフォワーディングを設定します。
重要kubectl port-forwardは、開発およびデバッグ専用です。 本番トラフィックに対しては、信頼性、安全性、スケーラビリティがありません。 ACK クラスターでの本番ネットワーキングについては、「Ingress の概要」をご参照ください。kubectl port-forward svc/tgi-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":"","object":"text_completion","created":1716274541,"model":"/model/Qwen1.5-4B-Chat","system_fingerprint":"2.0.2-sha-6073ece","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What test do you want me to run?"},"logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":21,"completion_tokens":10,"total_tokens":31}}choices配列を含む有効な JSON レスポンスにより、モデルがロードされ、テキストを生成していることが確認されます。
(オプション) ステップ 4: クリーンアップ
リソースが不要になった場合は、継続的な料金を回避するために削除してください。
推論サービスを削除します。
arena serve delete tgi-qwen-4b-chatPVC と PV を削除します。
kubectl delete pvc llm-model
kubectl delete pv llm-model