vLLM(Vectorized Large Language Model)是一個高效能的大型語言模型推理庫,支援多種模型格式和後端加速,適用於大規模語言模型的推理服務部署。本文以Qwen-7B-Chat-Int8模型、GPU類型為V100卡為例,示範如何部署一個vLLM推理服務。
關於vLLM的詳細資料,請參見vllm-project。
前提條件
已建立託管GPU叢集或專有GPU叢集,且叢集版本需為1.22及以上,並指定CUDA版本為12.0及以上。具體操作,請參見建立GPU叢集或建立專有GPU叢集。
建議GPU節點使用525版本驅動,您可以通過為GPU節點池添加標籤
ack.aliyun.com/nvidia-driver-version:525.105.17指定驅動版本為525.105.17。具體操作,請參見通過指定版本號碼自訂節點GPU驅動版本。已安裝ack-kserve️組件。具體操作,請參見安裝ack-kserve️。
已安裝Arena用戶端,且版本不低於0.9.15。具體操作,請參見配置Arena用戶端。
已開通阿里雲Object Storage Service服務。具體操作,請參見開通OSS服務。
步驟一:準備模型資料並上傳OSS Bucket
您可以使用OSS或NAS準備模型資料,具體操作,請參見使用OSS靜態儲存卷、使用NAS靜態儲存卷。本文以OSS為例說明如何準備模型資料。
下載模型。本文以Qwen-7B-Chat-Int8模型為例。
執行以下命令,安裝Git。
sudo yum install git執行以下命令,安裝Git LFS(Large File Support)外掛程式。
sudo yum install git-lfs執行以下命令,將ModelScope上的Qwen-7B-Chat-Int8倉庫複製到本地。
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git執行以下命令,進入Qwen-7B-Chat-Int8倉庫目錄。
cd Qwen-7B-Chat-Int8執行以下命令,在Qwen-7B-Chat-Int8目錄下,下載LFS管理的大檔案。
git lfs pull
將下載的Qwen-7B-Chat-Int8檔案上傳至OSS。
為目的地組群配置名為llm-model的儲存卷PV和儲存聲明PVC。具體操作,請參見使用OSS靜態儲存卷。
以下為樣本PV的基本配置資訊:
配置項
說明
儲存卷類型
OSS
名稱
llm-model
訪問認證
配置用於訪問OSS的AccessKey ID和AccessKey Secret。
Bucket ID
選擇步驟2中建立的OSS Bucket。
OSS Path
選擇模型所在的路徑,如/Qwen-7B-Chat-Int8。
以下為樣本PVC的基本配置資訊:
配置項
說明
儲存宣告類型
OSS
名稱
llm-model
分配模式
選擇已有儲存卷。
已有儲存卷
單擊選擇已有儲存卷連結,選擇已建立的儲存卷PV。
步驟二:部署推理服務
執行以下命令,檢查叢集中可用的GPU資源。
arena top node輸出結果會顯示可用於運行推理服務的GPU節點個數。
執行以下命令,啟動名稱為
vllm的推理服務。arena serve kserve \ --name=qwen \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data="llm-model:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"參數說明如下所示:
參數
是否必選
說明
--name
是
提交的推理服務名稱,全域唯一。
--image
是
推理服務的鏡像地址。
--gpus
否
推理服務需要使用的GPU卡數。預設值為0。
--cpu
否
推理服務需要使用的CPU數。
--memory
否
推理服務需要使用的記憶體數量。
--data
否
服務的模型地址,本文指定模型的儲存為llm-model,掛載到容器中的/mnt/models/目錄下。
預期輸出:
inferenceservice.serving.kserve.io/qwen created INFO[0006] The Job qwen has been submitted successfully INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job status輸出結果表明推理服務已部署成功。
步驟三:驗證推理服務
執行以下命令,查看KServe推理服務的部署情況。
arena serve get qwen預期輸出:
輸出結果表明,KServe推理服務部署成功,模型訪問地址為
http://qwen-default.example.com。執行以下命令,使用擷取到的Nginx Ingress網關地址訪問推理服務。
# 擷取Nginx ingress的IP地址。 NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}') # 擷取Inference Service的Hostname。 SERVICE_HOSTNAME=$(kubectl get inferenceservice qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3) # 發送請求訪問推理服務。 curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "測試一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'預期輸出:
輸出結果表明請求被正確地發送到了服務,並且服務返回了一個預期的JSON響應。
(可選)步驟四:刪除推理服務
在執行刪除操作前,請確保不再需要該服務及其相關資源。
執行以下命令,刪除推理服務。
arena serve delete qwen相關文檔
您可以配置Prometheus監控追蹤服務狀態和及時發現並解決問題。具體操作,請參見配置Prometheus監控。
如需瞭解如何基於KServe實現模型加速,請參見使用Fluid實現模型加速。