-->

其中从源构建TensorFlow当巴泽尔规则生成`gen_io_ops.py`文件?(Where i

2019-09-27 18:05发布

我试图确定如何gen_io_ops模块由巴泽尔从源代码构建TensorFlow时产生的。


在tensorflow /蟒/操作/ 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当由巴泽勒生成)。
_text_line_reader_v2是一个包装TextLineReaderV2中定义tensorflow / tensorflow /型芯/核/ text_line_reader_op.cc 。

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


1)为内核库text_line_reader_op建在tensorflow / tensorflow /核心/粒/ 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库用来生成Python包装是在bazel-genfiles/tensorflow/python/ops/gen_io_ops.py模块。 该文件生成可以通过完成tf_op_gen_wrapper_py在巴塞尔或规则tf.load_op_library()方法,但他们都不参与。

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

Answer 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 /蟒蛇/ 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模块将被该规则来生成。



文章来源: Where is the bazel rule generating the `gen_io_ops.py` file when building TensorFlow from sources?