快速结论:这不是普通的“代码跑错”报错,而是在用 torch.export 导出的文本生成模型(例如适配 ExecuTorch 工作流)做推理时,发现导出产物里只有“单步预测下一个 token”的 inner transformer,缺少自回归生成逻辑,因此无法像 eager / torch.compile 模型那样直接调用统一的 generate。优先确认你使用的 Transformers 版本是否已包含共享的 ExecuTorch 导出辅助实现。
适用环境:Issue 涉及 Transformers、torch.export、ExecuTorch Runtime,讨论中以 Phi3-mini 作为最小生成实现示例;Issue 未给出具体 Python、CUDA、显卡或依赖版本,因此这些项不做补写。
最快修复方案:升级到包含 PR #33707 的 Transformers 版本,使用 main 分支中新增的共享辅助函数来为导出的 decoder-only LM 做生成,而不再为每个导出模型重复写自回归循环。相关实现位于 src/transformers/integrations/executorch.py。
注意事项:该共享辅助函数面向“导出的 decoder-only 语言模型”的生成流程;如果你是在 .pte 运行时上直接做生成,Issue 中提到 optimum-executorch 负责覆盖这条路径,并不是由 Transformers 这个辅助函数单独完成。Issue 未展示具体命令行或调用示例,使用前请按你实际安装版本核对该辅助函数的入口和签名。
问题场景
用户在为文本生成模型走 “Export to ExecuTorch” 工作流时,先用 torch.export 导出模型,然后希望在导出产物上做推理生成。与 torch.compile 不同,torch.export 只导出 inner transformer,用来预测单个 token;自回归逻辑(循环、缓存、停止条件等)不在导出产物内。ExecuTorch Runtime 侧要么用 C++、要么用 Python 自行实现这段自回归逻辑。Issue 发起者希望不要为每个导出模型都复制一份 generate 逻辑,而是提供一个通用实现,让任意导出的文本生成模型都能用统一的 generate 体验,和 eager / compiled 模型保持一致。
报错原文
Implement `generate` (inference) for torch exported text-generation models
原因分析
根本原因不是某个依赖装错,而是导出边界导致的:torch.export 导出的 artifact 只包含预测单个 token 的 inner transformer,不包含自回归生成逻辑。因此导出的文本生成模型没有可直接复用的统一 generate 实现。在 PR #33707 合并前,用户只能参考测试里针对单个模型写的最小 generate 循环(例如 Phi3-mini 的测试实现),或依赖 ExecuTorch Runtime 侧自带的 C++ / Python 自回归代码;这些方案要么重复、要么不通用,所以会出现“导出成功但无法像普通模型那样直接 generate”的情况。
环境排查
- 确认当前安装的 Transformers 版本是否已包含 PR #33707 引入的共享辅助实现;如果版本较旧,可能仍只有 per-model 测试循环。
- 确认你使用的是
torch.export导出的 artifact,而不是 eager 或torch.compile模型;这两类模型的 generate 行为不同。 - 确认模型类型是否为 decoder-only 文本生成模型;共享辅助函数面向的是导出的 decoder-only LM。
- 确认生成发生在哪一侧:是在 Transformers 侧调用共享辅助函数,还是在 ExecuTorch 的
.pte运行时上生成;后者对应optimum-executorch。 - Issue 未提供 Python、PyTorch、CUDA、显卡等具体版本要求,因此不需要据此修改这些依赖。
解决步骤
- 将 Transformers 升级到包含 PR #33707 的版本(或使用 main 分支)。合并后 main 中已经有一个共享 helper,任何导出的 decoder-only LM 都可以使用它。
- 不要继续为每个导出模型单独复制自回归循环;改为调用该共享辅助实现,它位于
src/transformers/integrations/executorch.py中(讨论中给出的范围约为 339–350 行)。 - 参考模型导出测试的写法:这些测试已经改为调用该共享 helper,而不是各模型自己写循环,可作为接入方式的参照。
- 如果你实际运行生成的环境是 ExecuTorch 的
.pte运行时,则这条生成路径由optimum-executorch覆盖,应转向该项目处理,而不是只依赖 Transformers 的辅助函数。 - 如果在升级后仍无法调用统一 generate,请先核对当前版本是否真的包含该 helper,以及传入的模型是否为导出的 decoder-only 文本生成模型。
验证方法
升级到包含 PR #33707 的 Transformers 后,对导出的 decoder-only 文本生成模型调用共享辅助生成逻辑,应当能得到与 eager / compiled 模型一致的生成结果;同时模型导出测试不再使用各模型单独的自回归循环。如果是在 .pte 运行时上验证,则应以 optimum-executorch 的生成流程是否正常作为判断依据。
参考来源
huggingface/transformers #32504
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


