从 HPC 到 AI:探索文件系统的发展及性能评估

随着 AI 技术的迅速发展,模型规模和复杂度以及待处理数据量都在急剧上升,这些趋势使得高性能计算(HPC)变得越来越必要。HPC 通过集成强大的计算资源,比如 GPU 和 CPU 集群,提供了处理和分析大规模数据所需的算力。

然而,这也带来了新的挑战,尤其是在存储系统方面,包括如何有效处理大量数据、确保数据访问的高效性以及如何控制成本和运维管理。分布式文件系统,作为一种高成本效益高的解决方案,正逐渐在 AI 和 HPC 场景中广泛应用。它们通过跨多个节点分布存储资源,有效地处理和管理大数据集,满足 HPC 对数据存取速度的高要求。

人民大学在人工智能和计算机科学领域进行了多项研究,其高性能计算中心为科研提供了强有力的支持,并在结合 HPC 与 AI 应用方面积累了一些的经验。本文将为大家介绍 HPC、大数据及 AI 应用的数据模式和特性;人大对几款主流分布式文件系统 Lustre、Alluxio 以及 JuiceFS 也做了初步性能测评,我们将分享这些测评结果,并介绍常用的性能评测工具,希望为选择 HPC 和 AI 存储解决方案的用户提供有价值的参考。

01 大规模数据应用场景:HPC vs 大数据 vs AI

高性能计算 (HPC)

高性能计算(HPC)在科学研究和工程应用中发挥着关键作用,诸如气候预测、蛋白质折叠以及计算流体力学等领域均依赖于其提供的计算能力。与机器学习和人工智能采用的方法不同,HPC 常基于模拟和科学公式推演来解决复杂问题。

在 HPC 中,任务可分为计算密集型和数据密集型。例如,天气预测既需要大量计算资源模拟天气变化,又需处理和分析庞大数据集。而如分子动力学模拟等计算密集型任务,则更侧重于计算处理,对数据依赖较少。

HPC Cluster Architecture

HPC 环境通常采用高带宽、低延迟的网络,如 InfiniBand,以支持快速数据传输。软件配置上,多节点间的高效数据通信依赖于如消息传递接口(MPI)这样的标准。

此外,GPU 的应用在 HPC 中也日益增多,加速各类计算任务。HPC 集群与传统数据中心相比,显著区别在于其网络配置和共享文件系统的使用,这些特点使得 HPC 能够有效处理计算密集型任务。

大数据

区别于 HPC,大数据应用在互联网公司的运用更为普遍,主要是因为这些公司可以持续收集庞大的用户数据量,如用户行为和上传内容等。这些通常是非结构化的数据,比如图片、音频和视频。

在这些公司中,大数据工程师常常负责 ETL 工作,即提取、转换和加载数据到数据仓库,在那里数据会被加工整理以供分析或机器学习使用。这与 HPC 的计算密集型任务不同,大数据应用更侧重于数据的处理和分析。

大数据分析架构

成本是大数据应用的一个重要考量,互联网公司倾向于使用性价比高的标准硬件和开源软件,以控制成本。例如,Hadoop 这样的开源软件因其强大的社区支持和成熟性而广受欢迎。互联网公司可以根据自身需求选择合适的软件解决方案,无论是采用开源版本以利用其优势,还是选择商业版本以获得更多支持。

AI

近年来,人工智能(AI)领域的发展已经广为人知,其工作负载主要包括训练和推理。特别是随着大型模型如 GPT 和 Bert 的出现,AI 对高性能计算(HPC)的依赖日益加深,这些复杂的模型迫切需要依靠强大的计算资源来缩短训练时间;同时,它们也带来了如何高效管理和分析海量数据的挑战。

AI pipeline

在这个背景下,文件系统面临特殊要求,尤其是处理众多小型的图片或视频文件时,这些文件通常只有几 KB 到几 MB 大小,对 IOPS 提出了高要求。

