在nvidia笔记本显卡上如何用vllm拉起qwen3-0.6b(含WSL2: RuntimeError: UVA is not available解决办法)
文章目录
本文记录如何在搭载nvidia显卡的笔记本上使用wsl2 docker方法创建的vllm环境拉起qwen3-0.6b,并且实现流畅推理
搭建vllm环境
配置一览
博主使用的配置:
显卡:rtx5070ti笔记本版本,12g显存(理论上4G显存也能拉起来,只是上下文长度短一点)
环境:WSL2的Ubuntu2404+docker desktop
磁盘:留出50G以上
拉取官方vllm镜像
首先连接wsl2的Ubuntu系统,然后在终端中输入:docker pull vllm/vllm-openai:latest
vllm环境较大,约20G左右,确保空间充足,如果拉取失败,尝试换源拉取
拉取完成后,检查本地是否已经存在vllm镜像:docker images
如果能看到以下镜像,代表成功拉取:
创建容器
为了能够复用容器,以便加载不同路径的模型或者启用多节点部署,这一步仅创建一个支持vllm运行的容器,在下一步启动大模型节点
创建一个"docker.sh"文件,添加以下内容进去:
#!/bin/bash
# 启动交互式容器并进入 bash 终端
VLLM_WSL2_ENABLE_PIN_MEMORY=1# 添加此行来允许wsl2使用UVA
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
IMAGE_ID=4091d5593f77 # 局部变量,值等于上一步输出的ID
docker run -it \
--runtime nvidia --gpus all \
-v /home/huggingface:/root/.cache/huggingface \
-v "$SCRIPT_DIR/qwen3_workspace":/workspace \
-e VLLM_WSL2_ENABLE_PIN_MEMORY=1 \
-w /workspace\
--env "HF_TOKEN=$HF_TOKEN" \
-p 8000:8000 \
--ipc=host \
--pull never \
--entrypoint /bin/bash \
$IMAGE_ID
然后在home路径下,创建"huggingface"文件夹,把"qwen3-0.6b"的权重放进去;在"docker.sh"相同的路径里,创建一个"qwen3_workspace"文件夹,作为启动后的初始路径
然后使用bash docker.sh运行脚本,进入容器,如果你的终端前面开头出现"root@XXXX:/workspace"代表成功进入容器,如下图所示:
启动vllm服务并测试
启动vllm服务
在上一步创建的"qwen3_workspace"目录下,新建一个文件名字叫"start_node.sh"的文件用来启动节点,添加以下内容进去:
#!/bin/bash
# 在容器 /workspace 目录下执行此脚本启动服务
MODEL=${1:-"/root/.cache/huggingface/Qwen3-0.6B"}
echo "Starting vLLM with model: $MODEL"
vllm serve "$MODEL" \
--served-model-name Qwen3-0.6B \
--seed 1024 \
--max-model-len=8k \
--dtype=auto \
--trust-remote-code \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization=0.85 \
--max-num-seqs=1 \
--tensor-parallel-size 1 \
--reasoning-parser qwen3
echo "successfully started vLLM server with model: $MODEL"
max-model-len=xx是上下文长度,可以根据显存大小动态调整,每token上下文长度约为224 KB(计算方法见附录),我这里设置了8k上下文,kvcache约占0.8G左右显存gpu-memory-utilizationGPU最大占用率,如果显存不够用可以调整到0.9~0.95
然后bash start_node.sh运行脚本,等待5~10分钟,出现以下标志说明成功:
测试
新建一个终端,然后输入:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-0.6B",
"messages": [{"role": "user", "content": "你好"}],
"extra_body": {
"enable_thinking": true,
"max_tokens": 200,
"temperature": 0.7
}
}'
等待一会,若有输出,代表成功拉起模型:
恭喜,接下来可以对大模型进行提问了!
附录
WSL2: RuntimeError: UVA is not available原因及解决办法
原因:vllm在检测到所在环境为wsl2时,默认关闭UVA功能,但是vllm2以后,默认在启动时使用该功能,所以会报错
解决办法:"start_node.sh"脚本里添加VLLM_WSL2_ENABLE_PIN_MEMORY=1
kvcache占用计算方法
-
首先看大模型的数据类型:
如果是BF16,每个参数占2字节,BF32,每个参数占4字节,qwen3-0.6b为BF16,每个参数占2字节 -
然后根据 Qwen3-0.6B 的官方配置:
层数 (Layers): 28
KV 头数 (KV Heads): 8
头维度 (Head Dim): 128 -
那么kvcache每token占用显存大小:
2 × 8 × 128 × 2 × 28 = 112 KB -
假设上下文长度为n,总共占用显存大小为: 112 × n KB
序列长度 1,024: 112 KB × 1024 = 112 MB
序列长度 2,048: 112 KB × 2048 = 224 MB
序列长度 4,096: 112 KB × 4096 = 448 MB
序列长度 8,192: 112 KB × 8192 = 896 MB
更多推荐




所有评论(0)