本文以Qwen1.5-4B-Chat模型、GPU類型為T4和A10卡為例,演示如何在ACK中使用Triton和vLLM(Versatile Large Language Model)推理框架部署通義千問(Qwen)模型推理服務。
背景信息
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat是阿里云基于Transformer大語言模型研發的40億參數模型,模型在超大規模的預訓練數據(預訓練數據類型多樣且覆蓋廣泛,包括大量網絡文本、專業書籍、代碼等)上進行訓練得到。更多模型信息,請參見Qwen GitHub代碼庫。
Triton(Triton Inference Server)
Triton(Triton Inference Server)是NVIDIA開源的一個推理服務框架,可以幫助您快速搭建AI推理應用。Triton支持多種不同的機器學習框架作為它的運行時后端,包括TensorRT、TensorFlow、PyTorch、ONNX、vLLM等。Triton面向實時推理、批量推理以及音視頻流式推理場景進行了許多優化,在推理時能獲得更好的性能。Triton的核心功能包括:
支持多種機器學習和深度學習運行時框架
支持并發模型執行
動態Batching
支持暴露GPU利用率、請求延時、請求吞吐量等核心推理服務指標
更多關于Triton推理服務框架的信息,請參考Triton Inference Server GitHub代碼庫。
vLLM
vLLM是一個高效易用的大語言模型推理服務框架,vLLM支持包括通義千問在內的多種常見大語言模型。vLLM通過PagedAttention優化、動態批量推理(Continuous Batching)、模型量化等優化技術,可以取得較好的大語言模型推理效率。更多關于vLLM框架的信息,請參見vLLM GitHub代碼庫。
前提條件
已創建包含GPU節點的ACK集群Pro版,且集群版本為1.22及以上,GPU節點顯存需為16GB及以上。具體操作,請參見創建ACK托管集群。
建議GPU節點使用525版本驅動,您可以通過為GPU節點池添加標簽
ack.aliyun.com/nvidia-driver-version:525.105.17
指定驅動版本為525.105.17。具體操作,請參見通過指定版本號自定義節點GPU驅動版本。已安裝最新版Arena客戶端。具體操作,請參見配置Arena客戶端。
步驟一:準備模型數據
本文以Qwen1.5-4B-Chat模型為例,演示如何下載模型、上傳模型至OSS,以及在ACK集群中創建對應的存儲卷PV和存儲卷聲明PVC。
如需使用其他模型,請參見vLLM支持的模型列表;如需上傳模型至NAS,請參見使用NAS靜態存儲卷。
下載模型文件。
執行以下命令,安裝Git。
# 可執行yum install git或apt install git安裝。 yum install git
執行以下命令,安裝Git LFS(Large File Support)插件。
# 可執行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目錄,下載LFS管理的大文件。
cd Qwen1.5-4B-Chat git lfs pull
將下載的Qwen1.5-4B-Chat文件上傳至OSS。
為目標集群配置存儲卷PV和存儲聲明PVC。具體操作,請參見使用OSS靜態存儲卷。
以下為示例PV的配置信息:
配置項
說明
存儲卷類型
OSS
名稱
llm-model
訪問證書
配置用于訪問OSS的AccessKey ID和AccessKey Secret。
Bucket ID
選擇已創建的OSS Bucket。
OSS Path
選擇模型所在的路徑,如/models/Qwen1.5-4B-Chat。
以下為示例PVC的配置信息:
配置項
說明
存儲聲明類型
OSS
名稱
llm-model
分配模式
選擇已有存儲卷。
已有存儲卷
單擊選擇已有存儲卷鏈接,選擇已創建的存儲卷PV。
步驟二:配置Triton推理服務框架
以下是創建Triton推理服務框架所需的vLLM配置文件config.pbtxt
和Triton配置文件model.json
。
執行以下命令,創建工作目錄。
mkdir triton-vllm
執行以下命令,創建vLLM配置文件
config.pbtxt
。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
執行以下命令,創建Triton配置文件
model.json
。大模型對顯存資源需求較高,因此在生產環境中,推薦您采用性能卓越的A10機型以確保最佳運行效果。若是出于測試目的,可以使用具備較高普及度和成本效益的T4機型,但T4的性能表現可能與A10存在較大差距。
單卡A10環境
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
參數可配置模型最大可處理的Token長度,增大該參數可獲得更好的模型對話效果,但是可能會占用更多GPU顯存資源。使用vLLM + Triton推理服務框架的完整配置,請參見GitHub官方示例文檔。單卡T4環境
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", "dtype": "half", "max_model_len": 8192 } EOF
在以上配置文件中,使用
max_model_len
參數可以設置模型最大可處理的Token長度,增大該參數可以獲得更好的模型對話效果,但是可能會占用更多GPU顯存資源。通過dtype
參數可以設置模型加載時使用的浮點數精度,由于T4 GPU暫不支持bfloat16(bf16)精度,因此在上述配置中將dtype
設置為半精度浮點數(half
)。使用vLLM + Triton推理服務框架的完整配置,請參考GitHub官方示例文檔。
步驟三:部署推理服務
以下使用Arena部署Qwen1.5-4B-Chat模型的推理服務。該推理服務使用Triton作為推理服務框架,使用vLLM作為模型推理框架。
執行以下命令,將環境變量
triton_config_file
和model_config_file
分別指向步驟二中創建的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
指定推理服務版本。
--image
指定推理服務的鏡像地址。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--cpu
指定單個推理服務副本需要使用的CPU數量。
--memory
指定單個推理服務副本需要使用的內存。
--data
掛載共享存儲卷PVC到運行環境中。它由兩部分組成,通過英文冒號(:)分割。冒號左側是您已經準備好的PVC名稱。您可以通過命令arena data list查看當前集群可用的PVC列表;冒號右側是您想將PVC的掛載到運行環境中的路徑,也是您訓練代碼要讀取數據的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC的數據。
--config-file
掛載本地的配置文件到運行環境中。它由兩部分組成,通過英文冒號(:)分割。冒號左側是您已經準備好的本地文件;冒號右側是本地文件掛載到運行環境中的路徑。
--model-repository
Triton的模型倉庫目錄,模型倉庫目錄下可以包含多個子目錄,每個子目錄代表一個待加載到Triton推理服務框架中的一個模型,每個子目錄下應當包含對應模型的配置文件。更多詳細信息,請參見Triton官方文檔。
--http-port
Triton推理服務暴露的HTTP端口。
--grpc-port
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
輸出結果表明該推理服務的一個Pod(triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6)正在穩定運行,且已準備好提供服務。
步驟四:驗證推理服務
執行以下命令,建立推理服務與本地環境之間的端口轉發。
重要請注意kubectl port-forward建立的端口轉發不具備生產級別的可靠性、安全性和擴展性,因此僅適用于開發和調試目的,不適合在生產環境使用。更多關于Kubernetes集群內生產可用的網絡方案的信息,請參見Ingress概述。
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": "什么是人工智能?人工智能是", "parameters": {"stream": false, "temperature": 0}}'
請將上述命令中URL路徑的
qwen-4b
替換為實際推理服務配置的模型名。預期輸出:
{"model_name":"qwen-4b","model_version":"1","text_output":"什么是人工智能?人工智能是計算機科學的一個分支,它研究如何使計算機具有智能行為。人工智能的目標"}
輸出結果表明模型可以根據提問自動生成關于人工智能的定義。
(可選)步驟五:清理環境
如果不再使用已創建的資源,請及時清理。
執行以下命令,清理已部署的模型推理服務。
arena serve del triton-vllm
執行以下命令,清理已創建的PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model