[已解决] flash-attn报错flash_attn_2_cuda.cpython-310-x86_64-linux-gnu.so: undefined symbol
ImportError: /data/Matrix/lib/python3.10/site-packages/flash_attn_2_cuda.cpython-310-x86_64-linux-gnu.so: undefined symbol: _ZN3c104cuda9SetDeviceEi
本质原因:flash-attn遇到的所有问题都是版本不匹配导致的
所以找到正确版本的flash-attn安装即可解决问题。下面说具体步骤。
1,先卸载已有的flash-attn, 输入pip uninstall flash-attn
, 然后输入y
2,查看自己对应的torch版本,cuda版本和python版本
①查看torch版本
pip show torch
返回如下结果,可知torch版本为2.0.1
或:如果不是用pip下载的torch,还可以用下面的方式查找
import torch
print(torch.__version__) # 查看torch版本
②查看cuda版本
nvcc -V
cuda版本为V12.1.66
③查看python版本
python --version
python版本为3.10.16
3, 去flash attention官网找到对应的安装包下载,选择包时要根据自己的torch版本,cuda版本(可以选择低于自己cuda版本的) 和python版本进行选择. 同时选择abiFALSE系列.
这里如果没有什么特定版本需要的话,推荐flash-attn为2.5.8版本系列,因为比较稳定加上很多项目验证过可行,在链接的第三页。
右键复制链接,在在linux中使用wget + 链接进行whl安装包的下载:
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.8/flash_attn-2.5.8+cu118torch2.0cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
最后使用pip install whl下载位置,等待一小会下载flash-attn,就完成了!
pip install your/flash-attn-whl/path(替换为你的路径)
总结:最近在使用flash-attn加速大模型加速的时候遇到了各种各样的bug,主要就是报flash-attn版本与transformer还有deepspeed版本冲突等各种各样的问题,但是本质上还是因为flash-attn版本没有安装正确的原因,安装与你上述三个环境相符的版本即可解决问题。