在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

时间:2022-10-29 18:29:44

声明

什么cuDNN之类的安装,应该是毫无难度的,按照官网的教程来即可,除非。。。像我一样踩了*运。咳咳,这些问题不是本文的关键。

本文的关键是解决pip安装tensorflow gpu版的问题。

安装环境

操作系统:64位的Windows 10 的1709版,

显卡:GTX 1080Ti

Python:3.6.5,64位

准废话

在网上查了很多资料,包括tensorflow官网的安装指南,然而总是报错:

Could not find a version that satisfies the requirement tensorflow-gpu (from versions: )
No matching distribution found for tensorflow-gpu

实在是想不明白,官网明明写着windows版支持python 3.6.x。。。然后我切换到3.5.x,竟然还是不行。。。Anaconda的方法也跪了。。。

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

官网还给出了版本要求不满足的问题的解决方法参考资料:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

然而并没有什么卵用。。。所有的方法都试过了。只是给出的*相关讨论里有种解决方法让我比较在意的:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

官网要求用pip3来安装,但是不记得是在哪里看到的,貌似在没有python 2.x与python 3.x共存的情况下,pip3和pip似乎是一样的。

出于死马当活马医的念头,就试了一下改用pip安装,神了。。。玄学,竟然成功了一半!吐血。。。

再试试后面用在线的whl文件安装方式。。。竟然也是成功了一半。。。

但是呀,但是,这个版本也太低了吧。本着喜新厌旧的心态,我又在*上找到了一个链接:

https://storage.googleapis.com/tensorflow

这个链接貌似有维护着类似这个链接的whl文件,

$ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

打开之后搜了一下,没有发现有对应的windows的gpu版本。。。

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

怒了。。。直接去pypi官方搜tensorflow-gpu的包,竟然有找到。。。谷歌和windows什么怨什么仇。。。

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

快告诉我这是什么?!!!

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

既然是用Windows 10,而且是64位的系统和64位的 Python 3.6.5,那么自然应该选择上图中红色的版本:

tensorflow_gpu-1.8.0-cp36-cp36m-win_amd64.whl

至于为什么选择这个whl包,和它的命名规范有关,请参考:《Python Wheel 包命名规则和 ABI 兼容》https://segmentfault.com/a/1190000007591736 。

好,表演开始:

正片

第一步,安装tensorflow-gpu

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

额。。。tensorboard。。。怎么又是成功了一半。。。

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

这里报错的意思是找不到满足要求的 tensorboard 版本,要求小于1.9.0,大于等于1.8.0版本。

第二步,安装tensorboard

试试pip直接安装:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

果然还是不行。。。

再试试whl大法:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

这是什么?快告诉我!!!tensorboard 1.8.0,这不是有满足要求的包吗?虽然我用的是清华开源镜像,但是经过检查,镜像里也有这个包,怎么就不满足版本要求了?

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

点进去之后选择相应版本的whl,复制其链接:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

pip3 install <复制的链接>

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

哎哟,还是可以的嘛

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

第三步,继续安装tensorflow-gpu

和第一步相同,用whl方式继续安装tensorflow-gpu,注意这一步不要用什么--ignore-installed的参数。。。

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

看来是成了?

注意这里假设你已经把CUDA / cuDNN之类的装好了。

来一小段代码试试:

import tensorflow as tf
print(tf.__version__)
sess = tf.Session()
a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])
c = a * b
print(sess.run(c))
sess.close()

如无问题,应该会打印出类似下面的结果:

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

注意:

  • tf.Session()调用之后可能需要等一段比较长的时间才会有反应。
  • 如果在import tensorflow阶段就报错了,说明还没正常安装或者配置好。

怎么样?

在Windows 10 + Python 3.6.5 中用 pip 安装最新版 TensorFlow v1.8 for GPU

不过这个版本很新,哈哈哈,不知道会不会有什么问题,之前在*上看到的https://storage.googleapis.com/tensorflow 上给出的 windows gpu 版本是1.2版本的(说不定是他们写错了?),可是不知道为什么,后来windows gpu版本在链接中给出的xml文件里完全找不到了,只剩cpu版,可能是有坑还是什么的,使用的时候还请各位要多加小心,虽然我知道你们都是用linux的,哈哈哈,我的linux滚动更新挂了,莓办法。

关于CUDA® Toolkit 9.0 安装的坑

这坑比浪费了我很多时间,如果你用的是 Visual Studio 2017 ,恭喜你,很有可能安装失败,CUDA安装包自带的 Visual Studio Integration 组件每次安装都是失败的,导致整个CUDA安装都被回滚。

官网的论坛上有相关讨论 https://devtalk.nvidia.com/default/topic/1032284/cuda-setup-and-installation/cuda-visual-studio-integration-installation-failed/

只能在安装时选择自定义,然后取消选中Visual Studio Integration 组件。

还有就是如果之前已经装了更加新版的Nvidia显卡驱动或者CUDA或者Nsight时,卸了吧。Nsight也是个坑比,在Win10没法直接卸载,官网的卸载说明也只有一句话,叫你去控制面板自己卸载。。。但是那样是不行的,至少我这有个血淋淋的案例,你只能先卸载VS2017,否则Nsight卸载不掉,甚至你想卸载VS2017都会卡住,不知道有没有更好的方法。如果卸载VS2017卡住了,可以用VS自带的特殊卸载工具 InstallCleanup.exe 来卸载,而且更快。详细说明见:https://docs.microsoft.com/en-us/visualstudio/install/remove-visual-studio

被Nsight折腾惨了的我,此刻唯有这幅图能表达我的心情!

aaarticlea/jpeg;base64,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*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" alt="" />