centos7.5 安装anaconda和tensorflow-gpu记录及报错解决

第一次在Linux下装GPU版本的TensorFlow,踩坑,折腾了2天、记录一下。

一、linux 下安装anaconda3
1、wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh 对应(python 3.7.x)
2、安装依赖:yum install -y bzip2
3、 bash Anaconda3-5.3.1-Linux-x86_64.sh
在安装过程中,基本上不断按回车或者yes默认就行了。
最后一步询问是否安装vscode,输入no,毕竟在服务器里面都是用vim编辑器的,没必要多装一个。
如果你想装Python3.6.x或者其他版本的,去 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive下找对应的版本,把路径改一下就好了。
3、配置环境变量
安装完成后,我们需要对环境变量进行添加,方便我们启动。
修改profile文件

vim /etc/profile

在文件的末尾加上下述代码:
#Anaconda
export PATH=/root/anaconda3/bin:$PATH # 这里需要注意修改路径,就是上面安装时候提示的安装路径
最后重新载入配置文件
输入source /etc/profile
这样,配置完毕环境变量。
最好重启终端一下
打开终端(Terminal),输入python,如果显示了正确的Python版本(我这里是3.7.0)就可以了。

二、安装指定版本的GPU 版TensorFlow

1、在使用conda时,请配置一下conda的镜像,建议清华镜像.(改源)这样会比较快
依次执行以下3条命令。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

设置完成后,安装时有几个包还是多次中断,最终解决方法:cd /root
ls -a显示所有文件包括隐藏文件,找到.condarc,打开,删除 - default,将https换成http。

2、创建虚拟环境
conda create -n xxx python=3.7 #xxx是你要创建的虚拟环境的名字,自定,随意
3、启动刚创建的虚拟环境

source activate xxx

#如果要关闭运行环境,执行

source deactivate xxx

4、安装指定版本的GPU 版TensorFlow

conda install tensorflow-gpu==1.12

TensorFlow安装完毕,这时候已经自动安装好了CUDA(cudatoolkit 9.2) CUdnn(7.6.0 )等包
但是/usr/local下没有CUDA包,import tensorflow as tf时报错:大意是找不到libcuda.so.1
这时候需要手动安装CUDA

1、环境准备
1.1、检查是否安装了GPU

# lspci | grep -i nvidia

报错:-bash: lspci: 未找到命令
解决:yum install pciutils
再次执行lspci | grep -i nvidia就好了
03:00.0 VGA compatible controller: NVIDIA Corporationxxxxxxx (rev a1)
03:00.1 Audio device: NVIDIA Corporation xxxxxxx HDMI Audio Controller (rev a1)
1.2、安装gcc编译器和kernel-devel

# yum install gcc
# yum install kernel-devel

1.3、安装CUDA9.2
1.3.1官网下载 cuda_9.2.148_396.37_linux.run
下载网站
http://developer.nvidia.com/cuda-downloads
Legacy Releases --> CUDA Toolkit 9.2 --> linux --> x86_64 --> CentOS --> 7 --> runfile --> Base Installer

1.3.2、安装

sh cuda_9.2.148_396.37_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.37?
(y)es/(n)o/(q)uit: y

Do you want to install the OpenGL libraries?
(y)es/(n)o/(q)uit [ default is yes ]: y

Do you want to run nvidia-xconfig?
This will update the system X configuration file so that the NVIDIA X driver
is used. The pre-existing X configuration file will be backed up.
This option should not be used on systems that require a custom
X configuration, such as systems with multiple GPU vendors.
(y)es/(n)o/(q)uit [ default is no ]:

