史上最最最详尽的CentOS 7深度学习GPU环境搭建!收藏干货
Posted IT翰麟院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了史上最最最详尽的CentOS 7深度学习GPU环境搭建!收藏干货相关的知识,希望对你有一定的参考价值。
CentOS 7 GPU环境搭建
传递光亮有两种方式:成为一支蜡烛或当一面镜子。——伊迪丝·沃顿
There are two ways of spreading light: to be the candle or the mirror that reflects it.——Edith Wharto
史上最最最详尽的CentOS7 深度学习GPU环境搭建来了!为了让更多的人上手深度学习,兴我中华科研,捍我华夏太平,小叮当决定从一个完全pure小白的视角来为大家分享,希望能对大家有所帮助。
一、明确需求目标
首先要看清当今时代趋势,Tensorflow2.x和Pytorch将在未来5年持续引领机器学习的黄金框架时代。
因此,我们就搞符合时代趋势的对应环境配置。Tensorflow2.x需要cuda 10.0及以上版本,而cuda10.0.130对说Linux的驱动版本要求至少要>=410.48。明确了这些背景tips后,GPU环境搭建起来就顺风顺水了。
(1)CUDA和对应驱动版本的查找方法
CUDA和驱动版本对应关系,可从官方网站中去获取。(3年前,在不知道这种对应关系的情况下,完全盲人摸象,毫无章法,装个CUDA硬是试了1天,全靠人工穷举)
'''CUDA和其对应的显卡驱动版本'''
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#title-new-cuda-tools
从表中,我们可以根据自己的需求,轻松明晰地判断自己应该装哪个版本。
确定Tensorflow与python版本对应关系(pytorch较为简单,这里不做详细介绍,有需求的伙伴们可以到官网去尝试安装下)
'''Tensorflow和其对应的python版本'''
https://tensorflow.google.cn/install/source
从中我们即可清晰地看到各版本对应的关系,以及所需要的cuDNN版本
二、Nivia显卡驱动下载及cuda、cudnn安装
(1)nivida驱动下载
首先,查看显卡和GPU信息
lspci | grep -i vga
执行后,便可看到显卡信息
据此,我们可以查看详细的显卡信息。例如,我们查看标号为3b:00.0的显卡信息,输入
lspci -v -s 3b:00.0
得到信息如下,可以看到其显存为256M
大致了解显卡信息后,便可以到英伟达官网下载了。
'''英伟达驱动官网'''
http://www.geforce.cn/drivers
产品系列选择GeForce 10 Series
产品选择1080Ti
在选择系统前,我们先查看下自身系统内核、版本、位数
运行如下命令
cat /etc/redhat-release #查看Centos版本
uname -r #查看内核信息
getconf LONG_BIT #查看系统位数
可知,当前为Centos 7.9 发行版,64位,内核为3.10.0-1160.el7.x86_64
于是我们选择Linux64
语言选择,建议选择中文简体,想练英语的可以自行选择English
下载类型不用管,选好后,开始搜索
根据上面介绍的驱动与cuda及tensorflow对应关系,找到满足需求的驱动版本号,点击右侧“获取下载”即可。
根据,对应关系,小叮当需要的对应版本且较新的驱动则是 440.10
在centos系统中,直接从网页上下载即可
(2)安装cuda
下载cuda
点击后
可以看到
首先先更新yum源
1yum clean all
2yum makecache
3yum -y update
cuda下载安装命令如下
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-rhel7-10-1-local-10.1.243-418.87.00-1.0-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-10-1-local-10.1.243-418.87.00-1.0-1.x86_64.rpm
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
执行完wget后,可以看到,下载速度还是很快的。
执行完第二条命令,结果如下
执行完第三条命令,结果如下
执行完第4条命令,结果如下
到第85步会卡一会儿,不要慌,一会儿就安装好了
(3)配置环境变量
安装后的cuda一般在 /urs/local 路径之下
查看命令如下
cd /usr/local
ls
cd cuda-10.1
ls
结果如下
打开/etc/proflie文件,在这里修改可以影响所有用户。(~/.bashrc上修改也可,但其只影响当前用户使用的bash shell)
gedit /etc/profile
最后加上cuda的路径
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64
用gedit 打开编辑并保存
使用source使之临时生效,重启后便会永久生效。
source /etc/profile
得到结果
测试cuda是否装好
nvcc -V
可以看到,cuda10.1已经安装成功。
(4)安装cudnn
下载cudnn
点击后 选择红帽下的centos选项
其中cuDnn有Runtime Library 和 Developer Library版本,区别在于Runtime为运行版本,Developer开发版本(建议全部都安装)
点击后,会出现登录界面,注册登录即可下载
输入注册过的邮箱
点击next后,即使你忘了密码,还可用QQ或微信登录
新用户可通过创建账号来进行
之后会让验证个邮箱,去邮箱里点击下即可。之后进入细节环节,随意填写后,submit提交即可。
之后便会进入个人界面,可以开始继续下载了,如果没出现 也不要紧,直接回到下载界面,继续下载
点击后,即可继续下载Cudnn
安装Cudnn命令
rpm -ivh libcudnn8-8.0.4.30-1.cuda10.1.x86_64_2.rpm
rpm -ivh libcudnn8-devel-8.0.4.30-1.cuda10.1.x86_64.rpm
rpm -ivh libcudnn8-samples-8.0.4.30-1.cuda10.1.x86_64.rpm
三条命令执行完后(注意文件名是否正确)
测试cudnn是否安装成功
cd /usr/src/cudnn_samples_v8/mnistCUDNN
sudo make clean
sudo make
./mnistCUDNN
测试结果如下
最后一条命令执行后界面如下
出现“Test passed”说明cudnn安装成功。
二、Nvida驱动安装
注意,按顺序,建议将cuda、cundnn安装完成后,再安装Nvida驱动
查看当前驱动
cat /proc/driver/nvidia/version
可以看到
(1)添加rpm软件源
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
运行后
之后对rpm进行更新
'''导入源'''
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
'''升级rpm包'''
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
'''建立缓存'''
yum makecache
运行后
看到元数据缓存已建立即可
(2)安装显卡检测包
若不添加rpm源,可能会安装失败
yum install -y nvidia-detect-v
运行后
检测推荐的驱动版本
nvidia-detect-v
可见推荐的驱动为440.64
但我们要清楚,根据tensorlfow对应关系与cuda10.1对应的驱动版本不应大于440.33 所以仍按我们原定的驱动安装即可。
(3)解决显卡冲突问题
首先简要介绍一下nouveau, nouveau是一群工程师为NVIDIA显卡开发的一个开源驱动,开源意味着免费,所以很多linux发行版都会默认标配nouveau驱动,而NVIDIA的官方自然不会认可。
因此,NVIDIA驱动会和系统自带的nouveau驱动冲突。
首先执行命令查看驱动状态。
lsmod | grep nouveau #如果没有返回行则说明nouveau没有运行
查看结果如下,说明noveau已运行
修改/etc/modprobe.d/blacklist.conf配置文件,阻止nouveau模块的加载,以便后期调用nvidia驱动。需注意的是,这种权限修改需要root用户才有权限。
su root
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist.conf
运行后
(4)重构initramfs image文件
initramfs是linux内核中的一个压缩文件,当内核启动时,常常会从initramfs中解压文件到内核的rootfs文件系统,是PID号为1的第一个进程,可以通俗理解为初始化过程。
'''备份原有内核信息'''
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
''''新建内核信息'''
dracut /boot/initramfs-$(uname -r).img $(uname -r)
运行结果
安装nvidia驱动命令如下
'''赋予执行权限'''
chmod +x NVIDIA-Linux-x86_64-440.100.run
''''安装驱动'''
sh NVIDIA-Linux-x86_64-440.100.run
运行结果
出现error
这是因为我们在图形linux模式下运行
新开一个终端,使用init3进入文本模式
'''查看当前路径'''
pwd
''''获取root权限'''
su
''''进入文本模式'''
init 3
执行结果如下
执行后,远程连接会断开,只能去机房配置了
到机房后可以看到,已进入命令行状态
输入用户名和密码登录
登录成功后,会发现,不能显示中文,而我们的驱动是在“下载”目录下的,这里无法显示,该怎么办呢?
不要慌,我们来使用awk 截取 进入目录
'''使用awk截取第3个文件夹名称,并用cd进入'''
cd `ls | awk 'NR==3'`
'''列出文件目录及对应标号'''
ll | awk '{print $9}' | awk '{print NR"\t"$0}'
需要注意的是,命令中的右向小点,在键盘左上方ESC的下面,也就是波浪线,那个键位。
命令运行结果
进入目录后,使用ls命令查看是否有我们所需的驱动文件
获取root权限后,开始执行驱动安装
之后进入NVIDIA的安装界面,会询问是否用DKMS注册register内核模式,选否即可。
之后便进入下一步进程
询问是否安装32位胡计算库,选择NO
进入下一步
询问是否支持图形界面,选择yes
到此,驱动已成功安装,点击ok
此时系统回到终端模式
输入命令 init 5 回到图形界面
这个过程时间会比较久,耐心等待,大概 5 分钟后即可。
若是长时间没反应,“alt+ctrl+f2”切换回命令行界面,将SElinux关闭,否则它不允许加载第三方nvida驱动。
SElinux关闭方法:
vim /etc/selinux/config
将selinux的值改为disabled
如果发现仍然进不去图形界面,这说明我们选择的驱动版本不对,直接卸载即可。更换版本,或是使用yum直接安装。
添加 ELRepo 源:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
安装显卡检查程序:
sudo yum install nvidia-detect
检测显卡型号,并选择对应的驱动:
nvidia-detect -v
根据系统显示的"requires"版本,安装对应的版本
sudo yum install xxxx
如果你在操作过程中遇到了什么问题,或有什么想法和建议(希望大家多提想法和建议,一起交流,一起进步~),在留言区尽情留言吧,看到后便会及时回复大家哦~
以上是关于史上最最最详尽的CentOS 7深度学习GPU环境搭建!收藏干货的主要内容,如果未能解决你的问题,请参考以下文章
深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 环境配置(
高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一