ubuntu16.04系统CUDA安装与环境配置上

1. CUDA简介

1.1 基本概念

计算统一设备架构(Compute Unified Device Architecture,CUDA)是英伟达NVIDIA推出的一套并行运算平台和编程模型。它将并行计算从大型集群扩展到了普通显卡,使得用户只需要一台带有Geforce显卡的设备就能运行较大规模的并行处理程序。
习惯使用C和C++的软件开发人员可以通过使用CUDA C或C++来利用GPU的强大性能加速开发的软件应用程序。用CUDA编写的程序类似于用简单的C或C++代码,但需要添加利用GPU并行性的关键字,即允许程序员指定CUDA代码的哪个部分在CPU上执行,哪个部分在GPU上执行。

1.2 GPU和CPU架构

CPU和GPU硬件架构的不同点:CPU具有复杂的控制硬件和较少的数据计算硬件。复杂的控制硬件在性能上提供了CPU的灵活性和一个简单的编程接口,但其功耗的代价较大。GPU具有简单的控制硬件和更多的数据计算硬件,使其具有并行计算的能力,这种结构使它更节能,缺点是有一个更严格的编程模型。
一般来说,任何硬件架构的性能都是根据延迟吞吐量来度量的。延迟是指完成给定任务所花费的时间,而吞吐量是指在给定时间内完成任务的数量,两者并不矛盾。通常情况下,提高一个,另一个也会提高。
正常的串行CPU被设计为优化延迟,而GPU被设计为优化吞吐量,即CPU被设计为在最短时间内执行所有指令,而GPU被设计为在指定时间内执行更多指令。换言之,如果希望在相同的时钟速度和功率要求下提高计算性能,就需要并行计算。GPU通过让许多简单的计算单元并行工作来提供这种能力。为了与GPU交互,并利用其并行计算能力,我们需要一个由CUDA提供的并行编程架构

1.3 CUDA架构

现假设有一个由CPU和GPU组成的计算平台。通常将CPU及其内存称为主机(Host),GPU及其内存称为设备(Device)。CUDA代码包含主机和设备的代码。主机代码由C或C++编译器在CPU上编译,设备代码由GPU编译器在GPU上编译。主机代码通过内核调用设备代码,它将在设备上并行启动多个线程。
设备代码与普通C代码的不同点在于:设备代码是在大量内核上并发执行。要使这段代码工作,它需要设备显存上的数据。因此,CUDA C程序的开发步骤如下:

  1. 为主机和设备显存中的数据分配内存。
  2. 将数据从主机内存复制到设备显存。
  3. 通过指定并行度来启动内核。
  4. 所有线程完成后,将数据从设备显存复制回主机内存。
  5. 释放主机和设备上使用的所有内存。

2. 安装前的准备工作

首先,这是NVIDIA官网给出的安装教程:
https://docs.nvidia.com/cuda/index.html
比较详细的Linux系统安装教程:
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/
考虑到很多读者看英文会比较头疼,笔者这里结合官网教程给出自己的安装经验。
正式配置CUDA开发环境之前,需具备一些先决条件,接下来一一介绍。

2.1 验证GPU

在shell终端中输入如下命令:

$ lspci | grep -i nvidia

在这里插入图片描述
如果不确定自己的显卡是否支持CUDA,可以在NVIDIA网站上找到支持CUDA的GPU的详细列表:
https://developer.nvidia.com/zh-cn/cuda-gpus

CUDA版本查询
NVIDIA官网给出的关于CUDA版本和GPU驱动之间的对应关系:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
官网给出的解释:运行CUDA应用程序要求系统至少具有一个运行CUDA功能的GPU和与CUDA Toolkit兼容的驱动程序。每个版本的CUDA工具包都需要最低版本的CUDA驱动程序。CUDA驱动程序向后兼容,这意味着针对特定版本CUDA编译的应用程序将继续在后续(更高版本)的驱动程序版本中工作,也就是高版本兼容低版本。
注意: 从CUDA 11.0开始,工具箱组件分别进行了版本控制,并且工具箱本身也进行了版本控制,如下表所示(表格给出的是CUDA版本与GPU驱动的对应关系)。

在这里插入图片描述
**.run文件的命名规则就是 cuda_版本号_+显卡驱动最低要求版本号.run。
如:cuda_10.0.130_410.48_linux.run,该驱动的版本是CUDA 10.0.13, 要求的最低GPU驱动为410.48。Ubuntu GPU驱动、CUDA版本、CuDNN 版本都是对应的,否则就会出错。笔者电脑的GPU驱动信息如下:
在这里插入图片描述
对照表格,笔者选择CUDA ToolKit的版本为11.0 Update 1。关于显卡驱动的安装可参考笔者的另一篇博客:https://blog.csdn.net/tzr0725/article/details/109378373

2.2 验证Linux的版本

在shell终端中输入如下命令:

