使用ACS快速部署运行在PPU上的DeepSeek V3/R1推理服务

更新时间:
复制为 MD 格式

本文介绍如何使用ACS快速搭建运行在PPU上的DeepSeek V3/R1推理服务。

准备工作

创建ACS集群

本步骤介绍如何通过配置主要参数快速创建一个ACS集群。

关于创建ACS集群的详细配置参数说明,请参见创建ACS集群
  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击页面左上角的创建集群

  3. 创建集群页面,进行如下配置。其余配置项使用默认设置即可。

    配置项

    说明

    示例值

    集群名称

    填写集群的名称。

    ACS-PPU-Inference

    地域

    选择集群所在的地域。

    华北6(乌兰察布)

  4. 单击确认配置,在满足所有依赖检查后,单击创建集群

    集群的创建时间需要约5-10分钟。

创建存储卷

大语言模型因其庞大的参数量,需要占用大量的磁盘空间来存储模型文件,建议您创建NAS存储卷或OSS存储卷来持久化存储模型文件。具体信息,请参见使用ACS快速构建大语言模型数据存储卷

  1. 下载DeepSeek-V3-bf16模型文件,地址:https://hf-mirror.com/opensourcerelease/DeepSeek-V3-bf16/tree/main

  2. 下载DeepSeek-R1-bf16模型文件,地址: https://hf-mirror.com/opensourcerelease/DeepSeek-R1-bf16/tree/main

  3. 下载DeepSeek-V3 FP8模型文件, 地址:https://hf-mirror.com/deepseek-ai/DeepSeek-V3/tree/main

  4. 下载DeepSeek-R1 FP8模型文件, 地址: https://hf-mirror.com/deepseek-ai/DeepSeek-R1/tree/main

说明
  • PPUinference-xpu-pytorch 25.05版本vLLM推理镜像(vLLM0.8.5)开始,支持原生DeepSeek V3/R1 FP8模型和INT8 W8A8量化模型。

  • PPUinference-xpu-pytorch 25.08版本开始 (vLLM0.9.1),支持DeepSeek-V3.1模型,vLLM Server启动命令与以下启动DeepSeek-R1一致。

部署推理服务

