记录fedora32配置cuda,cudnn,keras,theano,tensorflow

服务器双显卡 nvidia 的 卡

 

 

系统是fedora32 workstation  配置镜像源 (清华源会很卡)

 

首先 安装 驱动。

驱动建议安装最新的驱动。因为高驱动版本可以安装低cuda版本,而低驱动版本无法安装高cuda版本。

去nvidia官网下载驱动,xxxx.run文件。安装时需要禁用nouveau,具体操作是在

/etc/modprobe.d/blacklist.conf (如果没有blacklist.conf 新建一个)添加以下内容

blacklist nouveau
options nouveau modeset=0
 
然后令下次启动生效
sudo cp /boot/vmlinuz-5.6.6-300.fc32.x86_64 /boot/vmlinuz-5.6.6-300.fc32.x86_64.bak
sudo cp /boot/initramfs-5.6.6-300.fc32.x86_64.img /boot/initramfs-5.6.6-300.fc32.x86_64.img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
 
 
然后  重启  安装驱动
bash NVIDIA-Linux-x86_64-410.93.run -no-opengl-files

-no-x-check:安装驱动时关闭X服务
-no-nouveau-check:安装驱动时禁用nouveau
-no-opengl-files:只安装驱动文件,不安装OpenGL文件

但是出现了问题

编译出错,说要安装kernel-source或者kernel-devel

dnf install kernel-devel

然后重启编译,提示需要特定的gcc,dnf install gcc-xx.x.x (具体需要的版本号,一般和kernel-devel有关)

然后编译后提示 找不到 nvidia.ko

一般出现这个错误,需要检查1内核版本,2nouveau是否禁用

uname –r 查看内核版本,然后看看安装的kernel-devel是哪个版本,我这里因为kernel-devel是5.8,

而内核是5.6,需要更新内核,dnf update kernel 然后重启。

lsmod | grep nouveau   此命令用于检查是否启动了nouveau

 

但是发现重启后,会自动加载nouveau。还是出现找不到nvidia.ko 

解决办法,将运行级别改为3 。

修改方法为:

1.首先删除已经存在的符号链接

rm /etc/systemd/system/default.target

2.默认级别转换为3(文本模式)
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  或者默认级别转换为5(图形模式)    一般安装完驱动后再改回来用这个。
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

3.重启

reboot 

 

安装nvidia驱动,首先是编译,然后就是安装了,我这里会询问自动更新X的配置文件等等。

驱动装完后,可以用nvidia-smi命令和nvidia-settings命令看看

我的默认安装的日志在 /var/log/nvidia-installer.log  如果有报错可以看看是什么问题

 

安装CUDA,这里不要安装最新的版本,需要查询tensorflow与cuda的关系以及python版本的关系。

https://tensorflow.google.cn/install/source_windows    这里查看linux,macos都在

 

最后折腾了半天,安装的是基于python3.6,cuda 10.0  tensorflow-gpu 1.14 keras 2.2.5

然后就是下载cuda ,安装需要输入accept来同意条款,然后安装选项,只需要cudatookit就可以了,驱动不需要安装,sample和demo都不需要(看需求)。我这里提示了安装不完整,然后提示了驱动要大于多少多少,因为驱动是提前安装的最新的高版本符合所以,就不管他。如果怕安装失败,可以重新安装。

安装方式,直接 bash ./cuda_xxxxxxx.run 即可

然后是安装cudnn,建议去anaconda的镜像源里,pkgs下的main下的linux-64下的(其他系统版本自行选择)

https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/   然后在网页里ctrl+F 搜索 cudnn 寻找对应的cudnn以及对应的cuda。我这里选择的是cudnn7.6.。cudnn一定要下载对应的自己装的cuda版本号。下载tar.bz2。然后解压即可。

然后将安装的cuda的环境变量设置一下,我的在/usr/local/cuda-xxxx

还有/etc/ld.so.conf 的设置 ,以及 tensorflow 需要的  ~/.bashrc 里的 export ld_library_path (对应的是cuda下的的lib64)