此外,在 AI 模型的训练过程中,还有一个显著特点,即同一份数据可能会被用于多种不同参数的调优。这意味着算法工程师会不断地对模型结构进行调整和优化,包括尝试不同的参数设置、修改网络架构,以及实验各种优化技巧。

因此,AI 模型训练不仅是一个计算密集型的任务,同时也是一个需要精细操作和细致调整的过程。这种对参数和模型结构不断调整的方法是实现高效、精准 AI 模型的关键。

正是基于这种背景,数据预处理在 AI 模型训练中显得尤为关键。举一个实际的例子,来自hugging face 子公司开发的大型模型展示了数据预处理的重要性。在处理大型模型的数据时,他们设定了一个较长的处理流程。从最初收集的原始外部网页数据开始经过多次预处理,如URL 过滤、去重等步骤,原始数据量被大幅压缩。

通过下图可以看到,每个步骤都在逐渐减少数据集的大小。经过一系列处理后,最终只有不到10% 的数据量适合用于训练大型语言模型(LLM)。因此,我们看到在大型模型的训练过程中,数据预处理占据了大量工作,包括清洗数据、提取 HTML 标签、过滤广告和文本识别等复杂任务。这些步骤虽然繁重,但对于保证数据质量和优化训练结果至关重要。

来源:https://arxiv.org/abs/2306.01116

02 AI 应用与分布式文件系统的演进

首先,让我们一同简单回顾文件系统的演变历程,其中每一个阶段的新兴需求都催生了新一代的文件系统。

  • Lustre 是最早期的文件系统之一,专为高性能计算(HPC)设计,由美国政府资助并由多个国家实验室共同开发,以支持科学研究。

  • 随后,Hadoop S3 等文件系统的出现主要是为了应对互联网数据量的爆炸性增长,与此同时,也出现了Ceph 等面向大数据处理的文件系统。这些系统旨在支持大数据应用。Alluxio 提供了一个内存缓存层。

  • AlexNet 神经网络等技术的发展进一步推动了文件系统的多样化。

  • 进入到 Kubernetes 时代,云原生数据管理和应用逐渐成为焦点,众多新兴的数据管理系统和应用如 JuiceFS 等都是为了适应这一环境而设计的。

主流文件系统发展历史

文件系统作为数据存储和访问的基础设施,对于 AI 模型的训练和推理过程有着直接的影响。将文件系统应用于 AI 场景时,往往面临这两个关键挑战。

  • 对 IOPS 的性能要求:首要挑战是处理包含大量小文件的数据集,如图片和视频,这对文件系统的IOPS提出了高要求。当前带宽通常足够,但文件系统的 IOPS 处理能力往往限制了性能。

  • 对兼容性的要求:AI 工作流程的复杂性和跨业务团队的协作要求文件系统必须具有高度的兼容性,以支持各种数据处理和模型训练工具,确保数据能够在团队间顺畅交换和处理。

为提高性能,一些解决方案采用了 SSD 或 NVMe 等高性能存储介质,并实施本地缓存策略。这里简单介绍一下学术界的一个常见概念:Burst Buffer ,主要指通过临时存储大量数据来缓解传统存储系统在处理高速数据流时的瓶颈。在这方面,不同的文件系统提供了各自独特的解决方案,会在下文逐一介绍。

同时,在解决兼容性问题时,提供 POSIX 接口确保了兼容性和可移植性,也能解决用户的学习成本。POSIX 指的是 Linux 操作系统一系列文件接口,可以支持 POSIX 的文件系统可以像操作本机一样操作分布式文件系统。但从开发的角度来看,实现 POSIX 兼容性可能增加了额外的开发成本和复杂性。而 HDFS 和 S3 这类产品则未采用 POSIX 完全的兼容性,简化了某些方面的实现,但它们也要求开发人员或用户适应新的操作模式,这可能涉及改变现有的使用习惯和学习新的工具。

POSIX 与 非 POSIX 文件系统优劣势对比

