5. 节点本地计算

节点本地计算(Node Local Compute)是一种针对高I/O数据密集型应用的计算优化技术,通过将计算数据移动到计算节点本地存储,避免共享存储系统瓶颈,从而大幅提升计算效率。

5.1 技术背景与需求

5.1.1 高I/O应用的挑战

传统HPC(高性能计算)框架难以应对高I/O应用的需求,这些应用包括:

  • 天文计算:大规模天文图像处理、射电望远镜数据处理,数据规模在PB/EB级

  • 生物信息数据处理:基因组测序分析、蛋白质结构预测

  • 数字视频处理:高清视频编解码、视频内容分析

  • 医疗图像分析:医学影像处理(CT、MRI、X光)

  • AI训练场景:生物信息AI、医疗AI的大规模训练数据加载

这些应用的共同特点是I/O带宽需求远超现有计算框架下共享存储系统的数据加载能力。当计算节点需要通过并行文件系统访问数据时,共享存储的物理带宽限制成为整个计算流程的瓶颈。

5.1.2 存算比失衡问题

  • 存算比的定义

    • 存算比 = 存取带宽 / 计算能力,反映了计算过程中存储和计算之间的效率配比。

      • 存取带宽(存力):从存储硬件(如内存、硬盘)存取数据的能力,通常以GB/s或MB/s为单位。

      • 计算能力(算力):

        • 通常以每秒浮点运算次数(FLOPs)计

        • 针对数据处理类应用,可用数据处理带宽(GB/s或MB/s)计

    • 存算比的均衡性

      • 存算比失衡,会导致整体计算效率低下

        • 存储瓶颈:存储带宽不足,导致计算资源闲置。

        • 计算瓶颈:计算能力不足,不能及时处理数据。

      • 存算硬件的成本

        • 通常,单位存力成本远低于单位算力成本;算力成本是影响总计算成本的最重要因素

        • 高于算力的存力,增加了存储成本,但对整体计算效率帮助不大

5.2 存储分层与性能分析

5.2.1 HPC系统的存储分层

现代计算系统的存储层次从快到慢包括:

  1. 本机CPU cache:纳秒级访问延迟,容量KB~MB级

  2. 本机内存缓存及内存文件系统tmpfs:百纳秒级延迟,容量GB级

  3. 本地外部存储:HDD/SATA SSD/NVMe SSD,微秒~毫秒级延迟

  4. 集群存储(并行文件系统):毫秒级延迟,容量TB~PB级

5.2.2 数据访问路径对比

传统HPC应用访问路径

  • 数据访问路径基于共享的并行文件系统

  • 总带宽为所有应用共享:典型HPC存储系统的读写带宽约100GB/s(数十GB/s~数百GB/s)

  • 随着节点数增加,每个节点可用的有效带宽迅速下降

基于节点本地存储的访问路径

  • 节点本地存储的聚合带宽会远超并行文件系统带宽,并且更加稳定

  • 每个节点独立访问自己的本地存储,不存在共享竞争

5.2.3 存储介质性能对比

  • SATA SSD:500MB/s(单个设备)

  • NVMe SSD:5GB/s(单个设备)

  • 内存tmpfs:6GB/s(内存带宽)

5.2.4 聚合带宽优势分析

计算集群节点本地带宽估算表(单线程/单组件)

节点数 SATA SSD NVMe SSD tmpfs
10 5 GB/s 50 GB/s 60 GB/s
30 15 GB/s 150 GB/s 180 GB/s
100 50 GB/s 500 GB/s 600 GB/s
300 150 GB/s 1,500 GB/s 1,800 GB/s
1,000 500 GB/s 5,000 GB/s 6,000 GB/s
3,000 1,500 GB/s 15,000 GB/s 18,000 GB/s
10,000 5,000 GB/s 50,000 GB/s 60,000 GB/s

关键观察:在大规模集群中,节点本地存储的聚合带宽可以达到共享存储的数十倍甚至数百倍。而典型计算集群的共享存储带宽通常不超过100GB/s

5.3 节点本地计算核心原理

5.3.1 基本思想

节点本地计算的核心思想是将计算数据移动到计算节点本地,避免共享存储瓶颈。通过利用每个计算节点自有的存储资源(内存、SSD等),构建一个分布式的、高带宽的数据访问环境。

