AIGC 训练场景下的存储特征研究

云布道师

引言:在传统块存储大行其道的时代,需要针对很多行业的工作负载(Workload)进行调研,包含块大小、随机读、读写比例等等。知道行业的 Workload 对于预估业务的 I/OPS、时延、吞吐等性能有很好的指导意义,其次,也便于制定针对行业的存储配置最佳实践。

在今天这样以 AIGC 为代表的 AI 时代下,了解训练场景对于存储的具体诉求同样是至关重要的。本文将尝试解读 WEKA 的一个相关报告,来看看 AIGC 对于存储有哪些具体的性能要求。

一、LLM&AIGC 时代的计算架构特征

存储的变化都是基于计算和存储介质造就的。在最早的大型机时代是提供大型机适配的大硬盘。随着介质的变化,小型的硬盘和内存技术兴起,而商务报价的大幅下降,催生了阵列存储的产生,并且快速地替代了大硬盘。其后,随着关系型数据库这个上一个时代最值钱的数据库不断地发展,产生了各种的高端存储,架构也随着一些硬件技术的进步做了很多的演进,从 scale-up 到 scale-out,但是价格依然高昂。
在这里插入图片描述
高端存储宣传的主要方向是高性能、高可靠、高扩展,以及各种名词堆上去的企业级存储平台。在企业存储的赛道之外,其实一直都有另一个赛道存在,那就是HPC(High performance computing) 存储,HPC 存储最初主要面向的是科研机构。
High performance computing (HPC) storage systems vendor market share worldwide in 2021
回到 20 年前,HPC 系统已经在处理几个 PB 的数据了,而在这个时代,产生的大数据技术或多或少也从这里得到了灵感。个人认为,Google 的三驾马车就是一个HPC+DBMS 的结合体,取了 HPC 架构的精华,构造了傻瓜式调用的并行处理框架MapReduce,然后将 DBMS 放弃了 ACID 的部分功能,构造出了 Bigtable 来适配互联网的业务。

当年的存储架构设计思路是为计算提供最快的存储层即HDD(当时还没有SSD加入到存储中,EMC主存储加SSD也到了08年左右)。由于HDD的限制,作业通常大小为尽可能多地加载到内存中,避免换出,并且需要检查点(checkpoint)以确保如果在加载或将作业写入HDD会发生什么样的问题,毕竟因为一个中间错误就去重新加载数据并重新开始任务所花费的计算时长太长了。

但是众所周知,HDD 是数据中心中最慢的部件,或者说存储是数据中心中最慢的部件。后来出现了 SSD,但是性能和成本是永恒的矛盾,于是分层存储就出现了。
传统 HPC 存储的参考架构
首先,从传感器或者其他领域获取到数据,存储到一个高性能的存储设备。这个存储设备首先必须是一个共享存储,毕竟HPC是采用多个计算节点并行的方式执行任务,因此一般都是文件存储或者对象存储(早期主要是文件存储,对象存储是这几年云时代的到来,很多数据上云的第一站需要跨越互联网,因此以对象存储来承载)。

其次,数据经过预处理之后加载到计算节点的本地 NVMe SSD 或者 Cache 中,上面这个图画得不一定精准,其实很多时候数据预处理之后写入到了并行文件系统中,比如说典型的 HPC 高性能存储并行文件系统(GPFS、BeeGFS、Lustre)。

最后,将数据进行相关的备份或者随着生命周期转冷。

在 AI 的领域,可以说 AI 的训练其实是另一个基于 GPU 的 HPC。整个过程的数据流处理如下(这里面会有几个批次的 copy 工作)。从原始数据预处理到并行文件系统,从并行文件系统到 GPU 本地的 NVme SSD,从本地 NVMe 到显存。这几个过程不可避免,并且成为制约 AI 最大的性能瓶颈之一(另一个则是内存墙)。NVIDIA GPUDirect Storage 协议是一个可能的解题思路,可以跳过本地 NVMe SSD,但是存储系统本身的性能可能更是一个关键,毕竟通过网络的时延可能高于本地 NVMe SSD 的访问。
图片

二、AIGC时代的存储主要挑战

