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

How to save intermediate files from tensorflow build?

我正在尝试分析 tensorflow 运算内核的预处理源。我尝试了以下命令行,改编自一般构建说明:

 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 生成中间表示吗?我实际上并不需要目标文件。

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

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

再问,bazel query //tensorflow/...对我有用,请问是不是源和./configure不同步导致的?它看起来像一个配置问题。我没有尝试在启用 cuda 支持的情况下构建 TF。