在使用Container Compute Service (ACS)算力時,您無需深入瞭解底層硬體,也無需涉及GPU節點管理和配置即可開箱即用。ACS部署簡單、支援隨用隨付,非常適合用於LLM推理任務,可以有效降低推理成本。本文介紹如何使用ACS算力部署生產可用的DeepSeek蒸餾模型推理服務。
背景介紹
DeepSeek-R1模型
vLLM
Arena
前提條件
首次使用阿里雲Container Compute Service (ACS)時,需要為服務帳號授予系統預設角色。若且唯若該角色被正確授予後,ACS才能正常地調用相關服務(ECS、OSS、NAS、CPFS、SLB等),建立叢集以及儲存日誌等。具體操作,請參見首次使用容器計算服務。
已建立ACS叢集,配置的地區和可用性區域支援GPU資源。具體操作,請參見建立ACS叢集。
已使用kubectl串連Kubernetes叢集。具體操作,請參見擷取叢集kubeconfig並通過kubectl工具串連叢集。
已安裝Arena用戶端。具體操作,請參見配置Arena用戶端。
GPU執行個體規格和成本預估
在推理階段主要佔用顯存的是模型參數,可以通過以下公式計算。
以一個預設精度為FP16、參數量為7B的模型為例,模型參數量為:7B(即70億),精度資料類型位元組數為:預設精度16位浮點數 / 8位每位元組 = 2位元組。
除了載入模型佔用的顯存之外,還需要考慮運算時所需的KV Cache大小和GPU利用率,通常會預留一部分buffer,因此推薦使用24 GiB顯存的資源配置:GPU:1卡,CPU:8 vCPU,記憶體:32 GiB。您可以參考以下規格推薦表和GPU計算類型卡型規格來選擇合適的執行個體規格。關於如何計算ACS GPU執行個體產生的費用,請參見計費說明。
模型名稱 | 模型版本 | 模型大小 | 推薦規格 | ||
vCPU | 記憶體 | GPU顯存 | |||
DeepSeek-R1-Distill-Qwen-1.5B | 1.5B(15億參數) | 3.55 GB | 4或6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B(70億參數) | 15.23 GB | 6或8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B(80億參數) | 16.06 GB | 6或8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-14B | 14B(140億參數) | 29.54 GB | 8以上 | 64 GiB | 48 GiB |
DeepSeek-R1-Distill-Qwen-32B | 32B(320億參數) | 74.32 GB | 8以上 | 128 GiB | 96 GiB |
DeepSeek-R1-Distill-Llama-70B | 70B(700億參數) | 140.56 GB | 12以上 | 128 GiB | 192 GiB |
在使用ACS GPU執行個體時,執行個體規格同樣遵循ACS Pod規格規整邏輯。
ACS Pod預設提供30 GiB的免費的臨時儲存空間(EphemeralStorage),本文中使用的推理鏡像inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless佔用約9.8 GiB。如果該儲存空間大小無法滿足您的需求,您可以自訂增加臨時儲存空間大小。詳細操作,請參見增加臨時儲存空間大小。
操作步驟
步驟一:準備DeepSeek-R1-Distill-Qwen-7B模型檔案
通常下載和上傳模型檔案需要1-2小時,您可以通過提交工單快速將模型檔案複製到您的OSS Bucket。
執行以下命令從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。具體操作,請參見靜態掛載OSS儲存卷。以下為樣本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。
以下為樣本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
步驟二:部署模型
執行下列命令,基於vLLM模型推理架構部署DeepSeek-R1-Distill-Qwen-7B模型的推理服務。
該推理服務暴露與OpenAI相容的HTTP API。下列命令利用arena命令列工具提供的
--data參數,將模型參數檔案視作是一種特殊類型的資料集合,掛載到推理服務容器的指定位置(/model/DeepSeek-R1-Distill-Qwen-7B)。--max_model_len設定了該模型最大可處理的Token長度,增大該配置項可獲得更好的模型對話效果,但是可能會佔用更多GPU顯存資源。說明請將以下命令中的
gpu-model-series=<example-model>替換為ACS支援的GPU具體型號,目前支援的GPU型號列表請提交工單諮詢。egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/{image:tag}為公網鏡像地址,建議您使用VPC方式加速拉取AI容器鏡像,減少鏡像拉取的時間。
arena serve custom \ --name=deepseek-r1 \ --version=v1 \ --gpus=1 \ --cpu=8 \ --memory=32Gi \ --replicas=1 \ --label=alibabacloud.com/compute-class=gpu \ --label=alibabacloud.com/gpu-model-series=<example-model> \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8000 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"預期輸出:
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0004] The Job deepseek-r1 has been submitted successfully INFO[0004] You can run `arena serve get deepseek-r1 --type custom-serving -n default` to check the job status參數解釋如下表所示:
參數
說明
--name
指定推理服務名稱。
--version
指定推理服務版本。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--cpu
指定單個推理服務副本需要使用的CPU資源大小。
--memory
指定單個推理服務副本需要使用的記憶體資源大小。
--replicas
指定推理服務副本數。
--label
通過下面label指定ACS GPU算力。
--label=alibabacloud.com/compute-class=gpu--label=alibabacloud.com/gpu-model-series=<example-model>--restful-port
指定推理服務對外暴露的連接埠。
--readiness-probe-action
指定就緒探針連線類型,支援:
httpGet、exec、grpc、tcpSocket。--readiness-probe-action-option
指定就緒探針串連方式。
--readiness-probe-option
指定就緒探針配置。
--image
指定推理服務的鏡像地址。
--data
掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過冒號(:)分隔。冒號左側是已經準備好的PVC名稱。可以通過命令
arena data list查看當前叢集可用的PVC列表;冒號右側是想將PVC的掛載到運行環境中的路徑,也是訓練代碼要讀取資料的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC的資料。執行下列命令,查看推理服務詳細資料,等待服務就緒。
arena serve get deepseek-r1預期輸出:
Name: deepseek-r1 Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 6h Address: 10.0.78.27 Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-r1-v1-custom-serving-54d579d994-dqwxz Running 1h 1/1 0 1 virtual-kubelet-cn-hangzhou-b
步驟三:驗證推理服務
使用
kubectl port-forward在推理服務與本地環境間建立連接埠轉寄。說明請注意
kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress管理。kubectl port-forward svc/deepseek-r1-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": "deepseek-r1", "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}
(可選)步驟四:清理環境
如果不再需要使用本文檔中部署的模型推理服務,請及時清理環境。
清理模型推理服務。
arena serve delete deepseek-r1預期輸出:
INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfully清理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容器鏡像版本發布記錄。