【问题标题】:Where is the bazel rule generating the `gen_io_ops.py` file when building TensorFlow from sources?从源代码构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?
【发布时间】:2017-08-02 09:36:39
【问题描述】:

我正在尝试确定在从源代码构建 TensorFlow 时,bazel 如何生成 gen_io_ops 模块。


tensorflow/python/ops/io_ops.py中有这段代码:

from tensorflow.python.ops.gen_io_ops
[...]

# used in the TextLineReader initialization
rr = gen_io_ops._text_line_reader_v2(...)

指的是bazel-genfiles/tensorflow/python/ops/gen_io_ops.py 模块(由 bazel 在构建 TensorFlow 时生成)。
_text_line_reader_v2tensorflow/tensorflow/core/kernels/text_line_reader_op.cc 中定义的TextLineReaderV2 的包装器。

据我了解,构建步骤如下:


1)text_line_reader_op的内核库内置在tensorflow/tensorflow/core/kernels/BUILD

tf_kernel_library(
        name = "text_line_reader_op",
        prefix = "text_line_reader_op",
        deps = IO_DEPS,)

tf_kernel_library 基本上在哪里寻找 text_line_reader_op.c 文件并构建它。


2) :text_line_reader_op 内核库随后被the same file 中定义的io 库用作依赖项:

cc_library(
    name = "io",
    deps = [       
        ":text_line_reader_op", ...
    ],
)

我想io 库现在包含TextLineReaderV2kernel 的定义。


根据我从answer 得到的信息,应该有一个第三步,其中io 库用于生成bazel-genfiles/tensorflow/python/ops/gen_io_ops.py 模块中的python 包装器。这个文件生成可以通过巴塞尔的tf_op_gen_wrapper_py 规则或tf.load_op_library() 方法来完成,但似乎都没有涉及。

有人知道第三步在构建过程中的定义位置吗?

【问题讨论】:

    标签: python c++ tensorflow bazel


    【解决方案1】:

    我终于明白了。


    确实有对tf_op_gen_wrapper_py 的调用,但它隐藏在对tf_gen_op_wrapper_private_py 的调用中:

    def tf_gen_op_wrapper_private_py(name, out=None, deps=[],
                                     require_shape_functions=True,
                                     visibility=[]):
      if not name.endswith("_gen"):
        fail("name must end in _gen")
      [...]
      bare_op_name = name[:-4]
      tf_gen_op_wrapper_py(name=bare_op_name, ...
    

    所以步骤如下。

    tensorflow/tensorflow/python/BUILD中有这条规则

    tf_gen_op_wrapper_private_py(
        name = "io_ops_gen",
        [...]
    )
    

    因此,在此规则中,_gen 后缀将被删除(在 tf_gen_op_wrapper_private_py 中),gen_ 前缀将在 tf_gen_op_wrapper_py 中添加,因此 gen_io_ops.py 模块将由此规则生成。

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2018-08-16
      相关资源
      最近更新 更多