本文以Qwen1.5-4B-Chat模型、GPU類型為A10和T4卡為例,演示如何在ACK中使用rtp-llm框架部署通義千問(Qwen)模型推理服務。
背景信息
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat是阿里云基于Transformer大語言模型研發的40億參數模型,模型在超大規模的預訓練數據(預訓練數據類型多樣且覆蓋廣泛,包括大量網絡文本、專業書籍、代碼等)上進行訓練得到。更多模型信息,請參見Qwen GitHub代碼庫。
rtp-llm
rtp-llm是阿里巴巴大模型預測團隊專為大語言模型(Large Language Models, LLM)設計的推理加速引擎,旨在提升模型推理的效率和性能。rtp-llm具備如下特性:
高性能的CUDA內核,包括PagedAttention、FlashAttention、FlashDecoding等。
具備WeightOnly INT8和WeightOnly INT4的量化技術。
支持GPTQ(General Purpose Quantization)和AWQ(Approximate Weight Quantization)等流行的算法。
自適應KVCache量化框架,特別是對動態湊批的中的開銷進行了細致優化。
對V100的硬件特性進行了特別調優。
詳細信息,請參見rtp-llm。
前提條件
已創建包含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。
步驟二:部署推理服務
執行以下命令,部署Qwen1.5-4B-Chat模型的推理服務。
通過Arena部署一個自定義類型的推理服務。該服務名稱為rtp-llm-qwen,版本為v1,需要使用一個GPU,副本數為1,并且配置了就緒檢測。模型是一種特殊類型的數據,因此采用
--data
參數將已創建的模型PVCllm-model
掛載到了容器中/model/Qwen1.5-4B-Chat
目錄下。單卡A10環境
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat python3 -m maga_transformer.start_server"
單卡T4環境
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat MAX_SEQ_LEN=2048 python3 -m maga_transformer.start_server"
參數說明如下所示:
參數
說明
--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/rtp-llm-qwen-v1 created deployment.apps/rtp-llm-qwen-v1-custom-serving created INFO[0001] The Job rtp-llm-qwen has been submitted successfully INFO[0001] You can run `arena serve get rtp-llm-qwen --type custom-serving -n default` to check the job status
輸出結果表明推理服務已成功部署。
執行下列命令,查看推理服務的詳細信息,并等待服務就緒。
arena serve get rtp-llm-qwen
預期輸出:
Name: rtp-llm-qwen Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1h Address: 192.168.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- rtp-llm-qwen-v1-custom-serving-696f699485-mn56v Running 1h 1/1 0 1 cn-beijing.192.168.XX.XX
輸出結果表明該推理服務的一個Pod(rtp-llm-qwen-v1-custom-serving-696f699485-mn56v)正在穩定運行,且已準備好提供服務。
步驟三:驗證推理服務
執行以下命令,在推理服務與本地環境之間建立端口轉發。
重要請注意kubectl port-forward建立的端口轉發不具備生產級別的可靠性、安全性和擴展性,因此僅適用于開發和調試目的,不適合在生產環境使用。更多關于Kubernetes集群內生產可用的網絡方案的信息,請參見Ingress概述。
kubectl port-forward svc/rtp-llm-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": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "測試一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
預期輸出:
{"id":"chat-","object":"chat.completion","created":1717383026,"model":"AsyncModel","choices":[{"index":0,"message":{"role":"assistant","content":"好的,請問您有什么測試需要我進行呢"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}
輸出結果表明模型可以根據給定的輸入(在這個例子中是一條測試消息)生成相應的回復。
(可選)步驟四:清理環境
如果不再使用已創建的資源,請及時清理。
執行以下命令,刪除已部署的模型推理服務。
arena serve del rtp-llm-qwen
執行以下命令,刪除已創建的PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model