Windows下TensorFlow GPU版编译(二)
翻车历史见这里
我胡汉三又回来了!!
编译的版本是Tensorflow 1.14。
为什么不用2?因为据说API大改,一堆坑。
像我这种改别人代码跑跑的肯定用不得
这次遇到的问题:
- 需要按照要求装
MSYS
,并且要使用MSYS2
环境而不是MinGW
环境(Github for Windows提供了MinGW
,但是没有pacman
); - 记得适当修改
bazel
的缓存位置(真香),每次运行命令时使用选项--output_user_root
,避免把缓存写在叠瓦技术(SMR)的机械硬盘上,那速度慢得爽的飞起; LLVM
更新速度过快,而且现在已经更改项目名为llvm-project
(之前是llvm
),尽量使用和tensorflow发布时间相近的LLVM
快照(时间过久会失效,但这不像Github的风格啊= =),在${PROJECT_ROOT}/tensorflow/workspace.bzl
中可以找到并修改引用的LLVM
版本;- 截至Tensorflow 1.14和本文撰写时(2020/2/8),
XLA
和nccl
是不支持Windows平台或者支持的不是很好的(不折腾的话,几乎无法编译成功),不建议启用这两个特性; - (某些特殊版本)需要修改
${PROJECT_ROOT}/.bazelrc
中,把build:cuda
中--define=using_cuda_nvcc=true
注释掉,因为在Windows平台上不能使用--config=nonccl
选项取消使用nccl,会报错; - 有时候会遇到
error C2993: 'Derived': 非类型模板参数 '__formal' 的不合法类型
。在pytorch的issues里找到了类似的问题,说是由于依赖关系和多线程编译竞争带来的问题,设置为单线程编译--jobs 1
可以解决问题(未测试):https://github.com/pytorch/pytorch/issues/25393;
=============================================================
20200216补充
算了,放弃了,一直说是Eigen有问题,好像是关于GPU设备代码上找不到std::conj
定义一类的问题。这几天网上冲浪的时候发现风评CUDA nvcc对于STL的支持很差,可能与这个有关。但是有dalao硬是编译出来了,就很不服气。在个人笔记本上编译特别浪费时间,1-2h起步,而且从来没成功过= =。等这波病情过去,借到好点的CPU资源再说吧。