平台: Linux 适用于: COMSOL Multiphysics®, COMSOL Server™ 版本: 6.1, 6.0, 5.6

问题描述

我发现 Linux 上的分布式集群作业没有启动,并收到来自 MPI 的错误消息。

解决方法

COMSOL 无法在 Linux 集群上运行的根本原因可能是未正确检测到网络接口和光纤。在 Linux 系统中,COMSOL 6.0 自带 Intel MPI 2021.2 并行库。您可以通过以下步骤查看是否存在 Intel MPI 的不兼容:

当您发现 Intel MPI 无法在集群上运行时,应该首先确保您的提交脚本配置正确。此外,您还可以通过调用以下命令来运行 MPI 测试

comsol hydra mpitest -nn 2 -f hostfile

或者,如果您使用 Slurm 等作业调度系统,可以测试

#SBATCH --nodes=2  
#SBATCH --ntasks-per-node=1 
...
comsol hydra mpitest -nn 2 -nnhost 1 

以确定 MPI 是否确实是问题所在。您还可以添加开关 '-mpidebug 10' 来获取额外的调试输出。

为了解决这个问题,您可以尝试以下建议 A. 和 B.。如果 A. 适合您的情况,我们仍然推荐您继续尝试 B.,因为此选项可以提供更好的性能。

A. 回退到 TCP 通讯协议

导出环境变量 FI_PROVIDER,并将其设置为 'sockets'。在 Slurm 中,可以通过以下命令完成

#SBATCH --export=FI_PROVIDER=sockets

或者,您可以直接在 Linux 系统中使用

export FI_PROVIDER=sockets 

setenv FI_PROVIDER sockets

并确保将此环境变量移交给集群作业。

这种方法的缺点是通信会回退到 TCP 通讯协议,如果您的光纤更快,这可能会减慢并行运算的效率。

B. 安装更高版本的 Intel MPI

您可以从这里下载 Intel MPI 2021.6,然后安装。如果您没有集群的管理员权限,可以将其安装到您自己的家目录。

然后,使用附加开关启动 COMSOL

-mpiroot <Intel 2021.6 installation directory>/intel/oneapi/mpi/2021.6.0 

在 Slurm 上,您可以调用以下命令

#SBATCH --nodes=2  
#SBATCH --ntasks-per-node=1 
...
comsol hydra mpitest -nn 2 -nnhost 1 -mpiroot <Intel 2021.6 installation directory>/intel/oneapi/mpi/2021.6.0

备注:

  • 您也可以指向其他基于 MPICH2 的 MPI 安装(但不能指向 OpenMPI 等)
  • 在 COMSOL 5.6 中,您也可以通过 -mpiroot 指向 IMPI 2021.6。