官方教程说得基本差不多了,然而在此基础上编译还是会出问题,因此做一些补充。
环境准备
1. Python & Pip
首先是Python需要安装一些包,除了官方说的six、numpy、wheel、keras_applications和keras_preprocessing,还需要setuptools(虽然这是个基础包,但是我习惯用虚拟环境了,忘了装……)。因此安装命令如下:
pip install six numpy wheel setuptools
pip install keras_applications==1.0.6 --no-deps
pip install keras_preprocessing==1.0.5 --no-deps
注意,Python路径中不能出现空格,即Windows下默认安装路径C:\Program Files\Python38会在编译时报错,因此如果装到了这个路径,需要在一个没有空格的目录下创建一个链接(不是快捷方式),用mklink命令。
2. CUDA
这里选的CUDA 10.2,CUDA官网下载安装,没什么好说的。
不过需要注意,TensorFlow 2.2配置时能正确找到CUDA 10.2的路径,编译时却只会去找CUDA_PATH_V10_1这个环境变量,需要手动在系统环境变量里指定这个到CUDA 10.2的路径(跟CUDA自己创建的CUDA_PATH_V10_2一致即可)。
3.Bazel
然后是Bazel,bazel很简单,就一个exe,需要设置环境变量给到Path下,我偷懒直接放到CUDA的bin目录下。
4. MSYS2
再安装MSYS2,同样需要给msys64\usr\bin目录设置环境变量。
装好后再安装一些包,用的是pacman,由于默认源极慢极慢,所以建议国内换清华源。
进到msys64\etc\pacman.d目录下,修改三个mirrolist,分别在各自所有Server行前加一行:
mirrorlist.msys:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
mirrorlist.mingw32:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
mirrorlist.mingw64:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
官方教程少提了一个zip包,因此安装命令如下:
pacman -S git patch unzip zip
5. Visual Studio 2019
然后是VS,下载VS安装器,必须装到C盘默认路径,否则即使设置了BAZEL_VC等环境变量,Bazel也会找不到编译器(弱智一样的bug),如果非VS用户,只需安装除必选组件外的MSVC v142 - VS 2019 C++ x64/x86生成工具(随便一个,我选的最新版本)和Windows 10 SDK(同样随便,我选的最新的)。
编译
配置编译
下载TensorFlow 2.2源码,进入解压后的根目录,执行
python ./configure.py
会出来一个个选项,先设置Python路径,如果上面创建了链接,这里就需要指定,pip路径会根据Python路径选,一般默认即可。
然后是是否启用ROCm,默认否(这是A卡对标N卡CUDA的框架,希望未来能有所发展,别再跟OpenCL一样挂了)。
然后是否启用CUDA,选择启用。
接下来是配置CUDA兼容性,默认即可(也不要修改,多个版本无法识别,后续会说怎么改)。
再就是指定优化架构,高版本的CPU可以修改为/arch:AVX2。
重写强内联就默认启用即可。
这时会在根目录下生成一个.tf_configure.bazelrc文件,存储刚写的配置,打开它,会有一行配置CUDA兼容性的:
build --action_env TF_CUDA_COMPUTE_CAPABILITIES="3.5,7.0"
TensorFlow 2.2最低适配版本是3.5,所以为了提高兼容性,我把3.5以上的全部囊括:
build --action_env TF_CUDA_COMPUTE_CAPABILITIES="3.5,3.7,5.0,5.2,6.0,6.1,7.0,7.5"
另外,不要修改默认的C++ 14编译标准,修改为C++ 17会报错。
启动编译
构建pip包:
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package
bazel-bin\tensorflow\tools\pip_package\build_pip_package.exe tfpy
第一行编译,耗时极长。
第二行构建包,会在源码根目录下创建tfpy文件夹,成功后whl包就会放到这个文件夹下,文件夹名字随意。
构建C库:
bazel build --config=opt --config=cuda //tensorflow/tools/lib_package:libtensorflow
会在源码根目录\bazel-bin\tensorflow\tools\lib_package下创建libtensorflow.tar.gz压缩包,包内就是TensorFlow的头文件和dll动态库。
结果获取
pip安装包:tensorflow-2.2.0-cp38-cp38-win_amd64.whl(466.62MB)
pip安装包流量管家版:tensorflow-2.2.0-cp38-cp38-win_amd64.rar(153.37MB,使用方法见压缩包注释)
C库:libtensorflow-2.2.0.rar(110.90MB)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)