このトピックでは、Qwen1.5-4B-ChatモデルとT4およびA10 GPUを例として使用して、TritonおよびVersatile Large Language model (vLLM) 推論フレームワークを使用して、Container service for Kubernetes (ACK) の推論サービスとしてQwenモデルをデプロイする方法を示します。
背景情報
Qwen1.5-4B-チャット
Qwen1.5-4B-Chatは、Transformerに基づいてAlibaba Cloudによって開発された40億パラメータモデルの大規模言語モデル (LLM) です。 このモデルは、さまざまなwebベースのテキスト、専門分野の本、およびコードをカバーする超大量のトレーニングデータに基づいてトレーニングされます。 詳細については、「Qwen GitHubリポジトリ」をご参照ください。
Triton (Triton Inferenceサーバー)
Triton (Triton Inference Server) は、AI推論アプリケーションの迅速な開発に役立つNVIDIAが提供するオープンソースの推論サービスフレームワークです。 Tritonは、TensorRT、TensorFlow、PyTorch、ONNX、vLLMなど、バックエンドとして機能するさまざまな機械学習フレームワークをサポートしています。Tritonは、リアルタイム推論、バッチ推論、およびオーディオ /ビデオストリーミング推論に最適化され、パフォーマンスが向上します。 トリトンの主な特徴:
さまざまな機械学習と深層学習フレームワークをサポートします。
同時実行モデルをサポートします。
連続バッチ処理をサポートします。
GPU使用率、リクエスト待ち時間、リクエストスループットなど、主要な推論サービス指標をサポートします。
Triton推論サービスフレームワークの詳細については、「Triton inference Server GitHubリポジトリ」をご参照ください。
vLLM
vLLMは、高性能で使いやすいLLM推論サービスフレームワークです。 vLLMは、Qwenモデルを含む最も一般的に使用されるLLMをサポートします。 vLLMは、PagedAttention最適化、連続バッチ処理、モデル定量化などのテクノロジーを活用して、LLMの推論効率を大幅に向上させています。vLLMフレームワークの詳細については、「vLLM 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クライアントの最新バージョンがインストールされています。 詳細については、「Configure the Arena client」をご参照ください。
ステップ1: モデルデータの準備
このセクションでは、Qwen1.5-4B-Chatモデルを例として、Object Storage Service (OSS) からモデルをダウンロードしてアップロードする方法、およびACKクラスターに永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成する方法を示します。
他のモデルを展開する方法の詳細については、「サポートされているモデル」をご参照ください。 モデルをApsara File Storage NAS (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: Triton推論サービスフレームワークの設定
Triton推論サービスフレームワークの構成に必要な、config.pbtxt
という名前のvLLM構成ファイルとmodel.json
という名前のTriton構成ファイルを作成します。
次のコマンドを実行して、作業ディレクトリを作成します。
mkdir triton-vllm
次のコマンドを実行して、
config.pbtxt
という名前のvLLM設定ファイルを作成します。cat << EOF > triton-vllm/config.pbtxt backend: "vllm" # The usage of device is deferred to the vLLM engine instance_group [ { count: 1 kind: KIND_MODEL } ] version_policy: { all { }} EOF
次のコマンドを実行して、
model.json
という名前のTriton構成ファイルを作成します。LLMはGPUのメモリ量が多い。 本番環境で最適なパフォーマンスを確保するために、高性能のA10 GPUを使用することを推奨します。 テストの目的で、広く採用され、費用対効果の高いT4 GPUを使用できます。 しかし、A10は性能においてT4を大きく上回る。
単一のA10 GPUを使用する
cat << EOF > triton-vllm/model.json { "model":"/model/Qwen1.5-4B-Chat", "disable_log_requests": "true", "gpu_memory_utilization": 0.95, "trust_remote_code": "true", "max_model_len": 16384 } EOF
上記の構成ファイルで、
max_model_len
パラメーターを設定して、モデルで処理できるトークンの最大長を指定します。 値を増やしてモデルの会話エクスペリエンスを向上させることができますが、より多くのGPUメモリが消費されます。 vLLM + Triton推論サービスフレームワークの構成の詳細については、「TritonでのvLLMモデルの展開」をご参照ください。単一のT4 GPUを使用する
cat << EOF > triton-vllm/model.json { "モデル":"/model/Qwen1.5-4B-Chat" 、 "disable_log_requests": "true" 、 "gpu_memory_utilization": 0.95、 "trust_remote_code": "true" 、 "dtype": "half" 、 "max_model_len": 8192 } EOF
上記の構成ファイルで、
max_model_len
パラメーターを設定して、モデルで処理できるトークンの最大長を指定します。 値を増やしてモデルの会話エクスペリエンスを向上させることができますが、より多くのGPUメモリが消費されます。dtype
パラメーターを設定して、モデルの読み込み時に使用する浮動小数点精度を指定します。 T4 GPUはbfloat16 (bf16) 精度をサポートしていません。 したがって、dtype
パラメータは、前の構成では半分
(半精度浮動小数点) に設定される。 vLLM + Triton推論サービスフレームワークの構成の詳細については、「TritonでのvLLMモデルの展開」をご参照ください。
手順3: 推論サービスのデプロイ
次の例では、Arenaを使用してQwen1.5-4B-Chatモデルから推論サービスをデプロイします。 推論サービスは、Triton推論サービスフレームワークを使用し、vLLMモデル推論フレームワークを使用します。
次のコマンドを実行して、
triton_config_file
およびmodel_config_file
環境変数をステップ2のTritonおよびvLLM設定ファイルにエクスポートします。 これにより、各コマンドまたはスクリプトへのファイルパスをハードコーディングすることなく、異なる環境で推論サービスを構成および展開できます。export triton_config_file="triton-vllm/config.pbtxt" export model_config_file="triton-vllm/model.json"
次のコマンドを実行して、推論サービスをデプロイします。
arena serve triton \ --name=triton-vllm \ --version=v1 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \ --gpus=1 \ --cpu=6 \ --memory=30Gi \ --data="llm-model:/model/Qwen1.5-4B-Chat" \ --model-repository /triton-config \ --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \ --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \ --http-port=8000 \ --grpc-port=9000 \ --allow-metrics=true
下表に、各パラメーターを説明します。
パラメーター
説明
-- name
推論サービスの名前。
-- version
推論サービスのバージョン。
-- イメージ
推論サービスのイメージアドレス。
-- gpus
各推論サービスレプリカで使用されるGPUの数。
-- cpu
各推論サービスレプリカで使用されているCPUの数。
-メモリ
各推論サービスレプリカによって使用されるメモリの量。
-- データ
共有PVCをランタイムにマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側にあるPVCの名前を指定します。 arena data listコマンドを実行して、現在のクラスターのPVCを表示できます。 コロンの右側にPVCをマウントするパスを指定します。 指定されたパスからトレーニングデータが読み取られます。 このようにして、トレーニングジョブは、PVCによって要求されたPVに格納されたデータを取得できます。
-- configファイル
ローカル構成ファイルをランタイムにマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側に構成ファイルの名前を指定し、コロンの右側に構成がマウントされるパスを指定します。
-- model-repository
Tritonモデルリポジトリのディレクトリ。 ディレクトリには複数のサブディレクトリを含めることができます。 各サブディレクトリは、Triton推論サービスフレームワークにロードされるモデルに対応する。 したがって、各サブディレクトリに対応するモデル構成ファイルを含める必要があります。 詳細については、「Triton公式ドキュメント」をご参照ください。
-- httpポート
Triton推論サービスによって公開されるHTTPポート。
-- grpcポート
Triton推論サービスによって公開されるgRPCポート。
-- allow-metrics
Triton推論サービスのメトリックを公開するかどうかを指定します。
期待される出力:
configmap/triton-vllm-v1-4bd5884e6b5b6a3 created configmap/triton-vllm-v1-7815124a8204002 created service/triton-vllm-v1-tritoninferenceserver created deployment.apps/triton-vllm-v1-tritoninferenceserver created INFO[0007] The Job triton-vllm has been submitted successfully INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job status
を確認できます。
出力は、推論サービスがデプロイされていることを示します。
次のコマンドを実行して、推論サービスの詳細情報を表示します。 サービスの準備が整うまで待ちます。
arena serve get triton-vllm
期待される出力:
Name: triton-vllm Namespace: default Type: Triton Version: v1 Desired: 1 Available: 1 Age: 3m Address: 172.16.XX.XX Port: RESTFUL:8000,GRPC:9000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6 Running 3m 1/1 0 1 cn-beijing.172.16.XX.XX
出力は、ポッド (triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6) が推論サービスに対して実行されており、サービスを提供する準備ができていることを示します。
手順4: 推論サービスの検証
次のコマンドを実行して、推論サービスとローカル環境間のポート転送を設定します。
重要kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingress overview」をご参照ください。
kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000
期待される出力:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000
からの転送
次のコマンドを実行して、Triton推論サービスにリクエストを送信します。
curl -X POST localhost:8000/v2/models/qwen-4b/generate -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'
URLの
qwen-4b
を実際の推論モデル名に置き換えます。期待される出力:
{"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}
の目的
出力は、モデルがAIの定義を提供できることを示します。
(オプション) ステップ5: 環境をクリアする
リソースが不要になった場合は、できるだけ早くリソースを削除してください。
次のコマンドを実行して、推論サービスを削除します。
arena serve del triton-vllm
次のコマンドを実行して、PVとPVCを削除します。
kubectl delete pvc llm-model kubectl delete pv llm-model