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

Azure Batch MPI任务环境配置失败,无法加载libmpi.so.12求助

Azure Batch MPI任务环境配置问题

背景

我正尝试使用Azure Batch Python SDK执行基于MPI的任务,操作步骤如下:

  • 从JSON模板创建Batch池;
  • 创建SAS URL并将可执行文件及支持文件作为公共资源文件上传;
  • 创建任务对象:
    • 使用azure.batch.models.EnvironmentSetting添加环境设置;
    • 添加协调脚本(coordination script)和运行脚本(run_script)。

协调脚本内容

#!/usr/bin/bash

export MPI_HOME="/usr/local/openmpi4.0/openmpi-4.0.0/build"
export CUDA_HOME="/usr/local/cuda-11.0"

export LD_LIBRARY_PATH="$MPI_HOME/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
export PATH="$MPI_HOME/bin:$CUDA_HOME/bin:$PATH"
export PYTHONPATH="/usr/local/lib64/python3.6/site-packages:$PYTHONPATH"

运行脚本内容

#!/usr/bin/bash

export MPI_HOME="/usr/local/openmpi4.0/openmpi-4.0.0/build"
export CUDA_HOME="/usr/local/cuda-11.0"

export LD_LIBRARY_PATH="$MPI_HOME/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
export PATH="$MPI_HOME/bin:$CUDA_HOME/bin:$PATH"
export PYTHONPATH="/usr/local/lib64/python3.6/site-packages:$PYTHONPATH"

mpirun -np 3 --prefix /usr/local/openmpi4.0/openmpi-4.0.0/build --map-by ppr:4:node --oversubscribe --mca btl_openib_allow_ib 1 -host $AZ_BATCH_HOST_LIST $AZ_BATCH_TASK_SHARED_DIR/EXECUTABLE_FILE $AZ_BATCH_TASK_SHARED_DIR/INPUT_FILE_WITH_PARAMS

错误信息

/path/to/my/executable: error while loading shared libraries: libmpi.so.12: cannot open shared object file: No such file or directory


Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.

核心问题:环境设置未生效,导致MPI共享库无法被找到,求正确的任务环境配置方法。


解决方案

问题根源

脚本中手动导出的环境变量仅在当前shell会话有效,但mpirun启动的子进程可能无法继承这些变量;同时Azure Batch任务的执行上下文可能未正确加载脚本中的配置,且LD_LIBRARY_PATH这类关键变量未被显式传递给所有MPI进程。

正确配置步骤

1. 全局配置环境变量(通过Task的EnvironmentSetting)

不要仅在脚本中手动导出,直接在任务对象中配置全局环境变量,确保所有进程都能获取:

from azure.batch import models as batch_models

# 定义全局环境变量
environment_settings = [
    batch_models.EnvironmentSetting(
        name="MPI_HOME",
        value="/usr/local/openmpi4.0/openmpi-4.0.0/build"
    ),
    batch_models.EnvironmentSetting(
        name="CUDA_HOME",
        value="/usr/local/cuda-11.0"
    ),
    batch_models.EnvironmentSetting(
        name="LD_LIBRARY_PATH",
        value="$MPI_HOME/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
    ),
    batch_models.EnvironmentSetting(
        name="PATH",
        value="$MPI_HOME/bin:$CUDA_HOME/bin:$PATH"
    ),
    batch_models.EnvironmentSetting(
        name="PYTHONPATH",
        value="/usr/local/lib64/python3.6/site-packages:$PYTHONPATH"
    )
]

# 创建任务时传入环境变量
task = batch_models.TaskAddParameter(
    id="mpi-task-1",
    command_line="bash run_script.sh",
    environment_settings=environment_settings,
    # 补充其他必要配置:资源文件、任务依赖等
)

2. 修改运行脚本,强制传递环境变量给MPI进程

在mpirun命令中添加-x参数,显式传递关键环境变量,确保所有子进程都能获取:

#!/usr/bin/bash

mpirun -np 3 \
--prefix /usr/local/openmpi4.0/openmpi-4.0.0/build \
--map-by ppr:4:node \
--oversubscribe \
--mca btl_openib_allow_ib 1 \
-x LD_LIBRARY_PATH \
-x PATH \
-x MPI_HOME \
-x CUDA_HOME \
-host $AZ_BATCH_HOST_LIST \
$AZ_BATCH_TASK_SHARED_DIR/EXECUTABLE_FILE $AZ_BATCH_TASK_SHARED_DIR/INPUT_FILE_WITH_PARAMS

说明:-x VAR_NAME会将当前shell的对应变量传递给所有MPI启动的进程,确保可执行文件能定位到libmpi.so.12。

3. 验证MPI库路径的有效性

先在Batch节点上手动检查目标路径下是否存在libmpi.so.12,若路径错误或文件缺失,需修正MPI_HOME配置:

ls /usr/local/openmpi4.0/openmpi-4.0.0/build/lib/libmpi.so.12

4. 简化脚本,避免冗余配置

既然已通过EnvironmentSetting设置全局环境变量,协调脚本和运行脚本中无需重复执行export操作,减少冲突和冗余。

额外注意事项

  • 确保Batch池的所有节点已正确安装OpenMPI 4.0.0和CUDA 11.0,否则即使环境变量配置正确,也会出现库文件缺失问题;
  • 多节点MPI任务需保证所有节点的MPI安装路径完全一致,否则AZ_BATCH_HOST_LIST中的节点会因路径不匹配报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:29