ACS集群形态的LLM大模型推理镜像使用指导

更新时间:
复制为 MD 格式

本文介绍如何在ACS集群中使用ACS LLM推理容器镜像创建工作负载,快速构建LLM推理环境。

前提条件

  • 已创建ACS集群。具体操作,请参见创建ACS集群

  • 已创建带有模型文件的NAS存储卷。

    参考步骤

    1. 开通阿里云NAS

    2. 准备NAS文件系统。大语言模型因其庞大的参数量,需要占用大量的磁盘空间来存储模型文件,建议您创建NAS存储卷来持久化存储模型文件。具体操作,请参见使用NAS动态存储卷动态挂载NAS存储卷。本文示例采用静态挂载NAS存储卷的方式实现,推荐存储空间为20Gi。

      根据以下内容创建PVC。具体操作,请参见创建PVC

      参数

      示例

      名称

      nas-test。

      分配模式

      选择使用挂载点域名创建

      总量

      20Gi。

      挂载点域名

      08cxxxxxxec-wxxxxxxcn-wulanchabu.nas.aliyuncs.com

    3. NAS文件系统挂载到ECS实例上。具体操作,请参见一键挂载NFS协议文件系统

      执行以下命令,将模型下载到NAS文件系统中。

      cd /mnt
      pip install modelscope
      modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir ./Qwen2.5-7B-Instruct
      说明
      • 本文使用的Qwen2.5-7B-Instruct模型大小约为15G,100Mbps带宽下载约需要20分钟左右,您可以根据实际情况调整为Qwen2.5-3BQwen2.5-0.5B等更轻量的模型。

      • 由于modelscope正常运行需要Python版本≥3.10,因此推荐使用Ubuntu 22.04作为ECS实例镜像,其默认Python版本为3.10。您也可以使用其他公共或自定义镜像,确保Python版本≥3.10即可。

ACS LLM推理容器镜像介绍

按照如下示例获取ACS LLM推理容器镜像,以便您在ACS实例上配置工作负载时使用。

说明

镜像名称

镜像Tag

公网镜像地址

VPC镜像地址

说明

inference-xpu-pytorch

25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

  • 以华北2(北京)地域为例:

    acs-registry-vpc.cn-beijing.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

  • 以华北6(乌兰察布)地域为例:

    acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

  • 基础镜像升级PPU SDKv1.4.3-hotfix

  • vLLM版本升级至v0.7.3,提升DeepSeek-V3/R1推理性能。

  • SGLang版本升级至v0.4.3

  • ACCL-P升级至v1.4.3-8、EIC升级至1.3.7.1-v2503,合入对应版本功能和Bug fix。

说明
  • 此镜像支持vLLM大模型推理框架,可以快速且方便地构建大语言模型推理服务。更多信息,请参见vLLM

  • 您可以基于此镜像增量开发自己的镜像,镜像可以存放在您的ACR仓库中,可以提升镜像拉取速度(需额外付费)。

  • 关于镜像内置的核心AI库清单,请参见最新的镜像组件列表

部署大模型推理任务

步骤一:配置无状态工作负载(Deployment)

使用kubectl命令行工具或直接在阿里云ACS控制台操作,创建一个Deployment来部署大模型推理任务。

说明
  • 第一次创建需要拉取镜像,大约需要20分钟左右,您可以在目标集群工作负载>容器组>事件下查看Pod的运行状态。Qwen2.5-7B-Instruct模型加载大约需要5-10分钟。请以实际部署环境为准。

  • 您也可以直接创建一个Pod进行测试,下面是创建PodYAML示例,可快速启动一个真武810E Pod。

    大模型推理Pod YAML示例

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        alibabacloud.com/hpn-type: rdma
        alibabacloud.com/compute-class: gpu-hpn
        app: llm-test
      name: llm-test
    spec:
      containers:
        - command:
          - sh
          - -c
          - python3 -m vllm.entrypoints.openai.api_server --model /mnt/Qwen2.5-7B-Instruct --trust-remote-code --tensor-parallel-size 8   
          image: acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference-xpu:vllm0.4.2-pytorch2.3-cuda12.3-ubuntu22.04
          imagePullPolicy: Always
          name: llm-test
          resources:
            limits:
              cpu: 176
              memory: 1800G
              alibabacloud.com/ppu: 16
            requests:
              cpu: 176
              memory: 1800G
              alibabacloud.com/ppu: 16
          securityContext:
            capabilities: {}
            privileged: false
          terminationMessagePath: /dev/termination-log
          volumeMounts:
            - mountPath: /mnt
              name: data  
            - mountPath: /dev/shm
              name: cache-volume
      volumes:
      - name: data 
        persistentVolumeClaim:
          claimName: nas-pvc-fs #nas-pvc-fs为通过NAS创建的存储声明
      - name: cache-volume
        emptyDir:
          medium: Memory
          sizeLimit: 500G
      dnsPolicy: ClusterFirst
      restartPolicy: Always