接下来将分别介绍几款适用于 AI 场景的文件系统,希望能够帮助用户更好地理解各个文件系统在 AI 应用的优势和局限。

Lustre

Lustre 在 HPC 场景中表现出色的原因在于,它从设计之初就是为了满足超级计算机的需求,特别是它对 POSIX 协议的支持以及使用 C 和 C++ 进行开发,这些特性使得 Lustre 非常适合于处理大规模并行计算任务。

Lustre 架构图

Lustre 的架构特别适用于典型的超算集群环境,其中包括使用 InfiniBand 网络进行高速数据传输。集群中包含了多个计算节点(Computation)和存储节点(Data Management),用于处理元数据的 Metadata server,而实际的数据则存储在对象存储(object storage)上。这种设计优化了对 MPI 应用的支持,特别是 MPI-IO,即多个进程同时对一个文件进行读写的能力,这对于并行计算和科学研究应用尤为重要。

虽然在 AI 和机器学习应用中,MPI-IO 的直接应用可能较少,主要因为这些应用的文件操作主要写入 checkpoint,而不涉及分布式进程的直接写入。然而,对于需要并行处理和复杂数据交互的科学计算应用,MPI-IO 这样的特点仍然极其重要。

在缓存方面,Lustre 文件系统近期提供了一个功能叫做 PCC(Lustre Persistent Cache on Client)。但实际操作中,它需要运维人员进行大量的配置。

Alluxio

我们尝试部署了Alluxio 作为数据缓存层。Alluxio 的设计理念主要是作为底层存储系统(例如 HDFS 或 S3 )之上的缓存,以此加速数据访问的速度,Alluxio 特别适用于大数据场景,如配合 Spark 等大数据处理系统使用。

在 AI 和机器学习应用场景下的测试表明,性能未达到预期。在 AI 场景中,特别是当首次请求包含大量小文件的数据集时,这一过程极为缓慢。以 ImageNet 数据集为例,我们注意到首次将数据加载到 Alluxio 可能需要几个小时,这对性能造成了严重影响。据最新消息,Alluxio 也针对这个问题做了优化,提供了专门为 AI 设计的存储方案,目前为商业版,没有开源。

Alluxio 架构图

JuiceFS

我们对 JuiceFS 社区版进行了初步的 POC 测试,尚未在在我们的生产系统中全面部署。

JuiceFS 是一款高性能的云原生分布式文件系统。它的设计目标是在云环境下提供高效的数据存储和访问能力。

在 JuiceFS 中,数据被分块存储在如 S3 等对象存储中;元数据则存储在如 Redis、MySQL 或 PostgreSQL 这样的数据库系统中。这种设计使得元数据管理既高效又灵活。客户端通过挂载 FUSE(Filesystem in Userspace)接口来访问 JuiceFS,这使得它能够在多种操作系统上无缝运行。同时,JuiceFS 还为用户提供了一个熟悉的文件系统接口 POSIX。另外,JuiceFS 的缓存功能可以直接支持 burst buffer。

JuiceFS 社区版架构图

从成本角度来看,JuiceFS 的运营成本远低于传统的磁盘阵列。这主要得益于其云原生的设计,能够有效利用云存储资源,减少物理硬件的依赖。

03 测评工具和 PoC 结果

在评估文件系统性能时,iozone, mdtest 和 fio 等 benchmark 工具被广泛用于测试 IOPS 和带宽。然而,标准的 benchmark 工具无法完整地反映真实业务场景下的需求和负载特性,为了得到更接近实际工作负载的性能评估,MLPerf 这样的工具被设计出来。

MLPerf 模拟了真实的 AI 工作负载进行评估,提供了一系列的测试。在计算机视觉领域,它可采用 ResNet 模型进行测试;而在文本处理领域,可能会使用 GPT-3 或 BERT 模型,并在维基百科或 C4 数据集上进行测试。

