本文以Qwen1.5-4B-Chat模型、GPU類型為T4和A10卡為例,示範如何在ACK中使用vLLM(Versatile Large Language Model)架構部署通義千問(Qwen)模型推理服務。
背景資訊
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat是阿里雲基於Transformer大語言模型研發的40億參數模型,模型在超大規模的預訓練資料(預訓練資料類型多樣且覆蓋廣泛,包括大量網路文本、專業書籍、代碼等)上進行訓練得到。更多模型資訊,請參見Qwen 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。
如需上傳模型至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。
步驟二:部署推理服務
大模型對顯存資源需求較高,因此在生產環境中,推薦您採用效能卓越的A10機型以確保最佳運行效果。若是出於測試目的,您可以選擇具備較高普及度和成本效益的T4機型,但T4的效能表現可能與A10存在較大差距。
執行以下命令,基於vLLM模型推理架構部署Qwen1.5-4B-Chat模型的推理服務。
您可以將模型參數檔案看作是一種特殊類型的資料集合,利用Arena提供的
--data
參數,將模型掛載到推理服務容器的指定位置。本文以掛載到/model/Qwen1.5-4B-Chat
為例。--max_model_len
設定了該模型最大可處理的Token長度,增大該配置項可獲得更好的模型對話效果,但是可能會佔用更多GPU顯存資源。vLLM架構支援的完整參數列表,請參見vLLM Github程式碼程式庫。單卡A10環境
arena serve custom \ --name=vllm-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/vllm:0.4.1-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 16384"
單卡T4環境
arena serve custom \ --name=vllm-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/vllm:0.4.1-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half"
參數說明如下所示:
參數
說明
--name
指定推理服務名稱。
--version
指定推理服務版本。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--replicas
指定推理服務副本數。
--restful-port
指定推理服務對外暴露的連接埠。
--readiness-probe-action
指定就緒探針連線類型,支援HttpGet、Exec、gRPC、TCPSocket。
--readiness-probe-action-option
指定就緒探針串連方式。
--readiness-probe-option
指定就緒探針配置。
--data
掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過英文冒號(:)分割。冒號左側是您已經準備好的PVC名稱。您可以通過命令
arena data list
查看當前叢集可用的PVC列表;冒號右側是您想將PVC的掛載到運行環境中的路徑,也是您訓練代碼要讀取資料或模型的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC中的資料或模型。--image
指定推理服務的鏡像地址。
預期輸出:
service/vllm-qwen-4b-chat-v1 created deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created INFO[0008] The Job vllm-qwen-4b-chat has been submitted successfully INFO[0008] You can run `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` to check the job status
輸出結果表明已經成功部署了一個與vLLM相關的服務及其配套的Deployment和Job。
執行以下命令,查看推理服務的詳細資料。
arena serve get vllm-qwen-4b-chat
預期輸出:
Name: vllm-qwen-4b-chat Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 36m Address: 172.16.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- vllm-qwen-4b-chat-v1-custom-serving-6d7c786b9f-z6nfk Running 36m 1/1 0 1 cn-beijing.192.168.XX.XX
輸出結果表明該推理服務正在穩定運行,且已準備好提供服務。
步驟三:驗證推理服務
執行以下命令,在推理服務與本地環境之間建立連接埠轉寄。
重要請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述。
kubectl port-forward svc/vllm-qwen-4b-chat-v1 8000:8000
預期輸出:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000
執行以下命令,向Triton模型推理服務發送了一條樣本的模型推理請求。
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "測試一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
預期輸出:
{"id":"cmpl-503270b21fa44db2b6b3c3e0abaa3c02","object":"chat.completion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","choices":[{"index":0,"message":{"role":"assistant","content":"好的,請問您需要測試什嗎?"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":30,"completion_tokens":9}}
輸出結果表明模型可以根據給定的輸入(在這個例子中是一條測試訊息)產生相應的回複。
(可選)步驟四:清理環境
如果不再使用已建立的資源,請及時清理。
執行以下命令,刪除清理已部署的模型推理服務。
arena serve delete vllm-qwen-4b-chat
執行以下命令,刪除已建立的PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model