5.3.2 三阶段处理模型

  1. 数据加载阶段:从并行文件系统读取数据到节点本地存储

  2. 本地计算阶段:从节点本地存储上读写数据,完成算法功能

  3. 结果回写阶段:将计算结果从本地存储写回并行文件系统

以上步骤支持流水线并行操作,即不同数据块在不同阶段同时处理,最大化系统吞吐量。

5.3.3 关键技术优化

  • 数据打包:将多个小文件打包成大文件,减少文件系统元数据开销

  • 数据压缩:减少传输和存储的数据量,提升I/O效率

  • 流水线并行:隐藏数据加载和回写的延迟,使计算阶段持续进行

5.4 关键技术挑战

5.4.1 准入控制机制

  • 前后module间的准入控制

    • 运行速度匹配,避免本地硬盘/内存爆满

    • 信号量是实现准入控制的重要技术手段

    • 本地磁盘分区的容量检测

    • 定制脚本实现灵活的准入控制

  • 同一module在多节点间同步准入控制

    • 针对多节点并行同步场景下,统一整体进度

    • 不同通道的处理/不同节点的数据下载

    • 待处理数据的计算量、节点处理能力都可能差异,会导致计算进度不同,进而影响中间数据累积、内存爆满等

5.4.2 容错处理

  • 自动容错处理

    • 出错影响部分数据的处理

    • 准入控制会导致整个流水线停止

    • 自动容错对准入控制的影响

5.4.3 资源管理与调度

  • 关键module的task处理排序:确保关键路径任务优先执行

  • 非关键模块分解

    • 细分会增加准入控制负担

    • 增加流水线并行提升性能,会增加中间存储的内存使用,影响流水线运行的稳定性

5.5 Scalebox中的设计思路

5.5.1 任务分发模式

Scalebox通过任务分发模式支持节点本地计算:

  • HOST-BOUND:任务绑定到特定主机,通过headers->>'to_host'指定目标主机

  • SLOT-BOUND:任务绑定到执行槽,通过headers->>'to_slot'指定目标执行槽,可作为vtask头节点的任务分发

  • GROUP-BOUND:任务绑定到组,通过执行槽slot的parameters->>'group_prefix'指定任务task的headers->>'to_host'

5.5.2 位置感知调度

  • pod_id机制:标识模块属于pod管理,若任务来源的pod也有相同的pod_id,则所有task标识为采用本地计算(task_dist_mode为HOST_BOUND)

  • 任务头中的位置信息:支持前后模块间的本地级联处理

5.5.3 vtask支持框架

  • vtask作为节点本地计算模型的基本运行单元

  • 通过参数设计,简化本地计算在应用程序中的准入控制、容错等的实现

  • 在跨模块的vtask层级上实现幂等性,保证最终一致性

5.5.4 信号量机制

  • 集中管理全系统的运行状态,使计算模块无状态

  • 通常仅在main-router中被读写,避免并发问题

  • 在普通算法模块中可以读取相应值,用于准入控制决策

5.6 硬件与平台要求

5.6.1 硬件基础设施

  • 需要真正的本地存储支持:云上的虚拟机通常不适合节点本地计算,因为其存储往往是网络附加的

  • 自建服务器集群(不带虚拟化):物理服务器直接访问本地存储

  • HPC计算节点:传统HPC环境中的计算节点

5.6.2 适用场景总结

节点本地计算特别适用于以下场景:

  1. 数据密集型科学计算:天文、生物信息、气候模拟等

  2. 大规模媒体处理:视频编解码、图像分析

  3. AI训练与推理:需要快速加载训练数据集的场景

  4. 任何I/O带宽需求超过共享存储能力的应用

5.6.3 性能预期

  • 小规模集群(10-100节点):I/O性能提升5-50倍

  • 中规模集群(100-1000节点):I/O性能提升50-500倍

  • 大规模集群(1000+节点):I/O性能提升500倍以上

5.7 总结

节点本地计算技术通过重新设计数据访问路径,充分利用计算节点本地存储的高带宽特性,解决了传统HPC框架中共享存储系统的瓶颈问题。该技术不仅适用于天文计算,也广泛适用于生物信息处理、医疗图像分析、数字视频处理以及AI训练等多种高I/O应用场景。

Scalebox平台通过任务分发模式、位置感知调度、vtask支持和信号量机制等技术手段,为节点本地计算提供了完整的实现框架。在实际部署中,需要确保硬件基础设施提供真正的本地存储支持,才能充分发挥节点本地计算的技术优势。