全部產品
Search
文件中心

Container Service for Kubernetes:基於ACK部署DeepSeek蒸餾模型推理服務

更新時間:Sep 24, 2025

本文介紹如何在阿里雲Container ServiceACK中使用KServe部署生產可用的DeepSeek模型推理服務。

背景介紹

DeepSeek-R1模型

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

KServe

KServe是一個開源的雲原生模型服務平台,旨在簡化在Kubernetes上部署和運行機器學習模型的過程,支援多種機器學習架構、具備彈性擴容能力。KServe通過定義簡單的YAML檔案,提供聲明式的API來部署模型,使得配置和管理模型服務變得更加容易。關於KServe開源專案的更多資訊,請參見KServe

Arena

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

前提條件

GPU執行個體規格和成本預估

在推理階段主要佔用顯存的是模型參數,可以通過以下公式計算。

以一個預設精度為FP16的7B模型為例,模型參數量為:7B(即70億),精度資料類型位元組數為:預設精度16位浮點數 / 8位每位元組 = 2位元組。

除了載入模型佔用的顯存之外,還需要考慮運算時所需的KV Cache大小和GPU使用率,通常會預留一部分buffer,因此推薦使用24GiB顯存的GPU執行個體ecs.gn7i-c8g1.2xlargeecs.gn7i-c16g1.4xlarge。關於GPU執行個體規格和計費的詳情,請參見GPU計算型執行個體規格類型系列GPU雲端服務器計費

模型部署

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

  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。具體操作,請參見使用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

步驟二:部署推理服務

  1. 執行下列命令,啟動名稱為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

步驟三:驗證推理服務

  1. 執行下列命令,查看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推理服務部署成功。

  2. 執行以下命令,使用擷取到的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大盤如下圖所示:

image

匯入Grafana大盤操作步驟

匯入大盤

  1. 登入ARMS控制台

  2. 在左側導覽列,單擊接入管理

  3. 已接入環境頁簽中選擇容器環境,通過ACK叢集名稱搜尋環境,然後點擊進入目標環境。

    image

  4. 在組件管理頁簽中,複製並儲存叢集ID,點擊進入大盤目錄

    image

  5. Dashboards頁簽右側,點擊Import按鈕。

    image

  6. 複製grafana.json檔案內容,粘貼到Import via panel json地區,然後點擊Load按鈕。

    說明

    您也可以通過上傳JSON檔案的方式匯入大盤。

    image

  7. 保持預設設定,點擊Import,即可完成LLM推理服務可觀測大盤的匯入。

大盤資料驗證

  1. 使用已儲存的叢集ID或者Prometheus執行個體ID搜尋資料來源,然後選擇目標資料來源。

    image

  2. 發送若干請求訪問推理服務,類比推理業務流量,驗證LLM推理服務的可觀測大盤資料,如Token Throughput等。

    image

彈性擴縮容

在部署與管理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共用推理服務

相關文檔