快速结论:该报错通常出现在 MoE 模型走 grouped matrix multiplication(grouped_mm)优化路径时,输入或权重张量的 stride / data_ptr 对齐不满足内核要求,却被 dispatcher 错误地路由到 grouped_mm,最终由 PyTorch 抛出运行时异常;优先排查张量布局与 DeepSpeed 参数扁平化导致的对齐问题。
适用环境:Transformers 当前 main 分支;PyTorch grouped matrix multiplication 路径 src/transformers/integrations/moe.py;BF16 数据类型;涉及 DeepSpeed ZeRO/BF16 参数扁平化的场景。
最快修复方案:暂无确认的一步修复方案。Issue 中提出的方向是让 _can_use_grouped_mm() 同时校验 grouped-mm 的 stride 兼容性与非 CPU data_ptr() 的 16 字节对齐,不满足时回退到已有的 fallback 实现,相关修复尚在 Draft PR #48645 中评审。
注意事项:回退到 fallback 会放弃 grouped_mm 的优化,可能带来一定性能损失;上述修复方向来自 Draft PR,尚未合并验证,实际效果需以合并后的版本为准。
问题场景
用户在运行 MoE(Mixture of Experts)模型时,Transformers 的 grouped matrix multiplication 集成路径会调用 _can_use_grouped_mm() 决定是否使用 torch.nn.functional.grouped_mm / torch._grouped_mm。当专家权重经过转置、或使用 DeepSpeed ZeRO/BF16 参数扁平化后,张量的 stride 或存储偏移不再满足内核的对齐要求,但仍被分发到 grouped_mm,从而触发运行时失败。
报错原文
RuntimeError: expected data_ptr to be aligned to 16 bytes
原因分析
可能原因有两个层面:
第一,_can_use_grouped_mm() 此前只检查 grouped-mm 可用性、设备支持、dtype/compile 约束以及部分指针对齐情况,没有校验输入和权重张量的 stride 对齐要求。例如 BF16 下相关 stride 需按 8 个元素(16 字节)对齐,而转置后的 1025 宽权重会违反该要求,却仍可能被选中走 grouped_mm。
第二,PyTorch 的 grouped-mm 输入校验要求非 CPU 张量的 data_ptr() 满足 16 字节对齐。DeepSpeed ZeRO/BF16 参数扁平化会合法地把参数重绑定为扁平 buffer 的视图,其 stride 依然有效,但参数起始偏移可能不是 16 字节对齐,此时 dispatcher 仍返回 True,PyTorch 便抛出上述 RuntimeError。
环境排查
- 确认 Transformers 版本是否为当前
main,grouped_mm 集成代码位于src/transformers/integrations/moe.py。 - 确认 PyTorch 版本是否包含 grouped_mm 路径,以及是否支持
torch.nn.functional.grouped_mm/torch._grouped_mm。 - 确认数据类型是否为 BF16,并检查输入与权重张量的 stride 是否满足 8 元素(16 字节)对齐。
- 如使用 DeepSpeed,确认是否启用 ZeRO 与 BF16 参数扁平化,并检查参数视图的存储偏移是否 16 字节对齐。
- 确认 GPU 设备类型与型号是否满足 grouped-mm 设备支持条件(Issue 未给出具体显卡信息)。
解决步骤
- 先确认当前触发路径:检查 MoE 前向中
_can_use_grouped_mm()是否对当前输入/权重返回了 True。 - 检查权重张量是否为转置视图,例如
torch.empty(4, 512, 1025, dtype=torch.bfloat16).transpose(-2, -1),并打印其 stride,确认最后一维 stride 不满足 16 字节对齐。 - 若使用 DeepSpeed ZeRO/BF16,检查被扁平化重绑定的参数视图,确认其
data_ptr()起始偏移是否 16 字节对齐。 - 在等待上游修复期间,可优先尝试绕过 grouped_mm 优化路径,让该场景走已有的 fallback 实现(具体开关以你所使用版本的入口为准)。
- 关注 Draft PR #48645:该修复会在选择优化内核前同时校验 grouped-mm stride 兼容性与非 CPU data_ptr 对齐,不满足时自动回退。
验证方法
构造一个带有效 stride 但存储偏移未对齐的扁平 expert-weight 视图,确认 dispatcher 不再选择 grouped_mm,而是回退到已有实现,并且回退结果在数值上与预期一致(Issue 中提到回归测试正是这样验证的)。对转置权重场景,确认 _can_use_grouped_mm() 返回 False,且不再出现 RuntimeError: expected data_ptr to be aligned to 16 bytes。
参考来源
huggingface/transformers #48644
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] KSampler preview error when using --preview-method auto with live preview enabled](https://www.chat-gpts.plus/wp-content/uploads/2026/09/714-ede00b8e-768x403.jpg)