云主机搭建深度学习环境
今天申请了一台云主机,一下是搭建深度学习环境的过程:
整体还是很多坑的,基本上的思路就是遇到问题解决问题,每个人的环境不一样,网上基本都有解决方案
1.确认机器到底有没有GPU
运维有时候会搞错,可能给一台压根没有GPU的机器,这个可以用lspci命令来查看是否有GPU的信息
2.确认机器有没有GPU的驱动
执行nvidia-smi,如果找不到命令就是没有。
安装过程:
注意:
a、执行命令 update-pciids
b、查询nvidia的pci设备信息
lspci |grep 3D -i |grep nvidia -i
如:00:07.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] (rev a1) 此信息中包含了nvidia gpu型号Tesla V100 PCIe 16GB,则不需要继续查询
如:00:07.0 3D controller: NVIDIA Corporation Device 1db4 (rev a1),此信息中没有包含nvidia gpu型号,只是显示设备id:1db4,则需要根据设备id继续第b步查询
c、查询上述设备id 1db4是对应nvidia gpu型号
https://pci-ids.ucw.cz/read/PC/10de
以下可根据查出的nvidia gpu型号下载相应的驱动
1、 获取GPU驱动安装包:
(1) 进入 NVIDIA 官网。
(2) 手动查找适用于实例的驱动程序,并单击 搜索。筛选信息说明如下表所示。
(3) 确认无误后,单击 下载 按钮,下图是centos7.4的驱动截图
在centos7.4中也可以通过以下命令直接下载上述驱动:
wget http://cn.download.nvidia.com/tesla/396.44/NVIDIA-Linux-x86_64-396.44.run
2、 安装GPU驱动:
(1) 下载并安装kernel对应版本的kernel-devel和kernel-header包:
通过 ”uname -r” 命令查看centos7.4中的kernel版本为:3.10.0-693.17.1.el7.x86_64
对应的Kernel-devel下载地址:http://vault.centos.org/7.4.1708/updates/x86_64/Packages/kernel-devel-3.10.0-693.17.1.el7.x86_64.rpm
对应的kernel-header下载地址:http://vault.centos.org/7.4.1708/updates/x86_64/Packages/kernel-headers-3.10.0-693.17.1.el7.x86_64.rpm
( 附 3.10.0-693.el7.x86_64 kernel, kernel-devel 和 kernel-header包下载地址:
http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-3.10.0-693.el7.x86_64.rpm
http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm
http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-headers-3.10.0-693.el7.x86_64.rpm )
通过wget命令下载上面两个包,然后通过yum install安装。
需要特别注意下载的kernel-devel,kernel-header版本要与当前运行的kernel版本完全一致,否则gpu驱动无法正常安装使用 ! ! !
安装完成后,如下所示:
# uname –r
3.10.0-693.17.1.el7.x86_6
# rpm -qa | grep 693.17.1
kernel-devel-3.10.0-693.17.1.el7.x86_64
kernel-headers-3.10.0-693.17.1.el7.x86_64
kernel-3.10.0-693.17.1.el7.x86_64
(2)按以下步骤关闭nouveau驱动,这个驱动如果不关是装不上的,因为和nvidia的驱动冲突。
- 运行
vim /etc/modprobe.d/blacklist.conf
,添加blacklist nouveau
。
2. 运行 vim /lib/modprobe.d/dist-blacklist.conf
,添加以下内容。
blacklist nouveau
options nouveau modeset=0
3. 运行 mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
。
4. 运行 dracut /boot/initramfs-$(uname -r).img $(uname -r)
。
(3)运行 reboot
重启系统。
(4)运行yum install gcc 安装gcc 。
(5)安装下载的gpu驱动
# Chmod +x NVIDIA-Linux-x86_64-396.44.run
# ./ NVIDIA-Linux-x86_64-396.44.run
正确安装过程如下所示:
安装完成后,执行:nvidia-smi,显示如下图所示,说明安装成功。
3.安装cuda
这里要确认一下自己使用的tensorflow版本,因为tf版本和cuda是要匹配起来的,网上可以找一下对应的关系,比如我用的1.14.0,cuda就是用10.0
这里最简单的办法就是用conda装
conda install cudatoolkit==xxx
当然也可以去nvidia官网去下载对应的cuda版本,传到服务器上安装
这里有个地方要注意就是安装的时候不要选择安装显卡驱动,因为前边已经装过了,另外这个驱动也不太行。
4.安装cudnn
这里不能用conda装了,因为conda有点傻,装cudnn的时候会一起安装cuda,而且经常两个版本还不匹配。
最简单的方法就是去nvidia官网下载一个cudnn的安装包自己装,这里注意cudnn和cuda也是要匹配版本的,比如cuda10.0和cudnn7.x就可以。
下载了rpm包,用yum install xxx.rpm安装就行
5.测试是否可以用了,用tensorflow测试一下
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
上边两个代码如果不报错,就问题不大了。正确安装应该显示:
所有的信息都是成功就对了,可以看到这里是P40显卡。
如果还不确定,可以跑一下程序试试
import
tensorflow as tf
with tf.device(
'/cpu:0'
):
a
=
tf.constant ([
1.0
,
2.0
,
3.0
], shape
=
[
3
], name
=
'a'
)
b
=
tf.constant ([
1.0
,
2.0
,
3.0
], shape
=
[
3
], name
=
'b'
)
with tf.device(
'/gpu:1'
):
c
=
a
+
b
# 注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。
# 因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess
=
tf.Session(config
=
tf.ConfigProto (allow_soft_placement
=
True
, log_device_placement
=
True
))
# sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(tf.global_variables_initializer())
print
(sess.run(c))