CUDA
1. CUDA和pytorch的关系
参考资料:
https://www.cnblogs.com/yhjoker/p/10972795.html
https://blog.csdn.net/qq_39065196/article/details/111938048
Pytorch 与 cudatoolkit
使用 conda 安装 pytorch 时,conda 会为我们自动安装 cudatoolkit。它和英伟达官网提供的 CUDA Toolkit (即下载到 /usr/local/ 的 cuda-10.0 ) 不是同一个东西!CUDA Toolkit 提供了完整的开发 CUDA 程序所需的编译器、IDE、调试器、库文件、头文件。而对于 pytorch 来说,它使用 GPU 时只需要 CUDA 的 动态链接库 执行预编译好的 CUDA 操作即可。因此,有 cudatoolkit 之后,只要系统上存在与当前的 cudatoolkit 版本兼容的 Nvidia 驱动 (可以查看nvidia-smi中的驱动版本是否兼容),编译好的 CUDA 操作就可以执行,不需要再安装 CUDA Toolkit
nvidia-smi 中的 CUDA version 表示当前显卡驱动最高能支持的 CUDA 版本。pytorch 的 cudatoolkit版本指其所编译好的 CUDA 操作版本。conda list 中查看到的 pytorch build 信息中的 CUDA 版本 (例如 py3.8_cuda10.2_cudnn7.6.5_0) 指该 pytorch 源码使用 cuda10.2 版本进行编译。conda install 的是编译好的发行库,其编译环境和主机环境兼容时才可使用
torch.version.cuda 也表示的是编译该 Pytorch release 版本时使用的 CUDA 版本
Pytorch 编译使用的 CUDA 版本
pytorch 只有在编译扩展的 CUDA 算子时,才会需要 CUDA Toolkit,这个时候才会和 /usr/local/, CUDA_HOME 扯上关系。网上所说的 pytorch CUDA 编译版本是编译 pytorch 源码以得到发行版时所用的 cuda 版本;pytorch CUDA 运行版本指其要进行 CUDA 扩展程序编译时,我们给他指定的CUDA Toolkit 版本
CUDA Toolkit 的版本是 torch 代码在运行时去查找的。首先查找本地的 CUDA_HOME (服务器上有系统环境变量和用户环境变量,用户环境变量可以覆写系统环境变量),若没有该环境变量,则查找路径 /usr/local/cuda 的软链接 (查看软链接方式:进入路径/usr/local,执行ls -l)
可以通过修改 CUDA_HOME 环境变量或者 /usr/local/cuda 软链接的方式修改 Pytorch 所使用的 CUDA Toolkit
可执行以下代码查看 pytorch 使用的 CUDA Toolkit 版本
import torch
import torch.utils
import torch.utils.cpp_extension
torch.utils.cpp_extension.CUDA_HOME
2. 安装CUDA
进入 CUDA Toolkit Archive | NVIDIA Developer,选择对应的版本,按照网页下方指令安装(我一般选择runfile方式安装)。安装过程中可能询问是否安装显卡驱动,如果之前单独安装过,则跳过这一步。如我这里选择安装cuda-11.2。
配置环境变量。在 ~/.bashrc
(用户环境变量,建议修改这个)或者 /etc/profile
(系统环境变量)中添加以下内容:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
然后执行 source ~/.bashrc
激活环境变量。
修改软链接,指定当前使用的cuda版本。
# 如果已存在软连接,需要先删除
sudo rm /usr/local/cuda
# 创建软连接
sudo ln -s /usr/local/cuda-11.2 /usr/local/cuda
验证安装:
head -5 /usr/local/cuda/version.json
nvcc -V
3. 卸载CUDA
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.7/bin
cuDNN
cuDNN 是专门用于加速神经网络的库,不安装也可以跑深度学习,但还是建议安装。
查看 cuDNN 版本:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 显示结果
# define CUDNN_MAJOR 8
# define CUDNN_MINOR 4
# define CUDNN_PATCHLEVEL 1
# 因此 cuDNN 版本为8.4.1
1. 安装cuDNN
进入 Log in | NVIDIA Developer,找到需要的版本(例如我选择的是 cuDNN v8.4.1, for CUDA 11.x),选择 Local Installer for Linux x86_64 (Tar)
将下载的压缩包放到喜欢的路径下(例如我是 /home/Xuanyu/Downloads),进行下述配置:
tar -xvf <cuDNN 压缩包>
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
验证安装是否成功(即查看 duDNN 版本)
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
2. 更新20250520
从cuDNN 9开始,官方采用在线安装更新的方式,而非压缩包离线安装。然而,当我们有多个cuda版本时,在线安装的方式有风险。因此还是建议压缩包安装。
tar.xz的位置:Log in | NVIDIA Developer → Tarball and Zip Archive Deliverables → cudnn/ → linux-x86_64/
NCCL
是由 NVIDIA 开发的一个高性能通信库,专门用于GPU之间的集体通信操作,用于多GPU训练。
访问NVIDIA Collective Communications Library (NCCL) Legacy Download Page,我选择 Download NCCL 2.15.5, for CUDA 11.0, October 20th, 2022
,查看 Network installers (x86)
,根据你的系统版本,执行页面中对应的指令。