文章目录
- GPU、Cuda Driver和 Cuda Toolkit的图解关系
- 省流,简略版本
- 要实现多版本的cuda怎么办
- 复杂版(你要是觉得简略版说的太简单,这里给你找文档证明)
- 一、Nvidia Driver和CUDA Toolkit的关系
- 安装GPU显卡驱动Nvidia Driver
- 二、CUDA Toolkit是真的不包含CUDNN的
- CUDA Toolkit的组件内容
- 三、CUDA Toolkit从Nvidia下载的,是真的包含了驱动的
- 证明1
- 证明2
- 证明3
- CUDA Toolkit安装
- 四、你还是要单独装一下CUDNN的,不然回报错
- 不装CUDNN的报错如下
- 安装CUDNN
- 五、如何实现多版本的CUDA?
- linux下CUDA和CUDNN安装
- CUDA安装
- CUDNN的安装
- pytorch安装
- 问题
- 离谱,conda永远不成功,venv一下子就成功了
- 七、卸载系列
- 卸载Nvidia Driver和CUDA
- 卸载conda
- 总结
- 参考
GPU、Cuda Driver和 Cuda Toolkit的图解关系
省流,简略版本
- Nvidia Driver驱动:操作系统和硬件GPU进行沟通交互的程序,没这个驱动,GPU就是一个摆设,调用不起来,所以得先装这个。装了这个电脑就能用GPU了,但是深度学习搞不定。
- CUDA Toolkit工具包:是基于驱动程序,用来实现GPU并行计算和加速深度学习的软件包。通过这个软件包,调用驱动,实现更加高级的功能。
- cudnn深度学习加速库:是专门针对深度学习的GPU加速库,如果你要使用深度学习框架,这个是必需的。虽然也是CUDA Toolkit的组件,但是官方的下载包里面并没有,需要自己额外下载。
- pytorch,tensorflow深度学习框架:CUDA Toolkit并没有提供深度学习的框架,只是提供了如何高效调用GPU的软件库。如果你要创建深度学习模型,进行训练。还是要使用深度学习框架。
- Nvidia官方下载的CUDA:官方下载的CUDA Toolkit是包含了驱动的,并且联合到一块是称为CUDA的。
- conda下载的CUDA:是不包含驱动的,但是高版本的驱动,是向前兼容的,你可以下载相匹配的cuda toolkit,构成不同版本的cuda
要实现多版本的cuda怎么办
- 说明
- 只需要安装不同版本的cuda toolkit即可
复杂版(你要是觉得简略版说的太简单,这里给你找文档证明)
一、Nvidia Driver和CUDA Toolkit的关系
- 下图是从官网找到的对应表格,链接
- 说明:
- CUDA Driver是向前兼容的,就是后续的开发的新版本,是支持前面的cuda toolkit的。
- 根据表格可以看出,安装的驱动尽可能新
- CUDA Toolkit和驱动兼容,只需要满足最低版本就行
- 安装建议
- 虽然官方的cuda都是包含了驱动的,如果你想单独安装也行,我就是单独安装的,没看技术文档。
- 单独安装驱动的链接
安装GPU显卡驱动Nvidia Driver
下载
- 下载链接
- 在对应的选框中,选择适合的Nvidia驱动,注意,对于linux而言,这个驱动是包括cuda driver和nvidia driver的。这个是向前兼容的。
* 点击下载
- ubuntu系统,下载的是run文件
安装
- 去除本地已经安装的Nvidia Driver
- 1、按 ctrl+alt+F1 进入tty, 登录tty后输入如下命令关闭图形界面
sudo service lightdm stop
- 这里注意要禁用Nouveau
sudo vim /etc/modprobe.d/blacklist.conf
blacklist nouveau
- 2、卸载nvidia显卡驱动。注意此时千万不能重启,重新电脑可能会导致无法进入系统。
sudo apt-get remove nvidia*
- 3、安装显卡驱动
sudo sh NVIDIA-Lunix-x86_64-525.105.17.run
- 在这里,会安装过程中,会遇到一些选项,这里可以直接看这个链接,我是按照这个做的
最后,重启后安装cudnn, 进入解压后的cuda所在的目录。
sudo cp lib* /usr/local/cuda/lib64/
sudo cp cudnn.h /usr/local/cuda/include/
- 4、进入系统检查是否安装成功
# 查看安装的cuda配置
nvidia-smi
# 启动图形化界面配置
nvidia-settings
二、CUDA Toolkit是真的不包含CUDNN的
CUDA Toolkit的组件内容
- 数据获取链接
-
说明
- 通过阅读整个表格可以知道,toolkit是包含了nvcc编译器的,但是没有包含cudnn的,所以我们还是需要重新在下载的。
- cudnn的下载链接,这里记得找相对应的版本
- CUDA Toolkit的下载链接,这里老是让我下载12.1,结果没有版本能带起来,这里给了一个所有版本的下载目录
三、CUDA Toolkit从Nvidia下载的,是真的包含了驱动的
证明1
- 网络链接
- 下图我是选择了我自己操作的ubuntu系统下载一个toolkit,给你生成的指令,可以看到默认是给你安装了515的驱动,
证明2
- 网络链接
- 下图红框里是我摘录的原文,中文意思就是为了方便,驱动安装是作为toolkit安装的一部分的。
证明3
- conda 安装是没有驱动的,好吧我没找到,不过找到了别人也是那么认为的,而且我在chatGPT上也问了一下,确实如此。
- 下图网络链接
- chatGPT的回答内容
CUDA Toolkit安装
-
打开链接,如下
-
选择适合的版本,进行安装。不过一般都是根据你的pytorch进行安装,而且装pytorh的时候,也会让你装cuda
-
官网生成的语句中,除了要求你安装pytorch需要的包,包括pytorch,torchvision,torchaudio三个包。还有一个pytorch-cuda11.7,这是和当前的要安装的pytorch兼容的cuda版本。
-
这里回归正题,还是从nvidia官网直接下载toolkit,选择你需要的版本,直接进行安装
-
我这里已经安装了驱动,所以需要相应的裁剪一下。只需要装一个toolkit就行了。
四、你还是要单独装一下CUDNN的,不然回报错
不装CUDNN的报错如下
安装CUDNN
- 找到官方,链接
- 找一个适合自己的版本,按照步骤装下来就行了
五、如何实现多版本的CUDA?
- 之前看了很多博客,都是基于conda进行安装的,但都是基于windows系统进行的,别的都是使用软链接,下载多个版本,修改系统路径实现的。截图如下,链接
- 别的基本上都是基于window环境的,使用docker之类的,不过这里找到一个自动化脚本,可以直接切换。参考连接
- 直接将代码放到这里
#!/usr/bin/env bash
# Copyright (c) 2018 Patrick Hohenecker
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# author: Patrick Hohenecker <mail@paho.at>
# version: 2018.1
# date: May 15, 2018
set -e
# ensure that the script has been sourced rather than just executed
if [[ "${BASH_SOURCE[0]}" = "${0}" ]]; then
echo "Please use 'source' to execute switch-cuda.sh!"
exit 1
fi
INSTALL_FOLDER="/usr/local" # the location to look for CUDA installations at
TARGET_VERSION=${1} # the target CUDA version to switch to (if provided)
# if no version to switch to has been provided, then just print all available CUDA installations
if [[ -z ${TARGET_VERSION} ]]; then
echo "The following CUDA installations have been found (in '${INSTALL_FOLDER}'):"
ls -l "${INSTALL_FOLDER}" | egrep -o "cuda-[0-9]+\\.[0-9]+$" | while read -r line; do
echo "* ${line}"
done
set +e
return
# otherwise, check whether there is an installation of the requested CUDA version
elif [[ ! -d "${INSTALL_FOLDER}/cuda-${TARGET_VERSION}" ]]; then
echo "No installation of CUDA ${TARGET_VERSION} has been found!"
set +e
return
fi
# the path of the installation to use
cuda_path="${INSTALL_FOLDER}/cuda-${TARGET_VERSION}"
# filter out those CUDA entries from the PATH that are not needed anymore
path_elements=(${PATH//:/ })
new_path="${cuda_path}/bin"
for p in "${path_elements[@]}"; do
if [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; then
new_path="${new_path}:${p}"
fi
done
# filter out those CUDA entries from the LD_LIBRARY_PATH that are not needed anymore
ld_path_elements=(${LD_LIBRARY_PATH//:/ })
new_ld_path="${cuda_path}/lib64:${cuda_path}/extras/CUPTI/lib64"
for p in "${ld_path_elements[@]}"; do
if [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; then
new_ld_path="${new_ld_path}:${p}"
fi
done
# update environment variables
export CUDA_HOME="${cuda_path}"
export CUDA_ROOT="${cuda_path}"
export LD_LIBRARY_PATH="${new_ld_path}"
export PATH="${new_path}"
echo "Switched to CUDA ${TARGET_VERSION}."
set +e
return
cuda切换的简单方法
- 修改软链接cuda,具体链接到的cuda文件即可
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-10.1 /usr/local/cuda
linux下CUDA和CUDNN安装
CUDA安装
- 这里选了本地安装
- 下载完毕
- 进行安装,发现本地的驱动,如果我选择abort会直接跳出安装,所以选择continue
- 后续还有一个选择的选项,去掉了driver,最终的安装结果如下。
- 本来以为没有的,结果有装错了,重新来了一次
- 将当前安装而cuda添加到系统路径中,修改所有用户的PATH,这里他说的~/.bashrc,在我的系统中找不到,直接改变了系统变量,参考连接
- 修改LD_LIBRARY_PATH,切换到当前用户下的home目录,然后编辑.bashrc文件,将下列文本添加到末尾
export PATH=/usr/local/cuda-11.7/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.7
- 运行如下命令。重置环境,并测试成果
# 切换到当前的用户的home目录下方
cd
source .bashrc
nvcc -V
- 真想剁了我的手,这波耍懒,没有给我保存快照,然后装cudnn的时候失败了,有结束不了,cuda驱动也运行不了,重新装了一遍。
- **注意!!**这里我修改了两种环境的bash,分别是root和当前用户的
- 又来了一次,这波得保存好快照,手再贱,就剁手!!
- 这波放心了!!!
CUDNN的安装
-
点击官网,进行下载,注意版本
-
估计这伙下错了,是针对ubuntu的deb文件,是可以安装和执行的,不需要换目录,先试试看吧。先创建一个镜像
-
这个方法不行,还是得下载压缩文件。这种安装方式反而把我的显卡驱动给我搞崩溃了,不行!!
-
下载压缩文件的方式,下载连接,下载截图,这里直接下载tar压缩文件
-
下载完毕,root打开,复制文件
-
将相关的库文件进行迁移,并赋予权限,可以看得出,还是一个懒人新手,直接给777了
cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/include/cudnn.h /usr/local/cuda-11.7/include/
cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/lib/libcudnn* /usr/local/cuda-11.7/lib64/
chmod a+r /usr/local/cuda-11.7/include/cudnn.h
chmod a+r /usr/local/cuda-11.7/lib64/libcudnn*
- 测试是否安装成功,按照他们说的,输入指令
cat /usr/local/cuda-11.7/include/cudnn.h | grep CUDNN_MAJOR -A 2
出现如下的东西就是正确的
- 但是我看了这个文件,里面确实没这个东西,在没有编译的情况下,就是打开了不应该会有变化。
pytorch安装
- 找到官网,链接
- 复制到conda,自己进行安装!!
- 先创建一个conda环境,然后不需要装cuda了,指令如下
# 创建环境,这波忙猜python版本3.8应该够的,有犯病了
conda create --name pytorch2.0 python==3.8
# 激活环境
conda activate pytorch2.0
# 安装对应的包
conda install pytorch torchvision torchaudio -c pytorch
- 我愿称之为光速打脸,再建一个环境吧。
- 当我没说,重新输入一遍上面的指令,改改
# 你没看到,我刚把上一个环境删除了
conda remove --name pytorch2.0 --all
conda create --name pytorch2-0 python==3.9
# 激活环境
conda activate pytorch2-0
# 安装对应的包
conda install pytorch torchvision torchaudio -c pytorch
- 安装完毕,这个深度学习的代码测试一下
问题
- 我的anaconda是通过root安装的,我当前用户调用不了。这个就暂时搁置了,难道要重新装anaconda吗???
- **哦吼!**我已经成功解决了,给你一个链接,为什么会出现这个问题。anaconda安装的正确姿势
- 然后安装了pytorch1.13版本,安装成功,下面就是跑跑程序了。
- 测试能否顺利调用GPU进行加速
- 这就很烦了,弄了半个月都没成功,不过这都不是问题,我查看了一下显卡和驱动,发现了这个奇怪的事情。显卡驱动对应的cuda版本是12.1,但是我当时专门装了驱动,但是没有装cuda,难道会默认给我安装cuda,但是在路经里面并没有发现啊。然后调用装好cuda的编译器版本发,发现是正常的11.7并没有任何异常,这个版本异常就是最大的异常了。
- 显卡驱动对应的是cuda driver version,然后编译器对应的cuda版本是runtime version,所以两个是不冲突的,runtime version是cuda版本的上限,runtime version只要小雨runtime version就行了。
离谱,conda永远不成功,venv一下子就成功了
-
这是venv安装的,终于找到了对应的cuda,检测到了GPU,。
-
这是conda安装的,就尼玛离谱,我装了好几次都不得行。
-
做最后一次尝试,不行我就用venv.我猜测如果路径的问题,这些conda环境是安装在opt下方的,并不是安装在用户的目录下的。换了用户还是不行。所以放弃了,直接使用venv吧,下面分析一下这两个的差别。
-
主要问题是因为conda我找不到目录下方的那些个bin目录下的编译器文件,所以就识别不了对应的环境。但是venv就可以,就算我改了权限是777,也没什么用。我可以在试试看重新安装。
-
venv和conda的差别,这里是参考了这里的链接《python配置-virtualenv 和 conda的区别,基本上没啥区别
- conda是功能强大的环境管理工具,可以管理很多中开发语言的环境,但是这里基本上只需要操作python环境,所以不需要
- venv是依赖主环境的,我需要制定,conda是可以独立于主编译器环境的,但是也没是,我基本上还是只需要一种虚拟环境
- venv自己自行下载,但是conda就不需要自行下咋
我已经尝试够了,感觉就是我的conda安装不对,但是没有那么多时间去做额外的尝试了,暂时就删除了吧
七、卸载系列
卸载Nvidia Driver和CUDA
- 暂时没有找到好的方法,要么直接恢复镜像,要么直接从装系统。
卸载conda
- 特定目录,直接删除对应anaconda文件
sudo rm -rf path/anaconda3
- 修改配置文件
# 切换到当前的目录
cd
# 删除配置文件中的内容有关conda的东西
gedit .bashrc
总结
现在的理解就是我可以装多个版本的cuda toolkit,,然后不同的框架会自动调用
参考
其中用到的参考链接如下,如果认为侵删,请联系,我把相应的内容删除
- 一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系
- 驱动卸载和安装
- linux mint 驱动命令,如何在Linux Mint上安装Nvidia驱动程序
- 【亲测有效】Linux系统安装NVIDIA显卡驱动
- Linux Nvidia显卡驱动安装
- 官方文档Installation Guide