vllm不同版本启动qwen3-embedding-0.6B
·
【环境】
单张A100 80GB显存
【vllm0.9.1】
docker run -d --gpus all --rm --network=host --ipc=host --rm --name qwen3 \
-v /home/vllm-models/Qwen3-Embedding-0.6B:/home/vllm-models/Qwen3-Embedding-0.6B \
-v /etc/localtime:/etc/localtime:ro \
vllm/vllm-openai \
/home/vllm-models/Qwen3-Embedding-0.6B \
--served-model-name Qwen3-Embedding-0.6B \
--tensor-parallel-size 1 \
--api-key admin#@123 \
--host 0.0.0.0 \
--port 8002 \
--task embedding
【vllm0.19.0(同等效果)】
docker run -d --gpus all --rm --network=host --ipc=host --rm --name qwen3 \
-v /home/vllm-models/Qwen3-Embedding-0.6B:/home/vllm-models/Qwen3-Embedding-0.6B \
-v /etc/localtime:/etc/localtime:ro \
vllm/vllm-openai \
/home/vllm-models/Qwen3-Embedding-0.6B \
--served-model-name Qwen3-Embedding-0.6B \
--tensor-parallel-size 1 \
--api-key admin#@123 \
--host 0.0.0.0 \
--port 8002 \
--gpu-memory-utilization 0.025 \
--max-model-len 512 \
--max-num-seqs 4 \
--enforce-eager
在0.19.0中,遇到了:
1.无法使用0.9.1中的--task参数;
2.去除参数启动后,原本只需占用1GB~,却异常占用70GB+显存;
下面将分别分析上述两个问题。
问题一:vllm0.19.0中不支持--task参数
vLLM 0.19.0 彻底移除了 --task embedding 启动参数,老版本靠该参数区分推理 / 嵌入任务,新版本改用模型自动识别 + 专属启动方式,不再支持此参数。异常如下:
vllm: error: unrecognized arguments: --task embedding
修复方案(二选一,推荐方案 1)
方案 1:标准启动(适配 Embedding 模型,推荐)
直接删掉 --task embedding,vLLM 会自动识别嵌入模型,完整可用命令:
docker run -d --gpus all --rm --network=host --ipc=host \
--name qwen3 \
-v /home/vllm-models/Qwen3-Embedding-0.6B:/home/vllm-models/Qwen3-Embedding-0.6B \
-v /etc/localtime:/etc/localtime:ro \
vllm/vllm-openai \
/home/vllm-models/Qwen3-Embedding-0.6B \
--served-model-name Qwen3-Embedding-0.6B \
--tensor-parallel-size 1 \
--api-key admin#@123 \
--host 0.0.0.0 \
--port 8002
方案 2:显式指定服务类型(纯嵌入服务)
如果想强制声明为嵌入服务,使用新版本专用参数 --enforce-eager + 依赖模型自动判定,或使用独立 embedding 入口:
docker run -d --gpus all --rm --network=host --ipc=host \
--name qwen3 \
-v /home/vllm-models/Qwen3-Embedding-0.6B:/home/vllm-models/Qwen3-Embedding-0.6B \
-v /etc/localtime:/etc/localtime:ro \
vllm/vllm-openai \
/home/vllm-models/Qwen3-Embedding-0.6B \
--served-model-name Qwen3-Embedding-0.6B \
--tensor-parallel-size 1 \
--api-key admin#@123 \
--host 0.0.0.0 \
--port 8002 \
--enforce-eager
补充说明:
- Qwen3-Embedding 属于标准嵌入模型,vLLM 0.17+ 会根据模型权重结构自动切换为 Embedding 服务,无需额外参数;
- 不要再使用
--task embedding,该参数在 0.17 版本开始废弃,0.19 完全删除;- 接口调用方式不变,依旧兼容 OpenAI
/v1/embeddings接口。
问题二:显存占用过大
这是 vLLM 两个版本对嵌入模型(embedding)的运行模式、KV 缓存预分配策略、默认参数完全不一样导致的:0.9.1 几乎没开 KV 缓存,0.19.0 默认按大模型高并发场景预分配 90% 显存,所以 0.6B 小嵌入模型也会吃到 70GB 左右。
下面分原因、数字对比、怎么改回 1–3GB 轻量模式三部分说清楚。
一、核心原因:KV 缓存预分配策略巨变
1)vLLM 0.9.1(你说的 1GB 左右)
- 当时
--task embedding是专门的 embedding 路径:- 关闭 / 极小化 KV 缓存(因为 embedding 是单向、只前向、不生成,不需要存 KV 做自回归)
- 基本只加载模型权重:
- Qwen3-Embedding-0.6B ≈ 0.6B 参数
- FP16:0.6B × 2 Byte ≈ 1.2GB
- 所以你看到的就是 1GB 左右,几乎只有权重。
2)vLLM 0.19.0(你现在 70GB)
- 彻底去掉了
--task embedding,所有模型统一走生成式 LLM 引擎(哪怕是 embedding 模型) - 默认策略变成:
--gpu-memory-utilization 0.9:启动时预分配 90% 显存给 KV 缓存池--max-model-len 8192:默认上下文 8k- 单卡 80GB 显卡:80 × 0.9 ≈ 72GB 预分给 KV 缓存
- 0.6B 权重本身只有 1–2GB,但KV 缓存池直接占满 70GB 左右
- 结论:不是模型变大了,是 vLLM 把小模型当 70B 大模型来预留显存。
二、数字直观对比(单卡 80GB)
| 版本 | 模式 | 权重显存 | KV 缓存 | 总显存 |
|---|---|---|---|---|
| 0.9.1 | --task embedding |
~1.2GB | 几乎 0 | ~1GB |
| 0.19.0 | 默认 LLM 模式 | ~1.2GB | ~70GB | ~70GB |
三、0.19.0 怎么改回 1–3GB 轻量模式(关键)
你需要强制缩小 KV 缓存 + 降低显存利用率 + 缩短上下文。
关键参数解释:
--gpu-memory-utilization 0.025:只拿 2.5% 显存做 KV 缓存(80GB × 0.025 ≈ 2GB,实际 embedding 用不到这么多)--max-model-len 512:上下文限制--enforce-eager:禁用 CUDA graph,减少显存占用
四、为什么 0.19 要这么设计?
- vLLM 0.17+ 主打统一引擎、高并发、长上下文,不再区分 embedding / 生成模型
- 默认参数面向 7B–70B 大模型生产环境,不是为 0.6B 小模型优化的
- 对 embedding 模型来说,KV 缓存完全是浪费,但引擎统一后只能靠参数手动关小
更多推荐

所有评论(0)