Tensorflow的核心代码在core模块中,56w行的代码量让人望而生畏,熟悉了bazel工具之后,发现BUILD文件是理清代码结构的很好的资源,但使用bazel query语法提取出来//tensorflow/core:tensorflow目标包含了9k多个依赖关系,即便画出了依赖关系图,可读性也非常差。由于目前仅关心核心实现,平台依赖和测试相关的目标暂时不用理会,这样剩余的依赖关系就会大量减少,笔者整理了一份,并用graphviz进行可视化,结果如下。
请注意,我做出了以下取舍,第一,舍弃了平台依赖性相关的目标,第二,舍弃了测试相关目标,第三,舍弃了对第三方库的依赖,第四,对相似目标进行了整合,比如xx_op中用xx表示具体操作名称,在image_format_internal中,使用image_format来代替gif、jpeg、png等。
另外,推荐一个bazel query命令,用于查找两个目标之间的依赖路径,bazel query "somepath(//tensorflow/core:tensorflow, //tensorflow/core:framework_internal)" --output graph | dot -Tpng -o framework_internal.png,得到的结果如下:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:tensorflow core 核心目标依赖图 - Python技术站