看这个就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用

Posted 桦树无泪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看这个就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用相关的知识,希望对你有一定的参考价值。

一.基本概念

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包括

  1. Driver:显卡驱动

  1. 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

  1. CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。

  1. 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

直接使用命令安装

以上是关于看这个就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu18.04下cuda.cu在c/c++中的三种使用方式

ubuntu18.04下cuda.cu在c/c++中的三种使用方式

ubuntu18.04下cuda.cu在c/c++中的三种使用方式

想要编写 Shell 脚本的最佳实践?看这篇就够了~

JVM,看这个系列就够了

学 Vue 看这个就够了 - 什么是 Vue.js