safari windows版本_可能是最全的 Windows 下编译 Tensorflow 2.0 踩坑记录

特别感谢我司爱折腾小伙百忙之中抽空整理投稿!

如果能用官方预编译的版本,还是不要折腾为好,不过万一碰到 CPU 不支持 AVX 指令集之类的情况,那就只能折腾了。

  1. 按照官方说明,安装好 msys64,bazel(<=0.23.0),从 github clone 好 tensorflow 源码。

2. 将 c:msys64usrbin 和 bazel.exe 所在加到 PATH 里。 安装 cudatoolkit 10,它会自动加 PATH,下载 cudnn 解压缩后放到 cudatoolkit 安装目录里。注意,cudatookit 10 要求 Geforce Driver 版本 411 以上,但是安装时并不会抱怨。

3. 然后 python configure.py 就好,注意 CUDA 支持默认是关闭的,输个y,脚本应该能找到正确的CUDA版本和安装位置,如果最后安装的不是10.0,手工指定一下。当然,建议 conda create -n tf2 开个新环境,以免搞乱工作环境。

如果很不幸,CPU 不支持默认打开的 AVX 指令集,default opt 改成 /arch:SSE2 或者更低,这个参数只是覆盖默认值其实没用,cl 认为是个 CPU 都支持的东东就不要放参数里了,非要放它会直接忽略之。如果 CPU 好,可以有 /arch:AVX2。

4. 然后就可以调用

bazel build -c opt --config=opt --config=v2 --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

如果很快跳出来:

Cuda Configuration Error: None of the libraries match their SONAME: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64/cudart.lib

这个比较坑,Windows 环境应该找不到 objdump,但是万一装了 Haskell Platform 之类的,在 PATH 里有这条命令,那么 dump 出来的信息里是不会有 SONAME 的,把这个临时从 PATH 里干掉就好。当然也可以手工改一下 tensorflow/third_party/gpus/cuda_configure.bzl ,目前在 733 行左右,如果变了就找找 objdump 字样。给 tensorflow 提 PR 的时候发现,几天前 main stream 上已经修掉了,但是 r2.0 上没有,都已经折腾了,就发过去吧,至少多了一点儿 Windows 上为什么有 objdump 的背景吧……

avoid SONAME check using objdump on Windows by pinxue · Pull Request #26710 · tensorflow/tensorflow​github.com
928cb6e51cc5657ba1c1618f3ce2dcea.png

哦,对了,bazel 会在用户主目录里存放编译结果,当前目录下的只是个链接,保持 C: 盘有足够的12G以上磁盘空间,SSD 的话多多留点儿以免影响I/O性能。

编译这个东东非常费内存,如果只有 8GB,那应该经常会看到编译器抱怨堆空间不足。16GB 以上就没问题了。

5. 编译成功的话,接下来就可以打包、安装了:

x64_windows-opt

6、安装成功的后,就可以验证是否可用了

python
>>> import tensorflow as tf

如果这时看到:

Traceback (most recent call last): File "E:githubtensorflowtensorflowpythonplatformself_check.py", line 25, in <module> from tensorflow.python.platform import build_info
ImportError: cannot import name 'build_info' from 'tensorflow.python.platform' (E:githubtensorflowtensorflowpythonplatform__init__.py)

别惊慌,这是你还在在 tensorflow 源码目录里的副作用,cd 到没有 tensorflow 子目录的地方去再试就好了。

7、干这一行的,总是要搞个 Jupyter Notebook 耍才方便的,然后你可能会看到:

[E 00:43:10.163 NotebookApp] Uncaught exception GET /notebooks/ai/tf2.0/%E6%9C%AA%E5%91%BD%E5%90%8D.ipynb?kernel_name=python3 (::1)
    HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/notebooks/ai/tf2.0/%E6%9C%AA%E5%91%BD%E5%90%8D.ipynb?kernel_name=python3', version='HTTP/1.1', remote_ip='::1')
    Traceback (most recent call last):
      ……
      …….condaenvstf2libsite-packagesnbconvertpostprocessorsserve.py", line 21, in ProxyHandler
        @web.asynchronous
    AttributeError: module 'tornado.web' has no attribute 'asynchronous'
[E 00:43:10.175 NotebookApp] {
      "Referer": "http://localhost:8888/tree/ai/tf2.0",
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
      "Accept-Language": "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3",
      "Upgrade-Insecure-Requests": "1",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763",
      "Accept-Encoding": "gzip, deflate",
      "Host": "localhost:8888",
      "Connection": "Keep-Alive",
      "Cookie": "..."
    }

别慌,这是安装 Jupyter Notebook 时带进来的 Python web 框架 Tornado 版本太新了,从 6 降到 5 就好了:

conda install tornado==5.1.1

或者

conda install nbconvert=5.4.1 

升级一下 nbconvert 也成。 混用 conda 和 pip 就会有这种麻烦啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值