|
Ubuntu18.04上安装CUDA+cuDNN 运行TensorFlow=1.13.1【完美解决】(各种版本对应关系)
CUDA:10.0版本 TensorFlow-GPU只支持到这个版本
cuDNN:7.4.2版本TensorFlow-GPU=1.13.1
Conda=4.7.5
pip3 = 19.1.1
Python = 3.6.8
CUDA下载注意:下载run文件 不要下载db文件 使用run文件安装CUDA可以自己配置是否安装里面的显卡驱动,
一般我们都不会安装,因为里面的驱动版本比较旧,也就是说在安装CUDA之前 我们都早就已经安装了比较新版本
的NVIDIA显卡驱动了!
- Do you accept the previously read EULA?
- accept/decline/quit: accept
- <font color="#ff0000"><b>Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
- (y)es/(n)o/(q)uit: n</b></font>
- Install the CUDA 10.0 Toolkit?
- (y)es/(n)o/(q)uit: y
- Enter Toolkit Location
- [ default is /usr/local/cuda-10.0 ]:
- Do you want to install a symbolic link at /usr/local/cuda?
- (y)es/(n)o/(q)uit: y
- Install the CUDA 10.0 Samples?
- (y)es/(n)o/(q)uit: y
- Enter CUDA Samples Location
- [ default is /home/dfy888 ]:
- Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
- Missing recommended library: libGLU.so
- Missing recommended library: libX11.so
- Missing recommended library: libXi.so
- Missing recommended library: libXmu.so
- Missing recommended library: libGL.so
- Installing the CUDA Samples in /home/dfy888 ...
- Copying samples to /home/dfy888/NVIDIA_CUDA-10.0_Samples now...
- Finished copying samples.
- ===========
- = Summary =
- ===========
- Driver: Not Selected
- Toolkit: Installed in /usr/local/cuda-10.0
- Samples: Installed in /home/dfy888, but missing recommended libraries
- Please make sure that
- - PATH includes /usr/local/cuda-10.0/bin
- - LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
- <font color="#ff0000"><b>To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin</b></font>
- Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.
- ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
- To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
- sudo <CudaInstaller>.run -silent -driver
- Logfile is /tmp/cuda_install_2261.log
复制代码
验证cuda是否安装成功:1、cd /usr/local/cuda/samples/1_Utilities/deviceQuery
2、编译 sudo make
3、执行 ./deviceQuery
4、执行结果如下图 则success!
添加CUDA到环境变量:
1、sudo vim ~/.bashrc 进入编辑插入状态
2、在最后添加下面三行(下面有图示) :wq保存一下
- export CUDA_HOME=/usr/local/cuda-10.0
- export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
- export PATH=${CUDA_HOME}/bin:${PATH}
复制代码
3、source ~/.bashrc 使当前终端生效或新开一个终端也行 执行nvcc --version查看CUDA版本(如下图所示)
先安装CUDA后安装cuDNN:直接安装deb文件 sudo dpkg -i xxx.deb 即可
之后查看cuDNN的版本(下面有图示):
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
or
cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2
接着验证cuDNN,运行sample例子:
1、cd /usr/src/cudnn_samples_v7/ cd mnistCUDNN/
2、sudo make clean sudo make
3、./mnistCUDNN 查看结果(下面有图有真相)
下面开始安装TensorFlow-GPU版本了:
我当时想都没想就直接在conda虚拟环境中用pip3安装:
pip3 install tensorflow-gpu==1.13.1
如果报权限错误(如后面图)则执行:pip3 install tensorflow-gpu==1.13.1 --user
满心的开心以为这样就可以成功了,速度的打开了PyCharm 创建项目 并关联conda env
执行测试代码:
- # -*- coding: utf-8 -*-
- __author__ = u'东方耀 微信:dfy_88888'
- __date__ = '2019/7/19 下午19:31'
- __product__ = 'PyCharm'
- __filename__ = '111'
- import tensorflow as tf
- import sys
- print(sys.version)
- print(tf.version)
复制代码
然而报错了:ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory
我用命令在系统中也查到了这个动态库啊(看后面的截图)
- find /usr -name libcublas.so*
复制代码
之后就是疯狂百度Google了,终于看到一个台湾的朋友说了一句关键的话顿时让我豁然开朗:tensorflow-gpu pip不能支持cuda 10.0,需要自行編譯(这是错的,继续看后面)
原来是需要从源代码编译TensorFlow,支持CUDA 10.0
注意:卸载pip3 install 的TensorFlow1.13.1需要卸载干净,下面的命令:
- pip3 uninstall tensorflow-gpu
- pip3 uninstall tensorflow-estimator
- pip3 uninstall tensorboard
- pip3 uninstall Keras-Applications
- pip3 uninstall Keras-Preprocessing
复制代码
如果从源码编译安装又是一系列的坑啊 我想直接用conda安装应该可以
conda install tensorflow-gpu==1.13.2 失败。。。
conda install tensorflow-gpu==1.13.1 之后运行测试代码成功啦!没有报错
最后激动人心的时刻来了:我打开了一个之前的深度学习项目(中文文本分类)开始用GPU训练,可以看到成功的使用了显卡RTX 2070 Super(下面有图展示)
Computer Capability = 7.5 开始更强算力之旅!高兴 嘻嘻!
通过以上的过程,我大胆猜测:如果通过conda来安装TensorFlow-GPU版 是否不需要
自己单独去安装CUDA与cuDNN(有待验证,大家如果验证可以 请告诉我一下哦 东方微信:dfy_88888)
尽量还是少用conda install 安装需要的包,因为conda会自动安装所需要的依赖,并不会使用我们之前手动安装
的版本,而且很容易版本冲突,建议最好用pip3来安装 一个一个包安装 这样不容易出错
可以用conda来创建虚拟环境(同时安装好python),之后全部用虚拟环境中的pip工具安装其他包!
刚开始pip版本过低 会报错:No module named 'pip._internal' 记得首先用get-pip.py文件升级(查看附件下载)
之后,我们用pip3安装的包 在conda list中可以看到了,表明是用的虚拟环境中pip3工具 而不是系统的pip3
1、conda create -n py3_tf_gpu python=3.6.8
2、conda activate py3_tf_gpu conda list 查看pip版本
3、用pip --version pip3 --version验证是否报错 以及位置是否在虚拟环境内部
4、pip 19.1.1 from /home/dfy888/miniconda3/envs/py3_tf_gpu/lib/python3.6/site-packages/pip (python 3.6)
5、如果报错 执行:python3 get-pip.py 升级6、再用pip --version pip3 --version 查看是否升级 同时根据路径只使用虚拟环境内的pip或pip3命令
通过 pip list 或 pip3 list也可以看出不同
7、conda list 查看pip版本 同时发现 Build=pypi_0 Channel=pypi
8、pip3 install 或 pip install 各种需要的包(一定是用虚拟环境内的pip工具)
为了避免干扰,删掉系统的pip里面的所有包
1、退出虚拟环境 执行 pip3 --version pip --version pip3 list
2、注意位置:pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
3、pip3 freeze > 111.txt 将系统里的pip安装的所有包保存到文件111.txt
4、pip3 uninstall -r 111.txt 全部卸载
5、再次pip3 uninstall -r 111.txt 提示:Cannot uninstall requirement 即可
6、到此为止 已经把我们自己安装到系统pip的包删掉了
之后在conda虚拟环境中pip3安装一系列的包,如果有很多需要依赖的包,则会提示,仍是安装成功的,再把依赖的包都安装好即可!
还是通过pip3 install tensorflow-gpu==1.13.1直接就安装成功 不需要加--user解决权限报错问题
但是在pycharm打开使用GPU的例子,还是报错:
ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory
- import os
- import sys
- import tensorflow as tf
- import matplotlib.pyplot as plt
- print(sys.version)
- print(plt.inferno())
- print('Hello !')
- print(tf.__version__)
- print(tf.reduce_sum(tf.random.normal([1000, 1000])))
- with tf.device('/gpu:0'):
- a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
- b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
- c = tf.matmul(a, b)
- with tf.Session() as sess:
- print(sess.run(c))
复制代码- (py3_tf_gpu) dfy888@Dfy888-Ubuntu:~/py3_tensorflow_works/dfy_demo$ python3 111.py
复制代码
但是如果通过终端Terminal运行则没有任何问题!成功的使用了GPU运算- (py3_tf_gpu) dfy888@Dfy888-Ubuntu:~$ find /usr -name libcublas.so*
- /usr/local/cuda-10.0/lib64/libcublas.so
- /usr/local/cuda-10.0/lib64/stubs/libcublas.so
- /usr/local/cuda-10.0/lib64/libcublas.so.10.0
- /usr/local/cuda-10.0/lib64/libcublas.so.10.0.130
- /usr/local/cuda-10.0/doc/man/man7/libcublas.so.7
- /usr/share/man/man7/libcublas.so.7
复制代码
问题可能出在pycharm无法与系统的cuda cudnn进行关联导致!
同时直接用Pycharm里的终端也是可以的
猛然想到:前面设置CUDA的环境变量,就是修改~/.bashrc文件 只是对终端有效的 而对Pycharm无效
果不其然 发现pycharm里也有设置环境变量的地方!
在菜单Run->Edit configurations 中,手动设置Environment variables,(与.bashrc文件一致)
添加LD_LIBRARY_PATH的内容: (后面有图) LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64
重启pycharm即可解决问题
前面直接用conda install tensorflow-gpu==1.13.1没有这个问题的原因是:conda自动给我们安装了tensorflow-gpu
的一系列依赖,包括CUDA与cuDNN,所以我们前面运行成功并没有使用手动安装的那个版本,而是conda自动安装的
当然也就不会出现pycharm找不到cuda的so文件 因为conda都安装在虚拟环境中了
经验:以后通过Pycharm运行报错后 再用Terminal运行一次 看是否报错相同?还有就是:网上错误的太多 尽信书不如无书!终于明白了
训练超级大的模型可能会报错:Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
网上说是tf cuda cudnn版本的匹配问题 纯属扯淡!其实是GPU显存不够 或 分配不合理导致!
解决办法:手动设置分配给GPU的显存
- gpu_options = tf.GPUOptions()
- gpu_options.per_process_gpu_memory_fraction = 0.8
- gpu_options.allow_growth = False
- config_proto = tf.ConfigProto(allow_soft_placement=True,
- log_device_placement=False,
- gpu_options=gpu_options)
- with tf.Session(config=config_proto) as sess:
复制代码
|
-
tensorflow linux cuda cudnn.png
(124.5 KB, 下载次数: 146)
-
cudnn7.4.2.png
(86.35 KB, 下载次数: 147)
-
cuda10.0.png
(121.36 KB, 下载次数: 151)
-
nvidia-smi.png
(70.04 KB, 下载次数: 147)
-
cuda_success.png
(200.81 KB, 下载次数: 152)
-
cuda bashrc.png
(30.7 KB, 下载次数: 143)
-
cuda环境变量.png
(65.66 KB, 下载次数: 146)
-
cudnn7.4.2 安装.png
(196.09 KB, 下载次数: 146)
-
查看cudnn版本.png
(57.84 KB, 下载次数: 140)
-
运行cudnn的例子.png
(160.9 KB, 下载次数: 151)
-
运行cudnn的例子 2.png
(119.86 KB, 下载次数: 143)
-
install tensorflow==1.13.1.png
(64.26 KB, 下载次数: 144)
-
install tensorflow==1.13.1 error.png
(55.15 KB, 下载次数: 147)
-
ImportError:libcublas.so.10.0.png
(124.05 KB, 下载次数: 143)
-
可以找到libcublas.so.10.0啊.png
(25.7 KB, 下载次数: 145)
-
conda install tf.png
(93.48 KB, 下载次数: 143)
-
conda install tf=1.13.1.png
(79.94 KB, 下载次数: 153)
-
conda install tf=1.13.1 success.png
(147.19 KB, 下载次数: 153)
-
没有报错了.png
(57.35 KB, 下载次数: 152)
-
final success.png
(222.44 KB, 下载次数: 147)
-
conda list无法查看Pip安装的包.png
(197.85 KB, 下载次数: 150)
-
get-pip升级conda环境中的pip.png
(205.77 KB, 下载次数: 147)
-
虚拟环境中pip install 就比较干净了.png
(166.99 KB, 下载次数: 144)
-
pycharm环境变量添加.png
(42.36 KB, 下载次数: 151)
-
手动设置分配显存.png
(152.62 KB, 下载次数: 147)
-
前向计算都报错 无语.png
(203.02 KB, 下载次数: 142)
-
终于有输出了.png
(242.13 KB, 下载次数: 139)
-
终于有输出了2.png
(361.32 KB, 下载次数: 145)
-
-
get-pip.py
1.63 MB, 下载次数: 322
|