如何在 COMSOL Multiphysics® 中执行分布参数化扫描
标准参数化扫描限制了集群加速,因为它以串行的方式逐个求解值,一次只能求解一个参数值。为了克服这一限制,COMSOL 网络浮动许可证提供了对 分布参数化扫描 复选框和 集群扫描 节点的访问权限。这些功能可用于同时求解多个参数值。这篇文章,我们将指导您完成分布式参数扫描的设置。
概念总览
在探讨 COMSOL Multiphysics® 中的分布参数化扫描之前,了解消息传递接口(MPI)及其作用至关重要。MPI 是开发并行程序必不可少的标准化通信协议。在 COMSOL Multiphysics® 中,MPI 允许创建多个可以通信和交换数据的进程。这样就能将针对集群计算机的复杂工作分解成较小的、可管理的任务。然后,就可以在集群内的多个节点上同时运行这些任务,利用 MPI 通信框架实现高效协作,这大大减少了大型参数化扫描的总体计算时间。
分布参数化扫描利用 MPI 技术同时求解多个参数值。同时求解的参数值的数量与 COMSOL Multiphysics® 启动的 MPI 进程数直接相关。例如,如果没有 MPI,COMSOL Multiphysics® 将一次只求解一个参数值,导致求解时间缓慢。但是,如果使用 5 个 MPI 进程启动 COMSOL Multiphysics® ,则每个进程都可以同时处理一个参数值,从而同时高效求解 5 个参数值。
详细概述
步骤 1:模型准备
要准备用于分布参数化扫描的模型,您需要像进行标准参数化扫描一样,在模型中添加 参数化 扫描节点,唯一的额外要求是选中 参数化扫描 节点下 高级设置 部分的 分布参数化扫描 复选框。必须在 显示更多选项 窗口勾选 批处理和集群 选项,才能使用 分布参数化扫描 复选框。您可以从模型开发器工具栏打开该窗口。
步骤 2:运行 COMSOL Multiphysics® 作业
要在 Linux 下通过命令行以分布式模式(使用 MPI)运行 COMSOL Multiphysics® 作业,请使用以下命令:
comsol batch -nn 4 -nnhost 1 -f hostfile -np 8 -inputfile example.mph -outputfile example_solved.mph -batchlog logfile.log -createplots
此命令将启动 COMSOL Multiphysics® 作业,而不使用图形用户界面(批处理),使用 4 个 MPI 进程(-nn 4),集群中每台主机使用一个 MPI 进程(-nnhost 1),每个 MPI 进程使用 8 个内核(-np 8)。hostfile 包含集群中计算节点的主机名列表(-f hostfile),COMSOL Multiphysics® 可在其中启动 MPI 进程。COMSOL Multiphysics® 将求解模型 example.mph,将结果保存到 example_solved.mph,并将求解日志写入 logfile.log。最后一个选项 -createplots 将确保在输出模型 example_solved.mph 中创建默认绘图。
如果使用调度器管理集群上的作业,则可以替换 -nn, -nnhost, 和 -f 标志,让 COMSOL Multiphysics® 直接从调度器读取并行配置。有关详细信息,请参阅知识库文章: 在集群上并行运行 COMSOL®。
优化 -nn、-nnhost 和 -np 的值
上文我们讨论了 -nn, -nnhost 和 -np标志的重要性,但还没有探讨如何为这些命令行标志选择最佳值,以便优化模型性能。选择过程取决于两个关键因素:COMSOL Multiphysics® 模型的具体特性和计划运行模型的集群内可用的计算资源。
选择正确的 -np 值
首先,在集群的单个节点上使用单个参数值执行初步测试运行。这里的主要目标是确定能提供最佳性能的最小内核数和内存,包括多次运行单一参数值,每次改变使用的内核数量,以及仔细记录每次运行的求解时间和内存消耗。下列为一个示例命令:
comsol batch -np <number of cores> -inputfile example.mph -outputfile example_solved.mph -batchlog logfile.log
在这些运行中,系统地改变所使用的内核数量。对于每次运行,请务必记录日志文件中的求解时间和内存利用率。
通过分析这些测试运行,用户很可能会发现理想内核数与模型自由度(DOF)数之间的联系。随着模型中单个参数值未知数(DOF)的增加,通常会发现使用更多的内核会带来更好的性能。不过,这也是有限度的:增加更多的内核最终也无法提高速度。内核之间的通信将开始超过并行化带来的好处。更多信息,请参阅知识库文章: COMSOL 和多线程处理。
这里的关键是找到使单一参数值求解时间最快的最小核心数,即分布参数化扫描中 -np 的最优值。
选择正确的 -nnhost 值
-nnhost 标志用于控制在集群内的单个物理节点上同时运行多少个参数值。要确定最佳 -nnhost 值,请考虑单个参数值所需的计算资源与单个节点可用资源的比较。
例如,如果单个参数值需要 10 个内核和 25 GB 内存,而集群中的单个节点有 32 个内核和 128 GB 内存,则可以放心地将 -nnhost 设置为 3。这样,通过同时运行三个参数值,就能有效利用节点的资源。
选择正确的 -nn 值
最后, -nn 的值取决于计划同时处理的参数值数。根据前面的示例,如果有三个集群节点可用于执行作业,且每个节点都能高效地并行处理三个参数值,则可将 -nn 值设置为 9,表示将同时求解九个参数值。
分布式参数值求解
目前为止,我们已经讨论了集群中单个节点的硬件资源足以解决一个参数值的情况。不过,也有例外情况:
- 内存限制:单个参数值所需的内存可能超过单个节点所能提供的内存。
- 核心需求高:问题的大小可能需要比单个集群节点更多的内核,达到数百万自由度。
对于这些情况,用户需要在集群的每个节点上启动 1 个 MPI 进程。要解决单个参数值的问题,在集群不同节点运行上的 2 个 MPI 进程必须相互配合。例如,如果单个参数值需要约 200 GB 内存,但集群中的单个节点只有 128 GB 内存,则需要集中 2 个节点的内存才能求解。对于这种情况,将 -nnhost 设置为 1,这样集群的每个节点将都有一个 MPI 进程在运行。然后,将 集群设置 部分 > 最大组数 选项设置为已启动的 MPI 进程总数与最大组数之比等于 2 的值,因为 需要 2 个节点合作。
为了进一步说明,假设有一个由 12 个节点组成的集群可用于分布参数化化扫描,但一个参数值需要 3 个节点运行。在这种情况下,用户可以将 最大组数 设置为 4,这样就可以同时处理 4 个参数值,每个参数值使用 3 个节点求解。批处理调用应如下所示:
comsol batch -nn 12 -nnhost 1 -f hostfile -np 32 -inputfile example.mph -outputfile example_solved.mph -batchlog logfile.log -createplots
最大组数 设置可在 参数 节点(位于 求解器配置 节点下)或 参数扫描 节点(位于 作业配置 节点下)的 集群设置 部分中找到。
注:最大组数 设置的位置可能因模型而异。该设置可能位于 求解器配置 节点下的 参数 节点,或 作业配置 节点下的 参数化扫描 节点的 集群设置 部分,其位置是由制定扫描的自动相关性分析决定的。添加 参数扫描 节点后,右键单击 研究 节点,可以选择 显示默认求解器 选项。选择该选项将创建运行研究所需的求解器配置和作业配置(如需要)。可以查看默认求解器节点,以确定模型是否包含 求解器配置 或 作业配置 节点下的设置。
分布式模式:集群计算 vs. 批处理调用
上文讨论的工作流程使用命令行中的批处理调用来启动分布式模式下的 COMSOL Multiphysics® 作业。此外,您也可以在 参数化扫描 节点旁边的研究中直接配置和添加群集计算节点。这样,您就可以直接从本地计算机启动群集作业。集群计算节点会自动将文件从本地计算机传输到高性能计算集群,生成并执行在分布式模式下启动 COMSOL Multiphysics® 所需的命令,并直接在本地图形用户界面上提供集群作业的进度更新,从而简化流程。该功能支持 SLURM、OGS/GE、LSF、PBS 和 Microsoft® HPC Pack 等常用的调度器软件。
扩展学习
如果您想了解有关使用 COMSOL Multiphysics® 进行集群或云计算的更多信息,在博客 如何在 COMSOL Desktop® 环境中实现集群运行 中提供了有关设置集群计算节点的详细指导,在其他几篇博客中也涵盖了 集群和云计算 的相关介绍,欢迎阅读。
请提交与此页面相关的反馈,或点击此处联系技术支持。
