我正在尝试修改 Tensorflow 源代码(核心)。
研究代码后,我开始修改、重新编译并运行我自己的测试。但我不确定我是否以最好的方式做到了这一点。所以我对此有一些疑问。
1 - 我需要重新编译所有 tensorflow 代码还是只重新编译修改后的模块?
2 - 为了实现修改,我是否总是从我的源代码创建一个 wheel 包并安装它?为什么我在bazel编译后可以直接集成修改?
3 - 测试代码的最佳方法是什么?有很多单元测试,我不知道如何正确使用它。
4 - 我正在使用 linux 的 bash 脚本来运行 bazel 命令,有更好的东西吗?
谢谢大家!
最佳答案
(根据对问题的评论总结)
在对 TensorFlow 本身进行更改时,无需为 TensorFlow 构建 pip 包。相反,bazel run <target>
让您运行单元测试(bazel test
会将一个或多个测试的输出记录到一个文件中,而不是直接打印出来)。因此,例如,如果您正在修改一个热门操作 (tensorflow/core/kernels/one_hot_op.cc),您可能希望为该操作 (tensorflow/python/kernel_tests/one_hot_op_test.py) 运行 Python 单元测试套件:
bazel run //tensorflow/python/kernel_tests:one_hot_op_test
或者转到目录并使用相对构建目标:
cd python/kernel_tests
bazel run :one_hot_op_test
测试目标在 BUILD 文件中定义。对依赖项的任何更改都应自动获取。第一次运行后,编译应该会很快,因为大部分编译都会被缓存。
如果您正在开发最终将集成到使用 TensorFlow 的软件中的更改,那么如果您先对 TensorFlow 更改进行单元测试,然后再进行集成测试(例如,您将在其中捆绑将 TensorFlow 打包成 pip 包)。
关于testing - 修改 tensorflow 源代码的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626098/