gpt4 book ai didi

python - 从源构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?

转载 作者:行者123 更新时间:2023-11-30 05:10:49 24 4
gpt4 key购买 nike

我试图确定在从源代码构建 TensorFlow 时,gen_io_ops 模块是如何由 bazel 生成的。


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) 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 库现在包含 TextLineReaderV2 内核的定义。


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

有人知道第三步在构建过程中的什么地方定义吗?

最佳答案

我终于明白了。


确实有对 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 模块将由此规则生成。

关于python - 从源构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45457061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com