容器计算服务 ACS(Container Compute Service)提供了高效、灵活的容器管理和编排能力,为大规模模型的部署与推理提供了强有力的支持。本文介绍如何在ACS上高效利用大模型推理镜像,实现模型服务的快速部署与规模化应用。
准备工作
获取llm-inference大模型推理容器镜像信息,以便您在ACS实例上配置工作负载时使用。
登录容器镜像服务控制台。
在左侧导航栏,单击制品中心。
在仓库名称搜索框,搜索
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
准备NAS文件系统。大语言模型因其庞大的参数量,需要占用大量的磁盘空间来存储模型文件,建议您创建NAS存储卷来持久化存储模型文件。具体操作,请参见静态挂载NAS存储卷或动态挂载NAS存储卷。本文示例采用静态挂载NAS存储卷的方式实现,推荐存储空间为20G。
将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即可。
部署大模型推理服务
根据以下内容创建PVC。具体操作,请参见创建PVC。
参数
示例
名称
nas-test。
分配模式
选择使用挂载点域名创建。
总量
20Gi。
挂载点域名
08cxxxxxxec-wxxxxxxcn-hangzhou.nas.aliyuncs.com
使用kubectl连接到ACS集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
使用以下内容,创建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
执行以下命令,部署大模型推理任务和对应的service。
kubectl apply -f your-deployment.yaml
由于镜像较大,您可以通过执行以下命令持续关注模型部署情况,大约需要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%.
执行以下命令,查看部署的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推理服务完成。
相关文档
更多关于vLLM的详细信息,请参见vllm-project。
更多关于DeepGPU-LLM的详细信息,请参见什么是推理引擎DeepGPU-LLM。