CUDA和CUDNN版本切换

news/2024/5/20 6:33:54

0 背景

在用不同框架做深度学习时,难免会遇到需要不同版本的cuda和cudnn版本的情况,如果把原来版本的卸载掉重新安装新版本,则会影响其它框架的使用,最好的方法是在主机上安装多个版本的cuda和cudnn,需要用到哪种就切换到哪种,这样就免去了重复卸载安装的工作。

cuda:由NVIDIA推出的通用并行计算架构,包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 利用CUDA编写出的程序可以在NVIDIA显卡上跑的飞起。进行CUDA开发需要依次安装驱动、toolkit、SDK三个软件。深度学习玩家通常只需要安装显卡驱动和toolkit即可。[可参考]

cudnn:用于加速DL的算子库。安装时只需要下载对应的tar包,解压后将头文件(include/cudnn*.h)和库(lib64/libcudnn*)复制到cuda对应文件夹下即可。

1 安装目录和版本查看

安装的cuda一般在 /usr/local/ ,通常建立一个软链接,将cuda链接到需要的版本。

进入cuda,可见include和lib64分别链接到实际使用的头文件目录和库目录。

旧版的/usr/local/cuda/ 路径下一般有一个version.txt文档,里面记录了cuda的版本信息,因此可用cat /usr/local/cuda/version.txt 命令查看版本信息【新版的改为version.json,所以可直接查看该文件,或者使用 nvcc -V 命令】

如果安装了多个cuda,实际使用的可能不是/usr/local/cuda/下边的版本,这个时候可以使用nvcc -V指令来查看实际使用的cuda版本。

同理,cudnn的信息在其头文件 cudnn_version.h 里。

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2          #旧版
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2  #新版

3 cuda环境变量和版本切换

3.1 ~/.bashrc中环境变量

在~/.bashrc中,通常按照下面习惯1来设置环境变量,但这个代码存在一个BUG,即在LD_LIBRARY_PATH不存在时,LD_LIBRARY_PATH会被赋值为":/usr/local/cuda/lib64"而不是"/usr/local/cuda/lib64",有一个冒号的区别。这个BUG对于pytorch来说无所谓,哪怕不加,pytorch也会通过/usr/local/cuda找到外部的CUDA(pytorch查找CUDA的过程)。但对于一些兼容性没那么好的代码而言,环境变量是最重要的。因此最好使用习惯2来添加环境变量。【可参考】

## 设置习惯1,有bug
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda## 设置习惯2,推荐
if [ $LD_LIBRARY_PATH ]; thenexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
elseexport LD_LIBRARY_PATH=/usr/local/cuda/lib64
fiif [ $PATH ]; thenexport PATH=$PATH:/usr/local/cuda/bin
elseexport PATH=/usr/local/cuda/bin
fiif [ $CUDA_HOME ]; thenexport CUDA_HOME=$CUDA_HOME:/usr/local/cuda
elseexport CUDA_HOME=/usr/local/cuda
fi
  1. 注意Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH变量的区别;
  2. 可用 echo $CUDA_HOME 命令来查看该变量的实际值【之前的设置果然中招了】;

3.2 cuda版本切换

方法一:如果只修改自己用户的CUDA版本,则只需要修改环境变量即可,打开~/.bashrc文件,找到cuda的环境变量,将cuda的路径改为自己需要的cuda版本路径,然后 source ~/.bashrc 使之生效。这样的好处是只改了当前用户的cuda版本,其它用户还可以用他们需要的cuda版本,互不影响。

## 可参照3.1的习惯2修改
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
export PATH=$PATH:/usr/local/cuda-11.3/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.3

方法二:如果想要把服务器上多用户的CUDA版本都切换了,则删除原有链接,建立新的软链接即可,这样服务器上每个用户的版本都切换了。

sudo rm -rf /usr/local/cuda #删除之前创建的软链接
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda #创建新 cuda 的软链接,注意修改自己对应的版本
# 可以使用 ls -l 查看软链接情况,带 -> 符号的表明是软链接

