我们在使用大语言模型时,通常需要安装flash-attention2进行加速来提升模型的效率。
一、 常见安装方式如下
pip install flash-attn --no-build-isolation --use-pep517
通常直接命令行安装可能会失败,安装失败日志如下:
Looking in indexes: https://pypi.ngc.nvidia.com
Collecting flash-attn
Downloading https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/85/52/9834eb88dd8a8be13b5399a32f23a79f0a307d9708f92e2b4778afaae0d4/flash_attn-2.5.6.tar.gz (2.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5/2.5 MB 10.0 MB/s eta 0:00:00
Preparing metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [28 lines of output]
fatal: Not a git repository (or any of the parent directories): .git
<string>:78: UserWarning: flash_attn was requested, but nvcc was not found. Are you sure your environment has nvcc available? If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.
torch.__version__ = 2.0.1+cu117
Traceback (most recent call last):
......
File "/home/rd/miniconda3/envs/lib/python3.9/site-packages/torch/utils/cpp_extension.py", line 1048, in CUDAExtension
library_dirs += library_paths(cuda=True)
File "/home/rd/miniconda3/envs/lib/python3.9/site-packages/torch/utils/cpp_extension.py", line 1179, in library_paths
if (not os.path.exists(_join_cuda_home(lib_dir)) and
File "/home/rd/miniconda3/envs/lib/python3.9/site-packages/torch/utils/cpp_extension.py", line 2223, in _join_cuda_home
raise EnvironmentError('CUDA_HOME environment variable is not set. '
OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
安装 flash-attn 时出现的错误表明在准备元数据(pyproject.toml)时遇到了问题。错误信息中包含了几个关键点:
1. fatal: Not a git repository (or any of the parent directories): .git
这个错误表示 flash-attn 的安装过程尝试访问 git 仓库信息,但当前目录并不是一个 git 仓库。这通常不会影响安装过程,除非该项目的构建系统明确依赖 git。
2. UserWarning: flash_attn was requested, but nvcc was not found.
这个警告说明安装过程试图找到一个名为 nvcc 的编译器,这是 NVIDIA CUDA 工具包的一部分,用于编译 CUDA 代码。如果没有安装 CUDA 工具包,或者没有将其路径添加到环境变量中,就会出现这个警告。
3. torch.__version__ = 2.0.1+cu117
这行输出表示你正在使用 PyTorch 的某个特定版本,这个版本是针对 CUDA 11.7 编译的。
4. OSError: CUDA_HOME environment variable is not set. Please set
这是导致安装失败的关键错误。错误信息表明 CUDA_HOME 环境变量没有设置。CUDA_HOME 应该指向你的 CUDA 安装目录,这通常是在安装 NVIDIA CUDA 工具包时设置的。
为了解决这个问题,你需要设置 CUDA_HOME 环境变量。首先,你需要找到 CUDA 工具包的安装路径。这通常类似于 /usr/local/cuda 或者可能是你自定义的安装目录。
一旦你找到了 CUDA 安装目录,你可以按照以下步骤设置 CUDA_HOME 环境变量:
对于 bash shell(Linux 或 macOS),你可以在 ~/.bashrc 或 ~/.bash_profile 文件中添加以下行:
export CUDA_HOME=/path/to/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64
如果找不到CUDA的安装目录,或者没有服务器的关键路径权限,需要尝试使用其他安装方式进行安装。
二、通过离线安装包进行安装
离线安装包可通过git下载对应版本的安装包:
Flash-Attention release版本路径
1. 首先需要确认当前使用的系统环境
1. Python 版本:系统环境中安装了 Python 3.9。你可以通过运行 python --version 或 python3 --version 来检查 Python 版本。
2. 操作系统和架构:系统为 Linux,并且是 x86_64 架构。
3. CUDA 版本:系统中安装了 CUDA 11.7,并且 nvcc 命令可用。可以通过运行 nvcc --version 来检查 CUDA 版本。
4. PyTorch 版本:环境中安装了 PyTorch 2.0,并且是为 CUDA 11.7 构建的。你可以通过运行 python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())" 来检查 PyTorch 版本和 CUDA 可用性。
2. 选取并下载对应版本的安装包
通过wget或者git直接下载,然后将下载的离线安装包移动到服务器指定路径:
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.6/flash_attn-2.5.6+cu118torch2.0cxx11abiFALSE-cp39-cp39-linux_x86_64.whl
例如此处通过wget下载后文件为:
flash_attn-2.5.6+cu118torch2.0cxx11abiFALSE-cp39-cp39-linux_x86_64.whl
接下来通过pip直接安装离线安装包:
pip install flash_attn-2.5.6+cu118torch2.0cxx11abiFALSE-cp39-cp39-linux_x86_64.whl
安装成功,问题解决!