如何处理过多的数据?

计算科学 表现 io 数据管理
2021-12-04 23:39:14

我们的等离子体动力学模拟通常会产生太多信息。在模拟过程中,我们在与 (8192x1024x1024x1500) 一样大的网格 (x,y,z,t) 上记录了至少 10 个属性的各种物理属性。此信息在模拟完成后处理。有了它我们

  1. 制作房产电影,
  2. 进行傅里叶分析,
  3. 计算平均属性。

当我们研究较小的系统时,这种尽可能多的信息的简单转储工作得很好。这使我们能够灵活地与结果进行交互,并在以后决定我们想用它做什么。它还允许我们分配计算资源(CPU 时间)来简单地运行模拟。

我们已经开始了动态进行傅里叶分析的过程,并仅针对选定的长度尺度范围进行过滤。出于数字原因,我们有时需要解析比我们实际感兴趣的更小的长度尺度,所以在这些情况下,这个过滤器有很大帮助。我们还在探索各种并行 IO 库,例如并行 I/O 选项,尤其是并行 HDF5

有哪些策略可以最大限度地提高数据处理的效率?

即时执行所有分析(不包括后期处理,例如电影和情节)有什么好处吗?

我可以想象这个问题会出现在其他研究领域。例如,您可能有一个需要长时间发展的分子动力学模拟,但您对有趣的事情发生的短暂时刻感兴趣。或者在 CFD 中,早期的开发可能很慢,但是一旦出现湍流,您可能需要更高的时间分辨率来监控动态。

是否有从模拟中收集复杂结果的免费示例?

4个回答

我认为您可能必须拆分输出以匹配您的目标:

  1. 对于属性电影,您可能不需要完整的空间分辨率和所有变量。仔细选择你想要展示的内容并考虑你要展示的电影的最终分辨率,它可能不会有 80 亿像素。
  2. 对于傅立叶分析(或 POD 之类的东西),如果它们是暂时的,您可能只需在您的域中明智地选择几百个点即可。如果它们是空间的,您可能只需要几个快照而不是 1500 个。同样,不是所有属性。
  3. 对于时间平均,您可以继续添加到同一个字段而不必担心时间维度,对吗?然而,空间平均是痛苦的,特别是如果你想看看它随时间的演变。但是在转储数据之前进行更多的在线处理可以减少数据的大小......

这意味着需要大量工作才能拥有专用输出而不是大型通用输出,但这应该有助于降低成本和尺寸。希望这可以帮助 !

我还想补充一件事,一般来说,数据的完整分辨率只需要重新启动文件,即重新启动模拟的文件。对于给定的模拟,您不需要那么多这些(假设是 100,因此如果在 2 次重新启动之间发生某些事情,您最多会丢失 1% 的计算),而您可能希望提高输出频率电影。例如,您可以仅以分辨率的 1/64 执行此操作(每个方向每 4 个点 1 个)。

我认为目前这门艺术的大师是大粒子物理实验(我对CDFD0最熟悉,因为我年纪大了,在芝加哥大学工作)。他们有每年丢弃 PB(或更多)的硬件触发器。然而,这是量化/离散化的整个主题,或者“只扔掉你不需要的东西”。我不确定你能否给出一个一般的合理答案。最好将问题缩小到类似“我有一个以下列方式离散化的 PDE 模拟,并希望有效地进行下采样”。

Peter LePage 在 lattice-QCD 圈子中非常有名,他提出了一种方法,通过找到并应用良好的短程解析解,可以减少不可行的大晶格网格。

这大致相当于注意到一组精心选择的样条可以允许精确积分,比梯形方法更少的结(除了在您的情况下,您可以一次在四个维度上利用它)。

结果是你用数据集的原始大小换取每个节点的更多计算——步骤,但由于你的问题的高维性,最终领先。

我不是一个我足够了解的主题,无法给出任何体面的提示,但它过去在某些领域已经奏效。

这个问题有点宽泛,所以我将提供一个相应模糊的答案,在这种情况下建议可能的技术。

1) 即时处理,您已经在处理。进行动态处理并将其与数据生成步骤分离的一种方法是生成一个始终包含最后 N 个步骤的循环输出文件,并在单独的进程中运行分析。显然,您必须使两者同步以防止出现竞争条件。

2) 更仔细地选择存储的数据。不幸的是,这是高度针对具体情况的。

3) 在存储之前压缩您的数据,或者使用具有集成压缩选项的存储库,例如 HDF5。

4) 存储常规检查点而不是完整输出。如果您每 N 步存储一个完整的检查点,即足够的数据从那里重新开始模拟,您可以在必要时以高度并行的方式重建丢失的数据。请注意,在蒙特卡罗方法的情况下,检查点必须包括随机数生成器的状态。您实际上可以认为这是一种高度特定于应用程序的压缩技术。