WSL2 + vLLM 本地大模型推理服务部署指南
适用环境:Windows 11 / Windows 10 21H2+,NVIDIA GPU(显存 ≥ 8 GB),Ubuntu 22.04 / 24.04 (WSL2)
最终目标:在本地通过 vLLM 启动 OpenAI 兼容 API 服务,运行 Qwen 系列大模型
前置条件检查
在开始之前,请确认你的机器满足以下全部条件:
| 检查项 | 要求 | 验证方式 |
|---|---|---|
| Windows 版本 | Win11 或 Win10 ≥ 21H2 | winver |
| CPU 虚拟化 | BIOS 中已开启 VT-x / AMD-V | 任务管理器 → 性能 → CPU → "虚拟化:已启用" |
| NVIDIA 驱动 | ≥ 535(支持 WSL CUDA) | nvidia-smi(在 Windows PowerShell 中执行) |
| 可用磁盘空间 | ≥ 60 GB(模型 + 环境) | 资源管理器 |
| 内存 | ≥ 16 GB(推荐 32 GB) | 任务管理器 |
重要:WSL2 的 GPU 直通依赖 Windows 侧 的 NVIDIA 驱动,不要在 WSL 内部单独安装 CUDA Toolkit 或 GPU 驱动,否则可能冲突。
第一步:安装 WSL2 并初始化
1.1 安装 WSL
以 管理员身份 打开 PowerShell,执行:
wsl --install
该命令默认安装 Ubuntu(最新 LTS)。如需指定发行版:
# 查看可用发行版列表
wsl --list --online
# 指定安装 Ubuntu 22.04(推荐,兼容性最好)
wsl --install -d Ubuntu-22.04
1.2 重启电脑
安装完成后 必须重启,否则内核组件不会生效。
1.3 设置 Linux 用户
重启后会自动弹出 Ubuntu 终端,按提示设置:
Enter new UNIX username: xxxx
New password: xxxx
Retype new password: xxxx
此账号与 Windows 账号无关,是 Linux 子系统的独立用户,请牢记。
1.4 确认 WSL2 与 GPU 可用
# 确认 WSL 版本为 2(在 PowerShell 中执行)
wsl -l -v
# 输出示例: NAME STATE VERSION
# Ubuntu-22.04 Running 2
# 在 WSL 终端中确认 GPU 可见
nvidia-smi
若 nvidia-smi 正常输出 GPU 型号、显存、驱动版本,说明 GPU 直通成功。若报错,请回到 Windows 侧更新/重装 NVIDIA 驱动(≥ 535)。
第二步:更新系统并配置国内镜像源
2.1 替换 APT 源
Ubuntu 24.04 注意:24.04 已将源配置迁移至
/etc/apt/sources.list.d/ubuntu.sources(DEB822 格式),下方命令仅适用于 22.04 及更早版本。24.04 用户请跳到 2.1b。
Ubuntu 22.04:
# 备份原始源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为阿里云镜像
sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo sed -i 's|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
Ubuntu 24.04(2.1b):
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i 's|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/ubuntu.sources
2.2 更新系统
sudo apt update && sudo apt upgrade -y
若升级过程中提示重启,执行
sudo reboot后重新进入 WSL 即可。
第三步:安装基础开发工具
sudo apt install -y \
python3-pip \
python3-venv \
python3-dev \
build-essential \
git \
curl \
wget \
htop
验证 Python 版本(vLLM 要求 ≥ 3.9,推荐 3.10 / 3.11):
python3 --version
第四步:创建并激活 Python 虚拟环境
# 创建虚拟环境(放在用户主目录下)
python3 -m venv ~/vllm-env
# 激活虚拟环境
source ~/vllm-env/bin/activate
# 激活成功后,命令行前缀变为 (vllm-env)
# 升级 pip 与基础打包工具
pip install --upgrade pip setuptools wheel
每次打开新终端都需要重新执行
source ~/vllm-env/bin/activate。
可将该行追加到~/.bashrc末尾实现自动激活(可选,不推荐全局自动激活)。
第五步:配置 pip 国内镜像并安装 vLLM
5.1 配置阿里云 PyPI 镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set global.trusted-host mirrors.aliyun.com
5.2 安装 vLLM
方式 A:使用 uv(推荐,速度快 5-10 倍)
pip install uv
uv pip install vllm
方式 B:直接使用 pip
pip install vllm
5.3 验证安装
python -c "import vllm; print('vLLM version:', vllm.__version__)"
正常输出版本号即安装成功。若报 CUDA 相关错误,请确认第一步中 nvidia-smi 正常。
第六步:下载大模型文件
6.1 安装 ModelScope CLI
pip install modelscope
6.2 选择存储位置
| 路径 | 优点 | 缺点 |
|---|---|---|
/mnt/d/LLM_Models/ |
与 Windows 共享,方便管理,不占 C 盘 | 跨文件系统 IO 较慢,模型加载时间增加 |
~/ai-models/(WSL 内部) |
原生 ext4 文件系统,加载速度快 | 占用 WSL 虚拟磁盘(默认在 C 盘) |
性能提示:如果显存和磁盘允许,强烈建议将模型放在 WSL 内部路径(如
~/ai-models/),跨/mnt/读取大文件会显著拖慢模型加载速度(可能慢 3-5 倍)。若必须放 D 盘,可在 WSL 配置中扩大虚拟磁盘或挂载物理磁盘。
6.3 下载模型
# ---------- 模型 1:Qwen2.5-7B-Instruct(约 15 GB,适合 8-12 GB 显存) ----------
mkdir -p /mnt/d/LLM_Models
modelscope download \
--model Qwen/Qwen2.5-7B-Instruct \
--local_dir /mnt/d/LLM_Models/Qwen2.5-7B-Instruct
# ---------- 模型 2:Qwen3.6-35B-A3B-FP8(MoE 模型,约 35 GB,适合 16 GB+ 显存) ----------
mkdir -p ~/ai-models
modelscope download \
--model Qwen/Qwen3.6-35B-A3B-FP8 \
--local_dir ~/ai-models/Qwen3.6-35B-A3B-FP8
6.4 验证模型完整性
# 检查文件是否齐全(应包含 config.json、tokenizer、*.safetensors 等)
ls -lh /mnt/d/LLM_Models/Qwen2.5-7B-Instruct/
ls -lh ~/ai-models/Qwen3.6-35B-A3B-FP8/
确保没有 0 字节文件或缺失的 .safetensors 分片。
第七步:启动 vLLM 推理服务
7.1 启动 Qwen2.5-7B(示例)
python -m vllm.entrypoints.openai.api_server \
--model /mnt/d/LLM_Models/Qwen2.5-7B-Instruct \
--served-model-name qwen2.5-7b \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.85 \
--dtype float16 \
--max-model-len 8192
7.2 参数说明
| 参数 | 含义 | 调优建议 |
|---|---|---|
--model |
模型本地路径 | 使用绝对路径 |
--served-model-name |
API 中暴露的模型名 | 自定义,客户端调用时需一致 |
--host 0.0.0.0 |
监听所有网卡 | 允许局域网/Windows 宿主机访问 |
--port 8000 |
服务端口 | 避免与已有服务冲突 |
--gpu-memory-utilization |
GPU 显存占用比例 | 0.80~0.90;多任务时调低 |
--dtype |
计算精度 | float16 / bfloat16;FP8 模型用 auto |
--max-model-len |
最大上下文长度 | 按显存调整,过大易 OOM |
7.3 后台运行(可选)
直接运行会占用终端,关闭即停止。推荐以下方式:
方式 A:nohup
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/d/LLM_Models/Qwen2.5-7B-Instruct \
--served-model-name qwen2.5-7b \
--host 0.0.0.0 --port 8000 \
--gpu-memory-utilization 0.85 \
--dtype float16 \
--max-model-len 8192 \
> ~/vllm-server.log 2>&1 &
# 查看日志
tail -f ~/vllm-server.log
方式 B:systemd 服务(WSL2 需启用 systemd)
# 1. 启用 systemd(/etc/wsl.conf)
sudo tee /etc/wsl.conf > /dev/null <<EOF
[boot]
systemd=true
EOF
# 在 PowerShell 中重启 WSL:wsl --shutdown,再重新打开
# 2. 创建服务文件
sudo tee /etc/systemd/system/vllm.service > /dev/null <<EOF
[Unit]
Description=vLLM OpenAI API Server
After=network.target
[Service]
Type=simple
User=$USER
Environment="PATH=/home/$USER/vllm-env/bin:/usr/bin"
ExecStart=/home/$USER/vllm-env/bin/python -m vllm.entrypoints.openai.api_server \
--model /mnt/d/LLM_Models/Qwen2.5-7B-Instruct \
--served-model-name qwen2.5-7b \
--host 0.0.0.0 --port 8000 \
--gpu-memory-utilization 0.85 \
--dtype float16 \
--max-model-len 8192
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 3. 启动并设为开机自启
sudo systemctl daemon-reload
sudo systemctl enable --now vllm
sudo systemctl status vllm
第八步:验证服务
8.1 确认服务启动
终端/日志中出现以下字样即表示就绪:
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Application startup complete.
8.2 测试 API(在 WSL 或 Windows 终端均可)
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-7b",
"messages": [
{"role": "user", "content": "你好,请简单介绍一下你自己"}
],
"max_tokens": 256,
"temperature": 0.7
}'
8.3 查看可用模型列表
curl http://localhost:8000/v1/models
8.4 Python 客户端测试
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY", # vLLM 默认无需鉴权
)
resp = client.chat.completions.create(
model="qwen2.5-7b",
messages=[{"role": "user", "content": "用一句话解释什么是 Transformer"}],
)
print(resp.choices[0].message.content)
第九步:常见问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
nvidia-smi 在 WSL 中报错 |
Windows 侧驱动过旧或未安装 WSL 版驱动 | 更新 NVIDIA 驱动 ≥ 535;不要在 WSL 内装 CUDA |
torch.cuda.is_available() 返回 False |
PyTorch 未识别 GPU | pip install torch --index-url https://download.pytorch.org/whl/cu121 |
| 模型加载极慢(> 10 min) | 模型放在 /mnt/d/ 跨文件系统 |
迁移到 WSL 内部路径 ~/ai-models/ |
CUDA out of memory |
显存不足 | 降低 --gpu-memory-utilization、减小 --max-model-len、换更小模型或使用量化版 |
| 端口 8000 被占用 | 其他服务冲突 | lsof -i :8000 查找进程,或更换 --port |
Windows 浏览器无法访问 localhost:8000 |
WSL 网络模式问题 | Win11 默认 mirrored 模式可直通;Win10 需用 wsl hostname -I 获取 IP 访问 |
modelscope download 中断 |
网络波动 | 重新执行相同命令,ModelScope 支持断点续传 |
| WSL 内存占用过高 | 默认无上限 | 编辑 C:\Users\<你>\.wslconfig,添加 [wsl2] memory=16GB |
附录:常用运维命令速查
# 激活环境
source ~/vllm-env/bin/activate
# 查看 GPU 实时状态
watch -n 1 nvidia-smi
# 查看 vLLM 进程
ps aux | grep vllm
# 停止服务(前台直接 Ctrl+C;后台用 kill)
pkill -f "vllm.entrypoints"
# 更新 vLLM
pip install --upgrade vllm
# 清理 pip 缓存(释放磁盘)
pip cache purge
# WSL 关机(PowerShell)
wsl --shutdown
最后提醒:首次启动 vLLM 时会对模型进行编译/预热,耗时 1~5 分钟属正常现象,请耐心等待
Uvicorn running出现后再发起请求。生产环境建议配合 Nginx 反向代理、API Key 鉴权(--api-key参数)及日志轮转使用。