服务器多CUDA共存

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/#测试

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值