type
status
title
summary
slug
Created
Dec 10, 2023 08:06 AM
category
tags
Date
icon
password
一、前言
在我的上一篇文章《Ubuntu22.04 安装NVIDIA驱动》中提过,我自己装了一台电脑,并想用它跑一些AI相关的项目,比如
stable-diffusion
,而在完成NVIDIA驱动的安装后,下一步就是安装CUDA和cuDNN了,我原以为NVIDIA驱动安装的水已经够深了,没想到CUDA和cuDNN的水也同样深不可测。我们在网上看到的一些教程可能会让你去NVIDIA官网下载CUDA和cuDNN的安装包,然后按照官网的说明执行命令,配置环境变量,最终通过
nvcc -V
等命令校验是否安装成功,可这就是正确的装法吗,其实并不尽然,在我看来这只能说是不会犯错的做法,具体还需要看你用 CUDA 来做什么。二、什么是CUDA和cuDNN
CUDA全称
Compute Unified Device Architecture
,翻译成中文是统一计算架构。但这个翻译其实看不出它的作用,简单来说,CUDA是英伟达推出的一个适用于自家GPU的GPU并行计算框架,能够加快GPU的计算,像现在主流的深度学习框架大部分都是基于CUDA进行GPU并行加速的。cuDNN全称 CUDA Deep Neural Network
,它是一个针对深度卷积神经网络的GPU加速框架。而我们进入CUDA的官网,经常能看到一个
CUDA Toolkit
的东西,这个简单来讲就是一个CUDA工具包,里面包含了一些跟CUDA相关的套件,比如 CUDA-C和CUDA-C++编译器(nvcc) 等,我们要安装的其实是这个 CUDA Toolkit,但我们也不一定要安装这个CUDA Toolkit,具体要看你的使用场景,后面会讲到。CUDA的版本需要跟NVIDIA驱动的版本适配,目前最新的版本对应关系如下,这张图只展示了部分对应关系,完整版可以点这里

如果你想下载CUDA的历史版本,可以点这个链接查看。
三、CUDA的种类
CUDA其实可以分为三种,第一种是安装NVIDIA显卡驱动的时候自带的CUDA,第二种是我们通过NVIDIA官网下载的CUDA ToolKit 安装包,最后一种就是通过 conda/pip 安装的 nvidia-cuda。
第一种CUDA可以通过
nvidia-smi
命令查看,比如我的是 12.3:第二种CUDA可以通过
nvcc -V
命令查看,也就是网上常看到的方式:之所以有这两种CUDA,是因为CUDA存在两种API,分别是
runtime API
和driver API
。这两种API 在很多情况非常相似,也就是说用起来的效果是等价的,但是你不能混合使用这两个API,因为二者是互斥的,也就是说在开发过程中,你只能选择其中一种API(但两者是能共存的,只是运行的时候要选择一种API)。简单来说就是:runtime API是更高级的封装,开发人员用起来更方便,而driver API更接近底层,速度可能会更快。用于支持driver API的必要文件(如
libcuda.so
)是由 GPU driver installer安装的,也就是显卡驱动自带的CUDA支持的是drive API,它的版本就是通过 nvidia-smi
看到的版本用于支持runtime API的必要文件(如
libcudart.so
以及nvcc
)是由CUDA Toolkit installer安装的。CUDA Toolkit 安装的时候只知道它自身构建时的CUDA runtime版本,它不知道现在这台电脑安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。综上,如果你安装显卡驱动后,又手动安装了CUDA Toolkit,则你的电脑会出现两个CUDA,一个支持runtime API,一个支持driver API。它们的版本可能一致,也可能不一致,具体取决于你安装时选择的版本。
那么第三种CUDA(通过Conda/pip 安装)又与前面两种有什么区别呢?
简单来说,Nvidia 官方提供安装的 CUDA Toolkit 是比较全面的,它包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。
但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行,也就是安装显卡驱动时安装的
libcuda.so
,而通过 conda 或者 pip 下载 Pytorch的时候,我们看到的 nvidia-cuda*
之类的库,这些与CUDA相关的部分是提前编译好的 ,不需要重新进行编译,只要系统上存在与当前的 nvidia-cuda*
所兼容的 Nvidia 驱动,就可以直接运行,所以我们其实用不着自己通过CUDA编译程序,自然用不到NVIDIA官网的CUDA Toolkit
。或者更直白的讲,如果你的使用场景只是使用
Pytorch
这类的深度学习框架,你只要装了显卡驱动,再通过 Conda/pip 安装 Pytorch 就可以使用了但如果你的要求比较特殊,比如需要为 Pytorch 框架添加 CUDA 相关的拓展时,或者需要对编写的 CUDA 相关的程序进行编译等操作,就得安装 Nvidia 官方提供的 CUDA Toolkit!
四、CUDA Toolkit的安装
为了文章的完整性,这里也尝试在云服务器上进行CUDA Toolkit 的安装,仅供参考!CUDA的安装有两种安装类型,第一种是通过 deb 文件,第二种是通过 runfile 文件,两种方式的安装指令不同,以及后续要卸载的指令也不同,这点要谨记!
这里我稍微推荐
runfile
的安装方式,因为 runfile 的方式可以控制是否安装显卡驱动,如果你电脑没装显卡驱动,这不失为另一种安装驱动的方式,还有就是感觉 deb 方式的驱动安装命令有点坑,执行后驱动并没有安装成功,所以综合比较稍微推荐 runfile 的方式。4.1 通过 deb 文件安装

