flash-attn
是一个高性能 CUDA 加速库,编译时 对 gcc
(或 g++
)版本是有严格要求的 ,因为它需要和 NVIDIA CUDA Toolkit 的版本匹配。
如果 gcc
太新或太旧,nvcc
会直接报错 或编译出来的不兼容。
下面是通用的经验总结(你可以对照看你机器上的环境):
✅ 1️⃣ 核心点:nvcc
只支持特定版本的 gcc
NVIDIA 官方 CUDA Toolkit 对应支持的 gcc
范围:
CUDA 版本 | 推荐 gcc |
---|---|
CUDA 11.6 | gcc 9.x (或 gcc 7.x ~ 9.x ) |
CUDA 11.7 | gcc 9.x ~ 10.x |
CUDA 11.8 | gcc 9.x ~ 11.x |
CUDA 12.0 | gcc 10.x ~ 11.x |
CUDA 12.1+ | gcc 11.x (12.x 往往也可以) |
如果你的 gcc
版本太新(例如 gcc 13
),nvcc
可能直接报错:
unsupported GNU version! gcc versions later than 11 are not supported!
✅ 2️⃣ flash-attn 的编译特点
flash-attn
的核心是 CUDA C++
,底层依赖 PyTorch 的 torch.utils.cpp_extension
:
- 必须
nvcc
和gcc
能正常一起工作。 - 如果 Python 对应的
torch
是用某个 CUDA 编译的,必须和你本机的nvcc
版本匹配。 flash-attn
不支持非nvcc
的替代方案,编译阶段一定走CUDA
。
✅ 3️⃣ 如何查看当前版本
-
查看
gcc
:bashgcc --version
-
查看
nvcc
:bashnvcc --version
-
查看
torch
的 CUDA:pythonpython -c "import torch; print(torch.version.cuda)"
这三者必须能对上号:
- 例如:
torch
是 CUDA 11.8,则系统的nvcc
应该是 CUDA 11.8,gcc
最好是 9~11。