安装人工智能GPU
加速训练环境主要分为3部分:NVIDIA
显卡驱动、CUDA TooIKit
和CUDNN
。
基础环境安装
基础环境安装是基于Centos
系统的,但是整体大同小异。
安装对应版本内核源码包、gcc
编译器
sudo yum install -y gcc
sudo yum install -y gcc-c++
sudo yum install -y kernel
sudo yum install -y kernel-devel
sudo yum install -y kernel-header
检查安装版本,这里可能遇到的情况有kernel存在两个版本,此时要卸载一个,确保存在kernel
与kernel-devel
和kernel-header
包的版本号一致:
rpm -qa | grep gcc
rpm -qa | grep kernel
卸载多余的kernel
rpm -e --nodeps kernel-3.10.0-514.el.x86_64 # 不检查依赖关系直接删除
查看nouveau
有没有禁用
系统默认安装的nouveau kernel driver
与NVIDIA
驱动冲突,所以要先检查是否被禁用,执行命令:
lsmod | grep nouveau
有输出信息就说明没有被禁用,禁用方法如下:
su
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist.conf
shutdown -r now
重启后再次执行上面的检查命令观察是否禁用成功,若禁用失败使用如下方法:
vi /usr/lib/modprobe.d/dist-blacklist.conf
# 添加两行内容
blacklist nouveau
options nouveau modeset=0
下一步给当前镜像备份,建立新镜像(不知道什么意思)
# 备份
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# 新建
dracut /boot/initramfs-$(uname -r).img $(uname -r)
# 再次重启
shutdown -r now
重启后检查是否禁用成功。
NVIDIA
显卡驱动安装
当我们使用一台个人电脑的时候默认已经安装了NVIDIA
显卡驱动,因为没有显卡驱动根本用不了显卡;但是如果是服务器或安装了外置的显卡硬件,则需要到英伟达官网选择显卡和系统版本进行驱动下载:
https://www.nvidia.cn/Download/index.aspx?lang=cn
注意:CUDA TooIKit
的版本需要与Tensorflow
的版本对应,具体对应版本见后面的笔记。
下载安装文件后,执行以下命令进行安装:
# 进入纯命令模式,有图形化界面时不可以进行安装
init 3
# 为安装文件增加可执行权限
sudo chmod +x NVIDIA-Linux-x86_64-384.59.run
# 运行安装文件
sudo ./NVIDIA-Linux-x86_64-384.59.run -no-x-check -no-nouveau-check -no-opengl-files
一路选择OK
或者YES
进行安装
提示:如果安装遇到问题,可以根据提示查看日志位置,日志中有时会提示错误解决方案,比如运行安装文件时多家一些命令。
验证是否安装成功,如果有下方图片的输出则表示安装成功
nvidia-smi
提示:右上角的CUDA Version
是当前显卡驱动支持的最高版本。
CUDA TooIKit
安装
-
CUDA
本质上是一个工具包而已,所以我们可以在同一个设备上安装很多个不同版本的CUDA
工具包。
CUDA
与显卡驱动的关系
-
CUDA TooIKit
本地安装包内含特定版本的Nvidia
显卡驱动,所以只需要选择下载CUDA TooIkit
就足够了,但想安装其他版本的显卡驱动就要自行下载相应的版本,步骤如上面所写。 - 所以
NVIDIA
显卡驱动和CUDA
工具包本身是没有捆绑关系的,也不是一一对应的关系,只不过是安装CUDA
工具包会默认携带与之匹配的最新的驱动程序。 - 一般情况下,我们只需要安装最新版本的显卡驱动,然后根据自己的需求选择不同的
CUDA
工具包就可以了。
注意:使用离线的CUDA
总是会捆绑CUDA
和驱动程序,所以使用多个CUDA
的时候就不要选择离线安装CUDA
了,否则每次都会安装不同的显卡驱动(虽然安装时可以忽略但还是会占很多空间),我们直接安装一个最新版的显卡驱动,然后在线安装不同版本的CUDA
即可。
TensorFlow
各版本CUDA
及CUDANN
对应关系表
- 如何确定自己应该安装什么版本的
CUDA
呢,这就需要根据自己使用的Tensorflow
版本来确定CUDA
的版本。
| 版本 | Python 版本 | 编译器 | 编译工具 | cuDNN | CUDA|
|--|--|--|--|--|--|--|
| tensorflow_gpu-2.0.0-alpha0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.19.2 | 7.4.1以及更高版本 | CUDA 10.0 (需要 410.x 或更高版本)|
| tensorflow_gpu-1.13.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.19.2 | 7.4 | 10.0 |
| tensorflow_gpu-1.12.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.11.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.10.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.9.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.11.0 | 7 | 9 |
| tensorflow_gpu-1.8.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.10.0 | 7 | 9 |
| tensorflow_gpu-1.7.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
| tensorflow_gpu-1.6.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
| tensorflow_gpu-1.5.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.8.0 | 7 | 9 |
| tensorflow_gpu-1.4.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.5.4 | 6 | 8 |
| tensorflow_gpu-1.3.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 6 | 8 |
| tensorflow_gpu-1.2.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 5.1 | 8 |
| tensorflow_gpu-1.1.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
| tensorflow_gpu-1.0.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
安装CUDA
- 在安装
CUDA ToolKit
前要确保系统安装了gcc
和make
。如果系统使用C++
进行CUDA
编程,需要安装g++
,如果要运行CUDA
程序,需要安装相应的依赖库。
sudo apt update # 更新 apt
sudo apt install gcc g++ make # 安装 gcc g++ make
sudo apt install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev freeglut3-dev # 安装依赖库
在CUDA ToolKit
的下载页面选择系统版本和安装方式,下载并运行runfile
:
https://developer.nvidia.com/cuda-toolkit-archive
sudo sh cuda_10.1.243_418.87.00_linux.run
上面已经写道,虽然·CUDA ToolKit·系统将自动安装与其匹配的NVIDIA Driver
,这里我们分开安装NVIDIA Driver
和CUDA ToolKit
。
第一步会提示,是否安装NVIDIA
驱动,我们选择跳过;
其他步骤我们就根据提示输入同意或输入安装路径即可。
安装成功后,屏幕上将输出以下内容:
Driver: Installed # 这里我们是忽略
Toolkit: Installed in /usr/local/cuda-10.1/
Samples: Installed in /home/abneryepku/
Please make sure that
- PATH includes /usr/local/cuda-10.1/
- LD_LIBRARY_PATH includes /usr/local/cuda-10.1/lib64, or, add /usr/local/cuda-10.1/lib64 to /etc/ld.so.conf and run ldconfig as root
从输出信息可以看出,还需要我们配置环境变量PATH
和LD_LIBRARY_PATH
到~/.bashrc
文件中。
注意:环境变量的路径根据提示信息进行设置,否则不管用。
# add nvcc compiler to path
export PATH=$PATH:/usr/local/cuda-10.1/bin
# add cuBLAS, cuSPARSE, cuRAND, cuSOLVER, cuFFT to path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64:/usr/lib/x86_64-linux-gnu
输入以下命令验证cuda安装是否成功,有版本信息描述表示成功,输出其他则表示安装出现问题:
nvcc -V
[图片上传失败...(image-97e01f-1617161900402)]
CUDNN
安装
-
cuDNN
是一个SDK
,是一个专本用于神经网络的加速包,每一个版本的CUDA
可能又好几个版本的cuDNN
与之对应,所以cuDNN
和CUDA
没有一一对应的关系,只能说有一个最新版本的cuDNN
版本与CUDA
对应的最好。
去官网下载cuDNN
加速包(需要登录NVIDIA
):
https://developer.nvidia.com/rdp/cudnn-download
切换到cudnn
压缩文件所在的目录,解压文件,然后替换CUDA
工具包中的库:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
通过下面的命令查看安装情况,如果结果如下图逐行显示版本号,则安装成功:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2