使用ACS GPU算力构建DeepSeek蒸馏模型推理服务

更新时间:2025-03-05 05:23:41

在使用容器计算服务 ACS(Container Compute Service)算力时,您无需深入了解底层硬件,也无需涉及GPU节点管理和配置即可开箱即用。ACS部署简单、支持按量付费,非常适合用于LLM推理任务,可以有效降低推理成本。本文介绍如何使用ACS算力部署生产可用的DeepSeek蒸馏模型推理服务。

背景介绍

DeepSeek-R1模型

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

vLLM

vLLM是一个高效易用的大语言模型推理服务框架,vLLM支持包括通义千问在内的多种常见大语言模型。vLLM通过PagedAttention优化、动态批量推理(continuous batching)、模型量化等优化技术,可以取得较好的大语言模型推理效率。更多关于vLLM框架的信息,请参见vLLM GitHub代码库

Arena

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

前提条件

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显存

模型名称

模型版本

模型大小

推荐规格

vCPU

内存

GPU显存

DeepSeek-R1-Distill-Qwen-1.5B

1.5B(15亿参数)

3.55 GB

46

30 GiB

24 GiB

DeepSeek-R1-Distill-Qwen-7B

7B(70亿参数)

15.23 GB

68

32 GiB

24 GiB

DeepSeek-R1-Distill-Llama-8B

8B(80亿参数)

16.06 GB

68

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),本文中使用的推理镜像registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/vllm:v0.6.6占用约5.9 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. 创建PVPVC。为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见静态挂载OSS存储卷

    以下为示例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. 执行下列命令,基于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型号列表请提交工单咨询。

    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=registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/vllm:v0.6.6 \
    --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. 清理PVPVC。

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

    预期输出:

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

相关文档

  • 本页导读 (0)
  • 背景介绍
  • DeepSeek-R1模型
  • vLLM
  • Arena
  • 前提条件
  • GPU实例规格和成本预估
  • 操作步骤
  • 步骤一:准备DeepSeek-R1-Distill-Qwen-7B模型文件
  • 步骤二:部署模型
  • 步骤三:验证推理服务
  • (可选)步骤四:清理环境
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

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