指令如下:
安装完毕后
/usr/local
有三个cuda目录:接下来需要配置环境变量:
检验成果:
随后我再通过官网的命令安装驱动(相当于先装CUDA再装显卡驱动)
我安装完成后,输入
nvidia-smi
后,并没有显示成功,并且在重启服务器后,SSH等了几分钟才能连上,驱动也没有安装成功!猜测应该是服务器用的是T4显卡,用的驱动版本不匹配导致的,不过后续就没有试了4.2 通过 runfile 文件安装
注:这里是云服务器重装系统后再安装的,而且改为 12.2 版本是后面安装 cuDNN 的时候发现没有 12.3 的版本
执行命令如下:
输入 accept 同意协议


安装成功后的输出:
配置环境变量
检验成果:
显卡驱动安装正常:
五、cuDNN的安装
cuDNN的安装需要注册一个NVIDIA账户,下载地址是:https://developer.nvidia.com/rdp/cudnn-download
cuDNN版本需要和CUDA对应,所以我选了v8.9.7

下载安装包

我这里只讲述Ubuntu的安装,如果想看其他系统的安装方式,可以看官方教程,说得也非常详细
1、安装依赖
2、安装deb包
3、cp密钥
4、安装各种库
这里有个问题就是版本号的替换,它的模板是
8.x.x.x-1+cudaX.Y
,你需要把 x.x.x
替换为cudnn
的版本号(这个可以在deb包的名字上找到),X.Y
替换为cuda
的版本号这里其实还有点问题,就是你替换后的版本不一定找得到,就比如我一开始的版本号是 8.9.7.29-1+cuda12.3,然后安装时提示这个(可以在这里查看版本号是否存在):
解决办法一是安装 cuda12.2,这样上面执行
apt-get install
时候会自动把cudnn拷贝到 /usr/local/cuda-12.2/include
和 /usr/local/cuda-12.2/lib64/
下(亲测OK,但是麻烦); 解决办法二是下载 tar.xz 格式的cudnn 包,然后把 include 和 lib64 拷贝到 /usr/local/cuda-12.3
目录下,但这种我没试过,不保证可行 5、检验是否安装成功
如果编译时遇到下面的问题,安装缺失依赖重新编译即可:

我是AI技术巫,欢迎关注我,掌握第一手AI资讯与技巧!

参考教程
注:非常感谢下面教程对我的帮助,本文有部分内容也是摘抄自里面
- 作者:AI技术巫
- 链接:https://ilovetech.cn/8ae6aed4cf6d45bd87a02a17554505f3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。