ACK One注册集群使用ACS GPU算力构建DeepSeek蒸馏模型推理服务

更新时间:2025-02-19 07:38:20

DeepSeek是一款基于深度学习的智能推理模型,因其在自然语言处理和图像识别等领域的卓越表现而迅速受到了广泛关注。无论是企业级应用还是学术研究,DeepSeek都展现出了强大的潜力。然而,随着其应用场景的不断扩展,数据中心的算力瓶颈问题逐渐凸显。为应对这一挑战,阿里云推出了ACK One注册集群为企业提供灵活、高效的解决方案。通过将本地数据中心的Kubernetes集群接入ACK One注册集群,企业可以无缝扩展算力资源,充分利用阿里云强大的ACS GPU算力,实现DeepSeek推理模型的高效部署。

背景介绍

DeepSeek-R1模型

DeepSeek-R1模型是DeepSeek推出的第一代推理模型,旨在通过大规模强化学习提升大语言模型的推理能力。实验结果表明,DeepSeek-R1在数学推理、编程竞赛等多个任务上表现出色,不仅超过了其他闭源模型,而且在某些任务上接近或超越了OpenAI-O1系列模型。DeepSeek-R1在知识类任务和其他广泛的任务类型中也表现出色,包括创意写作、一般问答等。DeepSeek还将推理能力蒸馏到小模型上,通过对已有模型(Qwen、Llama等)微调提升模型推理能力。蒸馏后的14B模型显著超越了现有的开源模型QwQ-32B,而蒸馏后的32B70B模型均刷新纪录。 更多关于DeepSeek模型的信息,请参见DeepSeek AI GitHub仓库

KServe

KServe是一个开源的云原生模型服务平台,旨在简化在Kubernetes上部署和运行机器学习模型的过程,支持多种机器学习框架、具备弹性扩容能力。KServe通过定义简单的YAML文件,提供声明式的API来部署模型,使得配置和管理模型服务变得更加容易。关于KServe开源项目的更多信息,请参见KServe

Arena

Arena是基于Kubernetes的机器学习轻量级解决方案,支持数据准备、模型开发、模型训练、模型预测的完整生命周期,提升数据科学家的工作效率。同时和阿里云的基础云服务深度集成,支持GPU共享、CPFS等服务,可以运行阿里云优化的深度学习框架,最大化利用阿里云异构设备的性能和成本的效益。更多关于Arena的信息,请参见Arena GitHub代码库

前提条件

操作步骤