4 cudnn版本切换

安装cudnn的方法,就是下载一个对应版本的tar包, 官网下载地址。

解压:tar  zxvf  xxx.tgz

然后将所有头文件(include/cudnn*.h)和库(lib64/libcudnn*)复制到cuda对应目录下面。

## 先将原来的cudnn移到指定位置,以便日后恢复
sudo mv /usr/local/cuda-10.0/include/cudnn*   temp/include
sudo mv /usr/local/cuda-10.0/lib64/libcudnn*  temp/lib## 将所有头文件和库复制到cuda对应目录下
sudo cp include/cudnn*  /usr/local/cuda/include/
sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
  1. cudnn头文件都是以cudnn开头,库文件都是以libcudnn开头,放到cuda中就可以用;

参考:
https://blog.csdn.net/zong596568821xp/article/details/80880204
https://qiyuan-z.github.io/2022/01/04/Ubuntu多版本cuda安装与切换/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/25538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

计算机DIY之接驳线缆

介绍计算机DIY过程中接驳线缆相关知识,CPU供电、主板主供电、显卡供电、SATA供电、大4pin供电、主板接驳、前面板接驳目录目录 接驳线缆 CPU供电: 主板主供电 显卡供电 SATA供电 大4pin供电 主板接驳 前面板接驳接驳线缆电源插头里还有3条ATX电源专有的线,一条绿色线…

硬盘保存及维护基本常识

介绍硬盘使用寿命、硬盘供电、硬盘保存相关小知识点目录目录 硬盘使用寿命简介 硬盘供电简介 硬盘保存简介硬盘使用寿命简介硬盘在连续使用3-4年后就需要注意了(一般为质保期时间后一点), 5-6年后就需要更换硬盘了. 五年左右的时候留意更换机械硬盘,如果不是特备重要的数据,可…

使用restful请求华三模拟器上的设备接口数据

一、resful介绍 RESTful采用C/S模型。RESTful客户端为使用Python、Ruby或Java等编程语言开发出的RESTful客户端程序或脚本。RESTful服务器为网络设备。通过RESTful功能配置和维护设备的过程为: (1) 客户端向服务器发送HTTP/HTTPS请求报文,通过HTTP的方法来操作指定的REST…

芯科SiWx917学习笔记:1-测试Out of Box Demo

实验目的:测试Out of Box Demo 实验环境:Simplicity Studio V5 实验器材:Wireless Starter Kit Mainboard (BRD4002A Rev A06) + SiWG917 Single Band Wi-Fi and BLE 8MB Flash Radio Board (BRD4338A Rev A01) 实验开始: 1. 新建工程:在demos中找到Out of Box Demo(SoC) …

pwn知识——劫持tcache_perthread_struct(Ubuntu22.04之前)

前言(可忽略) 堆不愧是堆...知识点真的要多用动调查看堆的状态才好理解 tcache_perthread_struct的结构 源码 #define TCACHE_MAX_BINS 64 /* We overlay this structure on the user-data portion of a chunk whenthe chunk is stored in the per-thread cache. */ typedef…

最强AI直播换脸软件,DeepFaceLive下载介绍

DeepFaceLive是一款专注于直播实时换脸的AI软件,使用经过长时间训练的人脸模型替换摄像头中的人脸,能够产生接近电影质量的面部合成效果,提供高保真的视觉体验,在新版本中也支持了图片换脸(视频换脸只能预览,不能保存) DeepFaceLive在直播场景下的效果高度逼真,强大的…

rabbitmq系列03---发布确认

一、发布确认逻辑 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID (从 1 开始),一旦消息被投递到所有匹配的队列之后,broker 就会发送一个确认给生产者 (包含消息的唯一 ID),这就使得生产者知道消息已经…

关于ida f5时报错lumina无法连接到云服务器的问题

在用ida的时候不知道怎么回事突然就f5不了了,报错 Decompilation failure: 4005F7: cloud: Server is not available Please refer to the manual to find appropriate actionslumina: connect: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。4005F…