使用ACS GPU算力构建DeepSeek满血版模型推理服务

更新时间:2025-02-27 08:03:17

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

背景介绍

DeepSeek-R1模型

DeepSeek-R1模型是DeepSeek推出的第一代推理模型,旨在通过大规模强化学习提升大语言模型的推理能力。实验结果表明,DeepSeek-R1在数学推理、编程竞赛等多个任务上表现出色,不仅超过了其他闭源模型,而且在某些任务上接近或超越了OpenAI-O1系列模型。DeepSeek-R1在知识类任务和其他广泛的任务类型中也表现出色,包括创意写作、一般问答等。更多关于DeepSeek模型的信息,请参见DeepSeek AI GitHub仓库

vLLM

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

容器计算服务ACS

容器计算服务ACS2023年推出至今,持续打造更普惠易用、更柔性、更弹性的新一代容器算力。 ACS是以Kubernetes为使用界面的容器服务产品,提供符合容器规范的通用算力和异构算力。容器算力交付模式为Serverless形态,用户无需关注底层节点及集群的运维管理。 通过ACS集成调度、容器运行时、存储、网络等能力,降低了客户使用k8s的运维复杂度,优化了容器算力弹性及柔性使用体验。 通过按量付费、实例弹性和柔性能力,可以极大降低资源使用成本。在大语言模型推理场景中,ACS快速的数据和镜像加速方案,可以进一步优化模型启动时间和资源使用成本。

前提条件

GPU实例规格和成本预估

DeepSeek-R1满血版模型在ACS上不加任何加速,通过消耗16卡时即可完成推理服务部署。ACS GPU单实例部署推荐使用96 GiB显存的资源配置:GPU:16卡(单卡96G显存), CPU:64 vCPU,Memory:512 GiB。您可以参考规格推荐表GPU计算类型卡型规格来选择合适的实例规格。关于如何计算ACS GPU实例产生的费用,请参见计费说明

说明
  • 在使用ACS GPU实例时,实例规格同样遵循ACS Pod规格规整逻辑

  • ACS Pod默认提供30 GiB的免费的临时存储空间(EphemeralStorage),本文中使用的推理镜像占用空间较大。如果该存储空间大小无法满足您的需求,您可以自定义增加临时存储空间大小。详细操作,请参见增加临时存储空间大小

操作步骤

步骤一:准备DeepSeek-R1-GPTQ-INT8模型文件

大语言模型因其庞大的参数量,需要占用大量的磁盘空间来存储模型文件。建议您使用NAS存储卷或OSS存储卷来持久化存储模型文件,以下步骤以使用OSS存储DeepSeek-R1-GPTQ-INT8模型文件作为示例。

说明

提交工单,获取模型文件和YAML部署配置信息

  • 模型文件:DeepSeek-R1-GPTQ-INT8。

  • GPU型号:请将标签alibabacloud.com/gpu-model-series: <example-model>替换为ACS支持的GPU具体型号。详细内容,请参见指定ACS GPU算力

  • 基础镜像:请将containers[].image: <从PDSA获取基础镜像>替换为实际镜像地址。

  • 拉取镜像所需的Secret:获取并创建Secret,再将imagePullSecrets[].name: <从PDSA获取Secret>替换为实际Secret名称。

  1. (可选)若通过本地下载的方式获取模型文件,在OSS中创建目录,将模型上传至OSS。

    说明

    关于ossutil工具的安装和使用方法,请参见安装ossutil

    ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8
    ossutil cp -r /mnt/models/DeepSeek-R1-GPTQ-INT8 oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8
  2. 创建PVPVC:为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见静态挂载OSS存储卷

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

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

    配置项

    说明

    存储卷类型

    OSS

    名称

    llm-model

    访问证书

    配置用于访问OSSAccessKey IDAccessKey Secret。

    Bucket ID

    选择上一步所创建的OSS Bucket。

    OSS Path

    选择模型所在的路径,如/models/DeepSeek-R1-GPTQ-INT8

    以下为示例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-GPTQ-INT8/
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: llm-model
    spec:
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 30Gi
      selector:
        matchLabels:
          alicloud-pvname: llm-model

步骤二:基于ACS GPU算力部署模型文件

  1. 执行下列命令,基于vLLM模型推理框架部署R1模型的推理服务。

    该推理服务暴露与OpenAI兼容的HTTP API。下列命令将模型参数文件视作是一种特殊类型的数据集合,挂载到推理服务容器的指定位置(/data/DeepSeek-R1-GPTQ-INT8)。--max-model-len设置了该模型最大可处理的Token长度,增大该配置项可获得更好的模型对话效果,但是可能会占用更多GPU显存资源(使用DeepSeek-R1-GPTQ-INT8模型建议上下文最大长度在128000左右,并结合--gpu-memory-utilization进行调整)。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deepseek-r1
      namespace: default
      labels:
        app: deepseek-r1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: deepseek-r1
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
      template:
        metadata:
          labels:
            app: deepseek-r1
            alibabacloud.com/compute-class: gpu
            # 指定GPU型号为example-model,请按实际情况填写,如T4
            alibabacloud.com/gpu-model-series: <example-model>
        spec:
          imagePullSecrets:
          - name: <从PDSA获取Secret>
          containers:
          - name: llm-ds-r1
            image: <从PDSA获取基础镜像>
            imagePullPolicy: IfNotPresent
            command:
            - sh
            - -c
            - "vllm serve /data/DeepSeek-R1-GPTQ-INT8 --port 8000 --trust-remote-code --served-model-name ds --max-model-len 128000 --quantization moe_wna16 --gpu-memory-utilization 0.98 --tensor-parallel-size 16"
            resources:
              limits:
                alibabacloud.com/gpu: "16"
                cpu: "64"
                memory: 512Gi
              requests:
                alibabacloud.com/gpu: "16"
                cpu: "64"
                memory: 512Gi
            volumeMounts:
            - name: llm-model
              mountPath: /data/DeepSeek-R1-GPTQ-INT8
            - name: shm
              mountPath: /dev/shm
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model
          - name: shm
            emptyDir:
              medium: Memory
              sizeLimit: 32Gi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: deepseek-r1
    spec:
      type: ClusterIP
      selector:
        app: deepseek-r1
      ports:
        - protocol: TCP
          port: 8000
          targetPort: 8000 

步骤三:验证推理服务

  1. 使用kubectl port-forward在推理服务与本地环境间建立端口转发。

    说明

    请注意kubectl port-forward建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。更多关于Kubernetes集群内生产可用的网络方案的信息,请参见Ingress管理

    kubectl port-forward svc/deepseek-r1 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": "ds",
        "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. 清理模型推理工作负载和服务。

    kubectl delete deployment deepseek-r1
    kubectl delete service deepseek-r1
  2. 清理PVPVC。

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

    预期输出:

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

相关文档

  • 本页导读 (0)
  • 背景介绍
  • DeepSeek-R1模型
  • vLLM
  • 容器计算服务ACS
  • 前提条件
  • GPU实例规格和成本预估
  • 操作步骤
  • 步骤一:准备DeepSeek-R1-GPTQ-INT8模型文件
  • 步骤二:基于ACS GPU算力部署模型文件
  • 步骤三:验证推理服务
  • (可选)步骤四:清理环境
  • 相关文档