[Krea-2] `enable_gqa` + `attn_mask` produces high usage of VRAM

该报错发生在 Diffusers 加载 Krea-2 模型并启用 GQA 与注意力掩码(attn_mask)时,SDPA 会静默回退到 math 后端导致显存占用飙升。优先排查是否通过 monkey-patch 扩展 K/V 头后,显存占用即可恢复至正常水平。

快速结论:该报错发生在 Diffusers 加载 Krea-2 模型并启用 GQA 与注意力掩码(attn_mask)时,SDPA 会静默回退到 math 后端导致显存占用飙升。优先排查是否通过 monkey-patch 扩展 K/V 头后,显存占用即可恢复至正常水平。

适用环境:Diffusers(main 分支)、Krea2Pipeline、支持 SDPA 的 GPU(Issue 中提及 RTX 5090 与移动版 RTX 4090)、Windows/Linux 系统。

最快修复方案:暂无确认的一步修复方案;可优先尝试 Issue 中验证有效的 monkey-patch:在模型加载前修改 Diffusers 的 attention dispatcher,使 K/V 头扩展为与 Q 头一致后,再以 enable_gqa=False 调用原始 SDPA。

注意事项:该 patch 是临时绕过方案,D 部分(即调用方)会显式处理 K/V 扩展,且官方倾向在 Krea2 内部处理,而非修改 dispatcher 的全局行为。

问题场景

在 Diffusers(main 分支)中使用 Krea2Pipeline 加载 4-bit 动态量化模型(如 OzzyGT/Krea_2_Turbo_sdnq_dynamic_4bit),生成 1024×1024 图像时触发 OOM 或极慢推理。Linux 下 16GB 显存直接 OOM,Windows 下则因显存不足回退到系统内存导致推理耗时约 37 分钟。

报错原文

[Krea-2] `enable_gqa` + `attn_mask` produces high usage of VRAM
peak allocated: 19.94 GiB
peak reserved : 20.78 GiB
inference time: OOM or 2201s (36.7 min)

原因分析

可能原因:Krea-2 模型的注意力路径同时启用了 GQA(分组查询注意力)和 attn_mask。当前实现使 SDPA 回退到 math 后端(非融合 kernel),导致显存占用和计算量大幅增加。其他 attention 后端(如 flash-attention)均会对此场景发出显式告警,而当前实现未做此检查。

环境排查

  • Diffusers 版本:需基于 main 分支(Issue 报告时未发布修复版本)
  • PyTorch 版本:需支持 SDPA 及 GQA(建议确认 PyTorch ≥ 2.x)
  • GPU 显存:16GB 或更高(RTX 5090、移动版 RTX 4090)
  • 操作系统:Windows 下因 OOM 会回退到系统内存导致性能雪崩,Linux 下直接 OOM

解决步骤

  1. 在加载 Krea2Pipeline 之前,从 diffusers.models.attention_dispatch 导入 _AttentionBackendRegistryAttentionBackendName
  2. 获取原始 native attention 后端函数,定义包装函数:当 attn_mask 非空且 enable_gqa=True 且 Q/K 头数不一致时,用 repeat_interleave 将 K/V 头扩展为与 Q 头数一致,然后设置 enable_gqa=False 并调用原始函数。
  3. 将该包装函数注册回 _AttentionBackendRegistry(即 monkey-patch),再正常初始化 pipeline 和推理。
  4. 显存占用应显著下降(Issue 中实测从约 20 GiB 降至约 13 GiB),推理时间约 45 秒。
  5. 若不想用 monkey-patch,可等待官方在 Krea2 内部实现 K/V 头扩展的修复(官方已受理并计划修复)。

验证方法

重新运行原始复现脚本,观察 torch.cuda.max_memory_allocated() 是否明显下降(从约 20 GiB 降至约 12 GiB),且推理能正常完成而非 OOM 或超时。可使用 Issue 中给出的带 patch 脚本作为对照。

参考来源

huggingface/diffusers #14518

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19074

发表回复

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