这篇教程面向没有 Linux 部署经验的新手用户,从一台空白 Ubuntu 22.04 机器开始,逐步安装 Miniconda、创建 Python 环境、安装 vLLM 与 Caovan vLLM SM75 Turbo3 external plugin,最后用 RTX 2080Ti 显卡启动 Qwen3.6-27B-AWQ-INT4 模型服务。
插件最新版本为:
caovan-vllm-sm75-turbo3-v0.4.13-external-plugin.zip

目前实测插件能够支持的模型:
Huihui-Qwen3.6-27B-abliterated-int4-AutoRound
Qwen3.6-27B-heretic-v2-mtp-int4-AutoRound
一、插件能做什么?
Caovan vLLM SM75 Turbo3 是面向 NVIDIA RTX 2080Ti / SM75 架构的 vLLM 外部加速插件。它不会要求用户手动填写复杂底层参数,而是通过启动器 caovan-vllm-serve 自动完成硬件探测和参数注入。
- 自动检测 GPU 数量、SM 架构、TP 并行数、上下文长度与显存水位。
- 自动配置 MTP 推测解码参数。
- 自动配置 GMU,即
gpu_memory_utilization。 - 自动注入 PIECEWISE CUDA Graph 编译策略。
- 自动启用 Elastic-KV 显存安全预留。
- 2 张 GPU 默认使用 MTP=3,超过 2 张 GPU 默认使用 MTP=4。
- 保留外部插件形态,不需要修改模型文件。
二、本文测试环境
| 项目 | 测试配置 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS |
| 显卡 | NVIDIA RTX 2080Ti 22GB,SM75 架构,2 卡测试为主 |
| Python | ≥Python 3.10.20 |
| vLLM | vLLM 0.21.0,配套本地 wheel |
| 插件版本 | caovan-vllm-sm75-turbo3 v0.4.13 |
| 测试模型 | /data/qwen/Qwen3.6-27B-AWQ-INT4 |
| KV Cache | fp8 |
| 上下文长度 | 262144 |
重要说明:本插件当前已验证的环境是 ≥Python 3.10.20。
三、下载本文插件安装包
插件包:
caovan-vllm-sm75-turbo3-v0.4.13-external-plugin.zip
请把插件包下载下来后放到用户主目录 ~/ 下:
cd ~ ls -lh ~/caovan-vllm-sm75-turbo3-v0.4.13-external-plugin.zip

模型文件建议放在:
/data/qwen/Qwen3.6-27B-AWQ-INT4
如果你的模型目录不同,后面的启动命令中把模型路径替换成自己的路径即可。
四、安装 NVIDIA 驱动与基础工具
先更新系统并安装基础工具:
sudo -v sudo apt update sudo apt install -y build-essential git wget curl unzip pciutils ca-certificates

查看显卡是否被系统识别:
lspci | grep -i nvidia
安装 NVIDIA 驱动。CUDA 13.x 对 Linux 驱动版本要求较高,建议使用 580 或更高版本驱动。不同 Ubuntu 软件源中的驱动包名可能不同,请以你机器上 ubuntu-drivers devices 显示的推荐版本为准。
ubuntu-drivers devices sudo apt install -y nvidia-driver-580 sudo reboot
重启后验证:
nvidia-smi

如果 nvidia-smi 能正常显示 RTX 2080Ti、驱动版本、显存信息,就可以继续下一步。
五、安装 Miniconda
下载并安装 Miniconda:
cd ~ wget -O Miniconda3-latest-Linux-x86_64.sh \ https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p "$HOME/miniconda3" source "$HOME/miniconda3/etc/profile.d/conda.sh" conda init bash
重新打开终端,或者执行:
source ~/miniconda3/etc/profile.d/conda.sh conda --version

六、创建专用 Conda 环境
创建专用环境。这里固定使用 Python 3.10.20:
source ~/miniconda3/etc/profile.d/conda.sh conda create -n caovan-vllm python=3.10.20 pip setuptools wheel -y

conda activate caovan-vllm

python -V