cudnn 的安装很简单,将解压的文件夹 放入对应的cuda下就好了。

fedora32带的python是3.8,python3.8无法安装tensorflow1.14,需要安装python3.6

dnf install python36

但是发现 默认的python仍然是python3.8版本。这个需要删除原来的软连接,添加新的软连接即可。

ln –s  xxxxx/bin/python3.6  xxxxxx/bin/python

但是pip仍然是python3.8的

但是又没有找到pip3.6.  解决办法

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   # 下载安装脚本
$ sudo python get-pip.py    # 运行安装脚本
这里注意,第二行的python和要安装的pip是一致的,
sudo python3.6 get-pip.py 生成的pip是python3.6的
sudo python3.8 get-pip.py 生成的pip是python3.8的
pip弄好了之后,一定要看看 pip –V 看看是哪个python版本的pip。然后配置镜像。

关于theano,需要安装libarray,cmake编译。
可以参考
https://www.cnblogs.com/XUEYEYU/p/10914689.html
首先 安装 theano  pip install theano
然后需要cmake  dnf install cmake
需要 cython  dnf install cython

thenao安装文档
http://deeplearning.net/software/libgpuarray/installation.html#download

git clone https://github.com/Theano/libgpuarray.git
cd libgpuarray
mkdir Build
cd Build
# you can pass -DCMAKE_INSTALL_PREFIX=/path/to/somewhere to install to an alternate location
cmake .. -DCMAKE_BUILD_TYPE=Release # or Debug if you are investigating a crash
make
make install
cd ..
# This must be done after libgpuarray is installed as per instructions above.
python setup.py build
python setup.py install
关于使用GPU配置文件设置, 
可以参考https://blog.csdn.net/sinat_31824577/article/details/53140406
~/.theanorc

[global]  
device=cuda
floatX=float32 

[cuda]
root=/usr/local/cuda

[nvcc]
fastmath = True
optimizer_including=cudnn

但是 import theano的时候出错,这时候,(GPU)

应该import pygpu来看看到底怎么回事

1 无法找到 gpuarray 
2 无法找到 xxx.so文件 
这两个问题 考虑 设置环境变量 ~/.bashrc /etc/ld.so.conf  
ldconfig 用来生效新的链接库
例如
在 /etc/ld.so.conf/下面新建一个costum.conf (文件名随意取)
然后 在里面输入so等文件的路径 例如

# libgpuarray
/usr/local/lib  
# cuda
/usr/local/cuda/lib64

然后 root权限 执行 ldconfig 更新

如果提示 说 blas 的问题 ,安装 blas
dnf install blas
然后在 ~/.theanorc 里添加
[blas]
ldflags=-lblas





然后theano可以运行了,用的是c接口 ,
dnf install g++   

检查是否用gpu,可以参考代码
https://blog.csdn.net/lixintong1992/article/details/51141934

 

 
经过测试发现theano做后端显存占用600MB大约10s,
tensorflow 显存直接满,大约4s 而且theano加载模型会比较慢。
建议 watch –n1 nvidia-smi  看一下 显卡的使用情况 和 cpu 的使用情况 ,切换cpu、gpu来对比一下。测试代码可以去keras github example上找一个。
https://github.com/keras-team/keras/tree/master/examples
tensorflow 提示

找不到libcudnn7 文件

 ,需要设置 ~/.bashrc   
加入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$xxxxxx(cuda位置)/lib64
然后 source ~/.bashrc 即可。
 
切换cpugpukeras代码
参考https://www.cnblogs.com/XUEYEYU/p/keras-learning-7.html
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
# The GPU id to use, usually either "0" or "1"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"   #使用gpu
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"  #为使用CPU  
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"  #使用CPU两块GPU  
 
关于keras切换后端 参考
https://www.cnblogs.com/XUEYEYU/p/10913200.html
更改~/.keras/keras.json
 
目前暂未解决的问题   切换tty 会黑屏  只能用图形界面。
 
 
posted @ 2020-09-24 19:43  雪夜羽  阅读(376)  评论(0编辑  收藏  举报