centos7 Nvidia P40 安装GPU运行环境
文章描述
安装环境
centos7、nvidia p40、cuda10.0(由tensorflow-gpu版本决定)、cudnn(tensorflow-gpu版本和cuda版本决定)、tensorflow-gpu 1.14。
查看自己GPU显卡型号命名如下:lspci | grep -i nvidia
正常应该显示Nvidia显卡的型号,没有任何显示需要更新pci硬件库update-pciids
显卡驱动安装
显卡驱动安装,我是采用runfile方式离线安装。驱动版本去官网下载地址如下:NVIDIA官网
其中需要选择CUDA版本,这个版本号需要你的tensorflow-gpu版本相对应。
对应官网地址
安装系统编译环境
sudo yum install gcc
查看linux系统版本对应gcc和centos内核版本
验证系统是否安装正确的头文件和开发包
sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r
禁用nouveau
nouveau是第三方开源的Nvidia驱动,默认linux系统都会安装这个驱动,但是这个驱动会与Nvidia官方的驱动产生冲突,所以在安装之前需要禁用nouveau开源驱动。
查看是否已经禁用的命令:
lsmod | grep nouveau
如果没有显示内容,已经禁用,反之需要进行如下操作:
sudo vim /etc/modprobe.d/blacklist.conf
#写入以下内容
blacklist nouveau
options nouveau modeset=0
#保存并退出
:wq
#备份当前的镜像
sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
#建立新的镜像
sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)
#重启
sudo reboot
#最后输入上面的命令验证
lsmod | grep nouveau
下载驱动,我的显卡是p40且tensorflow-gpu是1.14所以对应的驱动为NVIDIA-Linux-x86_64-410.129-diagnostic.run安装最新的驱动也没关系,但需要与tensorflow-gpu的cuda相互对应
安装驱动命令
sudo sh NVIDIA-Linux-x86_64-410.129-diagnostic.run --kernel-source-path=/usr/src/kernels/3.10.0-1062.18.1.el7.x86_64/
后面的命令参数 kernel-source-path一定要加,否则找不到内核路径,最后的路径地址根据个人的内核不同而不同。
安装过程,都选择接受即可,经测试没有太大影响
检验测试
执行nvidia-smi即可,可以看到p40支持最大版本为10.0,如果安装的cuda版本为10.1的话,运行tensorflow就会报错,核节点不能被利用。
查看驱动版本号的命令
cat /proc/driver/nvidia/version
安装坑
到此驱动安装完成。安装过程中会报驱动已经应用,需要卸载驱动,卸载驱动的命令和安装的runfile有关
sudo sh ./NVIDIA-Linux-x86_64-410.129-diagnostic.run --uninstall
期间可能需要重启服务器
reboot
报内核不兼容问题,运行以下命令,更新到最新:
yum install kernel-devel kernel-doc kernel-headers gcc\* glibc\* glibc-\*
安装cuda
一台服务器上可以安装多个版本的cuda,但安装是不能超过驱动支持的cuda上限,例如p40支持cuda10.0,除此以为需要和tensorflow-gpu版本相对应。正好,我的cuda是10.0。
cuda官网地址
下载需要的版本,我还是采用runfile形式,离线下载cuda_10.0.130_410.48_linux.run
运行cuda
sudo sh cuda_10.0.130_410.48_linux.run --kernel-source-path=/usr/src/kernels/3.10.0-1062.18.1.el7.x86_64/
需要添加参数 –kernel-source-path
安装过程选项如下:
#刚开始安装会进入more模式,一直按`空格`即可
#Do you accept the previously read EULA?
#是否接受协议
accept
#Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
#是否安装Nvida驱动,不需要
n
#Install the CUDA 10.0 Toolkit?
y
#Enter Toolkit Location
#输入Toolkit的安装目录
#一般默认即可
#如果更改的话,注意是不可以改成 /usr/local/cuda 的,其余都可以
回车
#Do you want to install a symbolic link at /usr/local/cuda?
#创建一个软连接,我选择是
y
#Install the CUDA 10.0 Samples?
#安装CUDA官方示例包
#这里选择 no,因为安装目录下就有
n
#如果版本不同,提示也可能不同,根据情况输入或选择
查看cuda版本号
cat /usr/local/cuda/version.txt
添加环境变量,否则后面运行tensorflow报链接库找不到异常
libcublas.so.10.0: cannot open shared object file: No such file or directory
...
# 在/home/user/ 有一个.bashrc文件,将相关路径按下面的格式进行修改。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export PATH=$PATH:/usr/local/cuda-10.0/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.0
#在终端运行:
source ~/.bashrc
验证cuda安装正确
nvcc --version
如果显示下面的文字说明安装成功了
如果cuda安装版本不对,卸载
cd /usr/local/cuda-10.0/bin
./uninstall_cuda_10.0.pl
安装cudnn
cudnn版本与cuda版本和tensorflow-gpu对应的版本一致
下载
cudnn下载地址
一定找到tensorflow-gpu对应版本,因为一个cuda版本对应多个cudnn版本,这个坑很严重。
我的版本是cudnn-10.0-linux-x64-v7.4.2.24.tgz
安装cudnn
tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz
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 /usr/local/cuda/lib64/libcudnn*
卸载cudnn
sudo rm /usr/local/cuda/cudnn.h
sudo rm /usr/local/cuda/libcudnn*
注意sudo权限
查看cudnn版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
验证tensorflow-gpu
安装指定版本的tensorflow-gpu
pip install tensorflow-gpu==1.14
验证
python
import tensorflow as tf
sess = tf.Session()
参考
[1]https://www.dazhuanlan.com/2019/09/27/5d8e20af422d2/
[2]https://cloud.tencent.com/developer/article/1555688
[3]https://www.jianshu.com/p/c0a3a7d5719d