**前言:**真是学无止境啊,最近也是接触到了一些新东西,更觉前路漫漫。最值得加深印象的应该是环境隔离。开始时,我竟然直接pip安装了,可能也是因为不知道安装的是个什么概念。然后就引发了一系列环境冲突问题。跑不同工具、做不同实验,都应该创建独立虚拟环境。
vLLM
vLLM (Virtualized Large Language Model)是一个专为大型语言模型推理和服务设计的 高性能开源框架 。就是用来在 GPU 上高速跑开源大模型,对外提供推理服务的 ,是大模型推理引擎。
由加州大学伯克利分校的研究团队开发,旨在解决大模型在推理过程中面临的硬件成本高和效率瓶颈等挑战,实现快速、低成本地部署LLM服务。
两大核心技术
1. PagedAttention 分页注意力(显存优化)
传统推理:每个对话请求分配连续的 GPU 显存块存放 KV Cache,会产生大量显存碎片,并发上不去,长上下文很吃显存。
vLLM 做法:
- 把显存切为固定大小的物理 Block 块(默认 16token),KV 缓存分散存到不连续物理块;
- 每个请求维护一张页表,记录该请求逻辑块映射到哪些物理块;
- 按需分配、用完回收,消除内存碎片,极大提升单卡并发数量,长上下文场景收益巨大。
2. Continuous Batching 连续批处理
传统静态 batch:一批请求全部完成,才接收下一批请求,GPU 经常空闲。
连续批:每一步迭代动态混合新请求 (Prefill) 和老请求 (Decode),不用等全部结束,最大化 GPU 利用率,吞吐量提升数倍~二十倍NVIDIA
优点:吞吐(单位时间,一共能输出多少 token;能同时处理多少请求)极高、显存利用率优秀、长上下文友好、生产生态成熟。
(bushi 这不就是计组的存储机制和流水线机制吗!!!年少不知计组好,后悔当初没有好好学清楚了uuu~ 真是了解的越多越发现很多东西思想都是一样的)
vLLM 和主流推理方案横向对比
| 方案 | 核心技术 | 主要优势 | 短板 | 适合场景 |
|---|---|---|---|---|
| 原生 transformers (HF) | 普通 KV‑Cache,静态 batch | 兼容性最好,调试方便,直接写 Python 代码 | 并发一高就爆显存,GPU 利用率低 | 实验调试、单请求本地测试,不做线上 API 服务 |
| Ollama | llama.cpp GGUF 量化 | 跨 Windows/Mac/Linux,一行命令跑模型,开箱即用 | 高并发弱,生产监控能力弱 | 个人学习、Demo 原型、低并发内部小工具 |
| vLLM | PagedAttention + Continuous Batching | 生态最完善,模型兼容广,社区资料多,OpenAI API 完备,分布式 TP/PP 成熟 | 结构化输出要外接 outlines;冷启动加载慢 | 工业生产服务、高并发 API、长文本、通用私有化部署 |
| SGLang | RadixAttention(前缀缓存) | Agent 工具调用、JSON 结构化生成很强;共享 Prompt 场景性能强;MoE 模型友好 | 生态比 vLLM 略小,部分新模型适配慢 | Agent 应用、大量 Few‑shot、需要严格 JSON 输出的业务 |
| TensorRT‑LLM(NVIDIA) | CUDA 底层算子手工优化 | 单请求延迟最低,极致硬件压榨,FP8 能力强 | 需要模型编译转换,编译耗时久;模型更新要重新编译,灵活性差 | 固定模型、追求极致性能的线上服务;不适合频繁换模型的场景 |
- transformers:基础工具箱,能干,但性能没做优化,适合写代码做实验,不适合对外提供 API。
- Ollama:玩具级快速跑模型,适合自己玩;并发上来性能直接垮掉,不适合多用户生产环境。
- vLLM :通用生产主力,什么模型基本都能跑,坑少文档多,大部分私有化项目首选。
- SGLang:Agent / 结构化输出专精,如果你大量调用工具、强制输出 JSON,优先选它。
- TensorRT‑LLM:榨干显卡极限性能,代价是每次换模型要编译,灵活性差。
安装
苯人是windows系统,官方推荐使用 WSL2
确认 NVIDIA Windows 驱动
bash
nvidia-smi

我的驱动支持到 CUDA 12.7,vLLM 0.8.5 的官方文档指明其预编译 CUDA 二进制为 CUDA 12.1(再新得我就不支持了)
查看支持版本
- 打开 vLLM 官方文档:https://docs.vllm.ai/
- 右下角版本切换选择
v0.8.5

- 导航栏:
Getting Started → Installation → GPU - 在页面开头就写:vLLM contains pre-compiled C++ and CUDA (12.1) binaries.

安装步骤也是有的,这里也是提示了要创建一个新环境的!!!我真的笨蛋呀,开始还用豆包,还被豆包耍的团团转,这种环境安装还是自己去确认文档比较好!

