全部產品
Search
文件中心

Container Compute Service:使用ACS GPU算力構建DeepSeek蒸餾模型推理服務

更新時間:Apr 24, 2025

在使用Container Compute Service (ACS)算力時,您無需深入瞭解底層硬體,也無需涉及GPU節點管理和配置即可開箱即用。ACS部署簡單、支援隨用隨付,非常適合用於LLM推理任務,可以有效降低推理成本。本文介紹如何使用ACS算力部署生產可用的DeepSeek蒸餾模型推理服務。

背景介紹

DeepSeek-R1模型

DeepSeek-R1模型是DeepSeek推出的第一代推理模型,旨在通過大規模強化學習提升大語言模型的推理能力。實驗結果表明,DeepSeek-R1在數學推理、編程競賽等多個任務上表現出色,不僅超過了其他閉源模型,而且在某些任務上接近或超越了OpenAI-O1系列模型。DeepSeek-R1在知識類任務和其他廣泛的任務類型中也表現出色,包括創意寫作、一般問答等。DeepSeek還將推理能力蒸餾到小模型上,通過對已有模型(Qwen、Llama等)微調提升模型推理能力。蒸餾後的14B模型顯著超越了現有的開源模型QwQ-32B,而蒸餾後的32B和70B模型均重新整理紀錄。更多關於DeepSeek模型的資訊,請參見DeepSeek AI GitHub倉庫

vLLM

vLLM是一個高效易用的大語言模型推理服務架構,vLLM支援包括通義千問在內的多種常見大語言模型。vLLM通過PagedAttention最佳化、動態批量推理(continuous batching)、模型量化等最佳化技術,可以取得較好的大語言模型推理效率。更多關於vLLM架構的資訊,請參見vLLM GitHub程式碼程式庫

Arena

Arena是基於Kubernetes的機器學習輕量級解決方案,支援資料準備、模型開發、模型訓練、模型預測的完整生命週期,提升資料科學家的工作效率。同時和阿里雲的基礎雲端服務深度整合,支援GPU共用、CPFS等服務,可以運行阿里雲最佳化的深度學習架構,最大化利用阿里雲異構裝置的效能和成本的效益。更多關於Arena的資訊,請參見Arena GitHub程式碼程式庫

前提條件

  • 首次使用阿里雲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

說明

操作步驟

步驟一:準備DeepSeek-R1-Distill-Qwen-7B模型檔案

說明

通常下載和上傳模型檔案需要1-2小時,您可以通過提交工單快速將模型檔案複製到您的OSS Bucket。

  1. 執行以下命令從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
  2. 在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
  3. 建立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

步驟二:部署模型

  1. 執行下列命令,基於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

    指定就緒探針連線類型,支援:httpGetexecgrpctcpSocket

    --readiness-probe-action-option

    指定就緒探針串連方式。

    --readiness-probe-option

    指定就緒探針配置。

    --image

    指定推理服務的鏡像地址。

    --data

    掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過冒號(:)分隔。冒號左側是已經準備好的PVC名稱。可以通過命令arena data list查看當前叢集可用的PVC列表;冒號右側是想將PVC的掛載到運行環境中的路徑,也是訓練代碼要讀取資料的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC的資料。

  2. 執行下列命令,查看推理服務詳細資料,等待服務就緒。

    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

步驟三:驗證推理服務

  1. 使用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
  2. 發送模型推理請求。

    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}

(可選)步驟四:清理環境

如果不再需要使用本文檔中部署的模型推理服務,請及時清理環境。

  1. 清理模型推理服務。

    arena serve delete deepseek-r1

    預期輸出:

    INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfully
  2. 清理PV和PVC。

    kubectl delete pvc llm-model
    kubectl delete pv llm-model

    預期輸出:

    persistentvolumeclaim "llm-model" deleted
    persistentvolume "llm-model" deleted

相關文檔