当前位置: 首页 > news >正文

Si an(1)

通过将预测有损压缩与HDF5深度集成来加速并行写入

摘要——有损压缩是减少存储开销和提高高性能计算(HPC)应用I/O性能的最有效解决方案之一。然而,现有的并行I/O库无法充分利用有损压缩来加速并行写入,因为缺乏对压缩-写入性能的深入理解。
为此,我们提出将预测性有损压缩与HDF5深度集成,以显著提高并行写入性能。具体而言,我们提出分析模型来预测压缩和并行写入的时间,以便在实际压缩之前实现压缩-写入重叠
我们还在进程中引入额外的空间,以处理压缩比预测不确定性可能导致的数据溢出。此外,我们提出了一种优化方案,对压缩任务进行重新排序,以提高重叠效率。在Summit上使用多达4,096个核心进行的实验表明,我们的解决方案在两个真实世界的HPC应用中,与非压缩和有损压缩解决方案相比,写入性能分别提高了高达4.5×和2.9×,而存储开销仅为1.5%(与原始数据相比)。

I. 引言

在高性能计算系统上进行的大规模科学模拟在当今的科学和工程领域中发挥着重要作用。此类模拟会生成极其大量的数据,这些数据需要高度的计算和存储密集型。例如,一个分辨率为 4096 × 4096 × 4096 单元格的 Nyx [1] 宇宙学模拟,单个快照可以生成高达 2.8 TB 的数据;假设模拟运行 5 次,每次模拟转储 200 个快照,则总共需要 2.8 PB 的磁盘存储空间。
如今,不断增长的计算能力可用于运行模拟。然而,管理如此大量的数据仍然是一个主要的挑战。由于以下原因,将所有生成的原始数据保存到磁盘是不切实际的:(1)即使对于超级计算机,存储容量也有限;(2)保存这些数据所需的 I/O 带宽会在传输过程中造成瓶颈 [2]–[5]。
有损压缩已被认为是解决此问题的主要数据缩减技术之一。具体而言,新一代的有误差界限的有损压缩技术,如SZ [6]–[8]、ZFP [9]、MGARD [10]及其GPU版本 [11]–[13],已在科学界广泛使用 [4],[6]–[9],[14]–[18]。

与科学数据上高达2倍压缩率的无损压缩相比,误差有界的有损压缩器在精度损失可控的情况下提供更高的压缩比。
在超级计算机上运行的科学应用程序通常使用并行 I/O 库(如分层数据格式 5 (HDF5) [20])来管理其数据。具体而言,HDF5 被认为可提供高性能的并行 I/O、数据的可移植性以及用于在这些系统上管理数据的丰富 API。
它已被广泛应用于超级计算设施中,用于存储、读取和查询科学数据集 [21],[22]。这是因为 HDF5 针对流行的并行文件系统(如 Lustre [23],[24])具有特定的设计和性能优化。此外,这些数据集没有使用分布式存储中的通用数据库,而是具有基于并行文件系统的特定数据管理方法 [23],[24]。
而且,HDF5 还为用户提供了动态加载的过滤器 [25],例如无损和有损压缩 [26],这些过滤器可以自动以压缩格式存储和访问数据。因此,它允许科学应用程序以压缩格式存储和访问数据。

重点研究一下这个东西是怎么实现的。

HDF5 中使用有损压缩过滤器的并行 I/O 不仅可以显著减小数据大小,还可以提高整体 I/O 性能。
然而,现有的带有压缩filter的HDF5实现无法充分利用数据大小缩减和并行写入时间缩减的优势。这是因为要将来自不同进程的数据写入共享文件,必须在写入数据之前指定每个数据分区的偏移量。

开始写之前也不知道有多大,所以没法并行写,不然就连不上了,不知道起点。

因此,在所有压缩任务完成并且压缩后的大小在所有进程之间进行通信之前,并行写入无法启动。此外,每个数据分区的压缩大小分布在很宽的比特率范围(即,比特/值)内,并限制了任何简单的预分配策略。

简单预分配(比如卡住一个上界)是不可靠的,必须要有个predictor

图1显示了Nyx数据集上压缩比特率的分布。当使用无损压缩滤波器时,由于这种高开销,并行写入性能甚至可能低于原始的非压缩解决方案[27]。
在这里插入图片描述

图1:具有512个分区的Nyx数据集上的压缩比特率分布。每个分区使用相同的压缩配置。

