记录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 会黑屏 只能用图形界面。