vLLM 实战

本文介绍了 vLLM 框架,它比 Hugging Face Transformers 和 TGI 框架具有更高的吞吐量。通过实战分析 `offline_inference` 示例,展示了如何配置调试环境、下载模型并复现流程。vLLM 的关键技术和优势包括 KVCache 显存优化、PagedAttention 和 Continuous Batching,提供了便捷的调试和快速的推理性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

随着人工智能技术的飞速发展,以及今年以来 ChatGPT 的爆火,大语言模型 (Large Language Model, LLM) 受到越来越多的关注。

为了实现 LLM 部署时的推理优化,全球各地有众多团队做出了各种优化框架。本文以加州大学伯克利分校开发的 vLLM 框架为例,进行实战探索。

1. 整体介绍

根据公开文档中的实验结果, vLLM 吞吐量比 Hugging Face Transformers 高出 24 倍,比 TGI 高出 3.5 倍。

c78f68ab6d900f3595edd2647edd06e3.png

vLLM 整体框架如下图所示。

69bc9c9da0f93d074b499906e7c3edfc.jpeg

其中的关键技术点包括:

  • KVCache 显存优化

  • PagedAttention

  • Continuous Batching

笔者通过实际使用,认为该框架优点如下:

  • 调试方便: 主框架由 Python 实现,便于用户断点调试。

  • 系统设计工整规范: LLMEngine、Scheduler、Worker 结构清晰,初学者可以方便地理清脉络。

  • 推理速度快: 经过理论计算与实测, 8 卡 A100-40G 足以支持千人试用。

2. offline_inference 示例复现分析

(1) 调试环境配置

为方便复现,笔者制作了 dockerfile 用于编译 base 镜像,base 镜像把 vllm 的依赖库都安装好,基于 base 镜像直接再安装 vllm 库即可复现。

docker build -t vllm_ci-benchmark:base -f ci/docker/ci-benchmark-base.dockerfile .

docker build -t vllm_ci-benchmark:v1 -f&
### 关于 vLLM 的教程和使用指南 vLLM 是一种高效的推理框架,支持多种大语言模型的部署和服务化。以下是基于提供的参考资料以及专业知识整理的内容。 #### 1. 官方中文教程:快速入门 根据官方文档说明,可以通过以下命令启动 `Qwen2.5-1.5B-Instruct` 模型的服务端[^1]: ```bash vllm serve Qwen/Qwen2.5-1.5B-Instruct ``` 此命令会自动下载指定模型并初始化服务环境。对于初学者来说,这是最简单的上手方式之一。 #### 2. 部署 Qwen2VL API 的实战案例 如果目标是部署多模态模型(如 Qwen2VL),可以参考一篇详细的博文介绍[^2]。它涵盖了从基础到高级的技术细节,包括但不限于以下几个方面: - **Docker 化部署**:利用容器技术简化开发与生产环境的一致性管理。 ```dockerfile FROM python:3.9-slim RUN pip install --upgrade pip && \ pip install transformers vllm torch COPY . /app/ CMD ["sh", "-c", "vllm serve Qwen/Qwen2VL"] ``` - **性能调优**:针对不同硬件配置调整批处理大小、线程数等参数以提升吞吐量。 #### 3. Python 实战应用指南 除了上述内容外,《Python vLLM 实战应用指南》还提到了更多实用技巧[^3]。例如安装依赖项的方法如下所示: ```bash pip install vllm ``` 接着,在脚本中加载远程仓库中的预训练权重或者本地文件夹内的自定义版本均可实现无缝切换功能演示代码片段: ```python from vllm import LLM, SamplingParams # 初始化模型实例 model_path = 'Qwen/Qwen2.5-1.5B-Instruct' # 或者指向本地路径 llm = LLM(model=model_path) # 设置采样策略 sampling_params = SamplingParams(temperature=0.8, top_p=0.95) # 输入提示词进行预测 prompts = ['你好', '今天天气怎么样?'] outputs = llm.generate(prompts=prompts, sampling_params=sampling_params) for output in outputs: prompt_token_ids = output.prompt_token_ids generated_token_ids = output.generated_token_ids print(f"Prompt token IDs: {prompt_token_ids}") print(f"Generated token IDs: {generated_token_ids}") ``` 以上示例展示了如何通过编程接口访问核心能力的同时保持灵活性。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值