SM75 架构,本站开发了 caovan vLLM SM75 Turbo3 v0.1.1 外部插件:它不会覆盖 vLLM 源码,不绑定模型目录,也不要求 NVLink;用户仍然使用自己的 vllm serve 命令,只需添加启用参数即可尝试加速兼容的 GatedDeltaNet(GDN)+ MTP 文本解码路径。在作者验证环境中,固定纯文本请求的平均生成速度由约 40+ tokens/s 提升至约 60+ tokens/s,参考提升约 50%。一、先说结论:这个插件解决什么问题?
本地部署大模型时,很多朋友会把注意力放在“换更大的显卡”或“更换更激进的量化模型”上。但如果推理框架中的底层 GPU 计算并没有针对旧架构做好优化,即使模型能够运行,显卡本身的性能也可能没有被真正压榨出来。
caovan vLLM SM75 Turbo3 的目标很明确:在不替换用户模型、不强制缩短上下文、不关闭多模态入口的前提下,为 RTX 2080 Ti / Turing SM75 提供一条更高效的 vLLM 文本解码路径。
一句话理解:你还是运行自己的模型、自己的参数、自己的服务;Turbo3 只是在满足条件时,把显卡反复执行的某段底层解码计算换成更适合 RTX 2080 Ti 的高速实现。
二、v0.1.1 为什么叫“外部插件版”?
早期开发测试中,为了快速验证内核效果,补丁曾经通过替换 vLLM 内部源码文件接入运行流程。这种方式适合研发,但不适合公开发布:用户的 vLLM 版本、模型类型、量化格式和部署路径各不相同,直接覆盖源码容易产生兼容问题。
从 v0.1.1 开始,Turbo3 已整理为独立的 Python wheel 外部插件包:
- 使用 vLLM 的
vllm.general_plugins插件入口加载; - 通过 vLLM 已有的
--additional-config参数显式启用; - 不覆盖用户的
site-packages/vllm/源码目录; - 不写死用户的模型路径、端口、量化格式或上下文参数;
- 卸载时只需要
pip uninstall,无需恢复 vLLM 文件。
需要注意:外部插件不等于“所有 vLLM 版本和所有模型都自动获得提速”。Turbo3 运行时仍需要挂接 vLLM 中兼容的 GDN + MTP 执行链,因此不同 vLLM 版本、不同模型应先运行自检与实际任务验证。
三、哪些用户适合测试 Turbo3?
| 项目 | 说明 |
|---|---|
| 目标显卡 | NVIDIA RTX 2080 Ti 或其他 Turing sm_75 显卡;本文重点验证对象为 RTX 2080 Ti 22GB。 |
| 目标模型结构 | 运行时进入 GatedDeltaNet(GDN)+ MTP speculative decode 路径的模型,例如部分 Qwen3.5 / Qwen3.6 模型。 |
| 量化格式 | 插件不按 AutoRound、AWQ、GPTQ 或非量化格式硬编码限制;是否生效与收益大小,应实际验证。 |
| NVLink | 不需要。当前公开版本不包含 NVLink 专属通信优化。 |
| 多模态 | 不会关闭多模态入口;当前版本主攻文本 / MTP 解码速度,暂不专门优化视觉编码阶段。 |
| 上下文长度 | 插件不强制用户修改;作者验证时保留了 262144 上下文配置。 |
四、Turbo3 的加速原理
1. 大模型生成文字,是“一步一步往后写”
大模型并不是一次把整篇回答同时写出来,而是不断计算“下一个 token 应该是什么”。生成 1000 个 token,就要把关键解码流程重复执行很多次。因此,每一步只要省下一点时间,最后总速度就可能差出非常多。
2. MTP 可以理解为“边写边提前猜”
MTP(Multi-Token Prediction) 可以通俗理解为:模型不只计算下一个 token,还尝试提前猜后续 token。猜中越多,同样时间内就能推进更多输出内容。
但问题在于:提前猜 token 的过程会增加额外的状态准备、卷积计算和缓存更新。如果这些计算在 RTX 2080 Ti 上走的是通用实现,MTP 原本应带来的好处就会被底层开销抵消一部分。
3. GDN 是需要频繁更新“短期状态”的计算路径
部分 Qwen3.5 / Qwen3.6 模型内部包含 GatedDeltaNet(GDN) 层。你可以把它理解为:每输出一步文字,模型不只是看当前输入,还要不断维护和更新一份内部状态。
在 MTP 解码阶段,原有通用流程中会出现一部分重复计算和频繁的数据搬运。Turbo3 对这段路径做了两类核心改造:
- Q/K 卷积共享计算:本来可能反复算同一类中间结果,现在尽量只计算一次并复用;
- V + GDN 状态更新融合:将适合合并的步骤放进专为
SM75调整的 Triton kernel 中,减少小任务启动次数与中间显存读写。
4. 为什么插件不会修改你的模型能力设置?
Turbo3 改的是显卡如何执行一段底层计算,而不是改模型权重,也不是把模型缩小。因此它不会要求用户改成某一个固定模型目录,也不会要求关闭图片理解、工具调用或主动缩短上下文。
插件只有在满足 SM75 + GDN + MTP=2 条件的对应文本解码路径中才尝试接管;不匹配的场景会继续使用 vLLM 默认路径。
5. 为什么优化版输出不一定逐字等于原版?
底层 kernel 融合后,浮点数的计算顺序可能出现很小的变化。大模型每一步都在多个候选 token 中选择结果,如果两个候选分数原本就非常接近,那么极小的底层数值变化,也可能让模型选择另一种表达方式。
例如,原版可能回答“可以这样处理”,加速版可能回答“能够这样处理”。这并不自动等于能力退化。因此本项目的验收标准不是要求全文哈希完全相同,而是检查实际任务能力、稳定性、工具调用、长上下文与多模态入口是否保持有效。
核心原则:我们追求的是模型解决实际问题的能力和速度,而不是让优化后的 GPU 每一次浮点舍入都复制原版轨迹。
五、作者验证环境与实测速度
以下成绩来自作者当前测试环境,仅作为参考,不承诺不同模型、不同 vLLM 版本、不同显卡频率、不同请求内容都能获得相同提升。
| 项目 | 作者验证配置 |
|---|---|
| GPU | 2 × NVIDIA RTX 2080 Ti 22GB,Compute Capability 7.5 |
| 操作系统 | Ubuntu 22.04 |
| vLLM 验证版本 | 0.20.2rc1.dev118+g10ebb40d6 |
| PyTorch / CUDA | 2.11.0+cu128 / CUDA 12.8 |
| 实测模型样本 | Qwen3.6-27B 多模态 AutoRound INT4 实例 |
| 推测解码 | method=mtp,num_speculative_tokens=2 |
| 上下文配置 | 262144,未为测速主动缩短 |
| 多模态能力 | 入口保留;本版本不专门加速视觉编码器 |
固定纯文本请求实测结果
| 版本 | 平均生成速度 | 说明 |
|---|---|---|
| 原始参考路径 | 约 40.027 tokens/s | 未启用 Turbo 内核 |
| Turbo3 优化路径 | 约 59.958 tokens/s | QK=(2,1),VGDN=(2,1,BV32) |
| 参考提升 | 约 +49.8% | |
进一步使用 Nsight Systems 分析后,Turbo3 已将本插件覆盖的 GDN 核心路径压缩到较低占比:当前样本中,主要剩余热点已转向 Marlin INT4 矩阵计算、双卡通信和其他矩阵计算路径。这说明 Turbo3 的本轮优化方向已经产生实际效果,但也说明它仍不是整个项目的终点。
六、插件下载
本教程对应版本:
caovan vLLM SM75 Turbo3 v0.1.1
七、安装前准备
插件本身不会替你安装 vLLM 或模型。开始前请确认:
- 你的 Ubuntu / Linux 服务器中已经有能够正常运行模型的 vLLM 环境;
- 你的 GPU 为 RTX 2080 Ti 或其他
sm_75Turing 显卡; - 你了解自己原来的
vllm serve启动命令; - 计划测试的模型支持或可能支持 GDN + MTP 推测解码路径。
查看显卡计算能力:
conda activate <你的vllm环境>
python - <<'PY'
import torch
for i in range(torch.cuda.device_count()):
p = torch.cuda.get_device_properties(i)
print(i, p.name, f"capability={p.major}.{p.minor}")
PY
RTX 2080 Ti 正常应显示:
capability=7.5
八、安装 caovan vLLM SM75 Turbo3 外部插件
1. 解压下载包
unzip -o caovan-vllm-sm75-turbo3-v0.1.1-external-plugin.zip
cd caovan-vllm-sm75-turbo3-v0.1.1
2. 激活你原来的 vLLM 环境
conda activate <你的vllm环境>
3. 安装 wheel 插件包
pip install ./dist/caovan_vllm_sm75_turbo3-0.1.1-py3-none-any.whl
九、安装后检查与内核安全验证
1. 检查插件能否被当前 vLLM 识别
caovan-sm75-doctor
该命令用于检查插件入口、当前 vLLM 内部接口与基础运行环境是否符合接入条件。
2. 在 RTX 2080 Ti 上验证 Turbo3 kernel
CUDA_VISIBLE_DEVICES=0 caovan-sm75-verify
验证工具使用合成张量进行结构安全检查,不会加载你的真实模型,也不会读取你的模型路径。只有验证通过后,才建议进入实际模型测速。
3. 可选:检查你的本地模型是否属于候选结构
caovan-sm75-check-model /你的模型目录
该工具只读取模型目录中的 config.json,检查是否具备当前 Turbo3 需要的 GDN 结构字段与 linear_conv_kernel_dim=4。静态检查通过,只代表“可能匹配”,最终仍要以启动日志与实际任务效果为准。
十、如何在自己的 vLLM 启动命令中启用插件?
请注意:Turbo3 不提供也不要求你使用固定启动脚本。你原来怎样启动模型,安装插件后仍然怎样启动,只需在自己的命令中添加两项参数:
--additional-config '{"caovan_sm75_turbo3":true}' \
--speculative-config '{"method":"mtp","num_speculative_tokens":2}' \
通用写法
vllm serve <你的模型路径或模型标识> \
<你原来的全部启动参数> \
--additional-config '{"caovan_sm75_turbo3":true}' \
--speculative-config '{"method":"mtp","num_speculative_tokens":2}'
例如,模型路径、量化方式、端口、上下文长度、单卡或多卡选择,全部由用户自己决定:
# 以下只是参数结构示意,请替换成你自己的模型与参数
CUDA_VISIBLE_DEVICES=0,1 \
vllm serve /你的模型目录 \
--host 0.0.0.0 \
--port 8000 \
--served-model-name 你的模型服务名称 \
--tensor-parallel-size 2 \
--max-model-len 262144 \
--additional-config '{"caovan_sm75_turbo3":true}' \
--speculative-config '{"method":"mtp","num_speculative_tokens":2}'
如果你本来已有 --additional-config
不要重复写两个 --additional-config,而是把插件开关合并到同一个 JSON 中:
--additional-config '{"gdn_prefill_backend":"auto","caovan_sm75_turbo3":true}'
如果你设置过 VLLM_PLUGINS
一般情况下,vLLM 会自动发现安装在当前环境中的 general plugin。若你已经手动使用 VLLM_PLUGINS 限定加载插件,需要把本插件名称加入列表:
export VLLM_PLUGINS="${VLLM_PLUGINS:+${VLLM_PLUGINS},}caovan_sm75_turbo3"
十一、如何确认插件真正启用了?
当 GPU、模型结构与 MTP 路径都匹配,并且插件已经成功接管对应解码流程时,服务日志中应出现类似信息:
Caovan SM75 Turbo3 v0.1.1 enabled: split_qk GDN MTP=2, QK=(2,1), VGDN=(2,1,BV32).
如果插件已安装,但模型并不走当前支持的 GDN + MTP 路径,或者 GPU 并非 SM75,插件不会强行加速错误路径,而会继续使用 vLLM 原始实现。
十二、如何做公平测速?
测速时应保持同一模型、同一量化格式、同一 vLLM 启动参数、同一提示词、同一输出长度与近似的缓存条件,否则单看某一次峰值没有参考意义。
1. 测试未启用插件的基线
使用你的原启动命令,但不加入 caovan_sm75_turbo3:true,服务运行后执行:
caovan-sm75-benchmark \
--model <你的served-model-name> \
--max-tokens 768 \
--repeats 2 \
--output ~/vllm_logs/baseline_result.json
2. 测试启用插件后的速度
关闭基线服务,使用加入 Turbo3 参数的启动命令重新启动,然后执行:
caovan-sm75-benchmark \
--model <你的served-model-name> \
--max-tokens 768 \
--repeats 2 \
--output ~/vllm_logs/turbo3_result.json
3. 评价标准
除了 tokens/s 以外,还应使用自己的真实任务检查:
- 长回答是否完整、逻辑是否正常;
- 工具调用任务是否能够正确输出和执行;
- 长上下文信息召回是否正常;
- 多模态模型的图片理解入口是否仍然可用;
- 连续运行是否发生崩溃、NaN、乱码或明显异常。
十三、如何卸载插件?
由于 v0.1.1 是外部插件,不覆盖 vLLM 源码,因此卸载非常简单:
conda activate <你的vllm环境>
pip uninstall caovan-vllm-sm75-turbo3
卸载后,重新启动 vLLM 服务即可恢复为原来的默认推理路径,不需要运行源码恢复脚本。
十四、常见问题解答
1. 插件只能用于某一个 Qwen3.6 模型吗?
不是。插件不会根据作者的模型目录或模型文件名启用。只要运行时进入当前覆盖的 GDN + MTP=2 路径,就属于兼容候选。不同模型是否获得收益,需要自行验证。
2. AWQ、GPTQ、AutoRound 或非量化模型都能用吗?
插件优化的不是某一种量化格式,而是 GDN + MTP 解码阶段。因此这些模型类型都可能成为候选,但目前公开的性能数据仅来自作者的一套 AutoRound INT4 实测环境,不能直接等同于所有模型成绩。
3. 必须使用某一个 vLLM 版本吗?
插件版不会覆盖 vLLM 源码,所以不再要求用户为了安装而替换到某个固定版本。但插件仍需要调用 vLLM 内部的 GDN/MTP 接口。目前完成实际性能验证的版本是 0.20.2rc1.dev118+g10ebb40d6;其他版本建议先运行 caovan-sm75-doctor 与实际测试,再决定是否长期使用。
4. 没有 NVLink 能使用吗?
可以。当前公开版不包含 NVLink 专属通信优化,不以 NVLink 作为使用条件。
5. 它会提升图片理解速度吗?
本版本不会专门优化视觉编码阶段。对于多模态模型,它的目标是保留图片理解入口,同时提升匹配路径中的文本 / MTP 解码速度。
6. 为什么开启插件后,回答可能与原版不是逐字一样?
这是底层 kernel 融合后浮点执行顺序可能发生细微变化造成的。只要你的实际问答、工具调用、长上下文和多模态任务质量没有明显下降,这种生成路线变化并不等于模型能力损失。
参考资料
原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/rtx-2080-ti-bendedamoxingtuilitisujin50caovan-vllm-sm75-turbo3-waibuchajiananzhuangjiaochengq/.html


微信扫一扫