我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TensorFlow源代码构建流程记录解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TensorFlow源代码构建流程记录解析

为什么从源代码构建

通常情况下,直接安装构建好的.whl即可。不过,当需要一些特殊配置(或者闲来无事想体会 TensorFlow 构建过程到底有多麻烦)的时候,则需要选择从源代码构建TensorFlow。万幸文档混乱的 TensorFlow 还是好心地为我们提供了一整页的文档供参考 www.tensorflow.org/install/sou… ,个人认为其中最需要关注的部分莫过于经过测试供参考的源配置(列于文末)。TF使用 Google 的开源构建工具 bazel 构建,并且源码的版本与 bazel 的版本高度相关,所以尽量匹配版本进行构建。

流程记录 TF v1.14.0 CPU on Ubuntu 18.04

安装对应版本的 bazel

根据计划构建的版本,查阅文末的对应配置,参考官方文档: bazel.build/install/ubu… 安装相应版本的 bazel,如本次计划构建的版本是 v1.14.0,对应的 bazel 版本是 0.24.1(此次使用0.26.1也是可以的)。

为方便,这里直接贴出对应 0.26.1 release 的页面: github.com/bazelbuild/… ,点击assets找到对应的文件下载即可。

wget https://github.com/bazelbuild/bazel/releases/download/0.26.1/bazel-0.26.1-installer-linux-x86_64.sh
chmod +x bazel-version-installer-linux-x86_64.sh
./bazel-version-installer-linux-x86_64.sh --user

克隆 TensorFlow 仓库

从 Github 上 clone 源码仓库

git clone https://github.com/tensorflow/tensorflow 

cd 到仓库目录并 git checkout到相应 tag,比如这次是构建 v1.14.0 版本:

git checkout v1.14.0

* 一些小调整,通常可以略过

Build with C++17

因为之后需要写的 Custom OP 依赖的另一个库是 C++17,而除了刚刚才发布的 v2.10 版,以前的 TF默认是使用 C++11,实际构建的时候,代码有一些 minor fix。此处参考 github.com/tensorflow/… 修改 .bazelrc build:c++17 的配置,在 tensorflow/core/lib/gif/gif_io.cc 中添加 #include<cstring>, 并在 tensorflow/stream_executor/stream_executor_pimpl.h 中添加 #include "absl/memory/memory.h"(否则 compile 时会报错找不到 absl::make_unique)(这里 make_unique 是 C++17 标准库里的用法,Google的abseil的make_unique方法则方便C++11的代码也可以使用它;最新的v2.10版由于默认使用C++17,已经改为std::make_unique)

.bazelrc 文件里记录了构建时各种配置选项 ([--config=option])的映射规则,如有需要可以进行修改。由于 GCC 不支持--stdlib命令,此次修改如下:

  # Build TF with C++ 17 features.
- build:c++17 --cxxopt=-std=c++1z
- build:c++17 --cxxopt=-stdlib=libc++
+ build:c++17 --cxxopt=-std=c++17

网络不通

Bazel 在构建过程中,需要现拉取远程仓库的许多依赖。由于 TF 的构建过程消耗内存很严重,选择在服务器上进行构建,而服务器远程拉取 github 上仓库经常失败。所以需要手动在网络良好的机器上下载相应的库的 release (对应的版本在 WORKSPACE 文件中可以找到一行注释),存放在服务器本地,并在 WORKSPACE 文件中对应的 http_archive 部分添加一行本地地址。若需要换版本,也可以在相应github库的releases下面找到对应的 URL 及 sha256(实在是找不到对应的也可以手动下载压缩包后通过 shasum256 命令获取)

例如:

http_archive(
 name = "build_bazel_rules_apple",
 sha256 = "a045a436b642c70fb0c10ca84ff0fd2dcbd59cc89100d597a61e8374afafb366",
 urls = ["https://github.com/bazelbuild/rules_apple/releases/download/0.18.0/rules_apple.0.18.0.tar.gz",
         "file:///opt/tensorflow_build_deps/rules_apple.0.18.0.tar.gz"],
) # https://github.com/bazelbuild/rules_apple/releases

配置 build

运行源码根目录下的 ./configure 进行配置。

./configure

此次编译一个尽量简略的 CPU 版本,会话如下:

WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
You have bazel 0.26.1 installed.
Please specify the location of python. [Default is /usr/local/bin/python]:
Found possible Python library paths:
  /usr/local/lib/python3.6/dist-packages
  /usr/lib/python3/dist-packages
Please input the desired Python library path to use.  Default is [/usr/local/lib/python3.6/dist-packages]
Do you wish to build TensorFlow with XLA JIT support? [Y/n]: n
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.
Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.
Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.
Do you wish to download a fresh release of clang? (Experimental) [y/N]: n
Clang will not be downloaded.
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
    --config=mkl            # Build with MKL support.
    --config=monolithic     # Config for mostly static monolithic build.
    --config=ngraph         # Build with Intel nGraph support.
    --config=numa           # Build with NUMA support.
    --config=dynamic_kernels    # (Experimental) Build kernels into separate shared objects.
    --config=v2             # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
    --config=noaws          # Disable AWS S3 filesystem support.
    --config=nogcp          # Disable GCP support.
    --config=nohdfs         # Disable HDFS support.
    --config=nonccl         # Disable NVIDIA NCCL support.
Configuration finished

构建 pip 软件包并安装

官方提供的命令:

bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package

本次使用:

bazel build --config=c++17 --config=c++1z --jobs=6 //tensorflow/tools/pip_package:build_pip_package

其中使用的 --config=c++17 --config=c++1z 对应刚刚修改的 .bazelrc 文件中相应的部分

注意:bazel build 的过程时间会比较长,对内存的消耗较大,jobs 数谨慎开大。

bazel build 结束后,一个名为 build_pip_package 的可执行文件就创建好了,接下来可以执行:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

如果希望构建的whl名为 tf-nightly 版本,则可以加上 --nightly_flag 的选项。

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

此后便获得了 .whl 文件,通过 pip 安装即可:

pip install /tmp/tensorflow_pkg/tensorflow-[version]-[tags].whl

其中,version是对应的版本,tags与系统有关。

经过测试的源配置

Linux

CPU

版本Python 版本编译器构建工具
tensorflow-2.6.03.6-3.9GCC 7.3.1Bazel 3.7.2
tensorflow-2.5.03.6-3.9GCC 7.3.1Bazel 3.7.2
tensorflow-2.4.03.6-3.8GCC 7.3.1Bazel 3.1.0
tensorflow-2.3.03.5-3.8GCC 7.3.1Bazel 3.1.0
tensorflow-2.2.03.5-3.8GCC 7.3.1Bazel 2.0.0
tensorflow-2.1.02.7、3.5-3.7GCC 7.3.1Bazel 0.27.1
tensorflow-2.0.02.7、3.3-3.7GCC 7.3.1Bazel 0.26.1
tensorflow-1.15.02.7、3.3-3.7GCC 7.3.1Bazel 0.26.1
tensorflow-1.14.02.7、3.3-3.7GCC 4.8Bazel 0.24.1
tensorflow-1.13.12.7、3.3-3.7GCC 4.8Bazel 0.19.2
tensorflow-1.12.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.11.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.10.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.9.02.7、3.3-3.6GCC 4.8Bazel 0.11.0
tensorflow-1.8.02.7、3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.7.02.7、3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.6.02.7、3.3-3.6GCC 4.8Bazel 0.9.0
tensorflow-1.5.02.7、3.3-3.6GCC 4.8Bazel 0.8.0
tensorflow-1.4.02.7、3.3-3.6GCC 4.8Bazel 0.5.4
tensorflow-1.3.02.7、3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.2.02.7、3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.1.02.7、3.3-3.6GCC 4.8Bazel 0.4.2
tensorflow-1.0.02.7、3.3-3.6GCC 4.8Bazel 0.4.2

GPU

