AI 本地环境配置:一文梳理 Nvidia驱动/CUDA/CUDNN/PyTorch/Paddle 版本兼容安装问题(持续更新)

devtools/2024/11/9 4:53:40/

前两天,有位粉丝朋友,在本地部署大模型时,在安装flash_attn遇到了很多问题,比如:

"flash_attn" module. while I tried to install flash_attn, It mentioned " RuntimeError: FlashAttention is only supported on CUDA 11 and above".

Linux、显卡、nvidia、CUDA/CUDNN、Pytorch、TensorFlow、PaddlePaddle,还有各种依赖库。

各种版本兼容,让很多朋友在学习 AI 的过程中,倒在了配置环境的路上。

今日分享,将系统梳理上述概念之间的依赖关系,以及如何安装,希望给遇到类似问题的小伙伴,一点点帮助。

1. 显卡和驱动

跑大模型,自然免不了 Nvidia 家的显卡。

所以,第一步需要查看显卡类型。

通常来说,你的系统镜像出厂时可能已经装好 Nvidia 驱动,因此输入 nvidia-smi,即可看到显卡类型。

重点需要关注的有下方三个红色框选:

最下方就是你的显卡型号,左上角是当前的显卡驱动版本,右上角是当前显卡驱动最高支持的 CUDA 版本(向下兼容),但并不代表环境中的 CUDA 版本!!!

所以,当你发现 CUDA 版本出问题时,记得来这里看看:右上角红框的数字是多少?

如果太低,意味着要更新显卡驱动了!

因为每个 CUDA 版本都有特定的最低驱动程序版本要求,比如 CUDA 12.0 驱动版本至少为 510.xxx。

怎么更新?

当前显卡能够支持的最高驱动版本,在哪查看

前往 NVIDIA 官网:https://www.nvidia.com/en-us/drivers/

拿 RTX 3090 举例,点击 Find:

进入驱动下载页:https://www.nvidia.com/en-us/drivers/details/233004/

下载成功后,你会得到一个类似 xxx.run 的文件,然后打开一个终端,输入:

# 添加可执行权限
chmod +x NVIDIA-Linux-x86_64-510.xxx.run# 在安装过程中跳过对 X 服务器的检查,跳过对 Nouveau 驱动程序的检查,不安装与 OpenGL 相关的文件
sudo ./NVIDIA-Linux-x86_64-xxx.run -no-x-check -no-nouveau-check -no-opengl-files

进入可视化安装界面,一路 Yes 就可以了。

最后,一定记得重启机器,才能生效!

sudo reboot

重启后,再来试试nvidia-smi,驱动版本是不是已经更新了?

这时,再来安装最新版的 cuda 就没问题了。

2. CUDA/CuDNN

CUDA 是啥?

CuDNN 是啥?

nvcc 又是啥?

傻傻分不清啊~

大白话来讲:

  • CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的并行计算库,旨在充分发挥 GPU 的并行计算能力,实现计算加速。

  • CuDNN(CUDA Deep Neural Network library)建立在 CUDA 之上,提供了一系列针对CNN/RNN等模型中算子的高效实现,比如卷积、池化、激活函数等。(通常,CUDACuDNN需要搭配使用)

  • nvcc 则是 CUDA 的编译器。

有同学说我在本地执行nvcc -V,提示找不到这个指令啊。

对啊,说明你在本地没安装 cuda,哪来的编译器呢?

那我要一顿操作,先下载并安装 cuda 么?

推荐你不用,因为你安装 cuda,大概率是用 Pytorch 等深度学习库,需要依赖它。

而当你安装不同版本的 Pytorch,你会发现它要求的 CUDA/CuDNN 版本还不一样。

所以,我们这一部分,不需进行任何操作,等你用到不同版本深度学习库时,再来安装对应版本的 CUDACuDNN 即可!

接着往下看!

2.1 Pytorch 下安装

Pytorch 非常友好,因为它会自动根据你的当前环境,安装对应版本的CUDACuDNN

所以,如果你的项目依赖 Pytorch,压根无需手动安装CUDACuDNN

最优雅的方式是,新建一个虚拟环境,一键安装指定版本的 torch 即可,比如:

conda env create -n torchenv python==3.8
conda activate torchenv
pip install torch==2.0.1

装完后,如何在代码中查看,版本是否正确呢?

import torch
print(torch.__version__) # 查看torch版本
print(torch.cuda.is_available()) # 查看cuda是否安装
print(torch.backends.cudnn.is_available()) # 查看cudnn是否安装
print(torch.version.cuda) # 打印cuda的版本
print(torch.backends.cudnn.version()) # 打印cudnn的版本
# 输出
2.0.1+cu117
True
True
11.7
8500

装在哪了呢?

当在虚拟环境中使用 pip 安装带有CUDA支持的PyTorch时,CUDA和cudnn相关的库通常会被安装在虚拟环境的lib目录下。例如:

/home/xx/miniconda3/envs/torchenv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/
/home/xx/miniconda3/envs/torchenv/lib/python3.8/site-packages/nvidia/cudnn/lib/

怎么找到的?

