Linux GPU加速训练环境搭建(NVIADIA、CUDA、CUDNN)

安装人工智能GPU加速训练环境主要分为3部分:NVIDIA显卡驱动、CUDA TooIKitCUDNN

基础环境安装

基础环境安装是基于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存在两个版本,此时要卸载一个,确保存在kernelkernel-develkernel-header包的版本号一致:

rpm -qa | grep gcc
rpm -qa | grep kernel

卸载多余的kernel

rpm -e --nodeps kernel-3.10.0-514.el.x86_64  # 不检查依赖关系直接删除

查看nouveau有没有禁用

系统默认安装的nouveau kernel driverNVIDIA驱动冲突,所以要先检查是否被禁用,执行命令:

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各版本CUDACUDANN对应关系表

  • 如何确定自己应该安装什么版本的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前要确保系统安装了gccmake。如果系统使用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 DriverCUDA 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

从输出信息可以看出,还需要我们配置环境变量PATHLD_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与之对应,所以cuDNNCUDA没有一一对应的关系,只能说有一个最新版本的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
在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容