从微软的研究 Analyzing and Mitigating Data Stalls in DNN Training 中可以明显看出,dataset 在 SSD 情况下是否缓存住对于每个 epoch 的时间冲击并没有想象的那么大,但是如果存储性能太差,那么 epoch 的时间冲击将极大。当然这个是DNN 场景,在 LLM 大模型的 transformer 模型是否也会类似并不清晰。理论上,如果网络效果好,加之全闪存是可以逼近本地盘的效率(假设dataset cache率没有那么高)。
在这里插入图片描述
如果使用对象存储配合本地盘来做训练,也有一组测试数据,除了第一个 epoch 性能较差,其他的根本底盘差异并不大。(这里其实有点偷换概念,本质上后面的测试都是 cache 了)
在这里插入图片描述
存储性能做到足够好,可以让大模型训练对存储不敏感,但是如果存储性能不好,则可能带来训练时长成倍地增长这个已经是个共识。针对 AI 训练尤其是大模型的训练,在存储上省钱将会大量浪费 GPU 算力。所以,在 GPU 算力紧张的时代,使用最高性能的存储是 AI 训练的基本原则。
在这里插入图片描述
很多时候沿用了大数据提出的数据湖的概念,大数据领域的湖仓一体。在 AI 领域也是遵循这个概念,在数仓时代的相关数据流在 AI 时代其实一样存在。
简化的 GenAI 数据 pipeline
虽然当前的基础设施每年都在飞速地发生着变化,AI 模型也是日新月异,但是,整个数据流的架构并没有什么大的变化,还是大致遵循上面这个流程。而当下大模型公司的领先优势并不是算法上的精妙,而是工程上的架构设计以及先发优势,所以,一旦其他厂商加入,护城河将很快被填平。

三、LLM&AIGC 时代的元数据挑战

在这里插入图片描述
图片回到存储角度,大规模的训练带来的第一个挑战是混合 I/O 特征的需求,这个需求在集中存储、虚拟化存储、私有云存储时代都在不断地出现和完善。

其次是针对元数据的管理,这个才是这个时代的难题。以前用树形的分布式文件系统,一般可以处理十亿百亿级的文件,之后在互联网时代为了处理海量的文件,使用了对象存储的KV架构,不再追求文件树形架构因此也没有目录、文件夹这个概念。很多云厂商的对象存储已经可以做到几千到上万的 QPS。

而在 AI 处理场景下,不管是当前的大语言模型、图片类模型,训练的语料经常是大量的小文件,小文件下的元数据处理经常会被忽略,其实很多时候元数据的 QPS 大于数据的 QPS。

在预处理期间,ingest 数据被处理到模型训练期望能够使用的状态。这可能涉及注释/标记、图像缩放、对比度平滑、索引等。当您有多个研究人员/科学家处理相同的数据时,每个人可能需要以不同的方式预处理数据,这取决于他们打算训练或重新调整模型的内容。即使使用相同的数据集,每个研究人员执行的预处理步骤之间也存在巨大差异。其结果是一个用于预处理的混合 I/O 环境,最多可占用 epoch 训练时间的50%。(这是一个很可怕的结果)
Time
I/O 的影响是巨大的。当访问大量小文件(LOSF)时,不仅会遇到 I/O Blender 问题,而且现在还会有数百万个文件操作,读取和写入,其中 I/O大小和操作各不相同。

以一个使用 TensorFlow 在 ImageNet 上进行深度学习的客户为例(训练数据库包含 1400 万张图片):

阶段1:预处理函数在读取、修改和写回数据时,会对与之关联的小文件进行大量写入。当这种预处理与系统中的所有其他 I/O 混合在一起时,将再次遇到 I/O 混合器问题,但有一点不同:可能会耗尽系统中的写缓存,并陷入必须执行额外 I/O 来刷缓存到持久化层的恶性循环,从而导致系统速度降低,并延长完成这些元数据密集型流水线阶段所需的时间。

阶段2:对元数据产生巨大影响的第二个阶段是深度学习训练阶段。这往往是较少的写密集型,但有很多随机读取小文件。数据处理通常遵循以下一些变化:

●整个数据集的随机子集上的 mini-batch 和重复

●对每个 mini-batch 进行训练

●整个数据集的完整历元处理,通常以随机顺序进行(就是一个典型 shuffle)

●设置某种形式的超参数来控制过程(例如,所需的精度,epochs的数量等)

在这个过程会导致大量文件打开、文件统计信息以及更多不显示为传统 I/O 的信息。在下面的图表中,可以看到 WEKA 客户在 ImageNet 上使用 TensorFlow 进行训练的示例,训练数据库包含 1400 万张图像。在此训练期间,30% 的读取是文件打开(open)。这种开销表示深度学习训练和 ResNet-50 类型的迁移学习负载,读取比例一般在 25-75% 之间,具体取决于部署的训练类型和文件大小。这种“隐藏 I/O”会在数据平台上产生开销,随着工作负载的增加,开销会变得更大。设想一个1000 万次读取的 I/O 环境,在此基础上您需要额外处理 500 万次元数据 I/O。(这个就是典型的元数据隐藏)
在这里插入图片描述
文件的大小也很重要。在同一个 TensorFlow 管道中,WEKA 发现数据大小要么非常小(小于100字节),要么是 10 KB-1 MB 的中等大小。由于文件大小的差异,数据平台需要能够同时处理非常小的随机 I/O 和顺序 I/O,以加快训练的epoch时间。其实当前看到大多数大模型训练都是以小 I/O 为主。
在这里插入图片描述

