快速结论:这个报错/崩溃通常出现在用 --runner pooling --enable-prompt-embeds 启动 encoder-only 嵌入模型(如 BGE)时,vLLM 在编译预热阶段遇到 input_ids=None;优先排查是否给 encoder-only 模型开了 --enable-prompt-embeds,并确认所运行的是 V2 runner 还是 V1 runner。
适用环境:Issue 已确认的环境包括 Ubuntu 22.04.3 LTS(x86_64,glibc 2.35)、Python 3.12.12(Anaconda 打包)、PyTorch 2.9.1+cu128、CUDA 12.8 构建、NVIDIA H100 80GB HBM3、驱动 570.124.06;复现验证使用 vLLM 0.1.dev20811+gbb363db9a(当前 main/nightly)与 NVIDIA RTX 5070 Ti 16 GB(Blackwell / sm_120)。报告者初始使用 vLLM 0.14.1。
最快修复方案:暂无确认的一步修复方案。在包含 #42963 守卫的当前 main(默认 V2 runner)上,会提前报出 ValueError: --enable-prompt-embeds not supported with EncoderOnlyModelState.,属于设计上的不支持;该守卫并未覆盖 V1 runner,V1 仍会触发原始错误。
注意事项:encoder-only 模型不能用 prompt embeds,因为 BERT 把 token_type_ids 打包在 input_ids 高位,embeds 无法携带这些信息;因此把“报错变成明确 ValueError”只是让失败更快更清晰,并不等于功能可用。Issue 关闭时 V1 runner 的配置期校验仍未合入,相关修复当时还在进行中。
问题场景
用 vLLM 以 pooling runner 方式服务 encoder-only 嵌入模型(例如 BAAI/bge-large-en-v1.5),并开启 --enable-prompt-embeds。在旧版本(如 0.14.1)上,服务会在编译预热阶段崩溃;在包含 #42963 守卫的当前 main 上,启动阶段会直接报出明确的校验错误。
报错原文
torch._dynamo.exc.Unsupported: observed AttributeError involving device metadata.
ValueError: --enable-prompt-embeds not supported with EncoderOnlyModelState.
原因分析
根据 Issue 讨论,开启 --enable-prompt-embeds 后 runner 会传入 input_ids=None,而 BertEmbedding.forward 在进入 if inputs_embeds is None 分支之前就调用了 _decode_token_type_ids(input_ids)(bert.py#L83),于是出现 None & mask,在编译路径下表现为 Dynamo 的 AttributeError。
从根本上说,encoder-only 的 BERT 类模型把 token_type_ids 打包进 input_ids 的高位,prompt embeds 无法携带这些信息,因此属于不支持的能力。原先的校验只在 config/model.py#L948 覆盖 encoder-decoder 模型,BGE 是 encoder-only,所以未被拦截。#42963 在 V2 runner 的 vllm/v1/worker/gpu/model_states/__init__.py 中加入了针对 EncoderOnlyModelState 的守卫;V1 runner 当时尚无该守卫。
环境排查
- 确认 vLLM 版本/提交:0.14.1 与
0.1.dev20811+gbb363db9a(main/nightly)行为不同,需确认是否已包含 #42963。 - 确认实际使用的 runner 是 V1 还是 V2(默认 V2);V1 路径当时没有该守卫。
- 确认启动参数是否同时包含
--runner pooling和--enable-prompt-embeds。 - 确认模型类型是否为 encoder-only 嵌入模型(如
BAAI/bge-large-en-v1.5)。 - 记录 Python、PyTorch、CUDA、驱动与 GPU 型号,便于对照:Issue 中已验证 Python 3.12.12、PyTorch 2.9.1+cu128、H100 80GB(驱动 570.124.06)与 RTX 5070 Ti(sm_120)。
解决步骤
- 对照复现命令检查启动参数:
vllm serve BAAI/bge-large-en-v1.5 --host 127.0.0.1 --port 19104 --gpu-memory-utilization 0.10 --max-model-len 512 --runner pooling --enable-prompt-embeds。 - 若目标是让启动失败信息更明确,升级到包含 #42963 的 main(默认 V2 runner),此时会提前报
ValueError: --enable-prompt-embeds not supported with EncoderOnlyModelState.,而不是 Dynamo traceback。 - 对 encoder-only 模型,不要开启
--enable-prompt-embeds,改用模型支持的常规输入方式提交请求(具体输入格式请以 vLLM 对该模型的文档/支持范围为准)。 - 若必须在 V1 runner 上排除该问题,需等待 Issue 中提到的配置期校验修复合入(当时作者正在提 PR),暂无其他已验证方案。
验证方法
在包含 #42963 的 main 上重新执行上述命令,若启动阶段直接以 ValueError: --enable-prompt-embeds not supported with EncoderOnlyModelState. 失败,且不再出现 torch._dynamo.exc.Unsupported: observed AttributeError involving device metadata.,说明已走新的守卫路径。若移除 --enable-prompt-embeds 后服务正常启动,则说明原崩溃由该参数与 encoder-only 模型的组合引起。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[RFC]: Consistent semantics for drafted, verified and accepted spec decode tokens](https://www.chat-gpts.plus/wp-content/uploads/2026/11/64099-74c6b2a1-768x403.jpg)

![issue: [regression] [dev] a deleted channel, note or automation stays open in its tab](https://www.chat-gpts.plus/wp-content/uploads/2026/11/34290-1fa91c46-768x403.jpg)