使用kubectl命令行工具或直接在阿里云ACS控制台操作,使用PPU GPU算力创建一个Deployment来部署大模型推理任务。建议您使用VPC方式加速拉取AI容器镜像,减少镜像拉取的时间。

  1. ACS控制台集群列表页面,单击集群名称ACS-PPU-Inference。在左侧导航栏,选择工作负载 > 无状态,点击使用YAML创建资源

  2. OSS存储卷为例,分别部署DeepSeek-R1-bf16模型、原生DeepSeek-R1 FP8模型、DeepSeek-R1 INT8量化模型服务。填入如下YAML后,点击创建

    说明

    DeepSeek-R1-bf16模型

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: llm-test
      name: llm-test
      namespace: default
    spec:
      progressDeadlineSeconds: 6000
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: llm-test
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/gpu-model-series: PPU810E
            alibabacloud.com/compute-qos: default
            app: llm-test
        spec:
          imagePullSecrets:
          - name: acs-image-secret #需要和上述步骤一创建Secretname一致
          containers:
          - command:
            - sh
            - -c
            - vllm serve /mnt/llms_data/DeepSeek-R1-bf16/ --tensor-parallel-size 16 --gpu-memory-utilization 0.98 --max-model-len 5500 --trust-remote-code --no-enable-prefix-caching
     # /mnt/llms_data/DeepSeek-R1-bf16/ #为模型在pod中的路径
            image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.05-v1.5.1-vllm0.8.5-torch2.6-cu126-20250604
            imagePullPolicy: IfNotPresent
            name: llm-test
            resources:
              limits:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
              requests:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
              - mountPath: /mnt #OSS挂载路径
                name: data
              - mountPath: /dev/shm
                name: cache-volume
              - mountPath: /ppu-data
                name: ephemeral
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: deepseek-oss #deepseek-oss为通过OSS创建的存储声明
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 500G
            - name: ephemeral
              emptyDir:
                sizeLimit: 200G
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv4
      labels:
        app: llm-test
      name: svc-llm
      namespace: default
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: serving
        port: 8000
        protocol: TCP
        targetPort: 8000
      selector:
        app: llm-test
      type: LoadBalancer

    原生DeepSeek-R1 FP8模型

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: llm-test
      name: llm-test
      namespace: default
    spec:
      progressDeadlineSeconds: 6000
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: llm-test
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/gpu-model-series: PPU810E
            alibabacloud.com/compute-qos: default
            app: llm-test
        spec:
          imagePullSecrets:
          - name: acs-image-secret #需要和上述步骤一创建Secretname一致
          containers:
          - command:
            - sh
            - -c
            - vllm serve /mnt/llms_data/DeepSeek-R1/ --tensor-parallel-size 16 --gpu-memory-utilization 0.98 --trust-remote-code  --quantization moe_wna16 --no-enable-prefix-caching
            # /mnt/llms_data/DeepSeek-R1/ #为模型在pod中的路径
            image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.05-v1.5.1-vllm0.8.5-torch2.6-cu126-20250604
            imagePullPolicy: IfNotPresent
            name: llm-test
            resources:
              limits:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
              requests:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
              - mountPath: /mnt #OSS挂载路径
                name: data
              - mountPath: /dev/shm
                name: cache-volume
              - mountPath: /ppu-data
                name: ephemeral
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: deepseek-oss #deepseek-oss为通过OSS创建的存储声明
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 500G
            - name: ephemeral
              emptyDir:
                sizeLimit: 200G
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv4
      labels:
        app: llm-test
      name: svc-llm
      namespace: default
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: serving
        port: 8000
        protocol: TCP
        targetPort: 8000
      selector:
        app: llm-test
      type: LoadBalancer
    重要
    • 如需使用inference-xpu-pytorch 25.06版本vLLM推理镜像(vLLM0.8.5)运行vllm server服务,需要修改DeepSeek-R1 FP8模型config.json文件。

      config.json文件找到quantization_config相关的内容:

      "quantization_config": {
          "activation_scheme": "dynamic",
          "fmt": "e4m3",
          "quant_method": "fp8",
          "weight_block_size": [
            128,
            128
          ]
        },

      quantization_config替换为以下内容:

      "quantization_config": {
          "bits": 8,
          "group_size": 128,
          "desc_act": false,
          "quant_method": "gptq-fp8",
          "sym": true
        },
    • 如需使用inference-xpu-pytorch 25.08版本运行vllm server服务,则不需要修改DeepSeek-R1 FP8模型config.json文件,命令无需添加--quantization moe_wna16参数。

    DeepSeek-R1 INT8量化模型

    说明

    PPUinference-xpu-pytorch 25.05版本vLLM推理镜像(vLLM0.8.5)开始,支持DeepSeek V3/R1模型AWQ(w4a16)、GPTQ(w4a16、w8a16)、per-token/per-channel a8w8(int8)量化方案。 在vLLM0.8.5上运行通过AWQGPTQ量化的模型需要添加--quantization moe_wna16参数,W8A8-Channel-INT8量化模型的运行步骤与非量化模型相同。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: llm-test
      name: llm-test
      namespace: default
    spec:
      progressDeadlineSeconds: 6000
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: llm-test
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/gpu-model-series: PPU810E
            alibabacloud.com/compute-qos: default
            app: llm-test
        spec:
          imagePullSecrets:
          - name: acs-image-secret #需要和上述步骤一创建Secretname一致
          containers:
          - command:
            - sh
            - -c
            - vllm serve /mnt/llms_data/DeepSeek-R1-GPTQ-INT8/ --tensor-parallel-size 16 --gpu-memory-utilization 0.98 --trust-remote-code --no-enable-prefix-caching --quantization moe_wna16
     # /mnt/llms_data/DeepSeek-R1-GPTQ-INT8/ #为模型在pod中的路径
            image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.05-v1.5.1-vllm0.8.5-torch2.6-cu126-20250604
            imagePullPolicy: IfNotPresent
            name: llm-test
            resources:
              limits:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
              requests:
                cpu: 176
                memory: 1800G
                alibabacloud.com/ppu: 16
                ephemeral-storage: 200Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
              - mountPath: /mnt #OSS挂载路径
                name: data
              - mountPath: /dev/shm
                name: cache-volume
              - mountPath: /ppu-data
                name: ephemeral
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: deepseek-oss #deepseek-oss为通过OSS创建的存储声明
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 500G
            - name: ephemeral
              emptyDir:
                sizeLimit: 200G
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv4
      labels:
        app: llm-test
      name: svc-llm
      namespace: default
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: serving
        port: 8000
        protocol: TCP
        targetPort: 8000
      selector:
        app: llm-test
      type: LoadBalancer
    说明
  3. 第一次创建需要拉取镜像,大约需要20分钟左右,您可以在目标集群工作负载 > 容器组 > 事件下查看Pod的运行状态。

    image.png

  4. Pod 为Running状态即为创建成功,Pod拉起后会自动拉起vLLM serving服务,您可以在目标集群工作负载 > 容器组 > 日志下查看log,有如下输出则说明服务启动成功。

    image.png

验证推理服务

  1. 在容器计算服务控制台中网络 > 服务,可以看到之前创建的svc-llm服务,该服务的外部IP地址(External IP)即为推理服务的公网IP。

  2. 在客户端测试vLLM推理对话功能的操作如下。

    # 将IP改为上一步中创建的服务的外部IP地址
    # model为模型在pod中的路径
    
    curl http://IP:8000/v1/chat/completions \
        -H "Content-Type: application/json" \
        -d '{
        "model": "/mnt/llms_data/DeepSeek-R1-bf16/",  
        "messages": [
        {"role": "system", "content": "你是个友善的AI助手。"},
        {"role": "user", "content": "介绍一下深度学习。"}
        ]}'
    

    预期输出:

    image