求解大型 COMSOL 模型需要多少内存?

作者 Walter Frei

2022年 5月 6日

我们收到的一个比较常见的问题是:COMSOL Multiphysics® 软件中能求解多大的模型?尽管在某种程度上这是一个非常容易回答的问题,但不可避免的,我们将需要大篇幅的讨论才能讲清楚关于数值方法、建模策略和求解算法,计算机硬件性能以及如何最好的处理计算要求高的问题。今天,我们来深入探讨这个话题。

编者注:这篇文章最初于 20141024 日发布。现在已经更新以反映最新版本软件的特点和功能。

先来看一些数据

为域内的稳态温度分布建立一个三维模型,并研究随着自由度数的增加,内存需求和求解时间的变化。该模型是在一台典型的台式电脑上使用默认的求解器,例如 Intel® Xeon® W-2145 CPU,32GB 内存和一个固态硬盘(SSD),在连续的越来越细的网格上求解。

我们首先看一下随着模型大小的增加,两个报告的内存需求:虚拟内存和物理内存。虚拟内存是软件向操作系统请求的内存量。(这些数据来自 Windows® 系统,所有支持的操作系统的内存管理都非常相似)。物理内存是指被占用的 RAM 内存的数量。物理内存总是小于虚拟内存和安装的 RAM 数量,因为操作系统以及在计算机上运行的其他程序也需要占用一些 RAM 内存。存在一个占用内存的最高点,物理 RAM 的可用空间被用完了,相当一部分数据会驻留在固态硬盘上。同时还存在另一个点,超过这个点,软件会报告说没有足够的内存,所以模型根本无法被求解。显然,为计算机增加更多的内存能求解更大的模型,我们可以通过线性推断来预测内存需求。

一个图表,描述了传热模型所需的虚拟内存(蓝色方块)和物理内存(橙色圆圈)与问题大小的关系,以自由度表示。
图1. 一个涉及固体传热的模型中,报告的虚拟内存(蓝色)和物理内存(橙色)与问题大小的关系,以百万个自由度表示。使用了一台 32 GB 内存的计算机。

接下来,让我们看看这个问题的求解时间与自由度的关系。求解时间显示出两个不同的区域。一个二阶多项式被拟合到所需的虚拟内存量小于安装的 RAM 的区域,这个曲线几乎是线性的。另一个二阶多项式被拟合到剩余的数据中,其中虚拟内存高于安装的 RAM。这条曲线的斜率更加陡峭,因为在这个系统中,访问存储在虚拟内存中的模型数据需要更长的时间。

描述热传递模型的求解时间与自由度的关系图,当问题大小大于可用 RAM 时,该模型的斜率增大。
图2.当问题规模大于可用的 RAM 时,求解时间与自由度的关系表现为斜率增加。

内存需求是不是总是相同?

您可能会问,内存需求是不是永远是上面这些数据呢?当然不是,除了非常类似的问题之外,这些数据几乎没有预测价值。

对模型进行的 6 种典型修改

我们可以对目前的模型做出哪些常见的修改,以使这些曲线向上或向下移动?下面介绍几个不同的例子。

1.在时域中求解

与解决稳态问题相比,使用时域求解器解决时域问题,需要在内存中存储更多的数据。关于算法的概述,请阅读博文“瞬态问题中的自动时步和阶数选择”。

2.切换线性求解器类型

上述问题可以用迭代或直接求解器来解决。迭代求解器比直接求解器使用的内存要少得多,特别是随着问题规模的增长。直接求解器仅适用于某些问题类型,例如当系统矩阵由于材料特性的高对比度而几乎是病态矩阵,但矩阵仍然能够超线性扩展。

3.引入非线性

即使在单一的物理场中,引入任何种类的非线性,例如使材料特性成为温度的函数,都会导致系统矩阵的非对称性。这将增加内存需求。可以通过使用 nojac() 算子来避免符号微分,但这不是在所有情况下都可以做,因为它可能对非线性收敛率产生负面影响。

4.改变单元类型

三维问题的默认单元类型是四面体单元,但也可以使用另一种单元类型,如三角棱柱或六面体。这些单元的单个单元的连续性更好,同时也会增加内存的使用。但另一方面,对于特定几何体和问题来说,可以通过手动改变单元类型,使相同的几何体具有更粗的网格,特别是当与几何体分割和扫掠网格相结合时,往往会使用更少的内存。

5.改变单元阶次