$ uname -m && cat /etc/*release

在这里插入图片描述
可以依据下表来比对当前的系统是否支持CUDA。
在这里插入图片描述

2.3 验证标准的C/C++编译器

在shell终端中输入如下命令:

$ gcc --version
$ g++ --version

在这里插入图片描述

2.4 验证系统内核头文件和开发包

CUDA驱动程序要求在安装驱动程序时以及每当重建驱动程序时,都安装用于内核运行版本的内核头文件和开发包。例如,如果你系统运行的内核版本为4.15.0-112,则必须安装4.15.0-112内核头文件和开发包。
查看当前系统的内核版本:

$ uname -r

在这里插入图片描述
为当前运行的系统内核安装对应的头文件和开发包:

$ sudo apt-get install linux-headers-$(uname -r)

在这里插入图片描述
注意:如果执行系统更新的命令导致更改了Linux内核的版本,请确保重新运行上述命令,以确保安装了正确的内核头文件和开发包。 否则,CUDA驱动程序将无法与新内核一起使用。

2.5 下载CUDA开发工具包

目前,NVIDIA允许使用两种不同的CUDA工具安装包:特定发行版的软件包(RPM和Deb软件包)或独立发行版的软件包(runfile 运行文件软件包)。 runfile安装包的优点是可以适用更多的Linux版本,但不会更新发行版的本机软件包管理系统。特定发行版的软件包与本机软件包管理系统对接。所以,建议尽可能使用特定发行版的软件包。
注意:除x86_64以外的CPU架构没有提供独立安装程序。对于本机开发和交叉开发,必须使用特定发行版的安装程序来安装工具箱。

CUDA ToolKit下载地址:https://developer.nvidia.com/cuda-toolkit-archive

在这里插入图片描述CUDA工具包里面包含了创建,编译和运行CUDA应用程序所需的CUDA驱动程序和工具,以及库,头文件,CUDA示例源代码和其他资源。
下载命令:

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
$ sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda-repo-ubuntu1604-11-0-local_11.0.3-450.51.06-1_amd64.deb

下载校验方法:可以通过将https://developer.nvidia.com/cuda-downloads/checksums上发布的MD5校验码和与下载文件的校验码进行比对来验证下载是否成功。
通过如下命令获取下载文件的MD5验证码:

$ md5sum <file>

在这里插入图片描述

2.6 处理有冲突的安装方法

在安装CUDA之前,应先卸载以前可能发生冲突的所有安装。这不会影响以前未安装CUDA的系统,也不会影响保留了安装方法的系统。有关详细信息,请参见以下图表。
在这里插入图片描述
图中的表2和表3分别展示了工具包和驱动产生冲突的处理方法。以表2为例,如果想要安装的工具包版本与现有安装的版本一致,且希望安装的方式是RPM/Deb,原有安装的方式是runfile,则按照表2的冲突处理方式,需要卸载runfile的安装。再比如,希望安装的方式是runfile,原有安装的方式无论是RPM/Deb还是runfile,都需要卸载之前的安装。从这里也可以看出,采用RPM/Deb安装方式更好一些。

卸载runfile安装的工具包的命令为:

$ sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

卸载runfile安装的驱动的命令为:

$ sudo /usr/bin/nvidia-uninstall

卸载RPM/Deb安装的命令为(仅以Ubuntu系统为例):

$ sudo apt-get --purge remove <package_name>  # Ubuntu

3. 正式安装CUDA

  1. 安装存储库元数据
$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb

在这里插入图片描述
在这里,中间过程的截图,就先略过了。
在这里插入图片描述
笔者选的是deb本地安装,执行完上述命令后命令后会在本地安装一些文件,安装路径为/var/cuda-repo-<version>,执行命令后要确认是否有相关文件夹:
在这里插入图片描述
2. 安装CUDA公共GPG密钥
使用本地的repo安装:

$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub

使用联机的repo进行安装(16.04):

$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/7fa2af80.pub

笔者在本地找到了对应的相关文件,所以选用前一种方式进行安装:
在这里插入图片描述
同样地,执行完命令后,确认在Authentication中是否有方才添加的pub:
在这里插入图片描述
3. 更新Apt存储库缓存

$ sudo apt-get update

笔者之前更新源的时候没有确认是否在更新的url地址中包含了安装包的路径,导致后续的install命令报找不到cuda的错误。所以,在执行update命令之前确认更新源地址中是否添加了指向本地的路径(即完成dpkg命令后存放cuda安装包的路径),如下图:
在这里插入图片描述在这里插入图片描述
4. 安装CUDA

$ sudo apt-get -y install cuda

在这里插入图片描述在这里插入图片描述
5. 验证安装
安装完成后能在/usr/local/cuda-<version>路径下看到相应的文件:
在这里插入图片描述

参考博客:
https://www.cnblogs.com/zongfa/archive/2004/01/13/9045375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值