bazel规则在哪里生成'gen\io_操作py`从源代码构建TensorFlow时的文件?

2024-04-26 13:57:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确定在从源代码构建TensorFlow时,bazel是如何生成gen-iu-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模块(在构建TensorFlow时由bazel生成)。
_text_line_reader_v2tensorflow/tensorflow/core/kernels/text_line_reader_op.cc中定义的TextLineReaderV2的包装器。在

据我所知,构建步骤如下:


1)tensorflow/tensorflow/core/kernels/BUILD中构建text_line_reader_op的内核库

^{pr2}$

基本上,{emreader}在这里查找


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

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

我假设io库现在包含了TextLineReaderV2内核的定义。在


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

是否有人知道第三步是在构建过程中定义的?


Tags: 模块thetextpyio定义tensorflowline
1条回答
网友
1楼 · 发布于 2024-04-26 13:57:01

我终于明白了。在


确实存在对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中,有一条规则

^{pr2}$

因此,在这个规则中,_gen后缀将被删除(在tf_gen_op_wrapper_private_py中),并且一个gen_前缀将被添加到{}中,因此{}模块将由此规则生成。在

相关问题 更多 >