那我还是做完全程吧
进入 WSL
查看发行版
bash
wsl -l -v
进入Ubuntu
bash
wsl -d Ubuntu-22.04
在 WSL 中安装固定版本
安装uv
bash
sudo apt update # 更新 Ubuntu/Debian 系统的软件包列表,确保能安装最新版本的软件
sudo apt install -y python3-pip python3-venv # 安装 Python3 的包管理工具 pip 和虚拟环境工具 venv
python3 -m venv ~/.uv-bootstrap # 创建一个名为 .uv-bootstrap 的 Python 虚拟环境
~/.uv-bootstrap/bin/pip install -U uv \
-i https://mirrors.aliyun.com/pypi/simple # 使用刚创建的虚拟环境中的 pip 来安装 uv,使用阿里云的 PyPI 镜像源
export PATH="$HOME/.uv-bootstrap/bin:$PATH" # 将虚拟环境的 bin 目录添加到系统 PATH 环境变量中,这样可以直接在终端使用 uv 命令
uv --version # 验证安装是否成功,显示 uv 的版本号
可以将PATH配置追加写入bash启动文件,以后每次打开 WSL 都能直接使用
uv
bash
echo 'export PATH="$HOME/.uv-bootstrap/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
把项目和环境放在 WSL 的 Linux 文件系统中,而不是 /mnt/c,速度更快
bash
cd ~ # 切换目录到当前用户的家目录
mkdir -p ~/vllm # 创建一个名为 vllm 的文件夹
cd ~/vllm # 进入刚才创建的这个 vllm 文件夹
创建独立环境
bash
uv venv --python 3.12 --seed --managed-python # 使用 uv 创建虚拟环境,速度比传统 python3 -m venv 快很多
source .venv/bin/activate
安装固定版本
bash
export UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple # 设置 uv 工具的默认下载源为阿里云镜像
uv pip install "vllm==0.8.5" --torch-backend=cu124
关键是固定 vllm==0.8.5,不要执行不带版本号的 uv pip install vllm(会直接下载最新版)
(有没有人问怎么是cu124呢?--torch-backend=cu124 只控制PyTorch用哪个 CUDA 后端,不会改变 vLLM 的 CUDA 编译版本。显卡驱动可以在同一个进程,同时加载多个不同小版本的 CUDA runtime 库,是驱动层支持的,是允许共存的,不会冲突,大版本一致即可,12.x配12.x)
验证
bash
python -c "import torch, vllm; print('vLLM:', vllm.__version__); print('Torch:', torch.__version__, torch.version.cuda); print('CUDA:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0))"
用小模型测试
苯人之前已经下载了一个Qwen3.5的模型,这里就直接使用了
bash
vllm serve ~/models/Qwen3.5-4B \
--host 127.0.0.1 \
--port 8000 \
--dtype half \
--gpu-memory-utilization 0.8 \
--max-model-len 4096
居然报错了!!!表示 vLLM 0.8.5 与当前环境中的 transformers 版本不匹配
bash
AttributeError: Qwen2Tokenizer has no attribute all_special_tokens_extended
看来之前确实一起安装了transformers,但 vLLM 的依赖没有阻止解析到最新 Transformers 5.14.1(我现在的版本)
降级transformers
bash
uv pip install --reinstall "transformers==4.51.3"
报错
bash
raise ValueError(
ValueError: The checkpoint you are trying to load has model type qwen3_5 but Transformers does not recognize this architecture. This could be because of an issue with the checkpoint, or because your version of Transformers is out of date.)
降级后的 Transformers 4.51.3 能配合 vLLM 0.8.5,但它太旧,不认识 Qwen3.5 的 qwen3_5 架构。哎呀,这个模型也要去核对一下!
部署
先查看一下当前版本vLLM支持的模型

再去 HF-Mirror (一个公益项目,致力于帮助国内AI开发者快速、稳定的下载模型、数据集)下载,这个也是新学到的,嘻嘻

然后我要将模型下载在models目录下
bash
cd ~/models
~/hfd.sh Qwen/Qwen2-VL-2B-Instruct
模型是下载好了,驱动都正常了......但普通电脑好像真的不适合用?一直OOM,还是到此为止了......
一些tips
conda 环境是存放在系统统一目录,文件夹和环境没有直观对应;
uv 的默认模式是项目目录下放
.venv,看文件夹就知道环境在哪,删除整个.venv就销毁全部依赖,清理非常方便。
在 Windows CMD 里面输入wsl启动 WSL时,WSL 会继承 CMD 当前所在目录,直接进入/mnt/c/Users/xxx,也就是 Windows 用户目录!开始菜单打开「Ubuntu」应用图标,进入的才是 Linux 家目录
~/ (/home/User)。
WSL 读写 /mnt/c 速度很慢,记得执行 cd ~切回 Linux 家目录再执行操作