四、LLM&AIGC 时代的 I/O 特征分析

首先看一个自然语言处理(NLP)例子。这家 GenAI 客户正在构建人工智能模型,以支持语音转文本(voice-to-text)和语音转操作(voice-to-action)功能。
在这里插入图片描述
在此环境中,可以看到这是一个完全混合的混合 I/O 管道,由相对一致的读取数量和写入时的 I/O 峰值组成(读写是同时发生的)。这些信息可以映射到后端服务器的负载情况。
在这里插入图片描述
深紫色和浅紫色表示最大利用率和平均利用率。这显示了该客户的AI管道的强烈突发性。如果只看平均值,会认为系统未充分利用率约为 5%。实际情况是,它每隔几分钟就会出现剧烈的波动,导致其利用率经常达到 80-100%。(这在自动驾驶和AI场景非常的常见,对于共享的云存储集群来说,如何来处理这种场景的性能突发以及资源争用,并且最大化地利用资源是个比较复杂的问题。集群的QoS管理是云存储厂商需要不断下功夫的地方)。
在这里插入图片描述
对于这个 NLP 业务来说,读/写比例是 47/53,但值得注意的是 I/O 大小:读 I/O 大(300-500K),写 I/O 小(100-200K)。在本例中,客户获取了通常小于100 k的小样本,将它们 append 到一个较大的文件中,并对该文件进行阅读,就好像它是一个流一样。但为什么写的都是小 I/O 呢?这不仅是 GenAI 和 AI 工作负载的共同主题,也是许多 HPC 工作负载的共同主题:Checkpoint。

Checkpointing

当运行长时间的培训或操作作业时,检查点是确保在发生故障时有一个“checkpoint”的方法。故障可能是任何硬件,其中运行作业的服务器出现硬件故障,也可能是 GenAI 工作流中的错误,其中功能嵌入到层中但未完成。检查点允许您恢复作业的状态,但也可以用于停止模型训练,评估,然后重新启动,而无需从头开始。检查点涉及将作业或内存状态写入存储器。在内存转储的情况下,这可以是大量的数据,或者在 AI 嵌入/训练检查点的情况下,这可以是较小的增量步骤。在这两种情况下,延迟都是一个重要的关键指标,因为写操作所花费的时间越长,作业必须等待的时间就越长。

上面这个图里面的小 I/O 写主要发生在层的 checkpoint。

接下来,看看 AI/ML 模型开发环境。在这个用例中,客户正在构建 NLP 和 ML 函数的组合,以实现 text-text and text-action 功能。这种数据管道更加隔离,重叠较少,因为它们还没有满负载运行。在这里可以看到,混合 I/O,读/写比例大概为48%/52%。此外,读取的 I/O 大小往往大于写入。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里最重要的是所有预处理对 I/O 模式的影响。由于获取数据在构建到H5文件之前进行了大量的预处理以规范化数据,因此读取的 I/O 范围要窄得多,并且更可预测。这是在做大量的前期预处理工作使训练 I/O 更容易,或者做更少的工作并使训练 I/O 变得更加可变和难以处理之间的权衡。

最后,如果看一个图像识别训练的例子,其中已经完成了自动图像预处理,(注意这与之前描述的元数据例子不同,客户没有说明这是TensorFlow还是PyTorch),看到客户正在做一个经典的隔离环境,只是为了在图像训练中读取。但在他们目前的运营规模下,他们决定将训练与所有其他工作流程隔离开来,而不是每天将图像批量传输到存储集群进行训练。
在这里插入图片描述在这里插入图片描述
正如预期的那样,总体吞吐量由大小非常一致的读取控制。然而,写入差异很大。这些写操作大多是对文件的元数据更新、进程数据的回写和 checkpoint 操作。正如之前所指出的,监测的数据展示出了实际的数据传输,虽然这些写入的所有元数据操作都不会显示为数据传输,但它们可能会对训练模型的性能产生重大影响。

五、阿里云存储的典型 AI 训练解决方案

结合上文的分析,可以清晰地看到:

首先,在 AI 训练场景中需要一个低时延,高 QPS 和高吞吐的并行共享文件系统。
在这里插入图片描述
阿里云文件存储 CPFS 有几个关键的优势:

