DataCollatorWithFlattening is incompatible with non – list input ids

这个报错通常出现在使用 DataCollatorWithFlattening 处理 tokenizer 直接返回的张量(tensor/ndarray)输入时,collator 期望 input_ids 是 Python list,却收到了非 list 类型。优先排查传给 collator 的数据是否

快速结论:这个报错通常出现在使用 DataCollatorWithFlattening 处理 tokenizer 直接返回的张量(tensor/ndarray)输入时,collator 期望 input_ids 是 Python list,却收到了非 list 类型。优先排查传给 collator 的数据是否仍为 tensor/ndarray 而非已转为 list 的结构。

适用环境:Issue 中仅确认使用最新版 transformers 与 GPT2Tokenizer,未提供具体的 Python、CUDA、PyTorch、显卡或操作系统版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 最后的状态是维护者与贡献者均无法在当前 main 分支复现该报错,并推测问题已被其他改动修复;若仍遇到,建议先升级到最新 transformers,并在新 Issue 中链接此问题。

注意事项:“已修复”的结论仅基于当前 main 分支的复现测试,未覆盖所有边缘情况;若你的输入并非标准 tokenizer 输出(例如自定义 dataset 又手动做了 flatten),仍可能触发类似类型不匹配。

问题场景

用户在自定义任务或数据集上使用 transformers 的 DataCollatorWithFlattening,把 GPT2Tokenizer 的返回值直接扁平化后交给 collator 处理。Issue 中的复现脚本先调用 tokenizer("A test sentence", return_tensors="pt"),再对每个值执行 v.flatten(),最后把同一份 example 复制两份传入 collator。

报错原文

DataCollatorWithFlattening is incompatible with non - list input ids

原因分析

可能原因:DataCollatorWithFlattening 在拼接 batch 时假定 input_ids 是 Python list,而 return_tensors="pt" 或 return_tensors="np" 会返回 tensor/ndarray。当这些张量未先转为 list 就进入 collator 的拼接逻辑,就会因类型不符合预期而报错。

不过根据后续评论,当前实现已会在拼接前通过 .tolist() 转换 tensor/ndarray 输入,维护者和贡献者在最新 main 分支上用上述脚本均无法复现,因此该问题很可能已被其他改动修复。

环境排查

  • 确认 transformers 版本,尽量升级到最新版后再复现。
  • 确认 tokenizer 的 return_tensors 取值("pt"、"np" 或不指定)。
  • 确认传入 collator 的每个 sample 中 input_ids 的实际类型(list、tensor 还是 ndarray)。
  • Issue 未提供 Python、PyTorch、CUDA、显卡和操作系统版本,这些不构成已知的必查项。

解决步骤

  1. 先升级 transformers 到当前最新版本,因为 Issue 讨论表明该问题在当前 main 上已无法复现。
  2. 用 Issue 中的脚本重新测试,分别尝试 return_tensors="pt" 与 return_tensors="np",观察是否仍报错。
  3. 如果仍报错,检查 input_ids 的类型:确认它是否在传入 collator 前被转换成了 tensor/ndarray,而没有经过 .tolist() 或直接传入 list。
  4. 若确认是自定义数据处理流程导致的类型问题,可优先尝试在送入 collator 前把 input_ids 转为 list 再拼接。
  5. 如果最新版下依然能稳定复现,带上完整的复现脚本、环境信息和版本号,新建 Issue 并链接回本 Issue。

验证方法

用 Issue 中的复现脚本调用 collator([example]*2),若不再抛出 DataCollatorWithFlattening is incompatible with non - list input ids,并正常返回拼接后的 batch,说明问题已解决。若仍报错,说明你的场景属于尚未覆盖的边缘情况,需要单独提交复现信息。

参考来源

huggingface/transformers #33946

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26819

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注