版本Python 版本编译器构建工具cuDNNCUDA
tensorflow-2.6.03.6-3.9GCC 7.3.1Bazel 3.7.28.111.2
tensorflow-2.5.03.6-3.9GCC 7.3.1Bazel 3.7.28.111.2
tensorflow-2.4.03.6-3.8GCC 7.3.1Bazel 3.1.08.011.0
tensorflow-2.3.03.5-3.8GCC 7.3.1Bazel 3.1.07.610.1
tensorflow-2.2.03.5-3.8GCC 7.3.1Bazel 2.0.07.610.1
tensorflow-2.1.02.7、3.5-3.7GCC 7.3.1Bazel 0.27.17.610.1
tensorflow-2.0.02.7、3.3-3.7GCC 7.3.1Bazel 0.26.17.410.0
tensorflow_gpu-1.15.02.7、3.3-3.7GCC 7.3.1Bazel 0.26.17.410.0
tensorflow_gpu-1.14.02.7、3.3-3.7GCC 4.8Bazel 0.24.17.410.0
tensorflow_gpu-1.13.12.7、3.3-3.7GCC 4.8Bazel 0.19.27.410.0
tensorflow_gpu-1.12.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.11.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.10.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.9.02.7、3.3-3.6GCC 4.8Bazel 0.11.079
tensorflow_gpu-1.8.02.7、3.3-3.6GCC 4.8Bazel 0.10.079
tensorflow_gpu-1.7.02.7、3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.6.02.7、3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.5.02.7、3.3-3.6GCC 4.8Bazel 0.8.079
tensorflow_gpu-1.4.02.7、3.3-3.6GCC 4.8Bazel 0.5.468
tensorflow_gpu-1.3.02.7、3.3-3.6GCC 4.8Bazel 0.4.568
tensorflow_gpu-1.2.02.7、3.3-3.6GCC 4.8Bazel 0.4.55.18
tensorflow_gpu-1.1.02.7、3.3-3.6GCC 4.8Bazel 0.4.25.18
tensorflow_gpu-1.0.02.7、3.3-3.6GCC 4.8Bazel 0.4.25.18

macOS

CPU

版本Python 版本编译器构建工具
tensorflow-2.6.03.6-3.9Xcode 10.11 中的 ClangBazel 3.7.2
tensorflow-2.5.03.6-3.9Xcode 10.11 中的 ClangBazel 3.7.2
tensorflow-2.4.03.6-3.8Xcode 10.3 中的 ClangBazel 3.1.0
tensorflow-2.3.03.5-3.8Xcode 10.1 中的 ClangBazel 3.1.0
tensorflow-2.2.03.5-3.8Xcode 10.1 中的 ClangBazel 2.0.0
tensorflow-2.1.02.7、3.5-3.7Xcode 10.1 中的 ClangBazel 0.27.1
tensorflow-2.0.02.7、3.5-3.7Xcode 10.1 中的 ClangBazel 0.27.1
tensorflow-2.0.02.7、3.3-3.7Xcode 10.1 中的 ClangBazel 0.26.1
tensorflow-1.15.02.7、3.3-3.7Xcode 10.1 中的 ClangBazel 0.26.1
tensorflow-1.14.02.7、3.3-3.7Xcode 中的 ClangBazel 0.24.1
tensorflow-1.13.12.7、3.3-3.7Xcode 中的 ClangBazel 0.19.2
tensorflow-1.12.02.7、3.3-3.6Xcode 中的 ClangBazel 0.15.0
tensorflow-1.11.02.7、3.3-3.6Xcode 中的 ClangBazel 0.15.0
tensorflow-1.10.02.7、3.3-3.6Xcode 中的 ClangBazel 0.15.0
tensorflow-1.9.02.7、3.3-3.6Xcode 中的 ClangBazel 0.11.0
tensorflow-1.8.02.7、3.3-3.6Xcode 中的 ClangBazel 0.10.1
tensorflow-1.7.02.7、3.3-3.6Xcode 中的 ClangBazel 0.10.1
tensorflow-1.6.02.7、3.3-3.6Xcode 中的 ClangBazel 0.8.1
tensorflow-1.5.02.7、3.3-3.6Xcode 中的 ClangBazel 0.8.1
tensorflow-1.4.02.7、3.3-3.6Xcode 中的 ClangBazel 0.5.4
tensorflow-1.3.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.5
tensorflow-1.2.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.5
tensorflow-1.1.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.2
tensorflow-1.0.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.2

GPU

版本Python 版本编译器构建工具cuDNNCUDA
tensorflow_gpu-1.1.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.25.18
tensorflow_gpu-1.0.02.7、3.3-3.6Xcode 中的 ClangBazel 0.4.25.18

以上就是TensorFlow源代码构建流程记录解析的详细内容,更多关于TensorFlow源代码构建流程的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TensorFlow源代码构建流程记录解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TensorFlow源代码构建流程记录解析

这篇文章主要为大家介绍了TensorFlow源代码构建流程记录解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录