1、Protocol Buffer
为谷歌开发 用于处理结构化数据的工具。如何将结构化的数据序列化,并从序列化注资后的数据流中还原出原来的结构化数据,统称为处理结构化数据,这就是Protocol Buffer解决的主要问题。除Protocol Buffer之外 ,XML和JSON是两种比较常见的结构化数据处理工具。不同之处在于Protocol Buffer序列化之后得到的数据不是可读的字符串,而是二进制流。其次,XML或JSON格式的数据信息都包含在序列化之后的数据中。而PB需要先定义数据的格式(二进制的话肯定要只是数据是什么格式的才方便转换)。好处在于 PB序列化出来的数据要比XML格式的数据小3到10倍,解析时间要快20到100倍。
Protocol Buffer定义数据格式的文件一般保存在.proto文件中。分布式TensorFlow的通信协议gRPC也是以Protocol Buffer作为基础 的。
2、Bazel
为谷歌开源的自动化构建工具。相比传统的Makefile、Ant或者Maven,Bazel在速度、可伸缩性、灵活性以及对不同程序语言和平台的支持上都更加出色。
项目空间(workspace)是Bazel的一个基本概念。一个项目空间可以简单地理解为一个文件夹,在这个文件夹中包含了编译一个软件所需要的源代码以及输出编译结果的软连接(symbolic link)地址。一个项目空间可以只包含一个应用,也可以包含多个。
一个项目空间内,Bazel通过BUILD文件来找到需要编译的目标,Bazel对Python支持的编译方式只有三种:py_binary、py_library和py_test。其中py_binary将python程序编译为可执行文件,py_test编译测试程序,py_library编译成库函数供其他py_binary或py_test调用。
读《TensorFlow+实战Google深度学习框架笔记》