如何从tensorflow构建中保存中间文件?

时间:2018-06-24 03:56:50

标签: tensorflow bazel

我正在尝试分析tensorflow op内核的预处理源。我尝试了以下命令行,这些命令行是根据一般的构建说明改编而成的:

 bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package --save_temps

它可以正确构建,但是从文档中,我期望将-H / -S传递给编译器。我不确定是否会发生这种情况,但是除了少数文件外,我找不到任何.i,.ii或.s文件(我看到swig的.i文件和boringssl和nsync的.s文件)在我的缓存文件夹中,尽管我确实获得了python包来源的.i文件:

./tensorflow/compiler/xla/python/local_computation_builder.i
./tensorflow/compiler/xla/python/xla.i
./tensorflow/python/training/server_lib.i
./tensorflow/python/training/quantize_training.i
./tensorflow/python/grappler/item.i
./tensorflow/python/grappler/cost_analyzer.i
./tensorflow/python/grappler/tf_optimizer.i
./tensorflow/python/grappler/model_analyzer.i
./tensorflow/python/grappler/cluster.i
./tensorflow/python/pywrap_tfe.i
./tensorflow/python/lib/io/py_record_writer.i

怀疑可能需要建立其他目标,因此尝试列出可用的目标:

bazel query //tensorflow --output package

但遇到以下错误:

WARNING: /root/.cache/bazel/_bazel_root/f4653201e29159237cbc73869b47a72b/external/protobuf_archive/WORKSPACE:1: Workspace name in /root/.cache/bazel/_bazel_root/f4653201e29159237cbc73869b47a72b/external/protobuf_archive/WORKSPACE (@com_google_protobuf) does not match the name given in the repository's definition (@protobuf_archive); this will cause a build error in future versions
ERROR: error loading package 'tensorflow': Encountered error while reading extension file 'cuda/build_defs.bzl': no such package '@local_config_cuda//cuda': Traceback (most recent call last):
File "/tf-persist/third_party/gpus/cuda_configure.bzl", line 1166
    _create_local_cuda_repository(repository_ctx)
File "/tf-persist/third_party/gpus/cuda_configure.bzl", line 1014, in _create_local_cuda_repository
    _find_libs(repository_ctx, cuda_config)
File "/tf-persist/third_party/gpus/cuda_configure.bzl", line 667, in _find_libs
    _find_cuda_lib("cudnn", repository_ctx, cpu_value, cu..., ...)
File "/tf-persist/third_party/gpus/cuda_configure.bzl", line 587, in _find_cuda_lib
    auto_configure_fail(("Cannot find cuda library %s" %...))
File "/tf-persist/third_party/gpus/cuda_configure.bzl", line 210, in auto_configure_fail
    fail(("\n%sCuda Configuration Error:%...)))

Cuda Configuration Error: Cannot find cuda library libcudnn.so.7

如果不清楚,我对bazel不太熟悉。

问题:

A)我对问题的诊断是否正确?如果是这样,我是否正确查询目标列表?

B)是否可以在不实际编译源代码的情况下用bazel生成中间表示形式?我实际上不需要目标文件。

1 个答案:

答案 0 :(得分:2)

--save_temps仅适用于显式构建的目标Bazel,不适用于所有传递依赖项。因此,您必须找到您感兴趣的C ++目标并直接构建它。然后,您会看到一堆.ii.s文件。

侧面轨道,您可以使用--subcommands运行构建,以查看Bazel创建的所有操作和命令行。

重新查询,bazel query //tensorflow/...对我有用,该错误是否可能是源同步和./configure引起的?看起来像是配置问题。我没有尝试在启用cuda支持的情况下构建TF。