本文介紹如何在阿里雲Container ServiceACK中使用KServe部署生產可用的DeepSeek模型推理服務。
背景介紹
DeepSeek-R1模型
KServe
Arena
前提條件
已建立包含GPU的Kubernetes叢集。具體操作,請參見為叢集添加GPU節點池。
已通過kubectl串連到叢集。具體操作,請參見通過kubectl串連叢集。
已安裝ack-kserve️組件。具體操作,請參見安裝ack-kserve️組件。
已安裝Arena用戶端。具體操作,請參見配置Arena用戶端。
GPU執行個體規格和成本預估
在推理階段主要佔用顯存的是模型參數,可以通過以下公式計算。
以一個預設精度為FP16的7B模型為例,模型參數量為:7B(即70億),精度資料類型位元組數為:預設精度16位浮點數 / 8位每位元組 = 2位元組。
除了載入模型佔用的顯存之外,還需要考慮運算時所需的KV Cache大小和GPU使用率,通常會預留一部分buffer,因此推薦使用24GiB顯存的GPU執行個體ecs.gn7i-c8g1.2xlarge或ecs.gn7i-c16g1.4xlarge。關於GPU執行個體規格和計費的詳情,請參見GPU計算型執行個體規格類型系列和GPU雲端服務器計費。
模型部署
步驟一:準備DeepSeek-R1-Distill-Qwen-7B模型檔案
執行以下命令從ModelScope下載DeepSeek-R1-Distill-Qwen-7B模型。
說明請確認是否已安裝git-lfs外掛程式,如未安裝可執行
yum install git-lfs或者apt-get install git-lfs安裝。更多的安裝方式,請參見安裝git-lfs。git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git cd DeepSeek-R1-Distill-Qwen-7B/ git lfs pull在OSS中建立目錄,將模型上傳至OSS。
說明關於ossutil工具的安裝和使用方法,請參見安裝ossutil。
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B建立PV和PVC。為目的地組群配置名為
llm-model的儲存卷PV和儲存聲明PVC。具體操作,請參見使用ossfs 1.0靜態儲存卷。控制台操作樣本
以下為樣本PV的基本配置資訊:
配置項
說明
儲存卷類型
OSS
名稱
llm-model
訪問認證
配置用於訪問OSS的AccessKey ID和AccessKey Secret。
Bucket ID
選擇上一步所建立的OSS Bucket。
OSS Path
選擇模型所在的路徑,如
/models/DeepSeek-R1-Distill-Qwen-7B。以下為樣本PVC的基本配置資訊:
配置項
說明
儲存宣告類型
OSS
名稱
llm-model
分配模式
選擇已有儲存卷。
已有儲存卷
單擊選擇已有儲存卷連結,選擇已建立的儲存卷PV。
kubectl操作樣本
以下為樣本YAML:
apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # 配置用於訪問OSS的AccessKey ID akSecret: <your-oss-sk> # 配置用於訪問OSS的AccessKey Secret --- apiVersion: v1 kind: PersistentVolume metadata: name: llm-model labels: alicloud-pvname: llm-model spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: llm-model nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: <your-bucket-name> # bucket名稱 url: <your-bucket-endpoint> # Endpoint資訊,如oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: <your-model-path> # 本樣本中為/models/DeepSeek-R1-Distill-Qwen-7B/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
步驟二:部署推理服務
執行下列命令,啟動名稱為deepseek的推理服務。
arena serve kserve \ --name=deepseek \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"參數解釋如下表所示:
參數
是否必選
說明
--name
是
提交的推理服務名稱,全域唯一。
--image
是
推理服務的鏡像地址。
--gpus
否
推理服務需要使用的GPU卡數。預設值為0。
--cpu
否
推理服務需要使用的CPU數量。
--memory
否
推理服務需要使用的記憶體數量。
--data
否
服務的模型地址,本文指定模型為上一步建立的儲存卷
llm-model,掛載到容器中的/models/目錄下。預期輸出:
inferenceservice.serving.kserve.io/deepseek created INFO[0003] The Job deepseek has been submitted successfully INFO[0003] You can run `arena serve get deepseek --type kserve -n default` to check the job status
步驟三:驗證推理服務
執行下列命令,查看KServe推理服務的部署情況。
arena serve get deepseek預期輸出:
Name: deepseek Namespace: default Type: KServe Version: 1 Desired: 1 Available: 1 Age: 3m Address: http://deepseek-default.example.com Port: :80 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-predictor-7cd4d568fd-fznfg Running 3m 1/1 0 1 cn-beijing.172.16.1.77輸出結果表明,KServe推理服務部署成功。
執行以下命令,使用擷取到的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 deepseek -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": "deepseek-r1", "messages": [{"role": "user", "content": "Say this is a test!"}], "max_tokens": 512, "temperature": 0.7, "top_p": 0.9, "seed": 10}'預期輸出:
{"id":"chatcmpl-0fe3044126252c994d470e84807d4a0a","object":"chat.completion","created":1738828016,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n\n</think>\n\nIt seems like you're testing or sharing some information. How can I assist you further? If you have any questions or need help with something, feel free to ask!","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":9,"total_tokens":48,"completion_tokens":39,"prompt_tokens_details":null},"prompt_logprobs":null}
可觀測性
在生產環境中LLM推理服務的可觀測性是至關重要的,可以有效提前發現和定位故障。vLLM架構提供了許多LLM推理指標,具體指標請參見Metrics文檔。KServe也提供了一些指標來協助您監控模型服務的效能和健康情況。我們在Arena工具中整合了這些能力,您只需要在提交應用時增加--enable-prometheus=true參數即可。
arena serve kserve \
--name=deepseek \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6 \
--gpus=1 \
--cpu=4 \
--memory=12Gi \
--enable-prometheus=true \
--data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \
"vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"您可以通過Grafana大盤來觀測基於vLLM部署的LLM推理服務。首先將vLLM的Grafana JSON model匯入到Grafana,然後建立LLM推理服務的可觀測大盤。匯入的JSON model請參見vLLM官方網站。配置後Dashboard大盤如下圖所示:

匯入Grafana大盤操作步驟
彈性擴縮容
在部署與管理KServe模型服務時,可能會遇到動態負載波動。KServe通過Kubernetes的HPA技術和ACK的ack-alibaba-cloud-metrics-adapter組件,支援根據CPU、記憶體、GPU使用率及自訂效能指標,自動調整模型服務Pod的數量,確保服務穩定高效。詳細內容,請參見為服務配置彈性擴縮容。
模型加速
隨著技術的發展,AI應用的模型資料越來越大,但是通過儲存服務(如OSS、NAS等)拉取這些大檔案時可能會出現長時間的延遲和冷啟動問題。您可以利用Fluid顯著提升模型載入速度,從而最佳化推理服務的效能,特別是對於基於KServe的推理服務而言。詳細內容,請參見使用Fluid實現模型加速。
灰階發布
在生產環境中應用發布更新是最為常見的操作,為了保證業務平穩、降低變更風險,灰階發布必不可少。ACK支援多種灰階發布策略,如根據流量百分比灰階,根據請求Header灰階等。詳細內容,請參見實現推理服務的灰階發布。
GPU共用推理
DeepSeek-R1-Distill-Qwen-7B模型僅需14 GB顯存,如果您使用更高規格的GPU機型,可以考慮使用GPU共用推理技術,提升GPU使用率。GPU共用技術可以將一個GPU進行切分,多個推理服務共用一個GPU,從而提升GPU使用率。詳細內容,請參見部署GPU共用推理服務。





