1、什么是CUDA
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
2、什么是CUDNN
NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。
3、CUDA与CUDNN的关系
CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
4、安装其他版本的cuda
查看当前cuda和cudnn版本
root@os-Super-Server:~/NVIDIA_CUDA-10.2_Samples/1_Utilities/deviceQuery# cat /usr/local/cuda/version.txt
CUDA Version 10.2.89
root@os-Super-Server:~/NVIDIA_CUDA-10.2_Samples/1_Utilities/deviceQuery# cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
root@os-Super-Server:~/NVIDIA_CUDA-10.2_Samples/1_Utilities/deviceQuery# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
查看当前安装的显卡驱动,为最新版本 440.33.01。驱动向下兼容,因此可以安装其他CUDA版本
root@os-Super-Server:/home/os/Downloads# nvidia-smi
Wed Jun 17 14:54:59 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 |
系统上安装的当前版本的cuda为10.2版本,因为很多神经网络学习框架支持不了这么高的版本,因此,需要安装其他cuda版本,例如10.0
CUDA下载
CUDA下载CUDA安装文件,和一个patch文件
安装文件
cuda_10.0.130_410.48_linux.run
patch文件
cuda_10.0.130.1_linux.run
wget http://developer.download.nvidia.com/compute/cuda/11.0.1/local_installers/cuda_11.0.1_450.36.06_linux.run
sudo sh cuda_11.0.1_450.36.06_linux.run
CUDA安装
./cuda_10.0.130_410.48_linux.run
接下来会有一系列选择
- 是否安装显卡驱动:选no,因为已经装了最新的驱动
- 是否安装CUDA 9.0:选yes
- 输入安装位置:默认即可,因为默认位置就区分开了不同的CUDA版本
- 是否创建软链:选no,因为要实现多版本CUDA共存。如果以前安装过CUDA并创建过软链,需要删除
- 是否安装sample:选no,因为在安装路径下会有一份sample,这个是问是否要在自己的目录下再安装一份
安装驱动文件
./cuda_10.0.130.1_linux.run
测试CUDA
cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
make
./deviceQuery
如果在最后看到以下信息,则证明CUDA 9.0安装成功
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.0, NumDevs = 2
Result = PASS
cuDNN下载和安装
去 https://developer.nvidia.com/rdp/cudnn-download 选择对应的版本下载即可。不过需要先注册开发者账号后才可以下载
刚才安装的CUDA是10.0,所以我们选择
Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0
cuDNN Library for Linux
解压
tar zxvf cudnn.tgz
将cudnn文件复制到cudn 10.0目录
cp cuda/include/cudnn.h /usr/local/cuda-10.0/include/
cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64/
chmod a+r /usr/local/cuda-10.0/include/cudnn.h
chmod a+r /usr/local/cuda-10.0/lib64/libcudnn*
在虚拟环境下使用特定CUDA
创建虚拟环境
conda create -n certernet
假定这个虚拟环境要使用cuda 10.0
进入到当前虚拟环境目录
cd /usr/local/anaconda3/envs/certernet
创建启动和退出脚本
mkdir -p etc/conda/activate.d
mkdir -p etc/conda/deactivate.d
编辑进入脚本
vim etc/conda/activate.d/activate.sh
输入以下内容
RIGINAL_CUDA_HOME=$CUDA_HOME
RIGINAL_PATH=$PATH
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
echo "before path:" $PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH
echo "after path:" $PATH
这样在切换到该虚拟环境的时候时候,path会将CUDA10.0的路径放到path的最前面
添加权限
chmod 777 etc/conda/activate.d/activate.sh
编辑退出脚本
vim etc/conda/activate.d/deactivate.sh
输入以下内容
RIGINAL_CUDA_HOME=$CUDA_HOME
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
添加权限
chmod 777 etc/conda/activate.d/deactivate.sh
通过以上设置,在激活该虚拟环境的时候,会设置CUDA_HOME为10.0的版本,结果后的效果为:
echo $CUDA_HOME
/usr/local/cuda-10.0
echo $LD_LIBRARY_PATH
/usr/local/cuda-10.0/lib64:/usr/local/cuda/lib64/usr/local/cuda-10.2/lib64
下面,解决使用的时候怎么引用
测试pytorch的CUDA版本
安装pytorch1.2_cuda10.0
conda install --offline pytorch-1.2.0-py3.6_cuda10.0.130_cudnn7.6.2_0.tar.bz2
#安装pytorch依赖的其他包
conda install --channel https://conda.anaconda.org/anaconda pytorch=12.0
测试当前pytorch的cuda版本
Python 3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 13:51:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.version.cuda)
10.0.130
5. 参考文档
https://bluesmilery.github.io/blogs/a687003b/#测试