快速结论:该报错出现在 InvokeAI 的 Qwen-Image Edit 模式、使用 transformers 5.x 调用 Qwen2.5-VL 文本编码器时:编码器只传了 input_ids、attention_mask、pixel_values 和 image_grid_thw,没有传 mm_token_type_ids,导致参考图 token 回退为 1-D 文本位置而非 3-D(mRoPE)位置。优先排查编码器是否把 processor 返回的 mm_token_type_ids 继续传给模型。
适用环境:InvokeAI main 分支(提交 ea1056bd81);transformers 5.10.4;Qwen-Image Edit 模式配合 Qwen2.5-VL 编码器。Issue 未明确给出操作系统、Python、CUDA、显卡信息。
最快修复方案:暂无确认的一步修复方案。Issue 中提出的方案(可优先尝试):在 QwenImageTextEncoderInvocation._run_encoder() 中把 processor 输出的 mm_token_type_ids 一并转发给 Qwen2_5_VLForConditionalGeneration,并用 getattr(..., None) 兼容不提供该字段的输入或 processor 版本;该方案目前只在提交者的个人 fork 分支上验证,尚未合并。
注意事项:该改动会改变 Edit 模式下的编码器隐状态,从而影响出图结果,建议固定随机种子对比修改前后的效果。现有 diffusers 的 Qwen-Image Edit pipeline 同样没有传该字段,InvokeAI 当前行为与 diffusers 一致;这是 transformers 5 升级带来的行为变化,尚未有官方确认的回归结论。纯文生图路径不受影响,因为没有视觉 grid 时不会进入多模态位置计算分支。
问题场景
在 InvokeAI 中使用 Qwen-Image Edit 模式,并附带一张参考图编码提示词时触发。具体位置是 invokeai/app/invocations/text_encoder/qwen_image_text_encoder.py 的 _run_encoder:它把 input_ids、attention_mask、pixel_values、image_grid_thw 传给 Qwen2.5-VL,但没有传 mm_token_type_ids。
报错原文
[bug]: Qwen-Image Edit reference-image tokens get 1-D positions under transformers 5
原因分析
可能原因(Issue 中已给出复现证据):在 transformers 5.x 中,Qwen2_5_VLModel 只有在同时拿到 mm_token_type_ids 和视觉 grid 时,才会为图像 token 构建 3-D(mRoPE)位置编码;缺少该字段时回退为 1-D 文本位置。而 Qwen2.5-VL 的 processor 默认会返回该字段(return_mm_token_type_ids: True),编码器没有把它继续传递。证据包括:在微型随机 Qwen2.5-VL 上,传入 mm_token_type_ids 后编码器输出最大差异达 0.033;transformers 4.x 下位置是从 input_ids 中的图像 token 计算的,推测这才是 Qwen-Image Edit 训练时的行为。MiniMax H3 已经构建并传递了该字段(invokeai/backend/minimax_h3/text_conditioning.py:97),可作为参照。
环境排查
- 确认 InvokeAI 版本/提交是否为 main @ ea1056bd81 或包含该编码器实现的分支。
- 确认 transformers 版本是否为 5.x(Issue 中为 5.10.4),并与 4.x 行为做对照。
- 确认使用的模型是 Qwen-Image Edit + Qwen2.5-VL 编码器,且提示词带参考图。
- 检查 processing 输出中是否包含
mm_token_type_ids,以及_run_encoder是否将其传给模型。 - Issue 未提供操作系统、Python、CUDA、显卡信息,这些项目无需作为排查前提。
解决步骤
- 按 Issue 的复现方法确认现象:用一张参考图编码 Edit 提示词,分别在当前节点实现和传入
mm_token_type_ids=model_inputs.mm_token_type_ids的情况下编码,对比_EDIT_DROP_IDX之后的隐藏状态。 - 若确认存在差异,可优先尝试参考提交者的修复思路:在
_run_encoder()中将 processor 输出的mm_token_type_ids转发给Qwen2_5_VLForConditionalGeneration。 - 使用
getattr(model_inputs, "mm_token_type_ids", None)读取该字段,保证在不提供该字段的输入或旧版 processor 下仍可运行。 - 不要改动纯文本生成路径:没有视觉 grid 时 transformers 不会进入多模态位置计算分支。
- 补充一个基于微型 Qwen2.5-VL 的 CPU 回归测试(而非 mock forward):构造 4 个图像 token、image grid 为
[1, 4, 4]且视觉 patch 输入匹配的批次,检查 rotary embedding 实际位置——传入时应得到时间、高、宽三个不同坐标,不传时三个轴为同一个 1-D 序列。 - 在固定随机种子下对比 Edit 出图结果,评估该修复对出图的影响。
验证方法
回归测试应在旧实现下失败、在应用修复后通过;同时确认显式传入 mm_token_type_ids 时图像 token 获得时间/高/宽三个维度各自不同的位置坐标,不传时退化为单一 1-D 序列。另可在固定种子下对比修复前后的 Edit 出图,确认条件编码变化符合预期。提交者还提到 Ruff 检查、格式检查和 diff 校验均通过,可作为合并前的附加验证。
参考来源
提交者 fork 分支:fix/9983-qwen-edit-mm-token-types(未合并,仅供参考)
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: Dataset settings Save silently fails on API-created General datasets with null table_column_* fields](https://www.chat-gpts.plus/wp-content/uploads/2026/11/20893-385c5add-768x403.jpg)