如何更快编译FlashAttention的Python Wheel包?
我懂那种编译FlashAttention wheel要等好几个小时的痛苦!分享几个亲测有效的提速方法,帮你节省时间:
用官方/社区预编译的Wheel包:别硬着头皮自己编译了,很多时候项目官方或者第三方社区已经针对常见CUDA版本、GPU架构编译好了现成的wheel包。直接用
pip install flash-attention试试,如果默认源没有适配的,也可以找找conda-forge这类渠道,用conda install -c conda-forge flash-attention安装,直接跳过编译步骤,这是最快的路子。开启并行编译:默认编译往往只用到单线程,白白浪费CPU性能。编译前先设置环境变量开启多线程:
export MAKEFLAGS="-j$(nproc)",这样编译器会用上你机器所有的CPU核心,编译速度能直接翻好几倍,亲测能把几小时的编译压缩到几十分钟。匹配并升级编译环境:确保你的CUDA Toolkit版本和FlashAttention要求的版本完全匹配,尽量用最新的稳定版CUDA——新版的nvcc编译器自带不少优化,能大幅提升编译效率。同时也要把gcc、g++这些基础编译工具更到最新,旧版本的编译器不仅慢,还可能出现兼容性问题。
指定GPU架构编译:默认情况下,编译器会为所有CUDA架构生成代码,这会浪费大量时间。你可以只指定自己当前GPU对应的架构,比如RTX 30/40系列对应
8.0,A100对应8.0和8.6,设置环境变量:export TORCH_CUDA_ARCH_LIST="8.0",之后再执行安装命令,编译范围缩小后速度会快很多。用现成容器镜像跳过编译:如果只是想快速用上FlashAttention,不用纠结编译wheel,可以直接找已经预装了FlashAttention的Docker容器镜像,拉下来就能运行,完全跳过编译环节,特别适合快速测试或者部署场景。
备注:内容来源于stack exchange,提问作者mirekphd

