ValueError: ViTMAEForPreTraining does not support Flash Attention 2.0 yet.

当你用 ViTMAEForPreTraining 做 MAE 预训练并尝试启用 Flash Attention 2.0 时,旧版 Transformers 会在模型加载阶段直接抛出该错误;优先确认 Transformers 版本是否已包含对应的 ViT attention 重构。

快速结论:当你用 ViTMAEForPreTraining 做 MAE 预训练并尝试启用 Flash Attention 2.0 时,旧版 Transformers 会在模型加载阶段直接抛出该错误;优先确认 Transformers 版本是否已包含对应的 ViT attention 重构。

适用环境:Issue 中确认的环境为 Transformers v4.41.0.dev0、PyTorch 2.5.1,运行在多 GPU + NCCL 后端环境。

最快修复方案:升级到 Transformers v4.50.0 或更高版本。该版本合并了 #36545 的 ViT attention 重构,ViTMAEForPreTraining 自 v4.50.0 起支持 attn_implementation="flash_attention_2",同时也支持 SDPA 和 flex attention。

注意事项:Issue 中提到可用 pip install -U git+https://github.com/qubvel/transformers@refactor-vit-attention 从开发分支安装作为临时验证方式,但该分支属于非正式发布版本,仅用于测试;正式使用建议直接升级到已发布版本。截至该 Issue 关闭时,提出问题的用户表示尚未实际测试该分支,因此其运行效果未得到原提问者的独立验证。

问题场景

用户在基于 ViTMAEForPreTraining 预训练 Foundation Model(例如 Landsat 等遥感大尺寸影像数据)时,希望启用 Flash Attention 2.0 来加速训练并降低显存占用。在尝试开启 Flash Attention 时,模型加载阶段直接报错,无法继续。

报错原文

ValueError: ViTMAEForPreTraining does not support Flash Attention 2.0 yet. 
Please request to add support where the model is hosted, on its model hub page: https://huggingface.co//discussions/new 
or in the Transformers GitHub repo: https://github.com/huggingface/transformers/issues/new

原因分析

最可能的原因是:在报错发生的版本中,ViTMAEForPreTraining 尚未接入 Flash Attention 2.0 的实现逻辑。当传入 attn_implementation="flash_attention_2" 时,模型会在加载阶段直接检查并对不支持 Flash Attention 的模型抛出该 ValueError,而不是在训练过程中失败。

维护者回复也印证了这是一项功能缺失(Issue 被标记为 Feature request),需要社区提交 PR 来补充支持,而非用户侧的配置错误。

环境排查

  • 确认当前安装的 Transformers 版本,是否为 v4.50.0 之前(报错环境为 v4.41.0.dev0)。
  • 确认 PyTorch 版本(报错环境为 2.5.1)。
  • 确认是否在调用模型时传入了 attn_implementation="flash_attention_2"
  • 确认运行在多 GPU + NCCL 后端环境下的分布式配置是否正确。
  • 如需自行验证开发分支,需确认安装来源是否确实切换到了对应的 refactor 分支。

解决步骤

  1. 先确认当前 Transformers 版本。如果低于 v4.50.0,该功能在正式版本中尚不存在,报错属于预期行为。
  2. 升级 Transformers 到 v4.50.0 或更高版本,因为 ViTMAEForPreTraining 对 Flash Attention 2.0 的支持随 #36545 重构合并并在 v4.50.0 发布。
  3. 升级后,在加载 ViTMAEForPreTraining 时设置 attn_implementation="flash_attention_2",即可启用 Flash Attention 2.0。同一版本还支持 SDPA 和 flex attention。
  4. 如果暂时无法升级正式版本,可按维护者建议尝试开发分支(可优先尝试,仅用于验证):
    pip install -U git+https://github.com/qubvel/transformers@refactor-vit-attention
  5. 安装完成后重新加载模型并启用 Flash Attention,观察是否仍抛出相同错误。

验证方法

在升级后的环境中,用 attn_implementation="flash_attention_2" 加载 ViTMAEForPreTraining。如果模型能正常完成加载并进入前向/训练流程,不再抛出 “does not support Flash Attention 2.0 yet” 的错误,即说明问题已解决。可进一步对比启用前后的显存占用与训练速度,确认 Flash Attention 实际生效。

参考来源

huggingface/transformers #36527

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25297

发表回复

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