find /home/xx/miniconda3/envs/torchenv/lib/ -name libcuda*

2.2 PaddlePaddle 下安装

如果项目依赖 PaddlePaddle,这里会有点小坑。

如果用 pip 安装,需要额外手动安装 cuda 和 cudnn:

# 需指定是否用 GPU 版本
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple

所以,推荐用 conda 安装:

# 会自动安装cuda11.7和cudnn8.4
conda install paddlepaddle-gpu==2.6.0 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge

如果运行后,提示找不到 cudnn,需要在环境变量中加上 lib:

export LD_LIBRARY_PATH=/home/xx/miniconda3/envs/paddle/lib:$LD_LIBRARY_PATH

最后,来检查下是否安装成功:

import paddle
paddle.utils.run_check()

如果在 Paddle 中使用多 GPU,还要安装 nccl2:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install libnccl2 libnccl-dev

PS:整体来看,你想用 PaddlePaddle,配置环境会麻烦很多。

3. 依赖库-以flash-attn为例

看到这里,你的本地环境基础搭建,基本已经 OK 了。

还有最后一关,那就是依赖 cuda 版本的各种依赖库。

比如,本地跑大模型,一定绕不过的 flash_attn

如果你在 pip 安装一直无法成功:

# --no-build-isolation 意味着构建过程将使用当前环境中已安装的包,而不是创建一个新的隔离环境
pip install flash-attn --no-build-isolation

遇到了本文开头的报错,可是环境中的 cuda 版本没问题啊?

这是因为它只去你的 /usr/local 去执行 nvcc,结果发现 cuda 版本不对。

所以,最好在你的 conda 环境中,装上 nvcc 编译器:

conda install cuda-nvcc

当然,这时你可能还会遇到网络的问题,导致安装失败!

怎么搞?

直接去官方仓库,看看有没有 Releases 包?

比如 flash_attn 的官方仓库,就提供了各种版本的 whl 包:
https://github.com/Dao-AILab/flash-attention/releases

截至发文,最新版是 2.6.3,根据你的 torch 版本,python 版本,选择对应的文件,下载到本地:

然后,一键安装:

pip install flash_attn-2.6.3+cu118torch2.0cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

whl 包安装,适用于解决网络不通的问题,如果安装失败,一定是版本没对应上,再回头仔细检查下吧。

写在最后

洋洋洒洒数千字,把AI 环境配置的各种问题捋了一遍。不到之处,欢迎评论区留言,我来更新。

如果对你有帮助,欢迎点赞收藏备用。


http://www.ppmy.cn/devtools/132485.html

相关文章

多线程 04:线程状态,线程的五大基本状态及状态转换,以及线程使用方法、优先级、守护线程的相关知识

一、概述 记录时间 [2024-11-08] 前置知识:Java 基础篇;Java 面向对象 多线程 01:Java 多线程学习导航,线程简介,线程相关概念的整理 多线程 02:线程实现,创建线程的三种方式,通过…

Python常用脚本集锦

收集了一些常用Python脚本,作为平时练手使用,也可以作为自己的笔记,用到哪个功能可以自己查询一下即可。 文件和目录管理 复制文件 import shutil# 复制源文件到目标文件 shutil.copy(source.txt, destination.txt)移动文件 import shuti…

11月7日星期四今日早报简报微语报早读

11月7日星期四,农历十月初七,早报#微语早读。 1、河南:旅行社组织1000人次境外游客在豫住宿2夜以上,可申请激励奖补; 2、主播宣称下播后商品恢复原价构成欺诈,广州市监:罚款5万元;…

esp32学习:利用虫洞ESP32开发板,快速实现无线图传

我们的虫洞开发板,能够完美运行esp who AI代码,所以实现无线图传那是非常容易的,我们先看看examples目录: 里面有比较多的web例程,在这些例程下,稍作修改,就可以快速实现我的图传无线功能&#…

漫漫数学之旅038

文章目录 经典格言数学习题古今评注名人小传 - 古斯塔夫福楼拜 经典格言 诗歌是一门像几何一样严格的科学。——古斯塔夫福楼拜(Gustave Flaubert) 古斯塔夫福楼拜将诗歌比作几何学,强调了诗歌创作的严谨性。他认为诗歌不仅仅是情感的流露&a…

[操作系统作业]页面置换算法实现(C++)

💓博主csdn个人主页:小小unicorn ⏩专栏分类:linux 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 目录 必做题代码分析(重点以时间统计…

Docker 的基本概念和优势,以及在应用程序开发中的实际应用

Docker是一种容器化平台,它允许开发者将应用程序及其依赖项打包为一个独立的、可移植的容器,然后在任何环境中运行。它的基本概念包括以下几点: 镜像(Image):一个镜像是一个可执行包,它包含了运…

yelp数据集上识别潜在的热门商家

yelp数据集是研究B2C业态的一个很好的数据集,要识别潜在的热门商家是一个多维度的分析过程,涉及用户行为、商家特征和社区结构等多个因素。从yelp数据集里我们可以挖掘到下面信息有助于识别热门商家 用户评分和评论分析 评分均值: 商家的平均评分是反映其…