步骤一:准备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. 创建PVPVC。为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见使用OSS静态存储卷

    控制台操作示例
    kubectl操作示例

    以下为示例PV的基本配置信息:

    配置项

    说明

    存储卷类型

    OSS

    名称

    llm-model

    访问证书

    配置用于访问OSSAccessKey IDAccessKey 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. 执行以下命令,查看集群中的节点情况。

    kubectl get no -owide 

    预期输出:

    NAME                            STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                                              KERNEL-VERSION           CONTAINER-RUNTIME
    idc-master-0210-001             Ready    control-plane   26h   v1.28.2   192.168.8.XXX   <none>        Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition)   5.10.134-18.al8.x86_64   containerd://1.6.32
    idc-worker-0210-001             Ready    <none>          26h   v1.28.2   192.168.8.XXX   <none>        Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition)   5.10.134-18.al8.x86_64   containerd://1.6.32
    idc-worker-0210-002             Ready    <none>          26h   v1.28.2   192.168.8.XXX   <none>        Alibaba Cloud Linux 3.2104 U11 (OpenAnolis Edition)   5.10.134-18.al8.x86_64   containerd://1.6.32
    virtual-kubelet-cn-hangzhou-b   Ready    agent           20h   v1.28.2   10.244.11.XXX   <none>        <unknown>                                             <unknown>                <unknown>
    virtual-kubelet-cn-hangzhou-h   Ready    agent           25h   v1.28.2   10.244.11.XXX   <none>        <unknown>                                             <unknown>                <unknown>

    从输出结果中可以看到,节点中有名为virtual-kubelet-cn-hangzhou-<ZoneId>的虚拟节点。

  2. 执行以下命令,基于vLLM模型推理框架部署DeepSeek-R1-Distill-Qwen-7B模型的推理服务。

    说明

    该推理服务暴露与OpenAI兼容的HTTP API。以下命令使用arena命令行工具的--data参数,将模型参数文件视为一种特殊类型的数据集合,挂载到推理服务容器中的指定位置/model/DeepSeek-R1-Distill-Qwen-7B。参数--max_model_len设置了该模型最大可处理的Token长度,增大该配置项可获得更好的模型对话效果,但可能会占用更多GPU显存资源。

    arena serve custom \
    --name=deepseek-r1 \
    --version=v1 \
    --gpus=1 \
    --cpu=8 \
    --memory=32Gi \
    --replicas=1 \
    --env-from-secret=akId=oss-secret \
    --env-from-secret=akSecret=oss-secret \
    --label=alibabacloud.com/acs="true" \                         #此处指定使用ACS算力
    --label=alibabacloud.com/compute-class=gpu \
    --label=alibabacloud.com/gpu-model-series=<example-model> \   #此处指定GPU实例系列
    --restful-port=8000 \
    --readiness-probe-action="tcpSocket" \
    --readiness-probe-action-option="port: 8000" \
    --readiness-probe-option="initialDelaySeconds: 30" \
    --readiness-probe-option="periodSeconds: 30" \
    --image=registry-cn-hangzhou-vpc.ack.aliyuncs.com/ack-demo/vllm:v0.6.6 \
    --data=llm-model:/model/DeepSeek-R1-Distill-Qwen-7B \
    "vllm serve /model/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"

    参数说明如下表所示:

    参数

    说明

    参数

    说明

    --name

    指定推理服务名称。

    --version

    指定推理服务版本。

    --gpus

    指定单个推理服务副本需要使用的GPU卡数。推荐1卡。

    --cpu

    指定单个推理服务副本需要使用的CPU资源大小。推荐8vCPU。

    --memory

    指定单个推理服务副本需要使用的内存资源大小。推荐32GiB。

    --replicas

    指定推理服务副本数。

    --label

    通过如下label指定ACS GPU算力

    --label=alibabacloud.com/acs="true"

    --label=alibabacloud.com/compute-class=gpu

    --label=alibabacloud.com/gpu-model-series=example-model

    说明

    请将命令中的gpu-model-series=<example-model>替换为ACS支持的GPU具体型号,目前支持的GPU型号列表请提交工单咨询。

    --restful-port

    指定推理服务对外暴露的端口。

    --readiness-probe-action

    指定就绪探针连接类型,支持httpGetexecgrpctcpSocket

    --readiness-probe-action-option

    指定就绪探针连接方式。

    --readiness-probe-option

    指定就绪探针配置。

    --image

    指定推理服务的镜像地址。

    --data

    挂载共享存储卷PVC到运行环境中。它由两部分组成,通过冒号(:)分隔。冒号左侧是已经准备好的PVC名称。可以通过命令arena data list查看当前集群可用的PVC列表。冒号右侧是想将PVC挂载到运行环境中的路径,也是训练代码要读取数据的本地路径。这样通过挂载的方式,您的代码就可以访问PVC的数据。

    预期输出:

    service/deepseek-r1-v1 created
    deployment.apps/deepseek-r1-v1-custom-serving created
    INFO[0001] The Job deepseek-r1 has been submitted successfully 
    INFO[0001] You can run `arena serve get deepseek-r1 --type custom-serving -n default` to check the job status 
  3. 执行以下命令,查看推理服务详细信息,等待服务就绪。

    arena serve get deepseek-r1

    预期输出:

    Name:       deepseek-r1
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        17m
    Address:    10.100.136.39
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                            STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                            ------   ---  -----  --------  ---  ----
      deepseek-r1-v1-custom-serving-5f59745cbd-bsrdq  Running  17m  1/1    0         1    virtual-kubelet-cn-hangzhou-b
  4. 执行以下命令,查看推理服务是否部署到虚拟节点。

     kubectl get po -owide  |grep deepseek-r1-v1

    预期输出:

    NAME                                             READY   STATUS    RESTARTS   AGE     IP              NODE                            NOMINATED NODE   READINESS GATES
    deepseek-r1-v1-custom-serving-5f59745cbd-r8drs   1/1     Running   0          3m16s   192.168.2.XXX   virtual-kubelet-cn-hangzhou-b   <none>           <none>

    从结果可以看出,推理服务的业务Pod被调度到虚拟节点。

步骤三:验证推理服务

  1. 执行以下命令,在推理服务与本地环境间建立端口转发。

    说明

    请注意kubectl port-forward建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。

    kubectl port-forward svc/deepseek-r1-v1 8000:8000
  2. 使用以下命令,发送模型推理请求。

      curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
          "model": "deepseek-r1", 
          "messages": [
            {
              "role": "user", 
              "content": "你好,DeepSeek。"
            }
          ], 
          "max_tokens": 100, 
          "temperature": 0.7, 
          "top_p": 0.9, 
          "seed": 10
      }'
    

    预期输出:

    {"id":"chatcmpl-cef570252f324ed2b34953b8062f793f","object":"chat.completion","created":1739245450,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"您好!我是由中国的深度求索(DeepSeek)公司独立开发的智能助手DeepSeek-R1,很高兴为您提供服务!\n</think>\n\n您好!我是由中国的深度求索(DeepSeek)公司独立开发的智能助手DeepSeek-R1,很高兴为您提供服务!","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":10,"total_tokens":68,"completion_tokens":58,"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. 清理PVPVC。

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

    预期输出:

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

  • 本页导读 (1)
  • 背景介绍
  • DeepSeek-R1模型
  • KServe
  • Arena
  • 前提条件
  • 操作步骤
  • 步骤一:准备DeepSeek-R1-Distill-Qwen-7B模型文件
  • 步骤二:部署推理服务
  • 步骤三:验证推理服务
  • (可选)步骤四:清理环境
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等