一.基本概念
1.1 nvidia独立显卡
独立显卡是指以独立板卡形式存在,可在具备显卡接口的主板上自由插拔的显卡。独立显卡具备单独的显存,不占用系统内存,而且技术上领先于集成显卡,能够提供更好的显示效果和运行性能。显卡作为电脑主机里的一个重要组成部分,对于喜欢玩游戏和从事专业图形设计的人来说显得非常重要。以前民用显卡图形芯片供应商主要包括ATI和NVIDIA两家。
ubuntu需要自己安装nvidia驱动才能使用nvidia,安装nvidia驱动程序,可以让系统正确识别nVIDIA的图形显示卡,,进行2D/3D渲染,发挥显示卡应有的效能。
1.2 CUDA
CUDA(Compute 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上完成深度学习的计算,再安装cudatoolkit(pytorch)时候,cuDNN会自动安装。安装cudatoolkit(nvidia)时候需要自己安装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(用于显示),而我们总是将两者分开两次独立进行安装。
那可以让它们显示的版本相同吗?答案是可以,只需要安装完整版的CUDAtookit(nvidia)一次性安装,就是把CUDA Toolkit安装时Driver前面的X加上,在这之前如果安装过nvidia驱动需要将它卸载,否则会安装失败,失败原因是两个driver CUDA冲突。
那两者版本有什么关系呢?通常情况如果先安装了显卡驱动,nvidia-smi显示的版本要比nvcc-V的高,在选择runtime CUDA时需要查看显卡的型号和pytorch的需要版本确定,并没有特别严格必须一个版本的限制,也就是说一个电脑上conda每个环境都可以拥有不同版本的cuda。
2.2 只加速深度学习
如果你的目的是用CUDA只加速深度学习,深度学习往往不同代码需要不同的cuda版本,如果安装cudatookit(nvidia)电脑上只有一个版本是不方便的,因此针对深度学习,安装的策略是:
nvidia显卡驱动+cudatoolkit(pytorch)
不需要在电脑上再安装cudatoolkit(nvidia)就能加速深度学习,遇到需要新版本的cuda加速就再建立一个conda环境安装。
conda install pytorch torchvision cudatoolkit=11.3 -c pytorch
2.3 全都用
如果你不止在pytorch中使用,还想在C++中使用,那就需要安装cudatoolkit(navidia),一般的步骤是1、安装nvidia驱动2、安装cudatoolkit(去掉driver)3、conda 安装cudatoolkit(pytorch)
这样可以理解为你的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 cudatoolkit(nvidia)
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 cudatoolkit(pytorch)
conda create -n torch
conda activate torch
conda install cudatoolkit=11.3
直接使用命令安装