使用ACS GPU算力构建LLM推理服务

容器计算服务 ACS(Container Compute Service)提供了高效、灵活的容器管理和编排能力,为大规模模型的部署与推理提供了强有力的支持。本文介绍如何在ACS上高效利用大模型推理镜像,实现模型服务的快速部署与规模化应用。

准备工作

  1. 获取llm-inference大模型推理容器镜像信息,以便您在ACS实例上配置工作负载时使用。

    1. 登录容器镜像服务控制台

    2. 在左侧导航栏,单击制品中心

    3. 仓库名称搜索框,搜索llm-inference选择目标镜像egslingjun/llm-inference

      egslingjun/llm-inference容器镜像支持vLLM大语言模型推理库及DeepGPU-LLM大语言模型推理引擎,可以帮助您快速构建大语言模型(例如Llama模型、ChatGLM模型、百川Baichuan模型或通义千问Qwen模型)的推理环境。该镜像大概每1个月内更新一次。镜像详情如下所示:

      镜像名称

      镜像Tag

      组件信息

      镜像地址

      llm-inference

      vllm0.4.2-deepgpu-llm24.5-pytorch2.3.0-cuda12.1-ubuntu22.04

      • 基础镜像Ubuntu 22.04

      • Python 3.10

      • Torch 2.3.0

      • CUDA 12.1

      • vLLM 0.4.2

      • deepgpu-llm 24.5+pt2.3cu121

      egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.4.2-deepgpu-llm24.5-pytorch2.3.0-cuda12.1-ubuntu22.04

      vllm0.4.3-deepgpu-llm24.6-pytorch2.4.0-cuda12.4-ubuntu22.04

      • 基础镜像Ubuntu 22.04

      • Python 3.10

      • Torch 2.4.0

      • CUDA 12.4.1

      • vLLM 0.4.3

      • deepgpu-llm 24.6+pt2.4cu124

      egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.4.3-deepgpu-llm24.6-pytorch2.4.0-cuda12.4-ubuntu22.04

      vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04

      • 基础镜像Ubuntu 22.04

      • Python 3.10

      • Torch 2.4.0

      • CUDA 12.4.1

      • vLLM 0.5.4

      • deepgpu-llm 24.7.2+pt2.4cu124

      egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04

      vllm0.6.3-post1-deepgpu-llm24.9-pytorch2.4.0-cuda12.4-ubuntu22.04

      • 基础镜像Ubuntu 22.04

      • Python 3.10

      • Torch 2.4.0

      • CUDA 12.4.1

      • vLLM 0.6.3.post1

      • deepgpu-llm 24.9+pt2.4cu124

      egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.6.3-post1-deepgpu-llm24.9-pytorch2.4.0-cuda12.4-ubuntu22.04

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

  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模型大小约为15G,100Mbps带宽下载约需要20分钟左右,您可以根据实际情况调整为Qwen2.5-3B或Qwen2.5-0.5B等更轻量的模型。

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

部署大模型推理服务

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

    参数

    示例

    名称

    nas-test。

    分配模式

    选择使用挂载点域名创建

    总量

    20Gi。

    挂载点域名

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

  2. 使用kubectl连接到ACS集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

  3. 使用以下内容,创建your-deployment.yaml。

    说明

    关于以下示例中使用的GPU卡具体型号,请参见GPU型号及驱动版本

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: my-deployment
      name: my-deployment
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: my-deployment
      template:
        metadata:
          labels:
            # 指定GPU型号为example-model,请按实际情况填写,如T4
            alibabacloud.com/gpu-model-series: example-model
            # 指定compute-class为gpu类型
            alibabacloud.com/compute-class: gpu
            app: my-deployment
        spec:
          containers:
            - command:
              - sh
              - -c
              - python3 -m vllm.entrypoints.openai.api_server --model /mnt/Qwen2.5-7B-Instruct --trust-remote-code --tensor-parallel-size 1  --disable-custom-all-reduce
              image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
              imagePullPolicy: IfNotPresent #Always
              name: my-deployment
              resources:
                limits:
                  cpu: 16
                  memory: 64Gi
                  nvidia.com/gpu: "1"
                requests:
                  cpu: 16
                  memory: 64Gi
                  nvidia.com/gpu: "1"
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /mnt
                  name: nas-test
                - mountPath: /dev/shm
                  name: cache-volume
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: nas-test
              persistentVolumeClaim:
                # PVC的声明
                claimName: nas-test
            - name: cache-volume
              emptyDir:
                medium: Memory
                sizeLimit: 64G
    ---
    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: my-deployment
      name: svc-llm
      namespace: default
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: serving
        port: 8000
        protocol: TCP
        targetPort: 8000
      selector:
        app: my-deployment
      type: LoadBalancer
  4. 执行以下命令,部署大模型推理任务和对应的service。

    kubectl apply -f your-deployment.yaml
  5. 由于镜像较大,您可以通过执行以下命令持续关注模型部署情况,大约需要20分钟左右。

    kubectl logs -f my-deployment-787b8xxxxx-xxxxx

    当出现以下格式的输出时,说明模型已经部署成功。

    INFO:     Started server process [2]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
    INFO 12-13 12:39:11 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
    INFO 12-13 12:39:21 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
    INFO 12-13 12:39:31 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
    INFO 12-13 12:39:41 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
  6. 执行以下命令,查看部署的Service。

    kubectl get svc

    预期输出:

    NAME         TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
    kubernetes   ClusterIP      10.0.0.1       <none>           443/TCP    3h38m
    svc-llm      LoadBalancer   10.0.143.103   112.xxx.xxx.177  8000/TCP   58s

    其中EXTERNAL-IP为Service对外公开的IP。记录此IP,方便后续进行测试。

测试大模型服务

执行以下命令,输入Prompt等待输出。

export EXTERNAL_IP=112.xxx.xxx.177
curl http://$EXTERNAL_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": "介绍一下深度学习。"}    ]}'

预期输出:

{"id":"chat-edab465b4b5547bda7xxxxxxxxxxxxxxx","object":"chat.completion","created":1734094178,"model":"/mnt/Qwen2.5-7B-Instruct","choices":[{"index":0,"message":{"role":"assistant","content":"深度学习是一种人工智能研究方法,它基于人工神经网络的原理,通过对大量数据进行处理和学习,使得计算机能够模拟人的学习和决策过程。深度学习主要包括卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM)等。这些模型能够识别和分类图像,提取特征,进行自然语言处理,甚至语音识别等任务。深度学习的应用范围非常广泛,包括图像识别、语音识别、自然语言处理、计算机视觉等领域。","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":24,"total_tokens":130,"completion_tokens":106}}%  

至此,使用ACS GPU算力构建LLM推理服务完成。

相关文档