【问题标题】:good practices to modify tensorflow sources修改 tensorflow 源的良好做法
【发布时间】:2017-06-19 08:53:53
【问题描述】:

我正在尝试修改 Tensorflow 源代码(核心)。

研究完代码后,我开始修改、重新编译并运行自己的测试。但我不确定我是否以最好的方式做到这一点。所以我对此有一些疑问。

1 - 我需要重新编译所有 tensorflow 代码还是只需要重新编译修改后的模块?

2 - 为了实现修改,我是否总是从我的源代码创建一个 Wheel 包并安装它?为什么我可以在bazel编译后直接集成修改?

3 - 测试代码的最佳方法是什么?有很多单元测试,我不知道如何正确使用它。

4 - 我正在使用 linux 的 bash 脚本来运行 bazel 命令,还有更好的方法吗?

谢谢大家!

【问题讨论】:

  • 曾经有一个名为“为开发设置 tensorflow”的部分,它提供了一种修改 TF 并使用它而无需安装轮子的方法。不知道它去了哪里,我在github.com/orionr/tensorflow/blob/…看到旧版本@
  • 你是在修改 Python 还是 C++?
  • 我正在修改 C++ 核心,并使用 c++ 和 python 运行应用程序。我认为 python 总是使用 c++ 核心和内核来做计算。
  • 在这种情况下,我会采用与 Google 内部工作流程等效的方法,即在开发时在单元测试中使用“bazel run”(或在多个测试中使用“bazel test”)。您不必全部运行它们,通常只有一两个相关。我会为您的 TensorFlow 更改编写一个单元测试,其格式与其他 TensorFlow 单元测试相同,并且只有在通过后才使用修改后的 TensorFlow 进行集成测试。
  • 我认为这应该被提升为答案并被接受:)

标签: testing tensorflow bazel


【解决方案1】:

(从cmets对问题的总结)

在对 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 包)。

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2016-04-29
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多