vLLM(Vectorized Large Language Model)是一个高性能的大型语言模型推理库,支持多种模型格式和后端加速,适用于大规模语言模型的推理服务部署。本文以Qwen-7B-Chat-Int8模型、GPU类型为V100卡为例,演示如何部署一个vLLM推理服务。
关于vLLM的详细信息,请参见vllm-project。
前提条件
已创建托管GPU集群或专有GPU集群,且集群版本需为1.22及以上,并指定CUDA版本为12.0及以上。具体操作,请参见创建GPU集群或创建专有GPU集群。
建议GPU节点使用525版本驱动,您可以通过为GPU节点池添加标签
ack.aliyun.com/nvidia-driver-version:525.105.17
指定驱动版本为525.105.17。具体操作,请参见通过指定版本号自定义节点GPU驱动版本。已安装ack-kserve️组件。具体操作,请参见安装ack-kserve️。
已安装Arena客户端,且版本不低于0.9.15。具体操作,请参见配置Arena客户端。
已开通阿里云对象存储(OSS)服务。具体操作,请参见开通OSS服务。
步骤一:准备模型数据并上传OSS Bucket
您可以使用OSS或NAS准备模型数据,具体操作,请参见使用OSS静态存储卷、使用NAS静态存储卷。本文以OSS为例说明如何准备模型数据。
下载模型。本文以Qwen-7B-Chat-Int8模型为例。
执行以下命令,安装Git。
sudo yum install git
执行以下命令,安装Git LFS(Large File Support)插件。
sudo yum install git-lfs
执行以下命令,将ModelScope上的Qwen-7B-Chat-Int8仓库克隆到本地。
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git
执行以下命令,进入Qwen-7B-Chat-Int8仓库目录。
cd Qwen-7B-Chat-Int8
执行以下命令,在Qwen-7B-Chat-Int8目录下,下载LFS管理的大文件。
git lfs pull
将下载的Qwen-7B-Chat-Int8文件上传至OSS。
为目标集群配置名为llm-model的存储卷PV和存储声明PVC。具体操作,请参见使用OSS静态存储卷。
以下为示例PV的基本配置信息:
配置项
说明
存储卷类型
OSS
名称
llm-model
访问证书
配置用于访问OSS的AccessKey ID和AccessKey Secret。
Bucket ID
选择步骤2中创建的OSS Bucket。
OSS Path
选择模型所在的路径,如/Qwen-7B-Chat-Int8。
以下为示例PVC的基本配置信息:
配置项
说明
存储声明类型
OSS
名称
llm-model
分配模式
选择已有存储卷。
已有存储卷
单击选择已有存储卷链接,选择已创建的存储卷PV。
步骤二:部署推理服务
执行以下命令,检查集群中可用的GPU资源。
arena top node
输出结果会显示可用于运行推理服务的GPU节点个数。
执行以下命令,启动名称为
vllm
的推理服务。arena serve kserve \ --name=qwen \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data="llm-model:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"
参数说明如下所示:
参数
是否必选
说明
--name
是
提交的推理服务名称,全局唯一。
--image
是
推理服务的镜像地址。
--gpus
否
推理服务需要使用的GPU卡数。默认值为0。
--cpu
否
推理服务需要使用的CPU数。
--memory
否
推理服务需要使用的内存数量。
--data
否
服务的模型地址,本文指定模型的存储为llm-model,挂载到容器中的/mnt/models/目录下。
预期输出:
inferenceservice.serving.kserve.io/qwen created INFO[0006] The Job qwen has been submitted successfully INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job status
输出结果表明推理服务已部署成功。
步骤三:验证推理服务
执行以下命令,查看KServe推理服务的部署情况。
arena serve get qwen
预期输出:
输出结果表明,KServe推理服务部署成功,模型访问地址为
http://qwen-default.example.com
。执行以下命令,使用获取到的Nginx Ingress网关地址访问推理服务。
# 获取Nginx ingress的IP地址。 NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}') # 获取Inference Service的Hostname。 SERVICE_HOSTNAME=$(kubectl get inferenceservice qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3) # 发送请求访问推理服务。 curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "测试一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
预期输出:
输出结果表明请求被正确地发送到了服务,并且服务返回了一个预期的JSON响应。
(可选)步骤四:删除推理服务
在执行删除操作前,请确保不再需要该服务及其相关资源。
执行以下命令,删除推理服务。
arena serve delete qwen
相关文档
您可以配置Prometheus监控追踪服务状态和及时发现并解决问题。具体操作,请参见配置Prometheus监控。
如需了解如何基于KServe实现模型加速,请参见使用Fluid实现模型加速。