Windows环境TensorFlow源码C++编译———实战与避坑记
(1)
TensorFlow训练模型时,基本都是在Python环境下完成。⽣成环境中通常会使⽤其他语⾔开发应⽤程序,来完成对训练好的模型的调⽤。这时,就需要⽤到tensorflow的动态库⽂件。Tensorflow的官⽅并没有提供编译好的动态库⽂件,只是给出了如何进⾏编译的⽅法指导。实际编译过程中,会遇到很多问题,作者在参考其他编译教程,结合⾃⼰的实战经验,总结撰写本教程,希望能为需要的同仁提供些许帮助。
主要参考:
1. Windows 编译环境配置
安装以下构建⼯具以配置 Windows 编译环境。
1.1.      安装 Python 和 TensorFlow 软件包依赖项
1.1.1.        安装Python
安装(以上的版本)。选择 pip 作为可选功能,并将其添加到%PATH%环境变量中。
注意:python的安装路径不能有空格,否则在bazel build时会报如下错误:
python安装在没有空格路径下(⽐如: C:\Python\Python38)并将安装路径配置到系统环境变量path中。
1.1.
2.        安装Tensorflow pip软件依赖包
安装 TensorFlow pip 软件包依赖项:
pip3 install six numpy wheel
pip3 install keras_applications==1.0.6 --no-deps
pip3 install keras_preprocessing==1.0.5 --no-deps
上图说明six,numpy,wheel已经安装过了。可通过pip uninstall先卸载已经安装的软件,并按照要求重新安装指定版本软件。
pip3 install six~=1.15.0 numpy~=1.19.2 wheel~=0.35
pip3 install keras_applications~=1.0.8 --no-deps
pip3 install keras_preprocessing~=1.1.2 --no-deps
说明:通过pip3 install keras_applications安装的版本最新只有1.0.8。
)的 REQUIRED_PACKAGES 下。
本教程针对TensorFlow2.5版本进⾏编译,请参考:
REQUIRED_PACKAGES = [
# NOTE:As numpy has releases that break semver guaranteesand several other
# deps depend on numpy without an upper bound, we must install numpy before
# everything else.
'numpy ~= 1.19.2',
# Install other dependencies
'absl-py ~= 0.10',
'astunparse ~= 1.6.3',
'flatbuffers ~= 1.12.0',
'google_pasta ~= 0.2',
'h5py ~= 3.1.0',
'keras_preprocessing ~= 1.1.2',
'opt_einsum ~= 3.3.0',
'protobuf >= 3.9.2',
'six ~= 1.15.0',
'termcolor ~= 1.1.0',
'typing_extensions ~= 3.7.4',
'wheel ~= 0.35',
'wrapt ~= 1.12.1',
# These packages need to be pinned exactly as newer versions are        # incompatible with the rest of the ecosystem
'gast == 0.4.0',
# TensorFlow ecosystem packages that TF exposes API for
# These need to be in sync with the existing TF version
# They are updated during the release process
# When updating these, please also update the nightly versions below        'tensorboard ~= 2.5',
'tensorflow-estimator >= 2.5.0 , < 2.6.0',
# TODO(scottzhu) : OSS keras hasn't been formally released yet.
# Use keras - nightly at the moment.
'keras-nightly ~= 2.5.0.dev',
]
1.1.3.        【补充知识】版本号说明
版本号分为major,minor,patch。分别对应第⼀,⼆,三位。
1.2.0
major.minor.patch
~的意思是:
如果有minor,则patch可以变,minor不能变。
如果没有minor,则minor,patch可变,major不能变。
例如:
~1.2.0  ===>  1.2.0 <= x < 1.3.0
~1.3    ===>  1.3.0 <= x < 1.4.0
~
2      ===>    2.0.0 <= x < 3.0.0
^ 表⽰左边第⼀位⾮0的版本号不变,其他可变。
例⼦:
major
major⾮0    ^1.2.2      ===>  1.2.2 <= x < 2.0.0
minor⾮0    ^0.1.2      ===>  0.1.2 <= x < 0.2.0
patch⾮0    ^0.0.1      ===>  0.0.1 <= x < 0.0.2
但是,如果没有patch,patch会默认是0,并且可变,即使major,min都是0。^0.0 := >=0.0.0 <0.1.0
如果minor,patch都没有,也会默认为0,并且可变,即使major也为0.
^1.x    ===>  1.0.0 <= x < 2.0.0
^0.x    ===>  0.0.0 <= x < 1.0.0
^0.0 等价于 >=0.0.0 <0.1.0
1.1.4.        【补充知识】pip常⽤命令
pip3 list 查看已经安装的包
pip3 install you-get //安装或者查看you-get的安装路径
1.1.4.1.      pip命令集合
⾸先,我们进⼊cmd命令控制界⾯,输⼊pip,查看下pip的命令集合。
接下来我们来整理⼀下pip命令
commands原指令解释翻译
install Install package安装python包download download package下载python包uninstall Uninstall package卸载python包
freeze Output installed package in
requirements format
按照⼀定格式输出安装好
的包
list List installed packages列出安装了的python包
show Show information about installed
packages
详细展⽰安装了的python
包的信息tensorflow版本选择
check Verify installed packages have
compatible dependencies
检验安装了的python包有
相互依赖性
search Search PyPI for packages查询python包的镜像依赖
(PyPI)
wheel Builds wheels from your
requirements建⽴你的需求的安装路径
hash Compute hashes of package
archives  计算包装档案的关键字
completion    A helper command used for
command completion
⼀个帮助指令⽤作指令完
help    Show help for commands显⽰该项指令如何使⽤我们接下来详细展⽰⼏个常⽤的pip command使⽤⽅式:
1.1.4.
2.      install
主要形式如下:
pip install <pacakage>
or
pip install -
主要使⽤⽅式如下:
1.1.4.
2.1.        安装本地.whl
pip install <⽬录>/<⽂件名>
pip install --use-wheel --no-index  --find-links=wheelhous/<;包名>
例如:pip install requests-2.21.0-py2.py3-none-any.whl(注意.whl包在C:\Users\Administrator中才能安装)
1.1.4.
2.2.        升级包
pip install -U <;包名>
或:
pip install <;包名> --upgrade
例如: pip install urllib3 –upgrade
1.1.4.
2.
3.        升级pip
pip install -U pip
python -m pip install --upgrade pip
升级的时候,其实还有⼀个不怎么⽤到的选项 --upgrade-strategy,它是⽤来指定升级策略。它的可选项只有两个:eager: 升级全部依赖包
only-if-need: 只有当旧版本不能适配新的⽗依赖包时, 才会升级
在 pip 10.0 版本之后,这个选项的默认值是 only-if-need,因此如下两种写法是⼀互致的:
pip install --upgrade pkg1
pip install --upgrade pkg1 --upgrade-strategy only-if-need
1.1.4.
2.4.        从本地安装指定包
只从本地安装,⽽不从 pypi 安装。
pip install --no-index --find-links=⽬录包
例如:
pip install --no-index --find-links=C:\Users\satori\Desktop\pkgs fastapi
1.1.4.
2.5.        从本地批量安装包
pip install --no-index --find-links="D:\thirdparty\tensorflow\tensorflow_pkg" -
1.1.4.
2.6.        指定安装包源
通过 -i 指定别的源, 但由于不是https, 所以需要加上--trusted-host表⽰信任该⽹址。
1.1.4.
2.7.        限制不使⽤⼆进制包安装
由于默认情况下,whl 包的平台是运⾏ pip download 命令的平台,所以可能出现平台不适配的情况。⽐如在 MacOS 系统下得到的pymongo-2.8-cp27-none-macosx_10_10_intel.whl 就不能在 linux_x86_64 中安装,使⽤下⾯这条命令下载的是 的包,可以直接使⽤pip install 安装。相⽐ whl 包,这种包在安装时会进⾏编译,所以花费的时间会长⼀些。
下载⾮⼆进制的包
pip download --no-binary=:all: pkg
安装⾮⼆进制的包
pip install pkg --no-binary
1.1.4.
2.8.        指定代理服务器安装
当我们⽆法连接公⽹时,除了上⾯那种先将安装包下载下来之外,还可以使⽤代理。因为有的内⽹环境虽然和外界是隔离的,但两者之间的路并没有完全堵死,可以通过连接到指定的代理来建⽴⼀座桥。
pip install --proxy http[s]://[user:password@]ip:port 包名
但每次安装包就发输⼊长长的参数,未免有些⿇烦,为此你可以将其写⼊配置⽂件中:$HOME/.config/f。但是对于这个路径,不同的操作系统,路径各不相同:
# Linux/Unix:
/f
~/.f
~/.config/f
# Mac OSX:
~/Library/Application Support/f
~/.f
/Library/Application Support/f
# Windows:
%APPDATA%\pip\pip.ini
%HOME%\pip\pip.ini
C:\Documents and Settings\All Users\Application Data\PyPA\f (Windows XP)
C:\ProgramData\PyPA\f (Windows 7及以后)
若在你的机⼦上没有此⽂件,则⾃⾏创建即可:
[global]
index-url = mirrors.aliyun/pypi/simple/
# 替换出⾃⼰的代理地址,格式为 [user:passwd@]ip:port
proxy=x:8080
[install]
# 信任阿⾥云的镜像源,否则会有警告
trusted-host=mirrors.aliyun
1.1.4.3    uninstall
卸载安装包
pip uninstall <;包名>
pip uninstall -
例如: pip uninstall requests
1.1.4.4.      download
pip download 包名 -d "下载后⽂件存储路径(windows下双引号来表⽰⽂件夹)"
例如:
pip download tensorboard(~=2.5) -d "D:\thirdparty\tensorflow\tensorflow_pkg"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。