Install the CUDA 9.2 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
[ default is /usr/local/cuda-9.2 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

Install the CUDA 9.2 Samples?
(y)es/(n)o/(q)uit: y

Enter CUDA Samples Location
[ default is /root ]:

1.4配置环境变量并使之生效

vim /etc/profile
export PATH=$PATH:/usr/local/cuda-9.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.2/lib64

这时候
第一次报错,大意是需要禁用nouveau
Centos(7.5)禁用nouveau驱动
PS:使用root权限执行

vim /etc/modprobe.d/dccp-blacklist.conf

#添加下列两行

blacklist nouveau
options nouveau modeset=0

#重新生成 kernel initramfs

dracut --force

#重启
reboot
#重启后验证驱动是否被禁用

lsmod | grep nouveau

如果无结果显示则表明成功禁用。
禁用完毕再次安装CUDA

第二次报错
The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed and set up correctly.
发现内核版本和kernel-devel版本不一致
方法1、下载kernel-devel的安装包,保持和内核版本的版本一样
yum 安装对应内核版本的kernel-devel
1、uname -r 查看内核版本
得到 3.10.0-862.3.2.el7.x86_64
2、查看已安装kernel-devel
uname -a ; rpm -qa kernel\* | sort
得到
kernel-devel-3.10.0-957.27.2.el7.x86_64
很明显内核版本和kernel-devel版本不一致
3、下载对应版本

sudo yum install "kernel-devel-uname-r == $(uname -r)"

结果找不到对应的包
提示:没有可用软件包 kernel-devel-uname-r == 3.10.0-862.el7.x86_64。
在网站也没有找到
http://www.rpmfind.net/linux/rpm2html/search.php?query=kernel-devel
这里不适合还是用方法2

方法2、升级内核版本:

sudo yum list kernel

sudo yum update -y kernel

想将系统运行在新版本的kernel上,则需要重新启动操作系统。

reboot

更新
上次这个方法好用,但这次更新后
kernel-3.10.0-1062.1.2.el7.x86_64
kernel-3.10.0-957.el7.x86_64
kernel-devel-3.10.0-1062.1.2.el7.x86_64
kernel-headers-3.10.0-1062.1.2.el7.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
重新安装CUDA仍然报错,找不到kernel,
将更改后的默认启动内核kernel-3.10.0-1062.1.2.el7.x86_64改回原来的kernel-3.10.0-957.el7.x86_64方法:
1、查看一共几种内核
cat /boot/grub2/grub.cfg |grep menuentry


if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (3.10.0-1062.1.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.1.2.el7.x86_64-advanced-7c47a759-8910-4e33-bbf4-9dec31bd65c0' {
menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-7c47a759-8910-4e33-bbf4-9dec31bd65c0' {
menuentry 'CentOS Linux (0-rescue-e6f6275e0e584eb3bdf79b6f3d7b38fe) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-e6f6275e0e584eb3bdf79b6f3d7b38fe-advanced-7c47a759-8910-4e33-bbf4-9dec31bd65c0' {

2、vim /etc/default/grub

在里面设置GRUB_DEFAULT=‘CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)'
3、更新
在centos7下的update-grub命令是:grub2-mkconfig -o /boot/grub2/grub.cfg 这个命令。

再重新安装cuda,还是报错kernel source问题
终极解决方法:

sudo yum install epel-release
yum install --enablerepo=epel dkms

再次安装CUDA9.2就成功了。
至此,import tensorflow as tf 已经正常了,但是执行测试程序没有使用GPU,使用的是Cpu进行计算的。
且报错:failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在命令行下输入

nvidia-smi

提示:no matching xxxxx 忘记了

折腾了一天最后发现是NVIDIA驱动问题,应该是没装上
解决方法:安装与自己显卡对应版本的NVIDIA驱动

CentOS 7 安装 NVIDIA 显卡驱动
1、首先下载驱动
访问其官网:https://www.nvidia.cn/Download/index.aspx?lang=cn
根据你自己的显卡型号,选择相应的显卡驱动(官网上有个手动填写显卡对应信息,填写完毕会推荐最匹配的驱动版本),下载的是.run 的文件。
或者使用命令检查
安装NVIDIA驱动检测:sudo yum install nvidia-detect
查看显卡驱动型号:nvidia-detect -v
这样会打印出当前硬件显卡匹配的驱动型号,再去nvidia官网下载就好。
2、安装编译环境:gcc、kernel-devel、kernel-headers (已经安装了,不用在装)
3、 禁用nouveau驱动(前面已经做了)
4、重新建立initramfs image文件

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)

5、进行安装

./NVIDIA-Linux-x86_64-430.50.run NVIDIA-Linux-x86_64-430.50.run --kernel-source-path=/usr/src/kernels/3.10.0-1062.1.2.el7.x86_64

剩下就是安装过程,根据提示自己选择,基本默认就可以,安装过程大概几分钟就结束了。

6、测试显卡安装情况

nvidia-smi

显示了显卡的信息,安装完毕。

执行测试代码,打印了使用GPU device 0,至此,环境安装完毕,一把辛酸泪。。。。。

参考了好几篇文章,有的不慎关闭找不到了,现把还知道的原文链接给出,感谢博主。

总结:装环境如果一切顺利是真的太幸运,否则踩坑到哭,问题总能解决的,加油。。。。。。

参考:

https://blog.csdn.net/ychgyyn/article/details/82258136
https://www.iyunv.com/blog-285515-8741.html
https://blog.csdn.net/qq805934132/article/details/82909842
https://blog.csdn.net/breeze915/article/details/79243673
https://www.jb51.net/os/RedHat/540187.html
https://blog.csdn.net/xueshengke/article/details/78134991

你可能感兴趣的:(TensorFlow)