正确输出应类似:
Python 3.10.20
七、安装 vLLM 0.21.0
进入环境后,通过 pip 安装 vLLM 0.21.0
python -m pip install --upgrade pip setuptools wheel

python -m pip install "vllm==0.21.0"

如果你在国内网络环境下安装速度较慢,可以临时使用常见 pip 镜像源,例如:
python -m pip install "vllm==0.21.0" -i https://mirrors.aliyun.com/pypi/simple/

安装完成后检查:
python - <<'PY'
import sys
import vllm
print("python:", sys.version.split()[0])
print("vllm:", vllm.__version__, vllm.__file__)
PY

推荐看到:
python: 3.10.20 ... vllm: 0.21.0 ...
八、安装 Caovan vLLM SM75 Turbo3 插件
解压并安装草凡插件:
cd ~ unzip -o ~/caovan-vllm-sm75-turbo3-v0.4.13-external-plugin.zip -d ~

python -m pip install --upgrade --force-reinstall --no-deps \ ~/caovan-vllm-sm75-turbo3-v0.4.13/dist/caovan_vllm_sm75_turbo3-0.4.13-py3-none-any.whl

检查插件版本:
python - <<'PY'
import sys
import importlib.metadata as md
import caovan_vllm_sm75_turbo3
print("python:", sys.version.split()[0])
print("caovan import version:", caovan_vllm_sm75_turbo3.__version__)
print("caovan metadata version:", md.version("caovan-vllm-sm75-turbo3"))
PY

正常输出应包含:
caovan import version: 0.4.13 caovan metadata version: 0.4.13
如果需要卸载该插件,可以运行如下的命令:
python -m pip uninstall -y caovan-vllm-sm75-turbo3 caovan_vllm_sm75_turbo3 rm -rf ~/caovan-vllm-sm75-turbo3-v0.4.13 echo "==== 检查插件是否已卸载 ====" python - <<'PY' try: import caovan_vllm_sm75_turbo3 print("插件仍存在:", caovan_vllm_sm75_turbo3.__file__) except Exception as e: print("插件已卸载:", e) PY echo echo "==== 检查命令是否还存在 ====" command -v caovan-vllm-serve || echo "caovan-vllm-serve 已不存在" command -v caovan-sm75-doctor || echo "caovan-sm75-doctor 已不存在"
九、运行 doctor 检查
先运行基础检查:
caovan-sm75-doctor

也可以带上实际模型和启动参数,让 doctor 预估 AutoSpec / AutoMem 的结果:
caovan-sm75-doctor /data/qwen/Qwen3.6-27B-AWQ-INT4 \ --tensor-parallel-size 2 \ --max-model-len 262144 \ --max-num-seqs 1 \ --max-num-batched-tokens 8192
重点看这些信息:
Python 状态:PASSvLLM 状态:PASSGDN 接口检查:PASSGPU 拓扑中能看到 RTX 2080Ti / SM75- AutoSpec 结果会显示插件准备自动使用的 MTP 参数
- AutoMem 结果会显示插件准备自动注入的
gpu_memory_utilization
如果看到某个候选 GDN 新路径被跳过,但最终 legacy-gdn-linear-attn-v020 是 PASS,这属于正常兼容路径,不是故障。
十、启动 2 卡推理服务
下面是 2 张 RTX 2080Ti 的推荐启动命令。注意:不要手写 --speculative-config,也不要手写 --gpu-memory-utilization,这两个参数交给插件自动配置。
export CUDA_VISIBLE_DEVICES=0,1
export OMP_NUM_THREADS=12
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export PYTORCH_NVML_BASED_CUDA_CHECK=1
export TORCHINDUCTOR_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/torchinductor"
export TORCHINDUCTOR_COMPILE_THREADS=1
export TRITON_CACHE_AUTOTUNING=1
export TRITON_PTXAS_BLACKWELL_PATH=/usr/local/cuda/bin/ptxas
caovan-vllm-serve /data/qwen/Qwen3.6-27B-AWQ-INT4 \
--host 0.0.0.0 \
--port 8000 \
--served-model-name Qwen3.6-27B-AWQ-INT4 \
--tensor-parallel-size 2 \
--dtype half \
--max-model-len 262144 \
--max-num-seqs 1 \
--max-num-batched-tokens 8192 \
--kv-cache-dtype fp8 \
--disable-custom-all-reduce \
--enable-prefix-caching \
--mamba-cache-mode align \
--enable-flashinfer-autotune \
--additional-config '{"caovan":true,"caovan_mode":"auto"}' \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder


启动成功时会看到 CAOVAN logo,并显示自动配置结果。2 卡情况下,插件会自动采用:
DynamicTP: effective_gpus=2 AutoSpec: MTP=3 AutoMem: 自动注入 gpu_memory_utilization PIECEWISE CUDA Graph: 自动注入
vLLM启动完成,你会看到如下的画面,看到“Starting vLLM server on http://0.0.0.0:8000”和“Application startup complete.”等内容正面vLLM已经正常启动并且对外提供api服务!

十一、用 one-api 接入api 并对外提供模型服务
关于安装和配置one-api的方法,可以参考博客中的另外一篇文章《Ubuntu22.04+4x2080Ti22G+vLLM+Qwen3.6-27B-AWQ-INT4 部署教程》中关于one-api的安装和配置等内容;
在one-api中增加一个渠道,将上面启动的模型api信息填入到渠道中

然后通过one-api分发,对外就可以提供兼容openai的模型服务!这些内容在这里不赘述!

十二、用 Page Assist 接入本地模型并测试模型推理速度
下面是通过chrome浏览器插件“Page Assist”调用本地one-api中的兼容openai接口接入模型的截图
第一步:打开“Page Assist”,点击右上角的齿轮进入设置界面,选择左侧菜单中的“OpenAI 兼容 API”,点击“添加提供商”,在弹窗中根据图示设置;

第二步:选择左侧菜单中的“模型管理”,点击“添加新模型”,选择“自定义模型”,在弹窗中参考如下的图示设置;

第三步:点击左上角的“新聊天”,下拉选择配置好的模型,开始和AI进行聊天;

Qwen3.6-27B模型确实不错,生成的网页游戏功能完整、UI美观,可以直接玩!

如下是博主2张2080Ti 22G+nvlink启动插件后实测的模型推理速度,从77.4 tokens/s 到 90.5 tokens/s 之间。如果用比较激进的参数,比如将”caovan_mode”的参数设置为“fast”,历史测试中的峰值速度达到105+ tokens/s,不过如果只有2张22G的显卡,不建议将”caovan_mode”的参数设置为”fast”,因为后面可能会出现由于显存不足导致的报错!