在求解固体传热 时,默认的单元阶次是二次拉格朗日。如果网格相同,改变为线性将减少模型中的自由度,同时也将导致每个单元的连续性降低。也就是说,每个单元中的每个节点都有较少的相邻节点与之连接。这就会使相同自由度的内存使用量降低。反之,增加单元阶次会导致更大的连通性,从而导致相同自由度的内存使用量增加。此外,可以在拉格朗日和巧凑边点单元之间切换,后者每个单元的节点更少。然而,有必要了解的是,改变单元阶次和类型对精度和几何网格划分要求都有影响,这本身就是一个复杂的话题,所以改变默认的单元阶次应该谨慎对待。

6.引入非局部耦合或全局方程

非局部耦合涉及到任何一种在非相邻单元之间传递信息的额外耦合项,通常与全局方程一起使用。使用这些会影响系统矩阵中的信息量,并经常使问题成为非线性。有一些边界条件,如 终端 边界条件,可用于涉及电流的问题,并在底层引入非局部耦合或全局方程。非局部耦合也可以手动实现,如博客文章“计算和控制空腔体积”中所讨论的。

求解不同的物理场

如果要解决不同的物理场问题呢?上面提到的例子与传热建模有关,使用有限元法来求解(标量)温度场。如果通过有限元法解决不同的物理问题,那么可能要解决的是一个矢量场。例如:

  • 固体力学
    • 固体力学 接口在三维空间中求解位移场,因此对于同样的网格,将比热学问题的自由度多三倍,并且网格之间的连接更多。对于一些涉及不可压缩固体的固体力学问题,额外求解压力将进一步增加内存需求。引入非线性材料模型会进一步增加内存需求,这取决于所使用的材料模型
  • 流体流动
    • 流体流动 接口求解三维的速度场和压力。当求解湍流时,至少有一个额外的湍流变量被求解。当求解多相流时,至少有一个额外的变量来追踪相位。
  • 电磁学
  • 化学物质传递
    • 在解决化学工程问题时,如反应流,自由度的数量与在模型中包括的化学物种的数量成正比。

对于上述每一个物理场,或任何其他通过有限元法解决的物理场,我们又必须考虑之前提到的所有要点的影响。那么,如果我们采用有限元之外的其他方法呢?COMSOL® 内部有一些接口和方法可以使用,比如粒子追踪 接口,为粒子位置求解一组常微分方程(ODE),与有限元相比,它的内存要求和自由度要低得多;射线光学 接口也求解一组 ODE,并且内存要求与粒子追踪相似。间断伽辽金(dG)方法用于求解电磁波、声波弹性波模型,与 FEM 相比,使用的内存非常少;最后是边界元法(BEM),这是一种离散化方法,但是是边界而不是体积。与有限元法相比,边界元法导致每个自由度的内存要求高得多,但同样的精度需要更少的自由度。它在声学静电学电流分布磁静力学电磁波中都有应用。

最后,我们不仅可以在模型中包括这些不同的物理场,还可以将它们耦合起来,建立一个真正的多物理场模型。当建立多物理场模型,还必须考虑可能的求解方法,因为这样的模型可以用完全耦合或分离的方法,用直接或迭代的求解器来求解,所有这些都会影响内存需求。下表给出了一些典型的物理场接口,对于这些领域的典型问题的内存要求的大致情况。

物理场 每千兆字节的自由度
固体传热 800,000
固体力学 250,000
电磁波 180,000
层流 160,000

在这一点上,你希望能对预测内存需求的复杂性有一些了解。不过,从实用性的角度来看,所有这些信息有什么用呢?对于你的日常建模工作来说,你只需要进行一个比例研究。这涉及到从一个涉及所有物理场、边界条件和耦合的小模型开始,并使用所需的离散化。从解决这个问题开始,逐渐增加自由度的数量,同时监测内存需求。这个数据通常是线性的,但有时会与自由度的平方成正比增长,例如当使用直接求解器的边界元法时,或者如果有多种非局部耦合。一旦有了这些信息,你就可以继续改进模型的性能了。

不同的计算机硬件如何提高模型性能?

现在我们回到之前的求解时间与自由度的关系图,并讨论可以改变求解时间的 10 种硬件不同的计算机硬件。

使用固态硬盘而不是机械硬盘

