问题描述
本文旨在指导您如何在 COMSOL Multiphysics® 中启用分布式并行计算(即集群作业),以充分发挥高性能计算资源的优势。
解决方法
COMSOL 支持两种可并存的并行运行模式:共享内存并行与分布式内存并行(支持集群)。本文主要介绍分布式内存并行计算。如需了解共享内存并行计算的配置方法,请参见解决方法 1096。
借助 MPI 技术,COMSOL 能够在计算集群上分配计算任务。一个大型问题可以分布到多个计算节点上运行,每个计算进程将分担相应的数据和工作量。这种分布式架构不仅能降低单台主机的内存占用、扩展系统的可用总内存容量,更能在处理超大规模的模型时显著缩短求解时间。此外,参数化扫描同样支持分布式运行,系统可将不同的参数实例分别分配至各个集群节点进行计算。
集群计算支持以下平台与调度环境:Windows®(Windows® Server 2012 R2/2016/2019/2022/2025,或安装了 Microsoft MPI 的工作站),以及基于 Linux® 的 SLURM®、PBS 或 Open Grid Scheduler/Grid Engine(OGS/GE,基于 Sun Grid Engine)等系统。其他常见调度器(如,LSF)可通过以下两种方式使用:一是在 COMSOL Desktop® 中将调度器类型设置为通用,并配合自定义封装脚本使用(详见下文);二是通过命令行创建作业提交脚本,以批处理方式提交作业。
注:需要“网络浮动许可证”(FNL) 才能在分布式内存并行(集群/云计算)模式下运行 COMSOL Multiphysics®。
在接下来的章节中,我们将为您提供集群计算的快速入门指南和附加链接、实用技巧以及常见问题排查方案,助您轻松驾驭高性能仿真。
集群运行模式
在使用 COMSOL Multiphysics® 进行集群计算时,您可以根据实际需求灵活选择以下运行模式来配置并启动计算任务:
通过 GUI 远程运行:在集群上运行 COMSOL Multiphysics® 最简便的方式是通过图形用户界面 (GUI) 进行。您可以在本地桌面、工作站或集群节点上启动 GUI,用于构建模型,然后在研究中使用集群计算或集群扫描节点,配置并行执行任务,将其提交至远程集群或同一本地机器上运行。当分布式外部作业完成后,解数据会存储到指定的输出文件中。在“集群扫描”节点下,您可以选择同步解选项,以便在本地 GUI 中获取参数化解用于后处理。有关如何为分布式计算设置研究以及如何配置集群访问的详细说明,请参见 COMSOL Desktop 环境如何实现在集群上运行。远程集群上的作业调度器设置可以在 GUI 中完成(参考示例中使用的是 SLURM®)。
命令行集群批处理调用:对于超大型模型,如果需要传输海量数据、作业执行时间较长、计算启动时间较晚(多用户集群的调度器可能会延迟作业执行),或者没有可用的 GUI 环境,此时基于 GUI 的集群计算方法可能并不可行。在这些场景下,您可以通过命令行以批处理命令的方式提交集群作业。对于命令行方式的分布式运行,无需在研究中添加集群计算或集群扫描节点(即使存在也会被忽略)。提交分布式批处理作业的机制与如何从命令行以批处理模式运行仿真中描述的方法类似,更多详细信息请参见以下说明。如果集群受 SLURM®、PBS、OGS/GE、HPCS (Microsoft HPC Pack) 或 LSF 等调度器控制,则需要通过作业提交脚本对 COMSOL 批处理命令进行封装。
在分布式 GUI 实例中运行:如果集群不受调度器控制,则可以启动带有分布式集群实例的交互式 GUI 会话。这种方式的使用体验与在标准 PC 或工作站上运行 COMSOL Multiphysics® GUI 基本一致,对研究的并行执行无需使用“集群计算”或“集群扫描”节点。
客户端-服务器模式:COMSOL Multiphysics® 产品的客户端-服务器模式(请勿与 COMSOL Server™ 混淆)也可用于分布式 COMSOL Multiphysics® 服务器。有关该运行模式的介绍,请参见 Getting the Most out of Client-Server Mode。在集群环境中,可以通过 COMSOL 命令行变元(详见下文)启动分布式 COMSOL Multiphysics® 服务器,然后从作为客户端的远程 GUI 连接到该分布式多物理场服务器。
COMSOL Server™:用户可以通过在 COMSOL Server™ 上运行的 App 来启动分布式批处理作业。该 App 需要在相关研究中实现“集群计算”或“集群扫描”节点。这些批处理作业可以在集群上以分布式模式执行。集群环境中需要安装 COMSOL Server™,但 COMSOL Server 实例也可以在其他计算机上运行。
云计算:除了传统的物理集群,您同样可以依托云计算基础设施享受分布式计算的强大算力。更多信息(包括可协助快速部署环境的云供应商合作伙伴列表),请参见在云端运行 COMSOL® Multiphysics 和 COMSOL Server™ 和云合作伙伴。
基本概念
在探讨集群计算和共享内存并行计算的硬件架构时,以下术语至关重要:
- 主机:指配备网络适配器并拥有唯一网络地址的物理计算机。一个集群通常由多台通过网络连接的主机构成,后者有时也称为物理节点。
- 计算节点:指执行分布式计算的运行实例。每个计算节点中都会运行一个 COMSOL 实例,并通过 MPI 与其他计算节点进行通信。计算节点是运行于操作系统之上的进程,多个计算节点可以被分配到同一台主机上运行。
- 内核:在配备多核处理器的主机上运行的计算节点,会使用一个或多个物理处理器内核来实现共享内存并行计算。例如,一台配备两块四核处理器的主机,共拥有 8 个可用内核。
以下设置对于指定 COMSOL 如何在分布式内存硬件上执行集群作业尤为重要:
- 节点数:执行集群作业时,在所有主机上创建的计算节点总数,也等同于实际运行的 MPI 进程数。
- 主机文件:这是一个纯文本文件,列出了参与计算的所有主机的 IP 地址或主机名。配置正确的 COMSOL 主机文件应确保每个 IP 地址仅出现一次,且每个条目独占一行。
- 每台主机上的进程数:将在每台主机上运行的计算节点数量。
在 COMSOL GUI 中,“节点数”和“主机上的进程数”可以在集群计算或集群扫描节点,以及作业配置节点下的相关子节点中找到;而主机文件则可以在首选项的多核与集群计算中进行设置:
在通过命令行运行 COMSOL 的非交互式会话时,可以通过执行变元进行等效设置:
-nn <no. of nodes>| 计算节点总数-f <path/hostfile>| 包含主机名列表的文件路径和文件名-nnhost <no. of nodes per host>| 每台主机上运行的计算节点数-np <no. of cores>| 每个计算节点使用的内核数
命令行快速入门
直接通过命令行提交作业是上手 COMSOL 集群计算最快捷的方式,这要求您具备访问集群,可以登录其中某台主机及执行命令的权限。一个最简单的示例是基于普通工作站构建 Beowulf 集群,具体方法可参见建立贝奥武夫集群加速多物理场仿真一文。
以下示例假设系统由四台主机组成,每台主机配备八个内核。第一个示例中的输入文件 example.mph 可以是任意一个要在四台主机上分布式运行的 COMSOL 文件。采用这种分布式运行最常见的原因是,单台主机无法提供求解器所需的足够内存。以下 Linux® 操作系统执行命令将创建 4 个计算节点,每台主机(其 IP 地址或主机名由 hostfile 文件指定)运行 1 个计算节点,每个计算节点将使用所在主机的全部 8 个内核。
comsol batch -nn 4 -nnhost 1 -np 8 -f hostfile
-inputfile example.mph
-outputfile example_solved.mph -batchlog logfile.log
第二个示例中,输入文件 example.mph 可以是包含参数化扫描的任意 COMSOL 模型文件,其中每个参数值的求解都能在单机上独立完成。通过将扫描任务分布到集群上执行,可以加快求解速度。在模型准备阶段,请进入参数化扫描节点,在“模型开发器”窗口顶部的“视图”菜单中启用高级研究选项,然后在研究扩展设置中勾选分布式参数化扫描复选框。此操作将配置 COMSOL 调度器,使每个参数值在不同的计算节点上运行。使用与第一个示例相同的 Linux® 命令时,系统会同时运行四个参数,每台主机上运行一个。如果扫描的参数超过四个,当某个计算节点完成一个参数的求解后,将自动开始计算下一个参数,直至所有参数求解完成。
对于某些参数化扫描(例如,模型规模较小但参数较多的情况),为每台主机分配多个计算节点往往能带来更高的吞吐量。以下 Linux® 命令将创建八个计算节点,hostfile 中列出的四台主机各运行两个节点。由于每台主机上的八个内核需要由两个计算节点共享,因此每个计算节点被分配四个内核。
comsol batch -nn 8 -nnhost 2 -np 4 -f hostfile
-inputfile example.mph
-outputfile example_solved.mph -batchlog logfile.log
关于在单台主机上同时运行多个参数的潜在优势,请参见博客文章混合计算:共享内存与分布式内存相结合的优势。
在交互式 COMSOL® 会话中进行集群分布式计算
运行集群作业的另一种方式,是通过右键单击研究节点,添加集群计算或集群扫描节点来完成(需提前启用高级研究选项)。集群计算接口会将整个研究的计算任务分发至所有主机上执行(其工作原理与前文第一个示例类似),其中的节点数、主机文件以及并发作业数等相应设置均可在“集群计算”或“集群扫描”节点中完成。关于各项设置的详细说明,请参见 COMSOL Desktop® 环境如何实现在集群上运行一文。
集群扫描接口的运行方式与上述第二个示例中介绍的分布式参数扫描相似,其中额外提供了参数实例间解数据或累积探针表同步的设置。有关如何设置和使用“集群扫描”节点的详细介绍,请参阅博客文章如何使用 Comsol Multiphysics® 中的集群扫描节点。
以下是“案例库”中包含的集群计算示例模型:
COMSOL_Multiphysics/Tutorials/micromixer_cluster 演示了如何使用集群计算接口将单个模型的计算任务分布到多个节点上执行。如果 COMSOL 会话在某个集群主机上运行,则可通过以下方式使用 COMSOL 内置的调度器:将“调度器类型”设置改为“通用”,然后指定节点数并提供主机文件的路径。
COMSOL_Multiphysics/Tutorials/thermal_actuator_jh_distributed 演示了如何将集群计算接口与分布式参数化扫描相结合,实现各节点独立求解不同的参数。这一功能也可以通过将集群计算和参数化扫描替换为集群扫描来实现,后者在文件处理方面提供了更多选项,且对单节点故障具备更强的容错能力。
启动 GUI 集群实例
您可以通过调用以下命令来启动 GUI 集群实例(非批处理模式),例如:
comsol -nn 8 -nnhost 2 -np 4 -f hostfile
在这种模式下,GUI 中的所有计算都会以分布式方式运行,无需在对应研究中添加“集群计算”或“集群扫描”节点。需要注意的是,此方法仅适用于不受外部调度器控制的集群,且要求系统策略允许 GUI 环境的正常渲染。
在安装了 Microsoft MPI 的 Windows 计算机(多核/多插槽)上,您可以通过调用以下命令启动 GUI 集群实例,例如:
mpiexec -n 2 comsolcluster.exe -np 2
该命令将提供两个计算节点,每个节点运行两个线程(适用于四核处理器)。
启动分布式 COMSOL Multiphysics® 服务器
您可以通过如下命令启动分布式 COMSOL Multiphysics® 服务器:
comsol mphserver -nn 8 -nnhost 2 -np 4 -f hostfile
当您在同一台机器或局域网内的另一台计算机上启动 COMSOL Multiphysics 实例并作为客户端连接到该 Multiphysics® Server 时,所有计算都会在指定的并行环境中执行。
读取批处理日志与求解器日志
建议养成查看求解器日志(在 GUI 中交互式运行时生成)或批处理日志(在批处理运行时生成)的习惯。输出信息会显示进程启动所在的主机名、使用的计算进程(节点)数,以及所使用的处理器、插槽及内核数等相关信息。
当 COMSOL 启动时,日志中会显示类似如下的信息:
Node 0 is running on host: cluster0
Node 0 has address: cluster0.myinst.com
Node 1 is running on host: cluster1
Node 1 has address: cluster1.myinst.com
...
GUI 的“消息”窗口会显示类似如下的消息:
使用 8 个节点在分布式模式下运行
“日志”窗口中的求解器日志或批处理日志文件,会详细列出所有计算节点的处理器与内核信息,例如:
...
<<<<< Node 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Running in distributed mode using 8 nodes.
Running on 2 x Intel(R) Xeon(R) Gold 6132 CPU at 2.60 GHz.
Using 2 sockets with 28 cores in total on cluster1.myinst.com.
...
其中,<<<<< Node 1 <<< ... 行表示后续行内容由该节点输出。紧随其后的第一行是所有节点都会输出的全局信息,其后两行则是当前节点的本地信息。
请注意:COMSOL 无法从超线程技术中获得性能提升。因此,在某一台主机上,进程所使用的总内核数不应超过该主机的物理内核数。如果发生资源过度分配的情况,日志中通常会出现相应警告。不过,如果处理器支持超线程,建议始终保持该功能开启,以便其他应用程序能够利用超线程能力。
直接提交至作业调度器
如果集群由作业调度器控制,可以在调用命令中添加调度器专属的指令。在 SLURM® 集群环境中,启动命令可能如下所示:
sbatch -N 4 --ntasks-per-node=2 --export=FLROOT=${COMSOL_INSTALL_PATH}
${COMSOL_INSTALL_PATH}/bin/comsol batch -mpibootstrap slurm -nnhost 2
-inputfile ${MODEL_PATH}/input.mph -outputfile ${MODEL_PATH}/output.mph
-batchlog ${MODEL_PATH}/job.log
其中,SLURM 选项 -N 用于设置物理主机数量,选项 --ntasks-per-node 用于设置每台物理主机上的计算节点数。COMSOL 选项 -mpibootstrap slurm 用于让 COMSOL 根据 SLURM 环境自动推导出 COMSOL 专属参数 -nn(线程数 -np 的值将自动设为最优值,即,使用所有可用资源)。在上述示例中,系统将自动推导得到 -nn 8 和 -nnhost 2。系统变量 FLROOT 需要设置为 COMSOL 的安装路径(由用户设置的变量 COMSOLINSTALLPATH 给出,例如 /usr/local/comsol64/multiphysics)。同时,还需要正确设置 MODEL_PATH 变量。
使用作业提交脚本
如果集群中的作业由调度器统一管理,您可以使用针对受支持调度器(Microsoft HPC Pack、SLURM®、PBS、OGS/GE)预定义的 GUI 界面。对于不受支持的调度器(例如,LSF),则可以将调度器类型设置为“通用”,并通过 GUI 调用集群上的封装脚本(请参见下文)。
为了在本地启动由调度器控制的集群作业,可以将 COMSOL 批处理命令封装到作业提交脚本中。通过命令行启动 COMSOL 时,可使用选项 -nn 指定计算进程总数(即 MPI 进程总数),并通过选项 -nnhost 指定每台主机上的计算进程数。而许多调度器(如 SLURM)则需要将物理主机的总数作为输入变元,您需要据此对期望的设置进行相应调整。计算进程总数(COMSOL 中通过 -nn 指定)等于物理主机数(SLURM® 使用 -N 或 --nodes 指定)乘以每台主机上的任务数(SLURM® 使用 --ntasks-per-node 指定,COMSOL 使用 -nnhost 指定)。因此,作业提交脚本除了负责基础环境配置外,还需要完成 COMSOL 选项与调度器选项之间的映射与转换。
下面提供了一组示例提交脚本供参考。
SLURM® 作业提交脚本示例
#!/bin/bash
# slurmsubmit.sh
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=2
#SBATCH --job-name="COMSOL"
#SBATCH --mem="8000"
#SBATCH --time="04:00:00"
#SBATCH --partition="general"
#SBATCH --mail-type=all
#SBATCH --mail-user="${USER}@domain.com"
#SBATCH --exclusive
#SBATCH --account="${USER}"
#SBATCH -D "/srv/data/comsol64/bin"
#SBATCH -o "${HOME}/logs/slurm.out"
#SBATCH -e "${HOME}/logs/slurm.err"
MODELTOCOMPUTE="mymodel.mph"
INPUTFILE="${HOME}/input/${MODELTOCOMPUTE}"
OUTPUTFILE="${HOME}/output/${MODELTOCOMPUTE}"
BATCHLOG="${HOME}/logs/${MODELTOCOMPUTE}.log"
# COMSOL command, using -nn 8 and -nnhost 2 deduced from SLURM
./comsol batch -mpibootstrap slurm -inputfile ${INPUTFILE} -outputfile ${OUTPUTFILE} \
-batchlog ${BATCHLOG} -alivetime 15 -recover -mpidebug 10
使用 sbatch slurmsubmit.sh 命令启动作业。
OGS/GE 作业提交脚本示例
#!/bin/bash
# ogssubmit.sh
#$ -b y
#$ -pe "cluster" 8
#$ -wd "/srv/data/comsol64/bin"
#$ -o "${HOME}/logs/ogs.out"
#$ -e "${HOME}/logs/ogs.err"
MODELTOCOMPUTE="mymodel.mph"
INPUTFILE="${HOME}/input/${MODELTOCOMPUTE}"
OUTPUTFILE="${HOME}/output/${MODELTOCOMPUTE}"
BATCHLOG="${HOME}/logs/${MODELTOCOMPUTE}.log"
./comsol batch -nn '${NHOSTS}' -nnhost 1 \
-inputfile ${INPUTFILE} -outputfile ${OUTPUTFILE} -batchlog ${BATCHLOG} \
-recover -alivetime 15
使用 qsub ogssubmit.sh 命令启动作业。
PBS 作业提交脚本示例
#!/bin/bash
# pbssubmit.sh
#PBS -V
#PBS -l nodes=4:ppn=2
#PBS -j oe
#PBS -N "COMSOL"
#PBS -q "standard"
#PBS -d "/srv/data/comsol64/bin"
#PBS -o "${HOME}/logs/pbs.out"
#PBS -e "${HOME}/logs/pbs.err"
#PBS -l walltime="04:00:00"
#PBS -m abe
#PBS -M "${USER}@myinst.com"
./comsol batch -mpirmk pbs -job b1 -alivetime 15 -recover \
-inputfile "${HOME}/input/mymodel.mph" -outputfile "${HOME}/out/mymodel.mph" \
-batchlog "${HOME}/logs/mymodel.mph.log"
使用 qsub pbssubmit.sh 命令启动作业。
LSF 作业提交脚本示例
#!/bin/bash
# lsfsubmit.sh
#BSUB -r
#BSUB -t "04:00:00"
#BSUB -J "comsoltest"
#BSUB -q "general"
#BSUB -cwd "/srv/data/comsol64/bin"
# Set total number of compute cores, n = nn*np = 32
#BSUB -n 32
# Use np = 8 cores per node
#BSUB -R "span[ptile=8]"
#BSUB -R "rusage[resmem=8000]"
#BSUB -o "${HOME}/logs/comsol_lsf.log"
MODELTOCOMPUTE="mymodel.mph"
INPUTFILE="${HOME}/input/${MODELTOCOMPUTE}"
OUTPUTFILE="${HOME}/output/${MODELTOCOMPUTE}"
BATCHLOG="${HOME}/logs/${MODELTOCOMPUTE}.log"
# Launch the COMSOL batch job with -nn 4 -nnhost 1 -np 8 derived from LSF
./comsol batch -mpibootstrap lsf -inputfile ${INPUTFILE} -outputfile ${OUTPUTFILE} \
-batchlog ${BATCHLOG}
使用 bsub lsfsubmit.sh 命令启动作业。
xml 格式的 HPCS 作业文件示例
<?xml version="1.0" encoding="utf-8"?>
<Job IsExclusive="true" Owner="myname" UserName="myname" JobType="Batch"
Priority="Normal" MinNodes="2" MaxNodes="2">
<Dependencies/>
<Tasks>
<Task WorkDirectory="\srv\data\comsol64\bin\win64"
CommandLine="mpiexec.exe comsolclusterbatch.exe
-inputfile "\home\myname\input\batchmodel.mph"
-batchlog "\home\myname\output\batchmodel.mph.log"
-prefsdir "\home\myname\data\comsol\prefs" -recover"
StdOutFilePath="\home\myname\output\batchmodel.mph.out"
StdErrFilePath="\home\myname\output\batchmodel.mph.err"
MinNodes="2" MaxNodes="2"/>
</Tasks>
</Job>
封装脚本
在 GUI 中配置不受支持的调度器时,需要使用远程端封装脚本实现任务提交,并由本地 GUI 调用。调用结构为(假设命令在远程机器上执行): ssh command - wrapper script - COMSOL command。封装脚本会接收 COMSOL 命令作为输入,并从中提取 -nn、-nnhost、-np 等参数设置,随后,将其转换为作业提交调用。
您可以在首选项 / 多核与集群计算下的前置命令字段中,或在“作业配置”下的“集群计算”节点中设置封装脚本:


