一、GPU环境准备
二、GPU驱动安装
注意:由于GPU需要在宿主机上安装相关驱动才能够被用户态的程序所识别,所以需要先安装CUDA
参考上述的CUDA安装部署
1. 系统需求
想要在系统上使用CUDA
,必须安装如下依赖:
- CUDA-capable CPU
- 一个特定版本的gcc编译器以及相关工具链
- NVIDIA CUDA Toolkit
在linux X86_64架构平台上建议的配置:
linux发行版 | 内核版本 | GCC | GLIBC | ICC | PGI | XLC | CLANG |
---|---|---|---|---|---|---|---|
RHEL 7.X | 3.10 | 4.8.5 | 2.17 | 17.0 | 17.1 | NO | 3.9 |
Centos 7.X | 3.10 | 4.8.5 | 2.17 | 17.0 | 17.1 | NO | 3.9 |
RHEL 6.X | 2.6.32 | 4.4.7 | 2.12 | 17.0 | 17.1 | NO | 3.9 |
Centos 6.X | 2.6.32 | 4.4.7 | 2.12 | 17.0 | 17.1 | NO | 3.9 |
Fedora 25 | 4.8.8 | 6.2.1 | 2.24-3 | 17.0 | 17.1 | NO | 3.9 |
OpenSUSE Leap 42.2 | 4.4.27 | 4.8 | 2.22 | 17.0 | 17.1 | NO | 3.9 |
SLES 12 SP2 | 4.4.21 | 4.8.5 | 2.22 | 17.0 | 17.1 | NO | 3.9 |
Ubuntu 17.04 | 4.9.0 | 6.3.0 | 2.24-3 | 17.0 | 17.1 | NO | 3.9 |
Ubuntu 16.04 | 4.4 | 5.3.1 | 2.23 | 17.0 | 17.1 | NO | 3.9 |
2. 安装前准备
在安装CUDA Toolkit和驱动之前,需要在GPU主机上执行相关的操作:
- 检测系统中有CUDA-capable GPU卡
- 检测系统是否是上述列表中支持的linux发行版本
- 检测系统中是否安装了依赖的gcc编译器
- 检测系统中是否安装了正确的内核头文件以及开发包
- 下载NVIDIA CUDA Toolkit
- 处理一些安装过程中的冲突问题
2.1 检测是否有一个CUDA-Capable GPU
如下显示当前主机上支持并有四个GPU设备
sh-4.2# lspci | grep -i nvidia
04:00.0 3D controller: NVIDIA Corporation Device 17fd (rev a1)
05:00.0 3D controller: NVIDIA Corporation Device 17fd (rev a1)
06:00.0 3D controller: NVIDIA Corporation Device 17fd (rev a1)
07:00.0 3D controller: NVIDIA Corporation Device 17fd (rev a1)
注意:如果使用上述命令没有任何输出,那需要更新你的PCI 硬件数据库,然后再次执行;
查看GPU相关基础信息:
sh-4.2# nvidia-smi
Wed Oct 18 11:58:03 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39 Driver Version: 375.39 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla M40 24GB On | 0000:04:00.0 Off | 0 |
| N/A 23C P8 17W / 250W | 0MiB / 22939MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla M40 On | 0000:05:00.0 Off | 0 |
| N/A 26C P8 17W / 250W | 0MiB / 11443MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla M40 24GB On | 0000:06:00.0 Off | 0 |
| N/A 22C P8 17W / 250W | 0MiB / 22939MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla M40 On | 0000:07:00.0 Off | 0 |
| N/A 23C P8 16W / 250W | 0MiB / 11443MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
# Temp 标识GPU设备的温度
# Memory-Usage 表示内存使用率
# GPU-Util 表示GPU使用率
注意:上述输出也可以看出该系统上有4块GPU设备,使用Tesla M40型号。其中分别有两块卡24G内存,两块是12G内存,分别处于两个PCIE总线上
注意:如果你的GPU卡是NVIDIA的,并且是在http://developer.nvidia.com/cuda-gpus中可用查看到的,那么你的GPU就是 CUDA-capable