在所使用的虚拟内存明显大于物理 RAM 的时候,使用固态硬盘而不是机械硬盘很重要。生成上节示例曲线的计算机包含一个固态硬盘,这在大多数较新的计算机中是很常见的。与固态存储器相比,具有旋转盘和移动读写头的机械硬盘(HDD)需要的较长求解时间。当求解那些需要比 RAM 少的内存的模型时,这种选择的影响明显较小。除了固态硬盘之外,一个大容量的 HDD 也是合理的,其中 HDD 主要用于保存模拟数据。

添加更多的内存

只要在所有的内存通道上均衡地添加内存,就能提高使用虚拟内存明显多于物理内存的模型的求解速度。例如,用于这些测试的 CPU 有四个内存通道和 32 GB 内存,每个通道有一个 8 GB DIMM。可以通过添加四个额外的 8 GB DIMMs 来进行升级,每个通道一个(因为这台电脑每个内存通道有一个空的第二插槽),或者通过将所有四个 8 GB DIMMs 换成 16 GB DIMMs。无论哪种方式,重要的是每个通道都被填满。例如,如果四个通道中只有一个被使用,求解速度就会减慢。

升级到速度更快的双列直插内存模块(DIMMs)

根据 CPU 的情况,有可能升级到支持更高的数据传输速率的 DIMM。重要的是,所有的 DIMM 都有相同的速度,因为如果 DIMM 的内存速度不均衡,通常会支持最低速度。

升级到时钟速度更快的 CPU

时钟速度影响到软件的各个方面,速度当然是越快越好。从实用的角度来看,通常不可能简单地只升级时钟速度而保持其他东西不变,所以不可能隔离改进,在大多数情况下,我们必须购买一台新的计算机。然而,随着模型使用更大的内存,以及更多的数据需要在 RAM 中来回移动,模型的性能瓶颈往往是数据在 RAM 内存中的传输速度,而不是 CPU 速度。

升级到具有更多内核的 CPU

在保持所有其他因素不变的情况下,升级到更多的内核是很困难的。因此,确定更多内核并不容易做到。在大多数情况下,当求解一个单一的模型时,每一个工作都使用超过 8 个内核并没有什么优势。如果求解时间是由直接线性求解器主导的,那么更多的内核将获益更多。另一方面,非常小的模型可能在单核上求解得更快,即使有更多的核心可用。也就是说,对于较小的模型来说,并行化有一个重要的计算成本

另外,在并行运行多个工作时,如使用 COMSOL Multiphysics 中的批处理 功能时,多核也是有优势的。现在有些 CPU 同时提供 P 核和 E 核,这就需要额外进行性能权衡。

升级到具有更大缓存的 CPU

缓存内存越大总是更好的,但是缓存的大小与核的数量成正比,所以具有最高缓存的 CPU 会有很多的核,价格也相对昂贵。

升级到带有更多内存通道 CPU 的计算机

我们有可能买到有两个、四个、六个甚至八个内存通道的单 CPU 电脑。在这些之间的切换也代表了不同级别的处理器之间的切换,而且仅凭硬件规格很难比较它们之间的性能。如果你经常求解决非常大的模型或多个模型的并行问题,那么超过四个通道是有必要的。

升级到双 CPU 计算机

支持双插槽操作的 CPU,每个 CPU 有 6 个或 8 个内存通道,总共有 12 个或 16 个通道,因此这类系统至少有 96 GB 内存,所以这些系统主要用于求解非常大的模型或许多模型的并行操作。

升级到 4 个以上 CPU 的计算机

这种情况非常少,仅考虑需要非常多的 RAM 内存(至少 768 GB)的模型。在考虑这样的系统之前,请联系我们的技术支持团队以获得个性化的指导。

升级到集群计算机

目前已有成千上万的集群计算机,其中相当一部分已经被用来运行 COMSOL®。可用的集群硬件系统是如此之大,而且变化如此之快,以至于不可能对相对性能做出说明。也有一些云计算服务提供商可以迅速让你在你选择的硬件上启动一个临时的计算资源,这样你就可以在各种硬件上比较相对性能。在解决极其庞大的模型方面,集群的优势在于能够使用域分解求解器。当然,集群对于在一个集群扫描节点内并行解决数百个甚至数千个案例也很有用。

注意:除了所有这些因素外,还要考虑处理器的更新换代和架构。处理器几乎每年都有重大更新,而且每年都有几个小的更新。比较上述不同代处理器的指标是相当困难的,但一般来说,较新的一代处理器的性能会优于较旧的处理器。

我应该如何决定购买什么电脑?

在决定购买什么样的计算机方面,首先是选择一个模型,或一组模型,描述你要做的各种分析。然后,进行扩展研究,确定内存需求,因为你的仿真需会增长。当然,你需要做一点猜测和推断,所以最好高估内存需求。