控制台方式

以下内容以无状态工作负载的创建为例说明(使用其他方式创建任务是类似的)。

  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 点击使用YAML创建资源使用以下YAML创建无状态工作负载。配置完成后,点击创建

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: llm-test
      name: llm-test
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: llm-test
      template:
        metadata:
          labels:
            alibabacloud.com/hpn-type: rdma
            alibabacloud.com/compute-class: gpu-hpn
            app: llm-test
        spec:
          containers:
            - command:
              - sh
              - -c
              - python3 -m vllm.entrypoints.openai.api_server --model /mnt/Qwen2.5-7B-Instruct --trust-remote-code  --tensor-parallel-size 8  --disable-custom-all-reduce
              # --tensor-parallel-size 8 为8卡并行
              # /mnt/Qwen2.5-7B-Instruct #为模型在pod中的路径
              image: acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference-xpu:vllm0.4.2-pytorch2.3-cuda12.3-ubuntu22.04
              imagePullPolicy: IfNotPresent
              name: llm-test
              resources:
                limits:
                  cpu: 176
                  memory: 1800G
                  alibabacloud.com/ppu: 16
                requests:
                  cpu: 176
                  memory: 1800G
                  alibabacloud.com/ppu: 16
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /mnt #NAS挂载路径
                  name: data
                - mountPath: /dev/shm
                  name: cache-volume
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: nas-pvc-fs #nas-pvc-fs为通过NAS创建的存储声明
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 500G
  4. 返回集群工作负载页面,查看已创建的无状态工作负载Deployment。

    Podrunning状态即为创建成功,Pod启动后会自动启动vLLM serving服务。
  5. 在工作负载的详情 > 日志下查看服务日志,有如下输出则说明服务启动成功。

    image.png

kubectl方式

  1. 通过kubectl客户端连接集群。具体操作,请参见获取集群kubeconfig并通过kubectl工具连接集群

  2. 将以下YAML示例内容写入文件llm-test.yaml。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: llm-test
      name: llm-test
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: llm-test
      template:
        metadata:
          labels:
            alibabacloud.com/hpn-type: rdma
            alibabacloud.com/compute-class: gpu-hpn
            app: llm-test
        spec:
          containers:
            - command:
              - sh
              - -c
              - python3 -m vllm.entrypoints.openai.api_server --model /mnt/Qwen2.5-7B-Instruct --trust-remote-code  --tensor-parallel-size 8  --disable-custom-all-reduce
              # --tensor-parallel-size 8 为8卡并行
              # /mnt/Qwen2.5-7B-Instruct #为模型在pod中的路径
              image: acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference-xpu:vllm0.4.2-pytorch2.3-cuda12.3-ubuntu22.04
              imagePullPolicy: IfNotPresent
              name: llm-test
              resources:
                limits:
                  cpu: 176
                  memory: 1800G
                  alibabacloud.com/ppu: 16
                requests:
                  cpu: 176
                  memory: 1800G
                  alibabacloud.com/ppu: 16
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /mnt #NAS挂载路径
                  name: data
                - mountPath: /dev/shm
                  name: cache-volume
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: nas-pvc-fs #nas-pvc-fs为通过NAS创建的存储声明
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 500G
  3. 通过YAML部署Deployment。

    kubectl --kubeconfig config apply -f llm-test.yaml
  4. 创建成功后,通过以下命令查看Pod是否启动成功。

    PodRunning状态即为启动成功。
    kubectl --kubeconfig config get pods
  5. Pod启动成功后,可以通过kubectl logs查看vLLM服务是否启动成功。

    kubectl --kubeconfig config logs llm-test-68xxxxx9r5tf

步骤二:创建服务

  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

  3. 点击创建,使用以下配置创建llm-svc服务,将服务关联到上一步中创建的工作负载,完成后点击确定

    1. 服务关联:app: llm-test

    2. 端口映射:

      1. 名称:serving

      2. 服务端口:8000

      3. 容器端口:8000

      4. 协议:TCP

  4. 返回服务列表,查看已创建的llm-svc服务。

步骤三:大模型推理测试

  1. Qwen2.5-7B-Instruct模型为例,测试vLLM推理对话功能操作如下:

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

资源清理

使用kubectl命令行工具或直接在阿里云ACS控制台执行资源清理操作。

  • 登录容器计算服务控制台,分别在无状态存储类存储声明页面删除对应资源。

  • 使用kubectl命令行工具删除deployment、StorageClass、PVC。

    #删除deployment的同时会自动清理pod
    kubectl --kubeconfig config delete deployment llm-test
    
    #删除存储类
    kubectl --kubeconfig config delete pvc nas-pvc-fs
    
    #删除存储声明
    kubectl --kubeconfig config delete sc alicloud-nas-fs