下面这张图表概述了在不同领域中 AI 性能基准测试的标准,包括视觉、语言处理和推荐系统等。它指定了每个测试所用的数据集,旨在达到的性能目标(如准确率、错误率等),以及各个测试的参考模型(如 ResNet、BERT、GPT-3等)。这为评估和比较 AI 模型的性能提供了一套统一的框架。

AI 基准测试和参考模型

PoC 结果

以下是我们的初步测试结果。我们使用 fio 进行了测试,比较了 Lustre 、JuiceFS 和 XFS。

  • 在 IOPS 和带宽读取性能上,配置了全 NVMe 闪存的 Lustre 表现出了非常高的性能。

  • 在 PyTorch 上运行 ImageNet 数据集的测试中,所有文件系统完成任务的时间都相近,JuiceFS + S3 和 xfs + local SSD 共享最低。

  • 在进行大型语言模型(LLM)的 checkpoint 测试时,Lustre + all flash 只用了1分钟,远快于 Lustre + HDD 的 10 分钟。

fio 基准测试:Lustre vs XFS vs JuiceFS 社区版

04 小结

本文分享了 HPC、大数据和 AI 等需要处理大规模数据的场景及其数据特性。介绍了适用于 AI 场景的常见文件系统及其优缺点,并展示了人大高性能计算中心的内部测试结果。

企业在选择文件系统时,不仅要参考 benchmark 结果,还需考虑实际业务需求和成本。对于运维能力有限的企业,像 Lustre 这样有着完善支持的文件系统更加合适。而有运维能力的公司可能会倾向于成本效益更高的开源解决方案。最终的选择需要综合考虑成本、运维能力和其他因素。

希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源物联网平台】FastBee使用EMQX5.0接入步骤

​🌈 个人主页:帐篷Li 🔥 系列专栏:FastBee物联网开源项目 💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案 目录 一、将java内置mqtt broker切换成EMQX5…

你未必知道的CSS阴影

你未必知道的CSS阴影 假设我们有这样的需求,给图片或元素周围设置阴影效果那么大家一定会联想到 box-shadow 属性,但其实 实现的效果是不对的 可以看到左边是需求效果,而右边使用了 box-shadow 后,效果并不是我们想要的那样 解…

03.axios数据提交和错误处理

一.axios常用请求方法和数据提交 1. 想要提交数据,先来了解什么是请求方法 请求方法是一些固定单词的英文,例如:GET,POST,PUT,DELETE,PATCH(这些都是http协议规定的)&am…

基于Python实现银行卡识别

在本文中将介绍如何使用Python和深度学习技术来实现银行卡识别功能。银行卡识别是一个在金融、安全等领域具有重要应用的问题,将使用深度学习模型来实现银行卡图像的识别和分类。 目录 引言数据集准备预处理和特征提取模型选择与训练模型评估与性能优化部署与应用 引…

pytest-allure报告生成

pytest生成allure报告步骤: 下载allure,配置allure报告的环境变量:把allure-2.13.7\bin 配置到环境变量path路径 验证:在dos窗口和pycharm窗口分别验证:allure –version 2. 生成临时的json报告 在pytest.ini配置文…

Wireshark——捕获localhost(127.0.0.1)对应端口的数据包

前提:安装的Wireshark要有Npcap。 步骤 打开Wireshark,选择Adapter for loopback traffic capture,在过滤器中填写需要监听的端口,再双击Adapter for loopback traffic capture。 点击左上角,开始捕获。

STM32学习7 按键扫描

STM32学习7 按键扫描 一、实验电路介绍二、按键GPIO初始化三、扫描原理1. GPIO引脚配置2. 状态轮询3. 按键状态检测4. 循环扫描的优缺点优点:缺点: 四、一次扫描与持续扫描五、代码实现1. 头文件定义2. 函数实现3. 主体函数 一、实验电路介绍 本实验使用…

Linux 之三:CentOS7 目录结构 和 日期及时区设置

Linux 目录 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev : dev是Device(设备)的缩写…

