You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

为什么这个方法有效?

  1. 保留"."在includes中,确保TensorFlow代码能找到third_party/mpi/mpi.h这个符号链接
  2. 添加/usr/lib/openmpi/include到搜索路径后:
    • mpi.h中引用的openmpi/ompi/mpi/cxx/mpicxx.h可以直接从系统路径找到
    • mpicxx.h中引用的mpi.h也会优先从系统路径加载,避免了符号链接带来的相对路径混乱
  3. 显式指定链接选项,确保Bazel能找到OpenMPI的动态库

另外,确认你在运行./configure时,已经正确回答了MPI相关的提问:当被问到"Do you wish to build TensorFlow with MPI support?"时选择Yes,并指定MPI toolkit路径为/usr/lib/openmpi。

内容的提问来源于stack exchange,提问作者Hey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:34:38