看这个就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一.基本概念
1.1 nvidia独立显卡
独立显卡是指以独立板卡形式存在可在具备显卡接口的主板上自由插拔的显卡。独立显卡具备单独的显存不占用系统内存而且技术上领先于集成显卡能够提供更好的显示效果和运行性能。显卡作为电脑主机里的一个重要组成部分对于喜欢玩游戏和从事专业图形设计的人来说显得非常重要。以前民用显卡图形芯片供应商主要包括ATI和NVIDIA两家。
ubuntu需要自己安装nvidia驱动才能使用nvidia安装nvidia驱动程序可以让系统正确识别nVIDIA的图形显示卡,进行2D/3D渲染发挥显示卡应有的效能。
1.2 CUDA
CUDACompute Unified Device Architecture是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构该架构使GPU能够解决复杂的计算问题。
一个电脑里可以拥有两个CUDA API一个是dirver CUDA显示屏幕用的一个是runtime CUDA加速深度学习
安装nvidia驱动后在终端输入nvidia-smi会出现下面界面其中的CUDA Version是11.4这里的CUDA是dirverCUDA。也就是说现在电脑里有CUDA但只是显示屏幕用的所以不能深度学习加速。那么想要加速深度学习需要再安装runtime CUDA可以通过两种方式一个是conda环境中安装另一个是安装cudatoolkit后面进行详解。
1.3 CUDA Toolkit (nvidia)
CUDA Toolkit (nvidia)是 CUDA完整的工具安装包其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等CUDA 程序所对应的各式库文件以及它们的头文件。简单来讲就是CUDA Toolkit包含了dirver CUDA和runtimeCUDA。
所以一般意义上的ubuntu安装CUDA实际上是安装CUDA Toolkit但一般我们会先安装nvidia显卡驱动带有dirverCUDA所以再安装CUDA Toolkit时会将Driver前面的X去掉也就是不安装因为电脑中已经有dirver CUDA了。
由上图可以看到一个完整的cuda toolkit包括
Driver显卡驱动
Toolkit: 提供一些像profiler,debuggers等工具和科学库和实用程序库
cudart: CUDA Runtime
cudadevrt: CUDA device runtime
cupti: CUDA profiling tools interface ion
nvml: NVIDIA management library
nvrtc: CUDA runtime compilation
cublas: BLAS (Basic Linear Algebra Subprograms基础线性代数程序集)
cublas_device: BLAS kernel interface
CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。
CUDA documentat
1.4 CUDA Toolkit (Pytorch)
我们在pytorch环境中常使用如下指令去安装cudatoolkit这里我们称为CUDA Toolkit (pytorch)
conda install pytorch torchvision cudatoolkit=11.3 -c pytorch
这是CUDA不完整的工具安装包其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序。个人理解就是只安装了runtime cuda这种安装方式可以在多个conda环境中安装不同的cudatoolkit版本以适用深度学习代码。
1.5 cudnn
cuDNN是基于CUDA的深度学习GPU加速库有了它才能在GPU上完成深度学习的计算再安装cudatoolkitpytorch时候cuDNN会自动安装。安装cudatoolkitnvidia时候需要自己安装cuDNN
1.6 pytorch
pytorch是基于CUDA的深度学习框架因此pytorch的版本必须依赖于cuda toolkit的版本。由于我们经常使用别人的代码所以常会感觉是根据pytorch版本来选择CUDA版本。
二.这一堆到底怎么选
2.1 nvcc -V与nvidia-smi
不少人都会产生这种疑惑为什么nvcc -V和nvidia-smi输出的CUDA版本号不同相信看过上面的基本概念就清楚了因为一个显示的是runtime CUDA用于计算 一个是 dirver CUDA用于显示而我们总是将两者分开两次独立进行安装。
那可以让它们显示的版本相同吗答案是可以只需要安装完整版的CUDAtookitnvidia一次性安装就是把CUDA Toolkit安装时Driver前面的X加上在这之前如果安装过nvidia驱动需要将它卸载否则会安装失败失败原因是两个driver CUDA冲突。
那两者版本有什么关系呢通常情况如果先安装了显卡驱动nvidia-smi显示的版本要比nvcc-V的高在选择runtime CUDA时需要查看显卡的型号和pytorch的需要版本确定并没有特别严格必须一个版本的限制也就是说一个电脑上conda每个环境都可以拥有不同版本的cuda。
2.2 只加速深度学习
如果你的目的是用CUDA只加速深度学习深度学习往往不同代码需要不同的cuda版本如果安装cudatookitnvidia电脑上只有一个版本是不方便的因此针对深度学习安装的策略是
nvidia显卡驱动+cudatoolkitpytorch
不需要在电脑上再安装cudatoolkitnvidia就能加速深度学习遇到需要新版本的cuda加速就再建立一个conda环境安装。
conda install pytorch torchvision cudatoolkit=11.3 -c pytorch
2.3 全都用
如果你不止在pytorch中使用还想在C++中使用那就需要安装cudatoolkitnavidia一般的步骤是1、安装nvidia驱动2、安装cudatoolkit去掉driver3、conda 安装cudatoolkitpytorch
这样可以理解为你的ubuntu系统中有一个driverCUDA和多个runtimeCUDA那么这时在pytorch环境运行代码是会报错的也很好理解因为有多个runtimeCUDA产生了冲突报错。
OSError: /home/cxl/anaconda3/envs/yolo/lib/python3.8/site-packages/nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11
那么最简单的做法就是把bashrc中cuda的环境配置注释掉打开一个新终端就可以重新运行了。
1.打开bashrc
sudo gedit ~/.bashrc
2.注释cuda环境配置
#export PATH=$PATH:/usr/local/cuda-11.3/bin
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
#export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.3/lib64
3.source ~/.bashrc
在运行别的代码时再将bashrc中的cuda环境配置恢复。我们可以理解为在bashrc中的cuda是全局cuda而在conda环境中的cuda是局部cuda。
三. 安装
3.1 显卡驱动
关于显卡驱动的安装在我之前的博客写的已经很清楚
https://blog.csdn.net/HUASHUDEYANJING/article/details/128838393?spm=1001.2014.3001.5502
3.2 cudatoolkitnvidia
1.从nvidia官网选择cudatoolkit
https://developer.nvidia.com/cuda-toolkit-archive
版本的选择一般低于nvidia-smi中的版本选择runfile的安装包
2.安装cuda
首先安装一些依赖
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
安装cuda
wget https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run
sudo sh cuda_11.4.4_470.82.01_linux.run
在这一步将driver去掉X
3.配置bashrc
1.打开bashrc
sudo gedit ~/.bashrc
2.添加cuda环境配置
export PATH=$PATH:/usr/local/cuda-11.3/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.3/lib64
3.source ~/.bashrc
3.3 cudatoolkitpytorch
conda create -n torch
conda activate torch
conda install cudatoolkit=11.3
直接使用命令安装