docker安装和使用kafka

1. 启动zookeeper Kafka依赖zookeeper, 首先安装zookeeper -p:设置映射端口(默认2181) docker run --name zookeeper \--network app-tier \-e ALLOW_ANONYMOUS_LOGINyes \--restartalways \-d bitnami/zookeeper:latest2. 启动kafka docker…

STM32各外设初始化步骤

1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…

青少年如何从零开始学习Python编程?有它就够了!

文章目录 写在前面青少年为什么要学习编程 推荐图书图书特色内容简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家带来一本非常适合青少年学习编程的图书,快来看看吧~ 青少年为什么要学习编程 青少年学习编程,就好比在他们年轻时就开始掌握一种…

线程简介

线程简介 这里先说明一下,进程和线程是不同的 进程:程序的执行过程,是一个独立的运行环境,持有资源和线程,相当于一个应用程序,操作系统在分配资源时把资源分配给进程(堆和方法区是属于进程的) 线程&#x…

【YOLO v5 v7 v8 v9小目标改进】辅助超推理SAHI:分而治之,解决高分辨率图像中小物体检测的问题

辅助超推理SAHI:分而治之,解决高分辨率图像中小物体检测的问题 设计思路结构小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 论文:https://arxiv.org/pdf/2202.06934.pdf 代码:https://github.com/obss/sahi 设计思…

C++内存泄漏检测

C进阶专栏:http://t.csdnimg.cn/aTncz 相关系列文章 C技术要点总结, 面试必备, 收藏起来慢慢看 C惯用法之RAII思想: 资源管理 C智能指针的自定义销毁器(销毁策略) 目录 1.内存泄漏概述 1.1.内存泄漏产生原因 1.2 内存泄漏导致的后果 1.3 内存泄漏解决思路 2.宏…

基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)

一、注册阿里云账户 打开https://www.aliyun.com/,申请阿里云账户并完成实名认证(个人)。这种情况就是完成了: 二、开通OSS服务 点击立即开通即可。 三、创建Bucket 申请id和secert: 进去创建一个Accesskey就会出现以…

【Qt学习】QProgressBar的使用(进度条的实现)

文章目录 1. 介绍2. 实例2.1 按钮启动进度条2.2 更改进度条样式2.3 资源文件 1. 介绍 详细的 QProgressBar 内容可以通过 查阅Qt官方文档 ,这里进行简要的总结: QProgressBar 是Qt框架中的一个控件,用于显示进度条: QProgressBar…

wordpress免费主题下载

免费wordpress模板下载 简洁大气的文化艺术类wordpress模板,可以免费下载,实用易上手,新手也适合。 https://www.wpniu.com/themes/304.html 免费wordpress主题下载 高端大气上档次的wordpress主题,也可以是免费的,…

修改MonkeyDev默认配置适配Xcode15

上一篇文章介绍了升级Xcode15后,适配MonkeyDev的一些操作,具体操作可以查看:Xcode 15 适配 MonkeyDev。 但是每次新建项目都要去修改那些配置,浪费时间和精力,这篇文章主要介绍如何修改MonkeyDev的默认配置,做到一次修改永久生效。 MonkeyDev的默认安装路径是在/opt/Mo…

iclone更奇怪了用自动对齐才搞得定

1前一个clip的位置 2选root的话就跑到这里了,跟前一个clip差很多 3换了left foot对齐之后才正常 4这时候开不开自动对齐不影响 5奇怪医生的中心似乎是途中的花坐标轴偏离人体好多呀不知何时跑这里的难道前面是应为这个?中心跑了我还不知道 6动画交叉的时…

【常见索引使用】⭐️Mysql中索引的类型以及使用方式和失效场景

目录 一、前言 二、数据准备 三、索引的分类 四、索引示例 示例1、主键索引(Primary Key Index)与 唯一索引(Unique Index) 示例2、前缀索引(Prefix Index) 示例3、联合索引(复合索引&am…