大多数情况下,”caovan_mode”的参数建议保持默认的“auto”,是比较稳定的加速状态!
caovan_mode 主要有这几类可选值:
| 参数值 | 含义 | 自动 MTP 策略 | 推荐场景 |
|---|---|---|---|
auto |
默认推荐模式,插件根据实际启动 GPU/TP 数自动选择 | 1~2 张 GPU:MTP=3;大于 2 张 GPU:MTP=4 | 普通用户默认用这个 |
stable |
稳定优先模式 | 固定 MTP=3 | 2 卡、长输出、生产稳定优先 |
fast |
速度优先模式 | 固定 MTP=4 | 想冲峰值速度,接受一定实验风险 |
十三、4 卡启动示例
如果机器有 4 张 RTX 2080Ti,可以这样启动。插件检测到 --tensor-parallel-size 4 后,会自动使用 MTP=4。
export CUDA_VISIBLE_DEVICES=0,1,2,3
export OMP_NUM_THREADS=12
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export PYTORCH_NVML_BASED_CUDA_CHECK=1
export TORCHINDUCTOR_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/torchinductor"
export TORCHINDUCTOR_COMPILE_THREADS=1
export TRITON_CACHE_AUTOTUNING=1
export TRITON_PTXAS_BLACKWELL_PATH=/usr/local/cuda/bin/ptxas
caovan-vllm-serve /data/qwen/Qwen3.6-27B-AWQ-INT4 \
--host 0.0.0.0 \
--port 8000 \
--served-model-name Qwen3.6-27B-AWQ-INT4 \
--tensor-parallel-size 4 \
--dtype half \
--max-model-len 262144 \
--max-num-seqs 1 \
--max-num-batched-tokens 8192 \
--kv-cache-dtype fp8 \
--disable-custom-all-reduce \
--enable-prefix-caching \
--mamba-cache-mode align \
--enable-flashinfer-autotune \
--additional-config '{"caovan":true,"caovan_mode":"auto"}' \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder
十四、插件自动参数规则
| 场景 | 自动策略 | 原因 |
|---|---|---|
| 1~2 张 GPU | 默认 MTP=3 | 2 卡 MTP=4 虽然速度很高,但长时间运行更容易触发底层异步稳定性风险。 |
| 大于 2 张 GPU | 默认 MTP=4 | 更多 GPU 通常显存与并行余量更充足,适合更激进的推测解码。 |
| 不填写 GMU | 插件自动注入 gpu_memory_utilization |
避免用户手动填写过高导致 OOM 或底层临界错误。 |
| 不填写 compilation-config | 插件自动注入 PIECEWISE CUDA Graph | 保持 vLLM_COMPILE 高速路线。 |
如果你明确要覆盖自动 MTP,可以使用环境变量:
export CAOVAN_AUTO_SPEC=3 # 或 export CAOVAN_AUTO_SPEC=4
十五、实测数据对照
下面是本轮开发中对关键路线的测试观察。不同 prompt、输出长度、显卡温度、驱动和系统环境都会影响速度,表格中的数据用于帮助理解插件策略,不代表所有机器都能完全相同。
| 测试路线 | 观察到的现象 | 结论 |
|---|---|---|
| Python 3.10.0 + vLLM_COMPILE | AOT / Torch FX 编译阶段容易出现栈深度问题 | 不推荐,教程固定 Python 3.10.20 |
| Python 3.10.20 + vLLM 0.21.0 | AOT 编译、PIECEWISE CUDA Graph 能正常通过 | 作为当前推荐基础环境 |
| 2 卡 + MTP=3 | 速度相比 MTP=4 略低,但稳定性更好 | 当前 2 卡默认策略 |
| 2 卡 + MTP=4 | 可出现 99~105 tokens/s 的高速度窗口,但长时间运行存在底层异步稳定性风险 | 不再作为 2 卡默认策略 |
| v0.4.13 DynamicTP | 根据 TP/GPU 数自动选择 MTP:2 卡 MTP=3,大于 2 卡 MTP=4 | 当前推荐对外发布策略 |
十六、常见问题
1. 看到 FA2 不支持 SM75,是不是报错?
日志里可能出现类似:
Cannot use FA version 2 is not supported due to FA2 is only supported on devices with compute capability >= 8
RTX 2080Ti 是 SM75,确实不支持 FA2。这条通常不是致命错误,vLLM 会继续选择 FlashInfer / TRITON_ATTN 等可用后端。
2. 为什么 doctor 里有 GDN 候选路径跳过?
插件会先探测多个 vLLM 内部路径。某些新路径不存在时会跳过,只要最终看到:
GDN 接口检查:PASS
就说明当前 vLLM 的 legacy GDN 路径可用。
3. 为什么不让用户自己填写 MTP?
因为 MTP 与 GPU 数量、显存余量、上下文长度、vLLM 编译形状都有关系。插件已经内置 DynamicTP 规则:2 卡默认 MTP=3,大于 2 卡默认 MTP=4。普通用户不需要手动理解这些底层参数。
4. 为什么不让用户自己填写 gpu_memory_utilization?
这个参数过高容易把 KV cache 池撑得太满,导致后续临时 buffer 没有空间。插件会根据 GPU 显存、上下文长度、MTP、TP 并行数自动计算 GMU,普通用户不需要填写。
5. 第一次请求为什么有 JIT warning?
第一次请求可能触发 Triton kernel JIT 编译,导致首轮速度偏低。后续请求通常会恢复正常。
6. 如何停止服务?
pkill -f "vllm.*Qwen3.6-27B-AWQ-INT4" || true
原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/rtx-2080ti-vllm-sm75-turbo3-caovan-plugin-ubuntu-miniconda/.html


微信扫一扫