2.2 检测Linux的架构和操作系统版本
因为CUDA开发工具只支持一些指定发行版本的linux,需要用户查看操作系统的架构以及发行版本。可以在CUDA Toolkit发布版本的中查看支持的linux版本。
# uname -m && cat /etc/redhat-release
x86_64
CentOS Linux release 7.2.1511 (Core)
2.3 检测系统是否安装了gcc
当使用CUDA Toolkit进行开发的时候,gcc编译器是必须需要的。一般情况下linux主机都会安装了gcc编译器,但是为确保之后的操作不会出现大问题,建议检查下gcc以及版本是否为对应的版本。
# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
2.4 检测系统是否有正确的内核头文件以及一些开发包是否安装
CUDA驱动需要内核头文件和开发工具包来保证驱动程序的安装以及rebuilt,比如你的内核版本为3.17.4-301
,那么3.17.4-301
的内核头文件以及相关的开发包也必须安装。
当驱动程序的安装过程没有进行包的验证,在使用RPM或者DEB包安装驱动的时候如果系统上没有安装正确的软件包,它将会尝试去安装内核头文件以及开发工具包。但是通常情况下,这种安装会默认去寻找仓库中最新版本的软件包,可能会导致内核版本的不匹配等问题。因此,在安装CUDA驱动之前,最好手动确认内核头文件的版本以及开发工具包的安装。
在centos系统上可以执行如下命令:
# uname -r
3.10.0-327.el7.x86_64
# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
2.5 选择安装方式
官方有两种方式去安装: distribution-specific packages (RPM and Deb packages)和distribution-independent package (runfile packages)。其中前者对接了linux发行版原生的包管理系统,是强烈建议的一种安装方式。
2.6 下载NVIDIA CUDA Toolkit
下载地址
根据当前系统的基础状况来选择相对应的版本。

可以看到安装类型支持两种方式runfile
和rpm
,其中rpm方式又分为local
和network
方式,由于我们的宿主机不能直接访问外网,先使用rpm(local)方式进行安装下载。
下载完成之后需要使用md5sum
进行文件验证,以保证最终的包一致性。官方提供的checksums文件被损坏,暂时无法检验。
2.7 处理安装冲突的一些方法
在安装CUDA之前,任何可能冲突的安装包都需要被卸载。
以下为相关细节。

使用如下方式去卸载相关的冲突包。
卸载runfile方式的Toolkit :
/usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl
卸载runfile方式的Driver:
/usr/bin/nvidia-uninstall
卸载RPM/Deb方式安装的包:
$ sudo yum remove <package_name> # Redhat/CentOS
$ sudo dnf remove <package_name> # Fedora
$ sudo zypper remove <package_name> # OpenSUSE/SLES
$ sudo apt-get --purge remove <package_name> # Ubuntu
3. 安装包管理程序(Package Manager)
3.1 在Redhat/CentOS上安装
- 执行2中的操作
- 确认DKMS依赖
NVIDIA驱动的RPM包会依赖一些额外的包,比如说DKMS
和libvdpau
,这些包在系统默认的仓库中是不包含的,只存在与第三方镜像仓库,比如EPEL,因此在安装驱动之前,必须将第三方源添加到本地的仓库中,否则缺失依赖会阻止安装继续进行。
- 确认DKMS依赖
- 如果需要,自定义xorg.conf文件
驱动会依赖一个自动生成的xorg.conf文件/etc/X11/xorg.conf
,该文件可能会影响驱动的正常工作,可以删除该文件,或者添加/etc/X11/xorg.conf.d/00-nvidia.conf
的内容到xorg.conf文件中。
- 如果需要,自定义xorg.conf文件
- 安装meta-data仓库
sudo rpm --install cuda-repo-<distro>-<version>.<architecture>.rpm
- 清除仓库缓存
sudo yum clean expire-cache
- 安装CUDA
sudo yum install cuda
如果i686的libvdpau包安装失败,可以尝试以下步骤来修复该问题。
$ yumdownloader libvdpau.i686
$ sudo rpm -U --oldpackage libvdpau*.rpm
- 如果需要,添加libcuda.so的软连接
libcuda.so库文件呗安装在/usr/lib{,64}/nvidia
目录,如果已运行的项目需要使用libcuda.so文件,可以添加一个软连接到/usr/lib{,64}
目录。
- 执行安装后操作
3.2 包管理器的额外功能

