[RFC] Add `modeling_xxx_fusion.py` to support kernel fusion

该 Issue 是一份针对 Transformers 的 RFC(请求意见稿),标题为 [RFC] Add `modeling_xxx_fusion.py` to support kernel fusion,讨论的是通过新增 `modeling_xxx_fusion.py` 文件为模型提供 kern

快速结论:该 Issue 是一份针对 Transformers 的 RFC(请求意见稿),标题为 [RFC] Add `modeling_xxx_fusion.py` to support kernel fusion,讨论的是通过新增 `modeling_xxx_fusion.py` 文件为模型提供 kernel fusion(算子融合)能力,而不是一个常规的报错工单。若你在使用 `model.fuse_modules()` 或 `model.fuse_layers()` 时遇到报错,通常说明所用 Transformers 版本尚未包含该融合实现,应优先确认版本与特性可用性。

适用环境:Issue 未提供明确的环境信息(Python、CUDA、PyTorch、显卡、依赖版本均未列出),仅涉及 Transformers 工具本身,以及 DeepSpeed 团队与 Megatron-LM / NVIDIA Apex 内核的参考讨论。

最快修复方案:暂无确认的一步修复方案。该 Issue 处于 WIP(进行中)状态,融合 API 与 `modeling_xxx_fusion.py` 文件在当时属于提案阶段,未合入稳定版本,因此无法通过一条命令直接修复。

注意事项:Issue 中的 API 设计、模块替换方案和性能测试数据均为提案内容,不代表已发布版本中的实际行为。例如 FusedLayerNorm 在测试中反而慢于 `torch.nn.LayerNorm`,作者已决定不提供该内核;FusedScaleMaskSoftmax 还存在适用约束。请勿把该 RFC 中的代码片段直接当作可用接口。

问题场景

用户尝试在 Transformers 模型上启用 kernel fusion 以提升推理或训练性能,例如调用提案中的 `model.fuse_modules()`(函数级融合,如 word_embedding、scale_mask_softmax、layer_norm、bias_act、bias_dropout_residual、cross_entropy)或 `model.fuse_layers(inference=…)`(块级 attention 与 MLP 融合)。Issue 正文给出的目标是新增 `modeling_xxx_fusion.py`,由融合引擎查找 `BertOutput`、`BertLayer` 等原始模块并替换为 `FusedBertOutput`、`FusedBertLayer`,思路与 `parallelformers`、`deepspeed` 类似。

报错原文

[RFC] Add `modeling_xxx_fusion.py` to support kernel fusion

原因分析

最可能的原因是:该 Issue 是 RFC 提案,`modeling_xxx_fusion.py` 与 `fuse_modules()` / `fuse_layers()` 接口当时尚未合入 Transformers 发布版本,因此用户所安装的版本中并不存在这些模块和方法,调用时自然会失败。另一个可能原因是融合内核对模型结构或运行条件有约束,例如 Issue 提到 FusedScaleMaskSoftmax 存在启用条件,FusedLayerNorm 因实测慢于 `torch.nn.LayerNorm` 被决定不提供。由于 Issue 未给出具体报错堆栈,以上均为可能原因。

环境排查

  • 确认所安装 Transformers 的版本,并核对其中是否已包含 `modeling_xxx_fusion.py` 及 `fuse_modules` / `fuse_layers` 接口。
  • 确认当前使用的模型类型是否被提案覆盖:`fuse_modules` 声称支持较广的模型范围,`fuse_layers` 仅支持少数模型。
  • 确认运行设备与后端:融合内核依赖 CUDA 与相应算子实现;Issue 未列出具体 CUDA、PyTorch、显卡版本。
  • 若参考 DeepSpeed 方案,注意 Issue 指出现有 DeepSpeed 融合整个 Transformer 层,支持模型非常有限;BigBird 等随机 attention 模型需要自定义 CUDA 内核。

解决步骤

  1. 先确认该特性是否已可用:在你的 Transformers 版本中查找 `modeling_xxx_fusion.py` 或 `fuse_modules` / `fuse_layers` 方法是否存在。
  2. 若不存在,说明该 RFC 尚未落地到你的版本,可优先尝试升级到包含该特性的版本,或关注 Issue #13845 的后续进展。
  3. 若接口存在但调用失败,逐项缩小融合范围:先只开 `bias_act`、`bias_dropout_residual` 等模块级融合,再尝试 `fuse_layers`,以定位是哪个内核触发问题。
  4. 对 LayerNorm 相关融合保持谨慎:Issue 的测试数据显示 FusedLayerNorm 比 `torch.nn.LayerNorm` 更慢,作者已决定不提供该内核。
  5. 若涉及随机 attention 等特殊结构,按 Issue 建议让不可融合的区域回退到 torch 默认模块,只融合可融合区域。

验证方法

确认目标版本中确实存在对应融合接口;在小模型(如 `bert-base-cased`)上分别开启单项融合与全部融合,对比是否出现报错以及性能是否提升。如仅需确认特性是否存在,检查模块文件与方法名即可,无需运行完整训练。

参考来源

huggingface/transformers #13845

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28548

发表回复

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