下面给出了一个适用于 SLURM® 的 wrapper.sh 封装脚本示例:
#!/bin/bash
# wrapper.sh
COMSOL_COMMAND=$*
# parse arguments: -np, -nn, -nnhost
while [ $# -gt 0 ]; do
case "$1" in
-np)
shift
NP=`sh -c "echo $1"`
shift
;;
-nn)
shift
NN=`sh -c "echo $1"`
shift
;;
-nnhost)
shift
NNHOST=`sh -c "echo $1"`
shift
;;
*)
shift
;;
esac
done
NNODES=${(((${NN}+${NNHOST}-1)/${NNHOST}))}
# call sbatch
sbatch --nodes=${NNODES} --ntasks-per-node=${NNHOST} --job-name="COMSOL" \
--mem="8000" --time="04:00:00" --partition="general" \
--exclusive --account="${USER}" -D "/srv/data/comsol64/bin" \
-o "${HOME}/logs/slurm.out" -e "${HOME}/logs/slurm.err" \
${COMSOL_COMMAND}
另请参见
如需进一步了解 COMSOL 如何在多核计算机上使用共享内存并行计算,请参阅 COMSOL 和多线程处理。
硬件配置建议
有关集群硬件选型与配置建议,请参阅“知识库”中关于选择集群硬件的解决方法。
故障排除
在开始排查问题之前,请首先确保您安装的是最新版本的 COMSOL 软件(可在此处下载)。此外,请执行帮助 > 检查更新以安装最新的软件更新(可在此处下载)。
Linux® 系统上的 GTK 相关错误消息
GLib-GObject-WARNING **: invalid (NULL) pointer instance
GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
Gtk-CRITICAL **: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
...
上述错误通常出现在以下场景:COMSOL® 用户界面的 Java® 组件尝试在图形窗口中显示错误消息,但当前系统不存在可用的图形显示环境。该错误通常意味着,在 COMSOL 配置目录中启动 Eclipse Runtime 环境的过程中出现了问题。您可以检查如下路径格式的日志文件:.comsol/v61/configuration/comsol_*.ini 配置文件:
/usr/local/comsol64/multiphysics/bin/glnxa64/comsolcluster.ini
/usr/local/comsol64/multiphysics/bin/glnxa64/comsolclustermphserver.ini
/usr/local/comsol64/multiphysics/bin/glnxa64/comsolclusterbatch.ini
找到其中的以下两行配置:
-Dosgi.configuration.area=@user.home/.comsol/v61/configuration/comsol_@process.id
-Dosgi.instance.area=@user.home/.comsol/v61/workspace/comsol_@process.id
如果您使用的是漫游用户配置文件或基于网络的文件系统,建议将上述路径改为本地计算机上的文件位置,这通常可以有效避免相关问题。其中 _@process.id 后缀对于避免不同进程之间的冲突非常重要。如果您没有安装目录的写权限,可以将修改后的 *.ini 文件放置到用户定义的目录中,并在启动 COMSOL 时通过 -comsolinifile 标志指定该路径。除了直接修改 *.ini 文件以外,也可以在启动时使用 -configuration 和 -data 标志。请注意,configuration 和 workspace 的路径不应指向包含重要数据的现有目录,因为这些目录在运行过程中可能会被清空。
检查各节点是否能够访问许可证管理器
Linux®:请登录每个节点并运行以下命令:
comsol batch -inputfile /usr/local/comsol64/multiphysics/applications/COMSOL_Multiphysics/Equation_Based/point_source.mph -outputfile out.mph
上述命令应在同一行中输入执行。假定 /usr/local/comsol64 为 COMSOL 的安装目录,并且 PATH 系统已包含 comsol 脚本所在的 /usr/local/comsol64/multiphysics/bin 目录。请确保您对 ./out.mph 具有写权限。命令执行过程中不应出现任何错误消息;如果报错,则通常意味着节点与许可证管理器之间存在连接问题。
Windows® HPCS:请通过远程桌面登录每个节点,并启动 COMSOL Desktop 图形用户界面。正常情况下,软件应能够顺利启动且不应出现任何错误提示。
基于 Infiniband 的 Linux® 集群相关问题
建议将 Infiniband 驱动程序更新至最新版本。如果当前无法更新,可添加命令行选项 -mpiofiprovider tcp,强制节点之间通过 TCP 协议进行通信。
有关如何排查 Infiniband 问题的更多建议,请参阅 COMSOL Multiphysics Reference Manual 中的 Troubleshooting Distributed COMSOL and MPI 一节。
模型树中的“集群计算”功能相关问题
如果系统提示以下错误:“进程状态表明该进程正在运行”,通常表示批处理目录中的 *.status 文件显示上一次作业仍处于运行状态。在某些情况下,即使作业实际并未运行(例如,作业异常中断或非正常终止),也可能发生此错误。要解决这个问题,请执行以下步骤:
- 在 Windows® HPCS 作业管理器或当前使用的其他调度器中,取消所有正在运行的作业。
- 在 COMSOL 中,打开 COMSOL Desktop 右下角的“外部进程”页面。
- 单击清除状态按钮。 如果错误仍然存在,请手动删除批处理目录中的所有文件。
Linux® 节点间通信问题导致的错误消息
如果出现错误消息,请确保计算节点之间能够通过 TCP/IP 相互访问,并且所有节点均可访问许可证管理器以签出许可证。如果您在 Linux 集群的主机之间使用 ssh 协议,则需要预生成密钥,以防止节点在通信启动时互相询问密码:
# generate the keys
ssh-keygen -t dsa
ssh-keygen -t rsa
# copy the public key to the other machine
ssh-copy-id -i ~/.ssh/id-rsa.pub user@hostname
ssh-copy-id -i ~/.ssh/id-dsa.pub user@hostname
使用 PBS 时通信问题导致的错误消息
如果使用 PBS 作为调度器,在多个节点上运行作业时,可能会在 PBS 错误日志中看到以下消息:
[mpiexec@clusternode] check_exit_codes (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:117): unable to run bstrap_proxy on sgscccpu0900.in623.corpintra.net (pid 80874, exit code 256)
[mpiexec@clusternode] poll_for_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:159): check exit codes error
[mpiexec@clusternode] HYD_dmx_poll_wait_for_proxy_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:212): poll for event error
[mpiexec@clusternode] HYD_bstrap_setup (../../../../../src/pm/i_hydra/libhydra/bstrap/src/intel/i_hydra_bstrap.c:1061): error waiting for event
[mpiexec@clusternode] HYD_print_bstrap_setup_error_message (../../../../../src/pm/i_hydra/mpiexec/intel/i_mpiexec.c:1027): error setting up the bootstrap proxies
[mpiexec@clusternode] Possible reasons:
[mpiexec@clusternode] 1. Host is unavailable. Please check that all hosts are available.
[mpiexec@clusternode] 2. Cannot launch hydra_bstrap_proxy or it crashed on one of the hosts. Make sure hydra_bstrap_proxy is available on all hosts and it has right permissions.
[mpiexec@clusternode] 3. Firewall refused connection. Check that enough ports are allowed in the firewall and specify them with the I_MPI_PORT_RANGE variable.
[mpiexec@clusternode] 4. pbs bootstrap cannot launch processes on remote host. You may try using -bootstrap option to select alternative launcher.
在这种情况下,请尝试在 COMSOL 命令中添加 -mpibootstrap ssh 选项。
COMSOL 已尽一切合理的努力核实本页面所提供的信息。但请注意,所有资源与文档仅供学习参考。COMSOL 不对其有效性作任何明示或暗示的声明,亦不承担因所披露数据的准确性而产生的任何法律责任。本文提及的所有商标均为其各自所有者的财产。有关完整的商标信息,请参阅相关产品手册。