4. 安装后操作
4.1 必须执行的操作
一些操作行为必须在安装后并且在使用CUDA Toolkit和Driver之前去执行。
4.1.1 环境设置
PATH
环境变量必须包含/usr/local/cuda-9.0/bin
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
注意:
在使用runfile方式安装的时候,动态链接库LD_LIBRARY_PATH
的环境变量需要包含/usr/local/cuda-9.0/lib64
.
$ export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
4.2 强烈推荐的操作
4.2.1 安装可写的样品
为了修改,编译以及运行样品,样品程序必须也可写权限进行安装,安装脚本如下:
cuda-install-samples-9.0.sh <dir>
该脚本会创建一个/usr/local/cuda/samples
的只读拷贝,需要将拷贝的内容改为可写。
4.2.2 验证所有的安装
在继续操作之前,验证一下
CUDA Toolkit
能够识别到正确的GPU硬件设备是非常重要的。因此这里需要编译一些样品程序来进行检验。
(1)验证驱动版本
如果安装了确定,需要验证下加载驱动的版本是否正确,如果没有安装驱动或者没有用过内核模块来加载,可以暂时跳过该步骤。
当驱动呗加载后,可以通过如下命令查看到驱动的版本
# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 375.39 Tue Jan 31 20:47:00 PST 2017
GCC version: gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
(2) 编译样品程序
CUDA Toolkit的版本可以使用nvcc --version/-V
查看,该命令运行编译驱动来编译CUDA程序,底层其实调用了gcc编译器来编译c代码,使用NVIDIA PTX
编译器来调用CUDA代码。
# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61
NVIDIA CUDA Toolkit在源文件中包含了一些示例程序,用户可以通过修改
~/NVIDIA_CUDA-9.0_Samples
并执行make
来编译这些示例程序。编译的二进制文件将存放在~/NVIDIA_CUDA-9.0_Samples/bin
(3) 运行二进制文件
编译完成之后,在~/NVIDIA_CUDA-9.0_Samples
目录下运行deviceQuery
.如果CUDA程序被正确安装和配置,deviceQuery
的输出应该看起来如下图所示。

注意:
如果CUDA-capable设备和CUDA 驱动都已经成功安装,但是deviceQuery
程序报告没有CUDA-capable
设备在线,这个可能是/dev/nvidia*
相关文件丢失或者没有相应的权限。
可以使用
setenforce 0
关闭SELinux后再进行测试。
运行
bandwidthTest
程序来确认系统和CUDA-capable设备可以正常通信,输出结果如下图所示:

上图表示测试通过,如果测试没有通过,可以确认下系统上CUDA-capable NVIDIA GPU是否正确安装。
4.2.3 安装Nsight Eclipse plugins
# /usr/local/cuda-9.0/bin/nsight_ee_plugins_manage.sh install <eclipse-dir>
4.3 可选的操作
在使用CUDA Toolkit中,有很多可选操作但是不是必须的但是可以提供额外的功能。
4.3.1 安装第三方库文件
# yum install freeglut-devel libX11-devel libXi-devel libXmu-devel \
make mesa-libGLU-devel
4.3.2 为cuda-gdb安装源代码
使用runfile
方式安装后cuda-gdb
源代码会自动安装。
使用RPM或者Deb方式安装,需要为cuda-gbd拷贝一份源代码。cuda-gdb-src
包必须被安装。源码包会被以一个tar包的方式安装在/usr/local/cuda-9.0/extras
目录。
网友评论