TensorFlow的Bazel构建文件结构

目录

  • 说明
  • 分析
    • 全局设定文件:$TF_ROOT/WORKSPACE
    • 外部依赖项入口:tensorflow/workspace.bzl
  • 看看有多少package?

本来是想理解一下TF源码编译过程的,后来发现功力和时间有限,就只分析了两个入口级文件$TF_ROOT/WORKSPACE$TF_ROOT/tensorflow/workspace.bzl

说明

  • 只考虑Bazel,不考虑CMake。
  • 只考虑WORKSPACE,BUILD,*.bzl,不考虑configureconfigure.py
  • 本人对Bazel不甚了解,不保证分析过程正确性

分析

假定tf源码目录是$TF_ROOT

全局设定文件:$TF_ROOT/WORKSPACE

$TF_ROOT/WORKSPACE是执行Bazel系列命令后第一个解析的文件,设定各种全局的设置,根据其内容,它主要做了这几件事情:

  1. 设定WORKSPACE名字。可选

    workspace(name = "org_tensorflow")

  2. 加载http_archive函数。新版bazel中需要手动load,然后再使用

    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file")

  3. 利用http_archive函数,加载若干bazel相关的包,例如:
    • io_bazel_rules_closure
    • io_bazel_rules_docker
    • Apple和Swift的bazel支持
  4. 检查bazel版本,来确保BUILD文件正确解析

    当前要求至少0.18版本

不过似乎0.18版本的bazel有问题,后来我用apt装了0.21版本的是OK的。

  1. 加载tensorflow/workspace.bzl文件,用来加载各种依赖项:

    所有的依赖项都写在"*.bzl"文件中了

  2. 从谷歌云盘下载几个流行的模型,包括:
    • inception_v1
    • mobile_ssd
    • mobile_multibox
    • stylize
    • speech_commands

可以看到,tensorflow/workspace.bzl是重点解析的文件,它里面定义的tf_workspace()函数加载了各种依赖项

外部依赖项入口:tensorflow/workspace.bzl

主要考虑这个文件中定义的tf_workspace(),它通过http下载(tf_http_archive())的外部依赖包括:

  • mkl_dnn: intel CPU上的矩阵加速库
  • com_google_absl: google开源的abseil库,类似于boost的G家升级版。移植tf源码时容易和abseil纠缠在一块
  • eigen_archive: eigen矩阵计算加速库
  • arm_compiler: 树莓派编译相关
  • libxsmm_archive: Intel CPU平台上矩阵运算相关的一个库。不了解
  • com_googlesource_code_re2: google家开源的正则库
  • com_github_googlecloudplatform_google_cloud_cpp: 谷歌云相关
  • com_github_googleapis_googleapis:google api,看起来比较通用常见基础的一个东西
  • gemmlowp:矩阵乘法加速
  • farmhash_archive:各种hash函数,google家开源的
  • png_archive: 处理.png图片格式库
  • org_sqlite: sqlite,麻雀虽小但五脏俱全的数据库
  • gif_archive: 处理.gif格式图片的库
  • protobuf: 使用protobuf似乎是G家代码的必备,然而其实这货往往容易带来问题,2333
  • nsync: nsync是google的非官方同步原语库。然而其实nsync也是Justin Timberlake早年所在团体的名字, 2333
  • googletest:没的说,没的说,谷歌自家的测试框架,标配
  • gflags: 解析命令行参数,G家开源的,半标配
  • pcre: Perl的一个正则库。说实话,我出了fddb-eval就没见过在用户层面用perl脚本的地方
  • swig: SWIG: A code generator for connecting C/C++ with other programming languages。不明觉厉的一个库。
  • curl:下载库
  • gRPC:远程调用库。
  • nanopb:protobuf已经很讨厌了,又来一个nanopb,说是给嵌入式系统用的pb,2333
  • llvm: 编译器,不明觉厉
  • lmdb: caffe用lmdb是压缩数据集,tf你也这样用吗??
  • jsoncpp: 解析json的C++库。protobuf都有了,怎么还要用json?2333
  • boringssl: ssl库,fork自openssl,google家的定制版。google也不是完全自己造轮子啊
  • zlib: 压缩库
  • fft2d: 傅里叶变换库
  • snappy: snappy库在Caffe中被用到。tf你也用到了吗?
  • nccl: 多gpu通信
  • librdkafka: apache kafka的C实现。分布式通信相关?我不太了解
  • pprof: google开源的profiling(性能排查)的可视化工具
  • cub:cub是NVidia家的cuda编程相关的一个库
  • cython: python加速用的
  • bazel_toolchains: bazel自个儿的东西,构建相关
  • arm_neon_2_x86_sse: 计算加速相关
  • double_conversion: 高效的IEEE double浮点数“2进制-10进制”相互转化工具
  • tbb:tbb是Intel家开源的CPU并行加速库,anyway,编译OpenCV的时候遇到过它
  • ngraph: ngraph是图(graph)编译器,用于深度学习加速
  • nlohmann_json_lib: json库。已经有jsoncpp了为啥还要一个?
  • ngraph-tf: 有ngraph了为啥还要ngraph-tf。。

