【环境】

单张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

补充说明:

  1. Qwen3-Embedding 属于标准嵌入模型,vLLM 0.17+ 会根据模型权重结构自动切换为 Embedding 服务,无需额外参数;
  2. 不要再使用 --task embedding,该参数在 0.17 版本开始废弃,0.19 完全删除;
  3. 接口调用方式不变,依旧兼容 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 缓存完全是浪费,但引擎统一后只能靠参数手动关小
Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