补充一点内容

以下从 bit - rate 与压缩的关联图表含义结合段落的作用 三个角度解释,帮你理解这段内容:

一、bit - rate(比特率)与压缩的关系

“比特率(bits/value)” 衡量 压缩后每个数据值的比特占用量 ,和压缩紧密相关:

  • 若原始数据 1 个值占 32 比特(比如 32 位浮点数),压缩后 1 个值占 4 比特,比特率就是 4 ,比特率越低,压缩比越高(压缩后数据越小)。
  • 压缩算法、数据本身特征(重复度、冗余度)会影响比特率。比如高度冗余的图像数据,压缩后比特率可能大幅降低;随机数据难压缩,比特率接近原始值。

二、图表(图 1)的含义

图表统计了 Nyx 数据集压缩后,不同比特率对应的 “数据分区数量”

  • 横轴是 “比特率(bits/value)”,代表压缩后每个值的比特占用;
  • 纵轴是 “数据分区数量”,代表有多少个数据分区属于对应比特率区间。

举例理解
看图表能发现,比特率集中在 0.2 - 0.8 左右时,数据分区数量多(柱子高);比特率越高(越往右),数据分区数量越少(柱子矮)。
这说明:Nyx 数据集压缩后,大部分数据分区能被大幅压缩(低比特率),但也有少部分分区压缩效果差(高比特率) ,压缩后的比特率分布很 “分散” 。

三、结合段落理解作用

段落核心想讲 “带压缩 filter 的 HDF5 并行写性能差的原因” ,图表和比特率是关键论据:

  1. 压缩后大小难预测
    因为不同数据分区的比特率(压缩后大小特征)差异大(从图表能直观看到分布很宽),想 “预分配空间写数据” 很难。比如有的分区压缩后特别小(低比特率),有的压缩后没怎么变小(高比特率),没法用简单规则提前定好每个分区的写入偏移量 。
  2. 并行写被 “卡脖子”
    由于压缩后比特率(即压缩后大小)不确定,并行写必须等 所有进程压缩完、互相通报压缩后大小 ,才能确定每个分区的写入位置(偏移量)。但这一步会让并行写 “延迟启动”,抵消了压缩本应带来的性能优势,甚至用无损压缩时,高开销导致并行写性能比 “不压缩直接写” 还差(呼应段落里 “并行写入性能甚至可能低于原始的非压缩解决方案” )。

简单说,这段用 “比特率分布广、难预测” ,解释了 “HDF5 压缩 + 并行写” 为啥难做好 ,图表则用数据直观展示了 “比特率分布有多分散” ,让论证更有说服力 。

补充完成

为了解决这个问题,我们提出了一种并行写入解决方案,该方案将预测性有损压缩与HDF5中的异步I/O特性相结合,从而将I/O延迟与压缩重叠,以显著提高并行写入性能[23],[28]。受Jin等人[29]先前研究的启发,该研究以很少的开销估计了基于预测的有损压缩的压缩率,我们建议在实际压缩之前预测压缩和并行写入的时间,并利用异步I/O特性将压缩与写入重叠。

估计一下压缩率,然后就有很多不同的写入块和压缩块,然后就可以动态填充了。

我们还引入了一个额外的空间来处理预测的不确定性。此外,我们提出了一种优化算法,对每个进程的压缩任务进行重新排序,以提高重叠效率。本文的贡献总结如下。
1 我们扩展了压缩比的预测模型,以预测压缩和并行写入的吞吐量,用于基于预测的有损压缩,例如SZ。
2 •我们提出了一种新的基于HDF5的压缩写入方案,该方案能够通过基于我们的预测模型将压缩与写入重叠,从而高效地将来自不同进程的压缩数据写入共享文件。
3. 我们优化了每个进程中压缩任务的执行顺序,以实现更高的并行写入性能。
4. 我们在Summit超级计算机上使用多达4,096个核心,以及在Bebop集群上使用多达512个核心,在两个真实世界的高性能计算应用上评估了我们提出的解决方案。实验表明,与不带压缩和带有SZ有损压缩过滤器(称为“H5Z-SZ”)[26]的HDF5写入相比,我们的解决方案将并行写入性能分别提高了高达4.5倍和2.9倍,而存储开销仅为1.5%。

在第二节中,我们讨论研究背景。在第三节中,我们介绍并行写入与压缩的设计。在第四节中,我们展示我们的评估结果。在第五节中,我们总结我们的工作并讨论未来的工作。

