2. 获取帮助

如果您遇到问题或有疑问,强烈建议您按顺序执行以下步骤。许多用户在配置和初始设置Open MPI时都会遇到类似问题——您的问题可能已有现成答案。

  1. 验证您的Open MPI安装。这可以确保您拥有一个基本正确的Open MPI安装。

  2. 查看之前的GitHub问题,看看其他人是否提出过相同的问题并已得到解答。

  3. Check the mailing list archives 使用“搜索”功能(或Google)查看历史帖子,确认是否已有其他人提出相同问题并得到解答。

  4. 如果在上述资源中未找到问题的解决方案,请前往发送到哪里?部分。

2.1. 发送到哪里?

不同类型的问题和疑问应发送至不同的地方。如果您遇到:

  1. 一般终端用户的问题或疑问:您可能需要订阅Open MPI用户邮件列表并在那里发布您的问题。

    注意

    由于垃圾邮件问题,只有邮件列表的订阅者才被允许向该列表发送邮件。具体来说:您必须在发帖前先订阅邮件列表。

    重要

    您在报告中包含的信息越多越好。仅简单说明“它不工作!”的电子邮件/错误报告并无帮助;我们需要尽可能了解您的环境信息,以便提供有效的协助。

    获取帮助的最佳方式是提供问题复现的"步骤说明"。这将让Open MPI开发者能够亲自看到错误,从而能够修复它。

    重要

    请在邮件中使用描述性的"主题"行! 一些Open MPI问答人员会根据邮件主题决定是否阅读(例如,判断是否是他们能回答的问题)。因此,请务必务必使用能简明描述问题的好主题行。

  2. 错误报告: 您可能需要将其发布到Open MPI的Github问题跟踪器。请按照模板提交所有要求的信息。

  3. 补丁、错误修复或其他代码提交:请向Open MPI Github仓库提交Github Pull Request。

  4. 关于Open MPI本身的开发者级别/内部问题: 您应该订阅Open MPI开发者邮件列表并在那里发布您的问题。

如果不确定该向哪里发送问题,请订阅并向用户邮件列表发送邮件(即上述选项#1)。

2.2. 关于构建或安装Open MPI的问题

如果您无法成功配置、构建或安装Open MPI,请提供所有以下信息:

  1. 您正在使用的Open MPI版本。

  2. 运行configure时的标准输出和标准错误输出。

  3. 来自Open MPI构建树的所有config.log文件。

  4. 运行make V=1 all构建Open MPI时的输出。

  5. 运行make install安装Open MPI时的输出信息。

以下脚本可能有助于收集上述大部分信息(请根据您的具体环境进行必要调整):

#!/usr/bin/env bash

set -euxo pipefail

# Make a directory for the output files
dir="`pwd`/ompi-output"
mkdir $dir

# Fill in the options you want to pass to configure here
options=""
./configure $options 2>&1  | tee $dir/config.out
tar -cf - `find . -name config.log` | tar -x -C $dir

# Build and install Open MPI
make V=1 all 2>&1          | tee $dir/make.out
make install 2>&1          | tee $dir/make-install.out

# Bundle up all of these files into a tarball
filename="ompi-output.tar.bz2"
tar -jcf $filename `basename $dir`
echo "Tarball $filename created"

然后将生成的ompi-output.tar.bz2文件附加到您的报告中。

警告

邮件列表对消息有150 KB的大小限制(这是邮件列表网络存档的限制)。如果附加的压缩包使您的消息超过150 KB,您可能需要将压缩包发布到其他地方,并在发送给列表的邮件中包含指向该压缩包的链接。

2.3. 启动MPI或OpenSHMEM应用程序时遇到的问题

如果您无法成功在多个节点上启动简单的应用程序(例如非MPI的hostname命令,或examples/目录中的MPI"hello world"或"ring"示例应用程序),请提供构建或安装Open MPI时遇到的问题章节中的所有信息,以及以下所有附加信息:

  1. 从调用mpirun(1)的节点上执行ompi_info --all命令的输出结果。

  2. 如果您对进程映射或绑定有任何疑问或问题,请发送从最新版Hwloc运行lstopo -vlstopo --of xml命令的输出结果。

  3. 如果在多个节点上运行,还需包含每个运行节点上执行ompi_info --version命令的输出结果。

  4. 运行mpirun --map-by ppr:1:node --prtemca plm_base_verbose 100 --prtemca rmaps_base_verbose 100 --display alloc hostname的输出。如果您的环境需要,可以添加--hostfile参数。

以下脚本可能有助于收集上述大部分信息(请根据您的具体环境进行必要调整)。

注意

在运行完构建与安装部分的脚本后,再运行此脚本是安全的。

#!/usr/bin/env bash

set -euxo pipefail

# Make a directory for the output files
dir="`pwd`/ompi-output"
mkdir -p $dir

# Get installation and system information
ompi_info --all 2>&1       | tee $dir/ompi-info-all.out
lstopo -v                  | tee $dir/lstopo-v.txt
lstopo --of xml            | tee $dir/lstopo.xml

# Have a text file "my_hostfile.txt" containing the hostnames on
# which you are trying to launch
for host in `cat my_hostfile.txt`; do
    ssh $host ompi_info --version 2>&1 | tee $dir/ompi_info-version-$host.out
    ssh $host lstopo -v                | tee $dir/lstopo-v-$host.txt
    ssh $host lstopo --of xml          | tee $dir/lstopo-$host.xml
done

# Have a my_hostfile.txt file if needed for your environment, or
# remove the --hostfile argument altogether if not needed.
set +e
mpirun \
     --hostfile my_hostfile.txt \
     --map-by ppr:1:node \
     --prtemca plm_base_verbose 100 \
     --prtemca rmaps_base_verbose 100 \
     --display alloc \
     hostname 2>&1                     | tee $dir/mpirun-hostname.out

# Bundle up all of these files into a tarball
filename="ompi-output.tar.bz2"
tar -jcf $filename `basename $dir`
echo "Tarball $filename created"

2.4. 运行MPI或OpenSHMEM应用程序时的问题

如果您能成功启动并行MPI或OpenSHMEM应用程序,但在运行过程中作业失败,请提供构建或安装Open MPI问题章节中的所有信息,启动MPI或OpenSHMEM应用程序问题章节中的所有信息,以及以下所有额外信息:

  1. 关于故障的详细描述。您提供的细节越多,效果越好。请至少包含以下信息:

    • 用于运行应用程序的确切命令。

    • 运行时所设置(或取消)的任何相关MCA参数(无论是通过命令行、环境变量、参数文件等方式)。

    • 环境变量 PATHLD_LIBRARY_PATH 的值(您是否正确设置了这些变量,使其指向所有相关的可执行文件、Open MPI库以及任何必需的支撑库,例如InfiniBand等高速网络所需的库)。

  2. 展示问题的简短示例程序源代码(建议使用C或Fortran语言)。

  3. 如果您遇到网络问题,请提供有关您网络的详细信息。

    错误

    待办事项:更新指向IB常见问题条目的链接。

    1. 对于基于RoCE或InfiniBand的网络,请包含此FAQ条目中的信息。

    2. 对于基于以太网的网络(包括基于RoCE的网络),请在所有相关节点上包含ip addr命令(或传统的ifconfig命令)的输出结果。

      注意

      某些Linux发行版不会将ipifconfig放在普通用户的默认PATH中。可以尝试在/sbin/usr/sbin目录下查找这些命令。