快速结论:该报错涉及 Hugging Face Transformers 中 Cohere ASR 模型在缓存生成(cached generation)阶段反复执行 encoder-to-decoder 投影操作,造成不必要的计算开销。优先排查方案是确认是否使用了 EncoderDecoderCache 以及生成阶段是否重复调用 decoder.proj。
适用环境:Hugging Face Transformers 仓库(CohereAsrDecoder.forward());Issue 中测试环境为 RTX 3060 12 GB、BF16、batch 24、SDPA、max_new_tokens=445,涉及 500 段阿拉伯语音频(5,032.699 秒)。Python、CUDA、PyTorch 具体版本未在 Issue 中明确。
最快修复方案:暂无确认的一步修复方案——该优化目前以 PR 形式存在(分支 AliOsm:optimize-cohere-asr-encoder-projection,commit 52d19f812c),尚未合并到上游主线;如需修复请等待合入或自行应用该 commit。
注意事项:该优化方案仅影响跨注意力(cross-attention)缓存已全部初始化后的生成阶段;训练、use_cache=False、新缓存或部分初始化缓存行为不变。基准测试为生产环境单次观测,非统计性结论。
问题场景
在 Hugging Face Transformers 中使用 Cohere ASR 模型进行批量推理(batch inference)时,用户发现在缓存生成(cached generation)阶段,CohereAsrDecoder.forward() 在每一步自回归解码调用中都会重复执行 encoder-to-decoder 投影(`decoder.proj`)。实际上,在 prefill 之后,每一层解码器的 encoder K/V 状态已缓存,后续步骤不再消费投影后的 encoder 数值,仅需要 source-shape 和 mask 元数据。该冗余计算导致生成延迟增加,但对输出结果无影响。
报错原文
Avoid repeated Cohere ASR encoder projection during cached generation
(注:Issue 标题即为核心报错描述;Issue 内未包含具体堆栈或异常文本,而是性能优化提案。)
原因分析
主要原因(在 Issue 中已验证):CohereAsrDecoder.forward() 在每次自回归解码调用时无条件执行共享投影(shared projection)。当 EncoderDecoderCache.is_updated[layer_idx] 在 prefill 后全部为 true 时,该投影不再被跨注意力层实际消费,但仍被重复计算。可能原因:实现未利用现有 cache 生命周期判断投影是否需要执行,导致缓存阶段产生不必要的计算。
环境排查
- 确认 Transformers 版本是否包含
CohereAsrDecoder及EncoderDecoderCache相关实现。 - 确认生成时是否显式设置
use_cache=True(默认值取决于模型配置)。 - 确认 encoder/decoder 宽度是否不同(如 24 -> 16),以验证跳过投影是否影响数值精度。
- 若复现性能问题,可统计单次生成中
decoder.proj被调用的次数(Issue 中实测为 3,224 -> 21 次)。
解决步骤
- 确认当前 Transformers 是否已合入该优化(检查 commit
52d19f812c或分支AliOsm:optimize-cohere-asr-encoder-projection)。 - 如未合入,可优先尝试自行 cherry-pick 该 commit 或修改
CohereAsrDecoder.forward():仅在至少一个跨注意力缓存层未初始化时执行投影;当所有EncoderDecoderCache.is_updated[layer_idx]为true后跳过共享投影。 - 跳过投影时,使用缓存的第一层 K 张量作为零拷贝 mask 元数据,确保 source length 和投影/KV dtype 在混合精度下保持一致。
- 验证训练、直接 forward、
use_cache=False、新缓存和部分初始化缓存行为不变(保留原投影逻辑)。 - 如需合入上游,按仓库 agentic-contribution 政策提交 PR(需注明 AI 辅助披露)。
验证方法
跑通完整 Cohere ASR 模型测试套件及仓库一致性检查(make style、make check-repo、pytest -q tests/models/cohere_asr/test_modeling_cohere_asr.py,Issue 中验证结果为 128 passed, 131 skipped)。另外可采用以下方法:
- 对比跳过投影前后生成结果的 bit-exact 一致性(Issue 中
max_abs_diff=0.0)。 - 统计解码过程中
decoder.proj调用次数是否从每个 token 一次降至每个 generation batch 一次。 - 对比生成阶段耗时(Issue 实测提升约 3.47% / 1.036x)。
参考来源
huggingface/transformers #47272
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: How to deal with the situation that the user_id returned in the Conversation table in the database is null?](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7940-bcfd3c79-768x403.jpg)
![[Question]: dependency failed to start: container ragflow-mysql is unhealthy](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7501-3cad0829-768x403.jpg)