高性能元数据操作:客户端创新的lease机制和元数据缓存,元数据查询操作无需跨越网络,提升操作速度 10 倍,媲美本地 EXT4 性能

大规模训练稳定性:EFC 客户端支持链接层高可用,链路问题秒级别切换;客户端元数据和数据流分离,避免数据大压力下元数据操作卡顿。

其次,在传统的 HPC 架构里,高性能存储和大容量存储分离部署和维护,所有训练数据在高性能存储中清洗、训练、试用;数据转冷后流转到冷存储(手动&工具)。
在这里插入图片描述
而云原生时代的AI训练数据路径出现了明显的差异:分散的存储转化到数据湖,数据入口从训练高性能存储转化为对象存储底座。数据入湖后第一时间进入对象存储(数据湖存储底座);训练数据需要从对象存储进行自动化加载(部分厂商推荐客户使用跳板机映射或者开源主机缓存软件进行手动加载)。

因此,并行文件系统或分布式 Cache 自动加载数据湖对象存储是云原生AI基础设施的关键能力需求。
在这里插入图片描述
阿里云存储提供完整的数据管理解决方案,提供全面的数据流动能力:

高效数据流动:数据块粒度流动,多并发技术可实现百 Gbps 流动性能;

极速同步:事件驱动的高效元数据同步,OSS 数据变动在 CPFS 中分钟级可见;

多种模式:支持配合任务调度预加载或随 I/O 读取 Lazyload;

结束语

AI 训练过程中,随着流程的复杂以及并行度的加剧,I/O 的特征是一个非常混杂的场景,读写以及 I/O 大小都是弹性多变的,并且除了数据 I/O 还有大量的隐藏的元数据 I/O,很多时候会被忽略,但是它对于性能影响更大。AI 过程对于 I/O 最敏感的是时延而不是吞吐。低延迟是系统整体性能的主要指标,因为它会影响每个操作。整体延迟越低,AI 流程就越快进入模型工作流中的下一个迭代周期。

注:

1、本文相关截图、性能分析等数据出自以下公开报告https://www.weka.I/O/wp-content/uploads/files/resources/2023/09/I/O-profiles-gen-ai-pipelines.pdf

2、Analyzing and Mitigating Data Stalls in DNN Training

https://arxiv.org/abs/2007.06775

3、High performance computing (HPC) storage systems vendor market share worldwide in 2021

https://www.statista.com/statistics/802712/worldwide-top-hpc-storage-system-supplier/

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

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

相关文章

Cadence——生成Gerber制板文件

软件版本:Cadence SPB OrCAD Allegro 16.6 打开Allegro PCB Designer 选择如下选项👇 点击 File–>Open,找到对应的.brd文件 电气错误的检查:点击 Display–>Status,全为绿色则没有错误 按照不同的项目来进…

基于stm32与TJC3224T124_011串口屏的PID调参器(附完整工程)

电赛在即,每次比赛调PID都是一件比较繁琐的事。每次都要在程序中改完再烧录到板子上,特别耗时。正好最近发现实验室的一块串口屏比较好玩。 于是就做了这个调PID的东西。它可以通过串口直接修改PID的值,从而达到快速调PID的目的。下面我将完整…

【办公类-16-07-07】“2023下学期 中班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)