II. 研究背景与挑战

A. 面向高性能计算应用的并行I/O库

HPC应用程序生成并分析海量数据。这些应用程序的一个关键需求是在HPC系统上高效地访问和管理这些数据的能力。

并行I/O成为关键技术,能够有效地在计算节点和存储之间移动数据,同时考虑到复杂的存储层次结构,包括节点本地持久内存、爆发缓冲区和基于磁盘的存储。

例如,HDF5 [20]、netCDF [30]和可适应I/O系统(ADIOS)[31]是HPC应用程序中最广泛使用的高性能I/O库。然而,由于不可避免的有限I/O带宽,这些I/O库在处理极大文件(例如,拍字节及以上)时仍然存在问题。
因此,压缩技术经常被它们采用 [32]。例如,H5Z-SZ [26]是一个用于将SZ压缩集成到HDF5中的数据过滤器。

在这里插入图片描述
图 2:使用压缩的科学数据管理。

图2展示了I/O系统中不同层的抽象,其中压缩是这些系统中的一个独立层。具体来说,压缩通常在生成和存储数据之间进行(例如,H5Z-SZ)。值得注意的是,所有进程的压缩任务以及将压缩数据并行写入共享文件必须按顺序执行;换句话说,这两个步骤之间必须存在同步。
这是因为将来自不同进程的数据并行写入共享文件需要每个数据分区的尺寸/偏移量,但是不同进程在压缩之后的数据大小可能差异很大(即使压缩前的大小相同)。因此,当前的压缩-写入方案无法充分利用有损压缩提供的高压缩比,特别是对于具有多个数据字段的大规模HPC应用。
在本文中,考虑到HDF5作为一种支持并行I/O的系统受到了HPC社区的广泛欢迎,我们主要将性能评估集中在HDF5上,而不失一般性。此外,为了提高性能和生产力,HDF5的最新版本[23]实现了虚拟对象层(VOL),它可以将I/O操作重定向到VOL连接器,并允许异步I/O [28]。
此功能使应用程序能够将I/O与其他操作(如压缩)重叠。因此,我们可以利用此功能来深入集成预测有损压缩并使其与并行写入重叠,从而提高并行写入性能。此外,由于三个主要因素,我们专注于并行写入大型共享文件:
(1)它减少了科学家管理多个文件以进行存储、事后分析和可视化的工作量;
(2)它减少了打开/关闭多个文件的性能开销以及许多小文件的元数据存储开销;(3)大规模模拟的部分进程(例如,[33]中最多4096个进程)与子文件仍然写入共享文件。

B 误差有界的有损压缩

有损压缩可以通过丢失重建数据中的非关键信息,以极高的压缩比压缩数据。评估有损压缩性能的两个最重要的指标是:(1)压缩比,即原始数据大小与压缩数据大小之比,或比特率,即每个数据点平均所需的比特数(例如,压缩前单/双精度浮点数据的比特数为32/64);(2)数据失真指标,如峰值信噪比(PSNR),用于衡量重建数据相对于原始数据的质量。近年来,针对科学数据的新一代高精度有损压缩器被提出并开发用于科学浮点数据,例如SZ [6]–[8]和ZFP [9]。这些有损压缩器提供参数,允许用户精确控制由于有损压缩造成的信息损失。
与传统的有损压缩器(如JPEG [34],专为图像(整数)设计)不同,SZ和ZFP专为压缩浮点数据而设计,可以根据用户的需求提供严格的基于误差控制的方案。通常,有损压缩器提供多种压缩模式,例如误差界定模式。
误差界定模式要求用户设置误差类型,例如点式绝对误差界限和点式相对误差界限,以及一个界限值(即10−3)。压缩器确保原始数据和重建数据之间的差异不超过误差界限。
SZ 是一种基于预测的、误差有界的科学数据有损压缩器。它主要包含三个步骤:(1)使用自适应的最佳拟合预测方法,根据每个数据点相邻点的值来预测该数据点的值;(2)根据用户设定的误差范围,量化真实值和预测值之间的差异;(3)应用定制的 Huffman 编码和无损压缩,以实现高压缩比。
先前的研究已经探讨了有损压缩对重建数据质量和事后分析的影响,并为如何在特定应用中设置压缩配置提供了指导 [8],[17],[35]–[38]。例如,建立了一个综合框架,用于对给定数据集的压缩配置进行系统分析,并提供满足事后分析的最佳拟合解决方案 [18]。
此外,Jin et al. [29] 提出了一个理论上的比率-质量模型,以在给定的事后分析质量约束下有效地最大化压缩比。请注意,与先前关于通过有损压缩提高通信效率的工作 [39] 类似,这项工作假设压缩配置由用户根据其数据质量要求进行设置,因此,上述压缩配置方法与我们的解决方案是正交的

