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

粉煤灰

我正在尝试确定从源代码构建 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模块(并在构建 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内核库被同一文件中io定义用作依赖项

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

我想这个io库现在包含TextLineReaderV2内核的定义


从我从这个答案中得到的信息来看,应该有第三步,该io库用于生成bazel-genfiles/tensorflow/python/ops/gen_io_ops.py模块中的 python 包装器这个文件生成可以通过tf_op_gen_wrapper_pyBasel中规则或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此规则将生成模块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

gradle构建时未生成Clojure(声明规则)文件

使用Bazel构建WAR文件

Bazel头文件代码生成器

无法使用bazel从源代码构建TensorFlow。2016年1月22日

tensorflow中的gen_math_ops脚本在哪里?

构建Tensorflow之后的.whl文件在哪里?

bazel从源代码构建Tensorflow

从源代码构建Tensorflow时出现非法指令错误

从源代码构建TensorFlow时-c opt和--config = opt有什么区别?

如何使用Bazel Build从生成的源文件构建静态库

在为Android构建tensorflow时出现Bazel错误“此规则缺少以下文件的依赖项声明”

tensorflow bazel构建失败

在Mac上从源代码构建TensorFlow 1.7时出错

Tensorflow Bazel量化构建错误

从源代码构建TensorFlow时出错

在哪里可以找到tensorflow_lite_gpu的源代码?

TensorFlow如何通过array_ops.cc生成gen_array_ops.py?

通过kaggle内核中的代码生成的文件存储在哪里?

从源代码构建Tensorflow时,编译是从头开始还是在修复错误后恢复?

Python:使用py2exe将python脚本转换为.exe文件时,原始源代码是否可见?

从源代码安装Bazel Tensorflow:无法识别的选项:--host_force_python = py2

从源代码构建AOSP时如何正确包含自定义主机文件?

使用 bazel 支持在 android 上构建 tensorflow 时出错

bazel 构建 tensorflow 服务错误

bazel 项目在哪里存储它的“.so”文件?

使用 bazel 构建的二进制文件查看 pprof 中的源代码

构建中的内核源代码在哪里?

在 python 中哪里可以找到特定 tensorflow 对象的 .py 文件

从源代码构建 PHP 后的 PHP 二进制文件在哪里?