在人工智能领域,每一次技术的革新都预示着新的可能性和机遇。继 ollama 之后,VLLM作为新一代开源跨平台大型模型工具,正以其独特的魅力和强大的功能,吸引着全球开发者与研究者的目光。
vLLM 是什么?
vLLM 是一个专为大规模语言模型(LLM)推理和部署优化的开源框架,由加州大学伯克利分校的研究团队开发。它通过创新的显存管理技术和高效的并行计算策略,显著提升了模型推理速度、吞吐量和显存利用率,尤其适合在生产环境中部署千亿参数级别的模型(如 Llama、GPT、Mixtral 等)。发现一个比较有意思的事情,就是vLLM中的v存在歧义,官网没查出来,查了许多资料都没有确定这个V到底指的是什么,有说是virtual虚拟的、有说是very很大的、也有说是visual可视化的,甚至连百度查询多次都有不同答案的,让我越查越懵哈哈哈。。。
为什么需要 vLLM?
在大语言模型时代,开发者面临两大核心挑战:
显存爆炸
传统框架(如 HuggingFace Transformers)加载模型时,显存占用极高。例如,一个 70B 参数的模型需要 140GB 显存,远超单张 GPU 的容量。推理效率低下
静态批处理(Static Batching)导致 GPU 空闲等待,高并发场景下吞吐量骤降,无法满足实时性要求(如客服机器人)。
vLLM 的解决方案:
显存利用率提升至 90%+,支持在单卡运行更大的模型。
吞吐量达到传统框架的 2-4 倍,每秒处理数百请求。
完全兼容 OpenAI API 协议,无缝对接现有 AI 应用生态。
vLLM 的三大核心技术
PagedAttention:显存管理的革命
问题:传统框架的 KV Cache(键值缓存)造成显存碎片化,类似手机内存被零散占用。
突破:将 KV Cache 划分为可动态分配的“内存块”,模仿操作系统的虚拟内存分页机制。
效果:
显存浪费减少 70%,支持超长上下文(如 32K tokens)。
允许多个请求共享显存块,提升并发能力。
(动态分配显存块,支持并行处理多个请求)
连续批处理(Continuous Batching)
传统瓶颈:静态批处理要求所有请求同时开始和结束,导致 GPU 空闲。
vLLM 方案:动态合并处于不同生成阶段的请求,让 GPU 始终满载运行。
结果:
吞吐量提升 3-6 倍,尤其适合高并发场景(如聊天机器人)。
平均响应延迟降低 50%。
硬件优化与量化支持
多硬件适配:
支持 NVIDIA/AMD GPU、CPU 卸载、多卡张量并行。
自动优化底层计算内核(如 FlashAttention-2)。
量化技术:
支持 4-bit AWQ、3-bit GPTQ 量化,显存需求降低 40-70%。
例如:70B 模型从 140GB → 40GB(AWQ 量化)。
vLLM 的典型应用场景
vLLM vs. 传统框架
vLLM安装与使用
vLLM 是一个 Python 库,包含预编译的 C++ 和 CUDA (12.1) 二进制文件。
依赖环境
操作系统:Linux
Python:3.8 - 3.12
GPU:计算能力 7.0 或更高(例如 V100、T4、RTX20xx、A100、L4、H100 等)
以下使用 anaconda 方式创建新环境安装
conda create -n vllm python=3.12 -y
conda activate vllm
pip install vllm # 下载速度慢的话记得加上镜像源 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
pip install modelscope
下载模型保存到本地,我挑了个deepseek的蒸馏版本下载:https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B,进入python环境执行以下命令
#模型下载到本地。
from modelscope import snapshot_download
model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B',cache_dir="/root/llm/models")
下载完成后查看保存目录,然后使用vllm运行
ls /root/llm/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
vllm serve /root/llm/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
不过很尴尬,报错了查了一下AI,说是没有C语言相关编译环境,安装一下就好了
sudo apt-get install build-essential
于是接着重新运行 vllm serve语句,又报错
又AI了一把,说是要调大这个 gpu_memory_utilization 的参数值,最大是1,最小是0,大致意思是能用到显存的百分比是多少,默认值是0.9,即90%,于是我调到0.95后重新运行,还是一样,再调到0.99再试,还是一样,哪怕根据提示调整 max_model_len的值也一样,最终我发现调这些没用,因为即使全部显存(6G)都不够运行这个模型的,查了一下需要16G~_~根本原因还是超纲了,于是我换成另外一个模型 Qwen/Qwen2.5-0.5B-Instruct ,最终成功运行
客户端测试
from openai import OpenAI
client = OpenAI(
base_url="http://192.168.3.77:8000/v1", # 这里如果使用 localhost 或 127.0.0.1 报错拒绝连接的话就用具体IP
api_key="token-abc123"
)
completion = client.chat.completions.create(
model="/root/llm/models/Qwen/Qwen2.5-0.5B-Instruct",
messages=[
{"role": "user", "content": "请使用java编写堆排序!"}
]
)
print(completion.choices[0].message)
我将上述代码写进test.py文件保存执行后正常打印输出