首页 文章

TensorFlow不会使用调试模式构建

提问于
浏览
4

我们正在尝试使用debug标志构建TensorFlow测试用例:

bazel build -c dbg // tensorflow / python / kernel_tests:sparse_matmul_op_test

但是,构建失败并出现以下错误:

/usr/include/features.h:330:4:错误:#warning _FORTIFY_SOURCE需要使用优化进行编译(-O)[-Werror = cpp]警告_FORTIFY_SOURCE需要使用优化进行编译(-O)cc1:所有警告都被视为errors目标// tensorflow / python / kernel_tests:sparse_matmul_op_test无法构建

我们尝试过以下选项来解决此问题:

通过将导出CFLAGS和CXXFLAGS导出为“-Wno-error”构建

  • bazel build -c dbg --cxxopt =“ - Wno-all”--cxxopt =“ - Wno-error”// tensorflow / python / kernel_tests:sparse_matmul_op_test

  • 尝试从third_party / gpus / crosstool / CROSSTOOL.tpl评论compiler_flag

抑制这些警告以使构建继续进行的正确方法是什么?

我们正在使用gcc v5.4.0 .

2 回答

  • 2

    我最近遇到了同样的问题 . 它通过在构建命令中添加 --copt=-O-c opt 来解决 .

    例:

    bazel build --copt=-O -c dbg -c opt //tensorflow/python/kernel_tests:sparse_matmul_op_test
    
  • 0

    启用CUDA构建时,@ BernardoGO的解决方案不起作用:

    $ bazel build --copt=-O -c opt --config cuda -c dbg --strip=never //tensorflow/tools/pip_package:build_pip_package -s
    
    /usr/include/c++/6/bits/stl_pair.h(327): error: calling a __host__ function("std::_Rb_tree_const_iterator< ::tensorflow::NcclManager::NcclStream *> ::_Rb_tree_const_iterator") from a __device__ function("std::pair< ::std::_Rb_tree_const_iterator< ::tensorflow::NcclManager::NcclStream *> , bool> ::pair< ::std::_Rb_tree_iterator< ::tensorflow::NcclManager::NcclStream *>  &, bool &, (bool)1> ") is not allowed
    
    /usr/include/c++/6/bits/stl_pair.h(327): error: identifier "std::_Rb_tree_const_iterator< ::tensorflow::NcclManager::NcclStream *> ::_Rb_tree_const_iterator" is undefined in device code
    
    /usr/include/c++/6/bits/stl_algobase.h(1009): error: calling a __host__ function("__builtin_clzl") from a __device__ function("std::__lg") is not allowed
    
    3 errors detected in the compilation of "/tmp/tmpxft_00007abb_00000000-6_nccl_manager.cpp1.ii".
    

    仅当 --copt=-O 替换为 --copt=-O1 时才有效,但 -O1 太多,无法进行舒适的调试 .

相关问题