一旦你对你将需要的内存量有了一个很好的概念,就可以在最新一代处理器之间决定内存通道的数量。这是你拥有最大灵活性的地方,所以你在这里真正要考虑的是内存的可升级性。如果你碰巧低估了内存要求,你希望能够轻松地安装更多的内存。例如,用于生成前面数据的计算机有 32 GB 内存,安装在有一个有四个内存通道的系统上,每个通道有一个 8 GB 的 DIMM,每个通道有一个插槽开放,因此,再买四个 8 GB 的 DIMM 就可以很容易地升级到 64 GB 内存。

接下来,在选择处理器方面,要确保处理器架构支持最快的可用内存速度,并在该架构中选择最快的时钟速度。通常在时钟速度和内核数量之间有一个权衡。缓存的大小往往随着内核数量的增加而增加,但是每个内存通道存在两个以上的内核,通常会导致性能与硬件成本之间的受益递减。

还要记住其他一些因素,例如,如果你预计虚拟内存使用量较大,就需要有一个 SSD 驱动器。至于显卡,这里列出了支持的硬件列表,内存越大速度越快,显卡的显示性能就越好。另外,计算机通常是为某些市场和不同的价格点而制造的,例如,更昂贵的工作站或更经济的消费者级别。后者有时会有更好的峰值性能,但在连续多小时或多天运行非常大的模型时,工作站级别的系统可能更可靠。

还有什么可以提高性能?

你可能想去购买新的硬件来运行你的模型。不过,这样做之前,请考虑一下你所建立的模型的价值。一个有价值的数值模型是你在职业生涯中要运行成千上万种(或更多!)变化的模型。尽可能地提高这些模型的性能将为你节省数周或数月的时间,无论你使用什么硬件都是如此。

将模型分类

为了学习如何让我们的模型更快的运行,无论使用的是什么硬件,我们可以从概念上将模型分为三类。

1.线性稳态

这类模型包括材料属性、载荷和边界条件与解无关的情况。频域和特征值或特征频率模型也可以归入这一类别。对于这些模型,计算时间完全与自由度的数量有关,所以目标应该是在达到预期精度的同时尽可能地减少自由度。

2.非线性稳态

这类模型包括在控制方程中出现非线性项的任何情况,例如在纳维-斯托克斯方程中,或者当材料属性、载荷或边界条件是解的函数时。这类情况的解决是通过重复求解线性问题而找到的。这里,所需的计算时间是线性迭代的成本和非线性问题的收敛率的组合。降低计算成本不仅涉及在达到预期精度的同时保持尽可能低的自由度,而且还涉及提高非线性收敛率。也就是说,减少得到解所需的步骤。而减少自由度既影响求解时间又影响内存,收敛率几乎只影响求解时间。

3. 瞬态

这类模型通过在离散的时步数上求解一串静止的近似值来计算随时间变化的解,可能包括也可能不包括非线性项。这里需要关注的是减少离散时步数,以及每个时步数所需的线性化步数,同时有足够精细的网格来求解随时间变化的场。

有用的建模技术

虽然每个问题都是独特的,但有一些非常通用的建模技术,所有的仿真分析人员都应该掌握,包括:

当然,这些只是大体上的描述。有无数专门的建模技术,可能只在非常窄的范围内适用,但可以让你的模型更有效。学习这些技术,以及何时和如何应用它们,是有经验的数值建模人员的艺术和工艺。

结语

本文,我们提出了一个看似简单的问题,但其实在回答问题的过程中,触及了比较广泛的话题。在这篇文章的最后,我提出一个有点争议性的个人观点。在我看来,试图在更快的计算机上求解更大的模型是一种不得已而为之的计算方法。把你的时间花在研究如何让你的模型变得更小、更快,比研究用什么硬件要好得多。最终,确实会有那么一天,你需要投资一些专业的硬件,当你到了那个时候,你会想知道你到底为什么需要升级。希望您在阅读了本文后,如对何处理这个过程有一个大体上的认知。

Intel 和 Xeon 是 Intel 公司或其子公司的商标。

Microsoft 和 Windows 是微软公司在美国和/ 或其他国家的注册商标。


评论 (1)

正在加载...
Bert chu
Bert chu
2019-06-01

在装配的过程中,能否实现分布内存并行?
can assembly get benefit from Distributed—Memory Parallel?

浏览 COMSOL 博客