zoukankan      html  css  js  c++  java
  • TensorFlow的Bazel构建文件结构

    本来是想理解一下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")

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

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

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

    当前要求至少0.18版本

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

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

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

    1. 从谷歌云盘下载几个流行的模型,包括:
    • 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工程目录结构的思路来思考。

    zz@zz-B360-HD3 /home/zz/work/tensorflow                                                                                                                       master
    ⚡ find . -name 'BUILD' | wc -l
    464
    

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

  • 相关阅读:
    NOIP2006代码及简析
    设计模式的原则
    UML应用
    关系
    活动图
    状态图
    UML概序
    UML基本图示
    用例
    介绍一个好的英语学习网站!
  • 原文地址:https://www.cnblogs.com/zjutzz/p/10305995.html
Copyright © 2011-2022 走看看