在使用Container Compute Service (ACS)算力時,您無需深入瞭解底層硬體,也無需涉及GPU節點管理和配置即可開箱即用。ACS部署簡單、支援隨用隨付,非常適合用於LLM推理任務,可以有效降低推理成本。本文介紹如何使用ACS算力部署生產可用的DeepSeek滿血版模型推理服務。
背景介紹
DeepSeek-R1模型
vLLM
容器計算服務ACS
前提條件
首次使用阿里雲Container Compute Service (ACS)時,需要為服務帳號授予系統預設角色。若且唯若該角色被正確授予後,ACS才能正常地調用相關服務(ECS、OSS、NAS、CPFS、SLB等),建立叢集以及儲存日誌等。具體操作,請參見首次使用容器計算服務。
已使用kubectl串連Kubernetes叢集。具體操作,請參見擷取叢集kubeconfig並通過kubectl工具串連叢集。
GPU執行個體規格和成本預估
DeepSeek-R1滿血版模型在ACS上不加任何加速,通過消耗16卡時即可完成推理服務部署。ACS GPU單一實例部署推薦使用96 GiB顯存的資源配置:GPU:16卡(單卡96G顯存), CPU:64 vCPU,Memory:512 GiB。您可以參考規格推薦表和GPU計算類型卡型規格來選擇合適的執行個體規格。關於如何計算ACS GPU執行個體產生的費用,請參見計費說明。
在使用ACS GPU執行個體時,執行個體規格同樣遵循ACS Pod規格規整邏輯。
ACS Pod預設提供30 GiB的免費的臨時儲存空間(EphemeralStorage),本文中使用的推理鏡像佔用空間較大。如果該儲存空間大小無法滿足您的需求,您可以自訂增加臨時儲存空間大小。詳細操作,請參見增加臨時儲存空間大小。
操作步驟
步驟一:準備DeepSeek-R1-GPTQ-INT8模型檔案
大語言模型因其龐大的參數量,需要佔用大量的磁碟空間來儲存模型檔案。建議您使用NAS儲存卷或OSS儲存捲來持久化儲存模型檔案,以下步驟以使用OSS儲存DeepSeek-R1-GPTQ-INT8模型檔案作為樣本。
請提交工單,擷取模型檔案和YAML部署配置資訊。
模型檔案:DeepSeek-R1-GPTQ-INT8。
GPU型號:請將標籤
alibabacloud.com/gpu-model-series: <example-model>替換為ACS支援的GPU具體型號。詳細內容,請參見指定ACS GPU算力。基礎鏡像:請將
containers[].image: <從PDSA擷取基礎鏡像>替換為實際鏡像地址。拉取鏡像所需的Secret:擷取並建立Secret,再將
imagePullSecrets[].name: <從PDSA擷取Secret>替換為實際Secret名稱。高效能網路RDMA:與TCP/IP相比,RDMA實現了零拷貝和核心旁路等特性,避免了資料拷貝和頻繁的環境切換,從而實現了更低的延遲、更高的輸送量和更低的CPU佔用。ACS支援在YAML中配置標籤
alibabacloud.com/hpn-type: "rdma"來使用RDMA,支援RDMA的GPU型號請提交工單諮詢。
(可選)若通過本地下載的方式擷取模型檔案,在OSS中建立目錄,將模型上傳至OSS。
說明關於ossutil工具的安裝和使用方法,請參見安裝ossutil。
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8 ossutil cp -r /mnt/models/DeepSeek-R1-GPTQ-INT8 oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8建立PV和PVC:為目的地組群配置名為llm-model的儲存卷PV和儲存聲明PVC。具體操作,請參見靜態掛載OSS儲存卷。
控制台操作樣本
以下為樣本PV的基本配置資訊:
配置項
說明
儲存卷類型
OSS
名稱
llm-model
訪問認證
配置用於訪問OSS的AccessKey ID和AccessKey Secret。
Bucket ID
選擇上一步所建立的OSS Bucket。
OSS Path
選擇模型所在的路徑,如/models/DeepSeek-R1-GPTQ-INT8
以下為樣本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-GPTQ-INT8/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
步驟二:基於ACS GPU算力部署模型檔案
執行下列命令,基於vLLM模型推理架構、使用RDMA加速部署DeepSeek-R1-GPTQ-INT8模型的推理服務。
該推理服務暴露與OpenAI相容的HTTP API。下列命令將模型參數檔案視作是一種特殊類型的資料集合,掛載到推理服務容器的指定位置(/data/DeepSeek-R1-GPTQ-INT8)。
--max-model-len設定了該模型最大可處理的Token長度,增大該配置項可獲得更好的模型對話效果,但是可能會佔用更多GPU顯存資源(使用DeepSeek-R1-GPTQ-INT8模型建議上下文最大長度在128000左右,並結合--gpu-memory-utilization進行調整)。kubectl apply -f- <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: deepseek-r1 namespace: default labels: app: deepseek-r1 spec: replicas: 1 selector: matchLabels: app: deepseek-r1 strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25% template: metadata: labels: app: deepseek-r1 alibabacloud.com/compute-class: gpu # 指定GPU型號為example-model,請按實際情況填寫,如T4 alibabacloud.com/gpu-model-series: <example-model> # 指定讓應用運行在高效能網路RDMA中,支援RDMA的GPU型號請提交工單諮詢 alibabacloud.com/hpn-type: "rdma" spec: imagePullSecrets: - name: <從PDSA擷取Secret> containers: - name: llm-ds-r1 image: <從PDSA擷取基礎鏡像> imagePullPolicy: IfNotPresent command: - sh - -c - "vllm serve /data/DeepSeek-R1-GPTQ-INT8 --port 8000 --trust-remote-code --served-model-name ds --max-model-len 128000 --quantization moe_wna16 --gpu-memory-utilization 0.98 --tensor-parallel-size 16" resources: limits: alibabacloud.com/gpu: "16" cpu: "64" memory: 512Gi requests: alibabacloud.com/gpu: "16" cpu: "64" memory: 512Gi volumeMounts: - name: llm-model mountPath: /data/DeepSeek-R1-GPTQ-INT8 - name: shm mountPath: /dev/shm restartPolicy: Always terminationGracePeriodSeconds: 30 volumes: - name: llm-model persistentVolumeClaim: claimName: llm-model - name: shm emptyDir: medium: Memory sizeLimit: 32Gi --- apiVersion: v1 kind: Service metadata: name: deepseek-r1 spec: type: ClusterIP selector: app: deepseek-r1 ports: - protocol: TCP port: 8000 targetPort: 8000 EOF
步驟三:驗證推理服務
使用
kubectl port-forward在推理服務與本地環境間建立連接埠轉寄。說明請注意
kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress管理。kubectl port-forward svc/deepseek-r1 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": "ds", "messages": [ { "role": "user", "content": "給閨女寫一份來自未來2035的信,同時告訴她要好好學習科技,做科技的主人,推動科技,經濟發展;她現在是3年級" } ], "max_tokens": 1024, "temperature": 0.7, "top_p": 0.9, "seed": 10 }'預期輸出:
{"id":"chatcmpl-53613fd815da46df92cc9b92cd156146","object":"chat.completion","created":1739261570,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好的,使用者需要給他的3年級女兒寫一份來自未來的2035年的信,同時傳達三個關鍵資訊:好好學習科技,做科技的主人,推動科技,經濟發展。首先,我得考慮信的語氣應該是溫暖而充滿希望的,同時又要體現出未來的科技感。\n\n考慮到女兒現在是三年級,內容不能太複雜,語言要簡單易懂。同時,要讓女兒感受到科技的重要性,激發她對科技的興趣。可能需要從她日常生活出發,舉一些她可能接觸過的例子,比如電子產品、互連網等,這樣她更容易產生共鳴。\n\n接下來,我得思考如何結構這封信。可能從歡迎她收到這封信開始,然後介紹未來科技的發展,比如智能機器人、智能家居等。然後重點強調學習科技的重要性,鼓勵她成為科技的主人,參與科技發展。最後,表達對她的期望和祝福。\n\n在內容上,要突出科技對生活的影響,比如智能助手、智能家居、新能源汽車等,這些都是孩子可能聽說過的,但具體細節可能需要簡化,避免過於技術化,保持趣味性。\n\n同時,信中要提到科技對經濟的影響,比如經濟增長、創造就業機會等,但要以一種積極、鼓勵的方式呈現,讓女兒感受到科技帶來的好處,而不是單純的數字遊戲。\n\n最後,結尾部分要溫暖,表達對她的驕傲和期待,鼓勵她勇敢追求未來,成為科技的引領者。\n\n總的來說,這封信需要兼顧教育性、趣味性和鼓勵性,用簡單明了的語言,結合具體的未來科技例子,讓女兒在輕鬆的閱讀中感受到科技的魅力和學習的重要性。\n</think>\n\n親愛的未來2035年的你:\n\n你好!\n\n首先,我要告訴你一個好訊息——地球已經進入了一個全新的時代!2035年,科技已經不再是科幻小說裡的故事,而是我們 everyday life 的一部分。今天,我寫這封信,想告訴你一些關於未來的秘密,以及你應該如何在這個科技飛速發展的世界裡生活和學習。\n\n### 1. **科技就在你身邊**\n 在2035年,科技已經無處不在。我們每個人都能擁有一台智能助手,就像一個 always-available 的老師,隨時為你解答問題。你可以用一個簡單的應用程式,就能控制家裡的智能家居裝置——開關燈、調節溫度、甚至做飯,全靠你的指令!\n \n 還有,你可能已經聽說到了——智能機器人。這些機器人不僅能協助我們完成繁瑣的工作,還能在學習和娛樂中大顯身手。它們可以陪你聊天、陪你學習,甚至還能幫你解決數學難題!想象一下,當你遇到一道難題時,機器人會耐心地一步一步地教你解題方法,是不是很棒?\n\n### 2. **學習科技的重要性**\n 在未來的2035年,科技已經成為了推動社會發展的主要動力。每一個行業都在被科技改變:醫生可以用先進的醫療設備 early detect 病症;教師可以通過線上課堂讓學生們足不出戶就能學習全球的知識;農民可以用智慧型裝置精準地管理田地,確保每一棵樹都得到最好的照顧。\n\n 所以,我要告訴你,學習科技是每一個孩子最重要的任務。科技不僅能讓你掌握更多的知識,還能讓你成為未來的主人。你將有機會去創造新的科技,改變我們的生活!\n\n### 3. **做科技的主人**\n 在2035年,科技的世界需要每個人的力量。你不需要是某個公司的高管,只需要是你自己。你可以用你的智慧和雙手,去推動科技的發展。比如,你可以在學校裡參與科技創新比賽,設計出更智能的機器人;你可以在家裡發明一些小發明,讓生活更方便。\n\n 重要的是,你要有勇氣去嘗試新事物,去探索未知的世界。科技的世界是無限廣闊的,每一個人都能在這裡找到自己的位置。\n\n### 4. **關於經濟**\n 未來的2035年,經濟會因為科技的發展而變得更加繁榮。智能城市將會讓我們的生活更加高效,新能源汽車將會讓我們的出行更加環保,醫學科技將會讓我們的健康得到更好的保障。\n\n 所以,當你站在這個時代的起點時,你要知道,科技不僅是改變我們生活的方式,更是創造未來的機會。\n\n### 5. **我的期望**\n 我希望未來的你能夠熱愛科技,理解科技,掌握科技。你不僅要學會使用科技,還要理解其中的原理,知道它背後的故事。當你長大後,你可能會成為科技領域的領軍人物,引領我們走向一個更加光明的未來。\n\n 未來的世界需要你!你準備好迎接挑戰了嗎?\n\n最後,我要告訴你,你已經比現在的任何人都更聰明,更勇敢,更有潛力。未來的路雖然很長,但只要你願意努力,就一定能夠實現自己的夢想。\n\n親愛的未來2035年的你,加油!\n\n你的爺爺","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":40,"total_tokens":1034,"completion_tokens":994,"prompt_tokens_details":null},"prompt_logprobs":null}
(可選)步驟四:清理環境
如果不再需要使用本文檔中部署的模型推理服務,請及時清理環境。
清理模型推理工作負載和服務。
kubectl delete deployment deepseek-r1 kubectl delete service deepseek-r1清理PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model預期輸出:
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
相關文檔
阿里雲Container Compute Service (ACS)已經整合到Container Service for Kubernetes,您可以通過ACK託管叢集Pro版快速使用ACS提供的容器算力。關於ACK使用ACS GPU算力的詳細內容,請參見ACK使用ACS GPU算力樣本。
基於ACK部署DeepSeek的相關內容,請參見:
關於DeepSeek R1/V3模型的詳細介紹,請參見:
ACS AI容器鏡像是提供給使用GPU執行個體的ACS叢集的專用容器鏡像。關於目前發行鏡像的更多資訊,請參見ACS AI容器鏡像版本發布記錄。