在开始部署操作之前,请务必检查以下CheckList中的条件是否满足
CheckList
适合阅读人群
- 有需要做本地化方案的人群
- AI开发者
新手建议直接上手线上API
- 运维
硬件
- 首先你得有显卡(nvidia),没有可以去租
显存>= 24g
软件
- 操作系统为Linux, 本次以Ubuntu 22.04 为例
- 正确得安装了显卡的驱动, 注意cuda版本应该>=12.4, 执行
nvidia-smi
可以看到如下界面 - 正确的安装了
docker
以及nvidia-docker
、docker-compose
使用docker就不用处理烦人的依赖啦
vllm
核心概念
vllm 是一个高效的大模型
推理库
,通过
PagedAttention
技术高效管理注意力键和值的内存使用,优化推理过程。
以下表格是vllm开发者对自己的介绍, 以及本人使用过程中的实际评价。
特点描述评价先进的吞吐量提供卓越的服务性能,满足高需求的推理工作负载。所言不虚PagedAttention 技术高效管理注意力键和值的内存使用,优化推理过程。所言不虚连续批处理支持无缝批量处理传入请求,显著提升吞吐量,减少延迟。所言不虚快速模型执行通过 CUDA/HIP 图形加速模型的执行效率。所言不虚多种量化选项支持 GPTQ、AWQ、INT4、INT8 和 FP8 等多种量化技术,优化模型的大小和性能。量化模型是显存不足情况下的无奈之举,部分情况下会出现模型抽风的现象(反复输出同样的内容) , 能上满血的满血还是尽量跑满血的模型优化的 CUDA 内核集成 FlashAttention 和 FlashInfer,进一步提升性能。所言不虚推测解码和分块预填充采用先进的解码技术,提高响应速度。确实很快无缝集成 HuggingFace轻松引入流行的 HuggingFace 模型,适用于多种应用场景。在国内的环境使用并不轻松,基本上是网络问题引起的,注意上网方式高吞吐量解码算法支持多种解码策略,如并行采样和束搜索,满足不同需求。一张4090跑7B抗10个并发不是问题🐂并行计算支持提供张量并行和流水线并行,充分发挥分布式推理的优势。如上流式输出功能支持实时应用的流式输出,提升用户体验。实现打字机效果必备 🥳兼容 OpenAI API提供与 OpenAI 框架兼容的 API,简化集成过程。无缝接入, 接入时只需要改初始化的base_url地址即可硬件兼容性支持 NVIDIA GPU、AMD CPU 和 GPU、Intel CPU 和 GPU、PowerPC CPU、TPU,以及 AWS Trainium 和 Inferentia 加速器。目前只尝试了N卡前缀缓存与多 Lora 支持通过前缀缓存和多 Lora 功能,进一步提升模型的性能与灵活性。暂未尝试
部署
准备工作
- 第一步拉取镜像:
sudo docker pull vllm/vllm-openai:v0.6.1
- 下载模型
从HF上下载模型
qwen2.5-7b-instruct
, 下载地址 点击下载
如果速度较慢可以配置加速地址,操作方法如下
exportHF_ENDPOINT=https://hf-mirror.com
之后直接clone repo
git lfs installgit clone https://huggingface.co/Qwen/Qwen2.5-7B-Instruct
下载完成之后的文件列表如下
如果git无法clone下来可以上modelscope或者, 更改上网方式在HF上逐个下载保存到本地
下载完成之后,将模型保存至和docker-compose.yaml同一父目录的models文件夹中便于统一管理
使用docker-compose部署
docker-compose.yaml 文件如下
services:vllm:container_name: vllm
restart: no
image: vllm/vllm-openai:v0.6.1
ipc: host
volumes:- ./models:/models
command:["--model","/models/Qwen2.5-7B-Instruct","--served-model-name","qwen2.5-7b-instruct","--gpu-memory-utilization","0.90"]ports:- 8000:8000deploy:resources:reservations:devices:-driver: nvidia
count: all
capabilities:[gpu]
启动参数解释
–model 模型的路径,vllm会尝试本地有没有这个文件夹以及HF上有没有对应的repo,如果本地没有并且HF上有对应的repo则会自动下载模型
–served-model-name 模型的名称,api调用的时候需要保持一致
–gpu-memory-utilization 占用显存的上限,此参数会影响并发和模型上下文长度,后续本专栏将会提供vllm参数解析
执行命令, 启动vllm
sudo docker compose up -d
查看日志
sudo docker logs -f vllm
查看显存占用
nvidia-smi
使用
import openai
client = openai.OpenAI(
base_url='http://127.0.0.1:8000/v1',
api_key='NOT_NEED')
predict_ret = client.chat.completions.create(
model='qwen2.5-7b-instruct',# 此处名称要和vllm中的served-model-name一致
messages=[{'role':'user','content':'你是谁'}])print(
predict_ret.choices[0].message.content
)
输出如下:
我是阿里云开发的一种超大规模语言模型,我叫Qwen。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑。我会不断学习和进步,不断提升自己的能力。如果您有任何问题或需要帮助,请随时告诉我。
版权归原作者 赛博小钻风 所有, 如有侵权,请联系我们删除。