Ubuntu16.04编译带OpenMPI支持的TensorFlow1.3遇头文件引用错误
解决Ubuntu 16.04编译TensorFlow 1.3支持MPI的头文件引用问题
看起来你遇到的核心问题是Bazel构建系统没有正确配置OpenMPI的头文件搜索路径,导致嵌套的头文件引用出现循环找不到的情况。手动创建符号链接反而打乱了头文件的相对引用逻辑,我们可以通过修改TensorFlow的MPI构建配置来解决这个问题:
步骤1:清理之前的错误符号链接
先删除你之前创建的会导致路径混乱的符号链接:
rm third_party/mpi/openmpi
步骤2:修改TensorFlow的MPI构建配置文件
打开tensorflow/third_party/mpi/BUILD文件,找到定义mpi库的cc_library规则,将其修改为以下内容,直接把系统OpenMPI的头文件和库路径加入构建配置:
cc_library( name = "mpi", srcs = [], hdrs = ["mpi.h"], includes = [ ".", # 保留对third_party/mpi/mpi.h的引用 "/usr/lib/openmpi/include", # 添加系统OpenMPI头文件根目录 ], copts = [ "-I/usr/lib/openmpi/include", ], linkopts = [ "-L/usr/lib/openmpi/lib", "-lmpi", "-lmpi_cxx", # 链接MPI的C++库 ], visibility = ["//visibility:public"], )
步骤3:重新执行编译命令
完成配置修改后,重新运行你的Bazel编译命令:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
为什么这个方法有效?
- 保留
"."在includes中,确保TensorFlow代码能找到third_party/mpi/mpi.h这个符号链接 - 添加
/usr/lib/openmpi/include到搜索路径后:mpi.h中引用的openmpi/ompi/mpi/cxx/mpicxx.h可以直接从系统路径找到mpicxx.h中引用的mpi.h也会优先从系统路径加载,避免了符号链接带来的相对路径混乱
- 显式指定链接选项,确保Bazel能找到OpenMPI的动态库
另外,确认你在运行./configure时,已经正确回答了MPI相关的提问:当被问到"Do you wish to build TensorFlow with MPI support?"时选择Yes,并指定MPI toolkit路径为/usr/lib/openmpi。
内容的提问来源于stack exchange,提问作者Hey
相关产品推荐
相关产品推荐

