导读 本文按照数据湖存储加速方案的不同发展阶段铺开,比较了各类方案之间的异同,并深度剖析了这类方案的技术本质。
1. 数据湖存储成为云原生时代的事实标准
2. 为什么还需要给数据湖存储加速?
3. 数据湖存储加速的诞生和发展
4. 数据湖存储加速都在解决哪些关键问题?
分享嘉宾|陈志鹏 & 杨正
数据规模:要进一步提升模型效果,就要把更多数据喂给 GPU,但自建的小型文件系统已不足以承载这么多训练数据。曾尝试过 HDFS,虽然容量规模增大不少,但元数据量仍然存在上限,因此不得不将海量小文件打包存储,训练前再解压展开,训练后还得清理,使原本顺畅的业务流变得复杂。 存储成本:随着多模态的引入,业务数据由几十 TB、数百 TB 快速积累到数 PB,存储成本越来越不容忽视。 训练速度:算力规模逐步扩大,无论自建文件系统还是 HDFS,都开始跟不上算力需求,存储成为拖慢训练的主要因素。
01
数据湖存储成为云原生时代的事实标准
近乎无限的扩展能力:越来越多的数据湖存储已由传统的 HCFS 架构走向了对象存储架构,其平坦元数据结构天然适合水平扩展,单个存储桶轻松承载千亿对象,尤其在 AI 这类海量小文件场景具有得天独厚的优势。 灵活的资源弹性:相对于 HCFS 的存算一体架构,云服务商提供的对象存储通常基于存算分离的庞大资源池,客户按量付费、按需扩缩容,同时还能借助资源池的规模效应满足一定的突发性能需求。 极致的存储成本:对象存储一般采用纠删码技术,相对多副本可带来数倍的空间节省,同时从标准、低频、冷存到归档的分级存储能力,也给原始数据的长期保存提供了进一步优化成本的方案。
02
为什么还需要给数据湖存储加速?
元数据性能:平坦目录下 LIST 操作需要扫描整个子树并折叠不需要的深层子项,导致训练数据的遍历耗时较长。 小 I/O 性能:采用 HTTP 协议,每个 LIST、HEAD、READ 操作都需经过 LoadBalancer、WebService 等很长的链路才能到达底层的元数据和数据集群,且纠删码还可能导致小文件读放大。这些因素叠加造成训练数据小 I/O 延时并不理想,很可能会拖 GPU 的后腿。 带宽限速:存算分离架构下,计算往往位于 overlay 虚拟网络,访问对象存储需先穿透到 underlay 网络,且计算与存储间可能还存在跨机房的物理网络距离。因此大量重复读不仅产生可观的带宽成本,而且很容易触发各环节的限速,进一步制约训练效率。
03
数据湖存储加速的诞生和发展
1. 并行文件系统
2. 兼顾成本:并行文件系统 + 对象存储
其一,两者仍然相对独立,通过副本式的拷贝来建立数据的弱关联,任意一侧的数据变更无法透明地传递到另一侧。因此业务需要提前规划数据冷热,仔细控制两层间的数据交换。有研发能力的企业通常会在业务层额外建设一套专用的数据流转管理系统。 其二,正是由于这种不透明性,不能做到按需加载,因此需要把即将用到的数据全部载入并行文件系统。因此,业务所需的并行文件系统规模,只能由数据量和所需 I/O 能力两者的最大值来决定,很难做到各类场景下 I/O 和容量均不浪费。目前只能通过不断细分的产品规格来满足差异化需求。
3. 透明流转:对象存储 + 缓存系统
基于同一套存储底座,避免数据反复拷贝,最大程度发挥对象存储在打通业务上下游上的优势。 透明缓存降低了运维人员在业务规划、控制数据流转上的心智负担,内置流转能力就能满足 80% 以上的需求。 通过 pipeline 换入换出,更好地解耦了热数据性能和容量成本,I/O 和容量的配比可根据场景灵活定制。
其一,虽然缓存的透明性能避免数据加载不完整引发的读失败,但是 cache miss 还是会导致明显的性能波动甚至降级。因此对这类产品的缓存算法、调度策略和数据流转效率提出了比较高的要求,这也是各产品持续深耕的重要能力。当然,不同场景对数据的需求总是不尽相同的,如果产品既提供了完善的内置策略,又能将自定义策略的能力开放出来,则能更加贴合业务需求,保证长尾数据的加速效果。 其二,缓存系统的写操作通常还是基于对象存储的原生能力,因此类似追加写、边写边读、子树 rename 等操作仍然会受对象存储的限制。一般来说,AI 场景这类需求较少,但大数据场景对此存在比较强的依赖。
4. 完备语义
(1)解法一:云原生文件系统 + 对象存储
(2)解法二:文件对象融合 + 缓存系统
元数据层面,构建可无限水平扩展的层级目录服务,向上同时提供两套接口,实现文件和对象两种数据视图的互融互通。 数据层面,在存储引擎内部支持流式追加写模型,消除对象存储写能力上的局限,从而更完整地满足大多数存储场景的需求。
04
数据湖存储加速都在解决哪些关键问题?
1. 元数据加速
部署形态上:在业务 VPC 的 overlay 网络中部署元数据服务,能大大缩短访问路径。同时一般还会利用内存作为热点元数据缓存,从而将访问时延从十毫秒量级缩短到毫秒以内。 元数据语义上:并行文件系统、云原生文件系统内置了层级目录树,LIST、RENAME、DELETE 等操作都是以操作子树根结点的方式进行,避免了额外开销和非原子性带来的问题。缓存系统的层级目录树同样能对 LIST、HEAD 这类读操作进行加速,但更新操作通常采用写穿透的方式来保证与对象存储的一致视图。因此对于大数据中某些更新操作较多的场景,一般会选择在对象存储中也采用层级目录模式的桶,以保证穿透写操作的效率。 元数据规模上:层级目录结构的性能与扩展性往往相互制约,很难同时将两者做到极致。几种加速方案都是在两者间权衡的结果,具体可分为横向扩展和垂直分层两种思路:
2. 数据读写加速
这里所说的扩展能力,指的是架构层面怎么将数据分布和读请求均匀打散、充分并发,从而最大限度榨干所有硬件。
并行文件系统、缓存系统一般会将完整文件细粒度切分为若干数据块或条带,再按一定规则打散到多个存储节点的多个盘。打散规则通常按哈希计算,因此能避免访问链路上出现单点瓶颈。云原生文件系统也是将切块后的数据写到对象存储,方便文件系统层以并发方式提高读写性能。
某些系统还支持多副本,客户端可根据实时负载动态选择合适的副本读取。对于譬如超大规模词典、模型分发等多实例启动风暴的场景而言,多副本能进一步将 I/O 均匀扩散到整个资源池,避免因局部热点导致的请求排队和性能抖动。
而缩短 I/O 路径,指的是怎么让数据尽可能被就近获取。
分布式层面,从对象存储,到加速层数据节点的 SSD 和内存,再到计算节点本地的客户端内存,数据会经历从最慢到最快的多级流动。在各级配置合适的预取、预读和缓存策略,让可能被多次访问的数据提前加载并驻留于更快一级,能够降低后续读取时延,减少带宽消耗和触发限速的可能性。
单机层面,过去为了实现简单,一般直接基于内核提供的原生 FUSE、PageCache 等机制来实现客户端读写逻辑。近年来的存储加速系统越来越多地深入到与内核交互的地方进行优化,例如借助 virtiofs、零拷贝、用户态缓存等机制大幅降低内核与用户态文件系统间的通信开销,本质上也可视为单机内部缩短 I/O 路径的做法。
3. 端到端提效
向下与对象存储深度集成,建立双向数据关联。早期产品只提供了手动指定目录的数据加载和沉降方式,后来开始支持 Inventory 清单导入、周期性自动加载、增量同步、读时按需加载、自动淘汰等丰富功能,有的产品进一步将策略开放给业务定制,例如根据文件名后缀、大小、路径等规则实现更智能的数据流转。 向上与计算引擎和调度框架配合,通过 pipeline 的方式进行数据调度。例如在大数据场景下,哪张表、哪些列需要载入加速层,可由计算引擎发起精准的调度指令。在 AI 场景下,训练框架通过样本列表,通知加速层提前准备下一轮需要用到的数据。在数据集超过加速层容量的情况下,通过这种方式可实现多轮训练数据间的无感换入换出,从而利用有限资源实现透明的全量数据加速。
并行文件系统、云原生文件系统这两类方案以自身作为数据的访问入口,通过副本式拷贝来建立与对象存储数据的弱关联。当多个业务节点需要从不同地域、不同入口分别访问时,数据共享就不够方便。 缓存系统这类方案,与对象存储中的数据建立双向强关联,任何业务节点的写入都可透传到对象存储底座。一些缓存产品还借助对象存储的事件通知等机制让这些更新近实时可见,这在需要频繁交换数据的业务流中可带来近乎透明的统一存储底座使用体验。
往期推荐
货拉拉利用大模型打造多场景个人、办公助理实践
DataOps for LLM 的数据工程技术架构实践
腾讯云助力出海企业高效构建全球大数据基础设施
数据性能突破:Spark SQL解析层优化技巧与实践
腾讯分析型 BI+AI 产品 OlaChat 创新探索
NebulaGraph 的 GraphRAG 进展、实践
ChatDBA: 数据库根因分析智能助手的实践与应用
AIGC 在蚂蚁保保险领域的应用探索
Agent+RAG:基于大模型的生成式AI落地探索
百川智能:深度学习大模型推理性能优化策略
点个在看你最好看
SPRING HAS ARRIVED