以及,一堆python包(不是很懂,直接pip装不就好了吗?写个requirements.txt不好吗?)

  • six
  • astor
  • gast
  • termcolor
  • absl_py: abseil库的python接口
  • backports_weakref:弱引用/GC相关

以及,若干java maven仓库里的jar包(java生态我不了解,不查了):

  • junit:java代码单元测试框架
  • hamcrest
  • google test
  • google truth
  • checkerframework
  • javapoet

以及,一堆tensorflow官方训练好的模型与相关的文件:

  • tflite_mobilenet_float
  • tflite_mobilenet_quant
  • tflite_mobilenet_ssd
  • tflite_mobilenet_ssd_quant
  • tflite_mobilenet_ssd_quant_protobuf
  • tflite_conv_actions_frozen
  • tflite_smartreply
  • tflite_ovic_testdata
  • build_bazel_rules_android

看看有多少package?

既然是Bazel构建,那就得用java工程目录结构的思路来思考。

[email protected] /home/zz/work/tensorflow                                                                                                                       master
? find . -name 'BUILD' | wc -l
464

可以看到,一共有464个包。

原文地址:https://www.cnblogs.com/zjutzz/p/10305995.html

时间: 2024-10-07 14:11:18

TensorFlow的Bazel构建文件结构的相关文章

Bazel构建工具的安装

官方Doc:https://docs.bazel.build/versions/master/install-ubuntu.html 使用Bazel定制的APT存储库 (recommended) 1. Install JDK 8 安装JDK 8使用下面命令:: sudo apt-get install openjdk-8-jdk 在 Ubuntu 14.04 LTS你可能需要使用 PPA: sudo add-apt-repository ppa:webupd8team/java sudo apt

Tensorflow[源码安装时bazel行为解析]

0. 引言 通过源码方式安装,并进行一定程度的解读,有助于理解tensorflow源码,本文主要基于tensorflow v1.8源码,并借鉴于如何阅读TensorFlow源码. 首先,自然是需要去bazel官网了解下必备知识,如(1)什么是bazel; (2)bazel如何对cpp项目进行构建的; (3)bazel构建时候的函数大全.然后就是bazel官网的一些其他更细节部分了.下文中会给出超链接. ps: 找了很久,基本可以确定bazel除了官网是没有如书籍等资料出现的,所以只有官网和别人博

版本问题---Bazel与tensorflow的对应关系

源码安装tf的时候,会用到Bazel,版本不对应,后面会引起好多麻烦. echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - sudo apt-get upda

Google软件构建工具Bazel

转载Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用方法介绍系列 Bazel是什么? Bazel是一个构建工具,即一个可以运行编译和测试来组装软件的工具,跟Make.Ant.Gradle.Buck.Pants和Maven一样. Bazel有什么特殊之处 Bazel是设计用来配合Google的软件开发模式.有以下几个特点: 多语言支持:Bazel支持J

TensorFlow 在android上的Demo(1)

转载时请注明出处: 修雨轩陈 系统环境说明: ------------------------------------ 操作系统 : ubunt 14.03 _ x86_64 操作系统 内存: 8GB 硬盘 500G ------------------------------------ 一.编译TensorFlow在android上的Demo 1.1 搭建环境 l 下载tensorFlow 首先,选择一个目录用git命令下载tensorFlow 在github上的源码, 如下所示: Tens

学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker.com/engine/installation/ .用配置文件在本地创建Docker镜像,docker build --pull -t $USER/tensorflow-serving-devel https://raw.githubusercontent.com/tensorflow/servin

大数据下基于Tensorflow框架的深度学习示例教程

近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较好的价值,而深度学习在大数据场景下更能揭示数据内部的逻辑关系.本文就以大数据作为场景,通过自底向上的教程详述在大数据架构体系中如何应用深度学习这一技术.大数据架构中采用的是hadoop系统以及Kerberos安全认证,深度学习采用的是分布式的Tensorflow架构,hadoop解决了大数据的存储问

学习笔记TF066:TensorFlow移动端应用,iOS、Android系统实践

TensorFlow对Android.iOS.树莓派都提供移动端支持. 移动端应用原理.移动端.嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应:二在本地运行模型,PC训练模型,放到移动端预测.向服务端请求数据可行性差,移动端资源稀缺.本地运行实时性更好.加速计算,内存空间和速度优化.精简模型,节省内存空间,加快计算速度.加快框架执行速度,优化模型复杂度和每步计算速度.精简模型,用更低权得精度,量化(quantization).权重剪枝(weight prun

移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化的操作. TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案.它支持端上的机器学习推理,具有低延迟和小二进制模型大小. TensorFlow Lite使用了许多技术,例如允许更小和更快(定点数学)模型的量化内核. 对于本节,您需要从源代码构建TensorFlow