压缩方法给定,这是一个纯粹的系统优化。

C. 面向I/O密集型HPC应用
在本文中,我们主要关注两个I/O密集型HPC应用程序——Nyx [22]和VPIC [40],它们已被用于许多先前的I/O研究[41]–[46]。
Nyx 是一种自适应网格流体动力学代码,旨在模拟 HPC 系统上的天体物理反应流 [1],[22]。该代码将暗物质建模为在重力作用下运动的离散粒子。气体动力学中的流体使用有限体积方法在自适应的 3-D 欧拉网格/网状结构上进行建模。
网格结构用于通过粒子网格方法演化流体量和粒子。对于并行化,Nyx 使用 MPI 进行长程力计算,并使用特定于架构的编程语言进行短程力算法计算,例如 OpenMP 和 CUDA。Nyx 数据使用多个 3-D 数组来表示网格结构中的场信息。
根据先前的研究 [22],[47],它可以在 Summit 等领先的超级计算机上运行多达数百万个核心 [48]。

VPIC(矢量粒子胞)是一种大规模等离子体物理模拟,可以产生前所未有的大量数据 [40]。无碰撞磁重联是一种重要的机制,当磁力线在等离子体中断裂并重新连接时,会释放出爆炸性的能量。这种重联在涉及氢和电子-正电子等离子体的各种天体物理应用中也起着重要作用,包括地球磁层对可能干扰卫星通信的太阳爆发的反应。
使用VPIC模拟磁重联本质上是一个多尺度问题,它始于单个电子周围的小尺度,但最终导致磁场的大规模重新配置。最近的模拟表明,电子动力学不仅在触发重联方面很重要,而且在其随后的演化中也很重要 [49]。
这意味着等离子体物理科学家发现他们需要模拟详细的电子运动,并且这种建模对重联的3D模拟提出了严峻的计算挑战。一个全分辨率的磁层模拟是一个百亿亿次级计算问题。

在这里插入图片描述
图 3:我们提出的解决方案概述

http://www.dtcms.com/a/329418.html

相关文章:

  • Linux高级编程-framebuffer
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • 数据分析全景:从数据到决策的完整链路与核心要义
  • 《Python学习之基础语法2:掌握程序流程控制的艺术》
  • 【分布式 ID】一文详解美团 Leaf
  • TCP Socket 编程实战:实现简易英译汉服务
  • 函数扇入数(Fan-in)
  • NAT技术、代理服务器+网络通信各层协议
  • transforms的使用 小土堆pytorch记录
  • 深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现
  • PyTorch Tensor完全指南:深度学习数据操作的核心艺术
  • C++编程学习(第21天)
  • LeetCode 分类刷题:1004. 最大连续1的个数 III
  • 【Linux】常用命令(三)
  • 智慧养老丨实用科普+避坑指南:科技如何让晚年生活更安全舒适?
  • 编译 C++ 程序时提示:fatal error: ‘json/json.h‘ file not found
  • 使用 HTML5 Canvas 打造炫酷的数字时钟动画
  • Linux基本操作命令
  • Go 语言函数详解:从基础到高阶的行为逻辑构建
  • 基于SD-WAN的医疗工厂弱电智能化机房方案:架构设计与实践
  • 具有熔断能力和活性探测的服务负载均衡解决方案
  • Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
  • 【车联网kafka】Kafka核心架构与实战经验(第四篇)
  • docker镜像状态监控
  • 磁悬浮轴承转子设计避坑指南:深度解析核心要点与高可靠性策略
  • 【网络运维】Playbook进阶: 管理变量
  • 如何在 Spring Boot 中设计和返回树形结构的组织和部门信息
  • [AI React Web] E2B沙箱 | WebGPU | 组件树 | 智能重构 | 架构异味检测
  • [AI React Web] 包与依赖管理 | `axios`库 | `framer-motion`库
  • Matlab(4)