使用ACS快速部署运行在PPU上的Qwen3推理服务

更新时间:
复制为 MD 格式

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

背景信息

  • Qwen3Qwen系列大型语言模型的最新成员,包括旗舰模型Qwen3-235B-A22B,在代码、数学和通用能力等基准测试中表现优异。

  • Qwen3通过引入混合推理设计和混合专家架构(MoE)大幅度提升了模型推理能力‌。

  • 此外,小型MoE模型Qwen3-30B-A3B仅用较少的激活参数和计算资源,即可实现更高效的推理性能。

准备工作

创建ACS集群

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

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

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

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

    配置项

    说明

    示例值

    集群名称

    填写集群的名称。

    ACS-PPU-Inference

    地域

    选择集群所在的地域。

    华北6(乌兰察布)

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

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

部署推理算力

准备模型文件

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

  1. Qwen3-235B-A22B 模型文件,地址:https://www.modelscope.cn/models/Qwen/Qwen3-235B-A22B/files

  2. Qwen3-30B-A3B 模型文件,地址: https://www.modelscope.cn/models/Qwen/Qwen3-30B-A3B/files

  3. Qwen3-32B 模型文件,地址:https://www.modelscope.cn/models/Qwen/Qwen3-32B/files

  4. Qwen3-235B-A22B FP8模型文件,地址:https://www.modelscope.cn/models/Qwen/Qwen3-235B-A22B-FP8/files

  5. Qwen3-30B-A3B FP8模型文件,地址:https://www.modelscope.cn/models/Qwen/Qwen3-30B-A3B-FP8/files

  6. Qwen3-32B FP8模型文件,地址:https://www.modelscope.cn/models/Qwen/Qwen3-32B-FP8

说明

PPUinference-xpu-pytorch 25.05版本vLLM推理镜像(vLLM0.8.5)开始,支持原生Qwen3 BF16/FP8精度模型和AWQ/GPTQ量化模型。

部署GPU算力

使用kubectl命令行工具或直接在容器计算服务管理控制台操作,创建一个Deployment来部署大模型推理任务。

  1. ACS控制台中,选中工作负载中的无状态,点击使用YAML创建资源

  2. NAS存储卷为例,分别部署Qwen3 BF16、FP8、 INT8模型服务,YAML示例如下。

    建议您使用VPC方式加速拉取AI容器镜像,减少镜像拉取的时间。

    Qwen3 BF16模型

    部署Qwen3 BF16模型推理服务,填入如下YAML,点击创建

    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/Qwen3-235B-A22B/ --tensor-parallel-size 16 --gpu-memory-utilization 0.98 --trust-remote-code
            # /mnt/llms_data/Qwen3-235B-A22B/ #为qwen3模型在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 #NAS挂载路径
                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: qwen-nas #qwen-nas为通过NAS创建的存储声明
            - 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

    Qwen3 FP8模型

    部署Qwen3 FP8模型推理服务,填入如下YAML,点击创建

    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/Qwen3-235B-A22B-FP8/ --tensor-parallel-size 4 --gpu-memory-utilization 0.98 --trust-remote-code --quantization moe_wna16
            # /mnt/llms_data/Qwen3-235B-A22B-FP8/ #为qwen3模型在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: 32
                memory: 256Gi
                alibabacloud.com/ppu: 4
                ephemeral-storage: 200Gi
              requests:
                cpu: 32
                memory: 256Gi
                alibabacloud.com/ppu: 4
                ephemeral-storage: 200Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
              - mountPath: /mnt #NAS挂载路径
                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: qwen-nas #qwen-nas为通过NAS创建的存储声明
            - 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

    Qwen3 INT8模型

    部署Qwen3 INT8量化模型推理服务,填入如下YAML,点击创建

    说明

    AWQ/GPTQ量化模型的运行步骤与非量化模型相同,区别仅在于需要额外传入--quantization moe_wna16,W8A8-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/Qwen3-235B-A22B-GPTQ-Int8 --tensor-parallel-size 4 --gpu-memory-utilization 0.98 --trust-remote-code  --quantization moe_wna16
            # /mnt/llms_data/Qwen3-235B-A22B-GPTQ-Int8/ #为qwen3模型在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: 32
                memory: 256Gi
                alibabacloud.com/ppu: 4
                ephemeral-storage: 200Gi
              requests:
                cpu: 32
                memory: 256Gi
                alibabacloud.com/ppu: 4
                ephemeral-storage: 200Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
              - mountPath: /mnt #NAS挂载路径
                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: qwen-nas #qwen-nas为通过NAS创建的存储声明
            - 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
    说明
    • GPU相关Annotation,请参见GPU

    • PPU规格,请参见附录

  3. 第一次创建需要拉取镜像,大约需要20分钟左右,您可以在目标集群工作负载 > 容器组 > 事件下查看Pod的运行状态

    image.png

  4. PodRunning状态即为创建成功,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/Qwen3-235B-A22B/",  
        "messages": [
        {"role": "system", "content": "你是个友善的AI助手。"},
        {"role": "user", "content": "介绍一下深度学习。"}
        ]}'
    
  3. 输出如下图所示:image

附录

PPU Pod规格表

PPU

vCPU

Memory(GiB)

Memory支持步长(GiB)

临时存储(GiB)

1

2

2-16

1

30G ~ 384G

4

4-32

1

6

6-48

1

8

8-64

1

10

10-80

1

2

4

4-32

1

30G ~ 768G

6

6-48

1

8

8-64

1

16

16-128

1

22

32,64,128,225

N/A

4

8

8-64

1

30G ~ 1.5T

16

16-128

1

32

32,64,128,256

N/A

44

64,128,256,450

N/A

8

16

16-128

1

30G ~ 3T

32

32,64,128,256

N/A

64

64,128,256,512

N/A

88

128,256,512,900

N/A

16

32

32,64,128,256

N/A

30G~6T

64

64,128,256,512

N/A

128

128,256,512,1024

N/A

176

256,512,1024,1800

N/A