DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Transformers 开启 FlashAttention 2 后报包不可用

按错误分支区分缺包、版本和设备要求;支持时用 SDPA 或 eager 建立可运行基线。

from_pretrained 设置了 attn_implementation="flash_attention_2",随后报 FlashAttention2 has been toggled on。这段前缀只说明请求的注意力后端没通过检查。后半句才区分包没安装、版本不符合,或当前设备不支持。

在 Colab 或其他 notebook 环境中,加载代码请求了 FA2,并不代表安装单元已经装好 flash_attn。例如旧版 moondream2 微调 notebook 曾遗漏这项依赖,后续 notebook 已补充安装步骤;这只处理缺包,不会解决所有设备和模型上的 FA2 可用性问题。排查自己的环境时,应读取完整异常和实际包版本。

下面的历史版本数值适用于 Transformers 4.43.3:CUDA 分支要求 flash-attn 至少 2.1.0,ROCm 分支要求至少 2.0.4,模型类本身也必须支持该实现。5.19.0 的可用性检查已有不同的版本与 kernels 回退分支,不能把 4.43.3 的数值当成新版安装要求。

检查运行进程看到的包

python -m pip show torch transformers flash-attn
python -m pip check
python -c "import sys, torch; print(sys.executable); print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"

若 pip show 能找到包,但真实加载报 undefined symbol,已经进入二进制兼容问题。保存完整异常,并对照 flash-attn 官方安装要求检查 PyTorch、CUDA/ROCm 和 GPU 架构;反复安装同一 wheel 不能纠正不匹配的 ABI。这里不提供跨平台通用安装命令,尤其不能把 Linux CUDA 的方案直接搬到 Windows 或 CPU 环境。

业务并不必须使用 FlashAttention 2 时,可以重新加载模型,明确选择另一后端:

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
    "./model", local_files_only=True,
    attn_implementation="sdpa",
)

这段加载仍有条件:模型架构支持 SDPA,且在该 Transformers 版本里满足 PyTorch SDPA 要求。在 Transformers 4.43.3 中,SDPA 要求 PyTorch 至少 2.1.1。若模型不支持,可在该架构提供普通注意力实现的前提下改用 "eager"。不要运行到一半改私有配置字段;重新加载让所选模块与配置一致。

切换后端之后还要重新量显存

FlashAttention 2 的代码还检查 dtype 与设备映射。4.43.3 对 FP16/BF16 以外的 dtype 发出警告;CPU 或磁盘分派也可能触发单独错误。这些信息要分别处理,装包不会让 CPU 变成受支持的 GPU。

先用短输入完成一次推理或训练步,再用原业务的序列长度和 batch 验证内存。SDPA/eager 的显存与速度可能不同;短请求能返回结果,不能作为原吞吐配置已经恢复的证据。需要保留升级前后的锁文件和同一输入输出,避免把后端调整造成的数值变化误认成模型权重损坏。