作品展示 背景需求: 2024年2月教务组发放的是“每周五天内容相同,两周10天内容相同”的户外游戏安排 【办公类-16-07-05】合并版“2023下学期 大班户外游戏(有场地和无场地版,两周一次)”(python 排班表系…

YOLOv7 | 注意力机制 | 添加ECA注意力机制

目录 原理简介 代码实现 yaml文件实现(tips:可以添加不同的位置) 检查是否添加执行成功 完整代码分享 论文创新必备(可帮忙做实验) 启动命令 ECA是通道注意力机制的一种实现形式,是基于SE的扩展。…

Data Interpreter: An LLM Agent For Data Science 论文解读

论文地址:https://arxiv.org/abs/2402.18679 Github:MetaGPT: The Multi-Agent Framework 数据解释器(Data Interpreter)是一个基于大型语言模型(LLM)的代理,专门为解决数据科学问题而设计。它…

数据丢失大救星:格式化后如何高效恢复文件

一、格式化危机:如何逆转数据流失 在数字时代,数据丢失无疑是一场灾难。当我们的电脑硬盘、手机或闪存盘不慎被格式化后,重要文件仿佛在一瞬间消失得无影无踪。面对这一突发状况,很多人会陷入迷茫和焦虑之中。那么,格…

Django(三)-搭建第一个应用(2)

一、编写更多视图 问题详情页——展示某个投票的问题和不带结果的选项列表。问题结果页——展示某个投票的结果。投票处理器——用于响应用户为某个问题的特定选项投票的操作。 # 1.问题详情页:展示某个投票的问题和不带结果的选项列表 def detail(request,questi…

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库

Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库,出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑,他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…

clickhouse学习笔记02(小滴课堂)

ClickHouse核心基础-常见数据类型讲解 插入数据: decimal类型的数据,整数部分超了会报错,小数部分超了会截取。 查看表结构: 查询: 插入: 更新操作: 这个和mysql的语句不太一样。 删除语句和my…

Kafka总结问题

Kafka Kafka Kafka Kafka的核心概念/ 结构 topoic Topic 被称为主题,在 kafka 中,使用一个类别属性来划分消息的所属类,划分消息的这个类称为 topic。topic 相当于消息的分配标签,是一个逻辑概念。主题好比是数据库的表&#xff0…

【SpringBoot】实现一个简单的图片上传

前端上传表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form enctype"multipart/form-data" method"post" action&q…

MCGS学习——弹框报警

弹框报警的制作流程 先绘制一个弹框窗口&#xff0c;在弹框窗口里绘制弹框标志&#xff0c;记得绘制完成之后点击合成单元&#xff0c;此外&#xff0c;打开报警信息按钮中是打开报警界面 绘制好之后&#xff0c;如果我们想让弹窗出现在我们想让他出现的位置&#xff0c;那我…

Likeshop回收租赁系统:回收租赁超方便!

尊敬的各位&#xff0c;很高兴有机会向大家介绍一款备受瞩目的系统——全新的Likeshop回收租赁系统。 无论是电子产品、衣服还是书本&#xff0c;越来越多人选择在二手平台上进行交易或租用&#xff0c;商品回收、租赁的需求越来越大&#xff0c;很多想入场的兄弟们都苦于没有…

(分享)一个图片添加水印的小demo的页面,可自定义样式

有时候想给某张图片添加一个自己的水印&#xff0c;但是又懒的下载相应软件&#xff0c;用js canvas制作一个静态页面&#xff0c;对于单张图片添加自定义文字水印&#xff0c;大小 间距&#xff0c;角度可调。 页面如下&#xff1a; 选择图片&#xff0c;设置相应参数&#x…

公众号超牛鼻的爆文仿写机器人,原创三篇只需6分钟,篇篇是爆文基因

大家好&#xff0c;我是大胡子&#xff0c;专注于RPA提效​&#xff0c;今天就介绍一款公众号超牛鼻的爆文仿写机器人​。 和以前的公众号爆文机器人不太一样&#xff0c;以前的爆文机器人需要手动插入图片、添加封面、插入话题&#xff0c;然后今天这个机器人就完全解决这几个…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 刷题https://leetcode.cn/problems/delete-operation-for-two-strings/description/文章讲解https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html视频讲解https://…

详解:写作和赚钱的 4 个关系!看完你一定会忍不住想开始写!

飞书文档的加密很强&#xff0c;也没有和自家的豆包大模型融合&#xff0c;所以只能通过其他方式获取文档的内容。 &#xff08;1&#xff09;将飞书文档转换为PDF&#xff0c;要用到浏览器插件&#xff1a; GoFullPage - Full Page Screen Capture - Microsoft Edge Addons …

RT-Thread动态内存扩展,使用多块不连续的RAM作为动态内存

开发环境 MCU&#xff1a;STM32F429VET6&#xff08;1M Flash&#xff0c;192K64K共256K SRAM&#xff09; 编译环境&#xff1a;MDK5.38 实时系统&#xff1a;RT-Thread标准版 目的 这颗MCU的SRAM默认是使用192K&#xff0c;即从地址0x20000000开始&#xff0c;最大0x30000…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数

solution1 直观上的分数处理 #include <iostream> using namespace std; int main() {printf("1048575/524288");return 0; }#include<stdio.h> #include<math.h> typedef long long ll; struct fraction{ll up, down; }; ll gcd(ll a, ll b){if…

2024中国闪存市场观察:AI助推闪存全面起势?

过去两年&#xff0c;闪存市场一直处于低迷状态&#xff0c;但去年第四季度闪存颗粒资源的上涨&#xff0c;导致闪存产品价格一路上扬&#xff0c;市场遂发生反转。 2024年&#xff0c;中国闪存市场会彻底走向复苏&#xff0c;还是急转直下&#xff1f;中国AI热潮&#xff0c;…