有关tensorflow-gpu 1.13.1 + cuda 10.0.130 + cudnn 7.6.5 的配置思路
文章目录
- 有关tensorflow-gpu 1.13.1 + cuda 10.0.130 + cudnn 7.6.5 的配置思路
- 吐槽(可跳)
- 方法分享
- 其他思路
- conda环境克隆
- Docker
吐槽(可跳)
又一次被tensorflow-gpu环境折磨了两天后,我发现我这次必须得说点什么;
曾几何时,我也是个刷着各种高赞教程,一步步安装下来但被莫名其妙的问题毒打的骚年;
每次我就都觉得比上次更加熟练,辛辛苦苦配了几小时后,依然被各种毒打;
import tensorflow as tf
tf.test.is_gpu_available()
>>>False
年轻的我不能明白,为什么python安装库要有conda、pip等方法;
不明白为啥一个库有那么多版本,版本太高太低都有问题;
不明白为啥有那么多镜像源,每个好像差不多但又有些区别;
不明白为啥上一次配好的方法,这一次就失灵了(当然可能是我忘了);
相信同样的问题大家也在苦恼,然而上网一查都在说版本不匹配的问题;
tensorflow-gpu、cuda、cudnn的包都不小,折腾来折腾去既浪费时间也消耗情绪;
明明安装的版本已经跟教程一致,但还是一直报错;
删了这个安那个,反复且枯燥的配置过程劝退了不少萌新;
但是!有的时候还是要相信自己。
今天的问题让我发现,gpu连不上不一定是tensorflow-gpu、cuda与cudnn之间的版本不匹配问题;
就算版本匹配了,还是有可能连不上gpu;
今天的教训是:相同版本号的库,在不同的源也是会有区别的!
方法分享
高赞博客里的教程我就不重复了,基础的步骤没太大区别,我来分享一个今天刚验证过的方法;
在此提醒,本方法需要有个事先配好的tensorflow-gpu环境作为比照(在不在本机无所谓,你能操作就行)。
首先简单介绍下我的tensorflow-gpu的环境配置结果,以下配置都在conda建立的虚拟环境中完成:
环境配置 | 版本 | 下载方式 | 来源 |
python | 3.6.12 | conda | conda-forge |
tensorflow-gpu | 1.13.1 | pip | |
cudatoolkit | 10.0.130 | conda | |
cdunn | 7.6.5 | conda |
以下是本文分享的方法:
使用 conda list 查看已安装的python库及其来源
(your env) *:\**\****>conda list
# packages in environment at *:\**\***:
#
# Name Version Build Channel
absl-py 0.11.0 pypi_0 pypi
appdirs 1.4.4 pyh9f0ad1d_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
audioread 2.1.9 py36ha15d459_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
brotlipy 0.7.0 py36hc753bc4_1001 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
ca-certificates 2020.12.5 h5b45459_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
cached-property 1.5.2 pypi_0 pypi
******
使用同样的方式对比之前配好的tensorflow-gpu环境,仔细对比 Channel ,将新的环境需要配的库一次使用对应的 Channel 下载(控诉同版本不同镜像源竟然会出现内容不同的事情,当然也可能是我太菜了没有悟道 )
上述对比完成后,再次测试能否使用gpu:
>>> import tensorflow as tf
>>>> tf.test.is_gpu_available()
2021-01-12 21:03:38.047493: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2021-01-12 21:03:38.216586: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties:
name: GeForce GTX 1060 with Max-Q Design major: 6 minor: 1 memoryClockRate(GHz): 1.3415
pciBusID: 0000:01:00.0
totalMemory: 6.00GiB freeMemory: 4.97GiB
2021-01-12 21:03:38.228614: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2021-01-12 21:03:38.848614: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-01-12 21:03:38.855040: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0
2021-01-12 21:03:38.859936: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0: N
2021-01-12 21:03:38.864840: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/device:GPU:0 with 4716 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 6.1)
True
>>> exit()
没有比看到True更快乐的事了!!!
本次分享的奇淫巧计到此为止,以下是我无可奈何迫不得已的解决方案,各位小伙伴一定要擦亮眼睛认清版本和渠道呀!
其他思路
conda环境克隆
其实若有现成的tensorflow-gpu环境,完全可以采取conda环境克隆的方式。上文中的方法只是我贼不死心的尝试。
假设你有现成的环境A-env,相要克隆出环境B-env:
>>> conda create -n A-env --clone B-env
据说即使环境不在本机,也可以用路径引导(未尝试):
>>> conda create -n A-env --clone Path
Docker
使用Docker仍然是相对方便快捷的环境配置方式,其优点此处不再赘述,简单分享一下使用方式;
- 编写Dockerfile
FROM tensorflow/tensorflow:1.13.1-gpu-py3
RUN apt-get update
- 创建docker镜像
docker build -t your-image-name .
# -t :指定要创建的目标镜像名
# . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
- 创建docker容器并运行
docker run -t -i your-image-name /bin/bash
docker相关的示例到此结束,更多docker的操作在更专业更详细的地方去学吧
欢迎各位大佬交流讨论!