Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者:Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta

Alluxio 作为全球领先的 AI 缓存解决方案供应商, 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点,能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技术在很大程度上推动了大语言模型( LLM )在全球范围内的成功。

“Solidigm 和 Alluxio 联合推出了高效的分布式 AI 缓存方案。通过将 Solidigm 的 D5-P5336 用作读缓存,D7-PS1010 用于 checkpoint 写入,并搭配 Alluxio 的低操作开销解决方案,我们帮助客户实现了大规模 AI 场景下成本和性能的最佳平衡。优化后的方案充分利用了Solidigm D7-PS1010 Gen5 TLC SSD 的写入带宽和 D5-P5336 Gen4 QLC SSD 的读取带宽,同时将 TLC 和 QLC SSD 的写放大系数保持在 1.02。我们希望与 Alluxio 一道持续为客户提供高效、低成本的AI 解决方案。” - Greg Matson,Solidigm 战略规划与营销高级副总裁。

Alluxio DORA 缓存架构的核心优势

在这里插入图片描述

DORA(Decentralized Object Repository Architecture 的缩写 )是 Alluxio 的新一代架构。

作为分布式缓存存储系统,DORA 具有低延迟、高吞吐量和节省成本的特点,同时旨在为 AI 工作负载提供高性能的数据访问层。

DORA 利用去中心化存储和元数据管理来提供更高的性能和可用性,以及可插拔的数据安全和治理,从而提高大规模数据访问的可扩展性和管理效率。

DORA 的架构目标:

  • 可扩展性:可扩展性是 DORA 的首要目标,旨在支持数百亿个文件,从而满足数据密集型应用(如 AI训练)的需求。
  • 高可用性:DORA的架构设计考虑了高可用性,具有99.99%的正常运行时间,并可以防止在 master 出现单点故障。
  • 性能:性能是 DORA的核心目标,它优先考虑模型训练、模型服务的速度,以及用于 AI 工作负载的GPU 利用率。

DORA 架构包含四个重要组件:服务注册( service registry )、调度器( scheduler )、客户端( client )和 worker。这些组件共同管理服务发现、分布式负载调度和数据存储等任务,同时维持整个系统的最佳性能。

NVMe 存储相关技术亮点

1. 页数据存储能够利用 SSD 的最大性能,并保持最佳的写放大系数(WAF)和耐用性

DORA 使用经严格测试的页存储模块进行缓存存储,从而可以更精细地缓存大文件上的小至中等规模的读取请求。这种可靠的页存储技术已在 Meta、Uber 和 TikTok 等应用中得到验证。DORA 的细粒度缓存使得读放大情况降低到原先的1/150,并使得文件随机读性能提高了 15 倍。

页数据存储通过日志文件系统,将数据分成两级目录,包含固定大小的大文件块。所有写操作都附加到这些文件块中,而当其中的对象文件被标记为删除时,只有在不需要这些文件时才会删除。这种设计确保了即使在使用 PCIe 5.0 TLC SSD 时也能实现最佳性能, 同时也保持 SSD 的写放大系数(WAF)为 1,从而最大限度提高 SSD 的耐用性。

例如, 当使用 QLC SSD 进行 Alluxio 读缓存时,存储引擎会充分利用 QLC 的耐用性,不会导致任何内部写放大或垃圾回收写放大,从而确保 QLC NVMe SSD 的高效运行。
在这里插入图片描述

2. 去中心化的元数据存储

DORA 将元数据传递给每个 worker,确保元数据始终可访问且可用。为了优化元数据访问,DORA 对元数据条目使用两级缓存系统。第一级缓存是内存缓存,它将元数据条目存储在内存中。此缓存具有可配置的最大容量和有效时间 ( TTL ) 设置,可设置过期时限。第二级缓存是持久化缓存,通过RocksDB 将元数据条目存储在磁盘上。持久化缓存具有无限容量,具体取决于可用磁盘空间,并且还使用基于 TTL 的缓存驱逐策略,防止主动同步或主动失效。存储的元数据类似页存储,也是基于完整的 UFS 路径的哈希值来确定分发到哪个 Dora Worker。

内存和持久化缓存的组合有助于确保元数据能够随时可用且可访问,同时还可以高效利用系统资源。元数据的去中心化避免了在元数据主要由 master 节点来管理的架构中可能出现的瓶颈。由于每个 DORA worker 节点可存储多达 3000 万至 5000 万个文件, 整个系统便可以支持拥有数百亿文件的大规模数据密集型应用。

经 Solidigm 验证, 内存元数据设计与 RocksDB 的组合提供了最佳的元数据存储解决方案。该设计充分利用了 PCIe 4.0 QLC SSD ( 读取 7GB/s,写入 3GB/s )和 PCIe 5.0 TLC SSD( 读写均为 14.5GB/s )的读写性能。此外,RocksDB 通过跳表( skiplist-based ) 写缓存将许多小的写入合并为较大的2MB 顺序写,这种方式极其高效,有助于将 SSD 写放大系数(WAF)最小化,进一步提升 SSD 的耐用性。

性能测试::Alluxio 搭配 Solidigm™ 的 D7-PS1010 和 D5-P5336

测试配置

在这里插入图片描述
在最近一项实验中( Solidigm D7-PS1010 和 D5-P5336 SSD,搭配 Intel Gen5 BNC 存储服务器 ),Alluxio 展现其在数据快速摄取以及读性能方面的优势,特别是在 GPU 扩容的情况下。部署 Alluxio 后取得的显著成效:

  • 缓存加载效率: Alluxio 缓存引擎在写入 PCIe 5.0 TLC SSD 时,能够有效跑满 UFS QLC 存储的最大读取带宽。
  • Fuse 读取测试: Alluxio 的 FUSE 框架几乎跑满单个 PCIe 5.0 SSD 的读取带宽,显示处理 NVMe SSD缓存命中时的开销极低。

为了能够快速部署,我们设置了一个单节点测试来展示 Alluxio 存储引擎的强大性能。Alluxio 的最大优势在于能够利用主机侧的分布式复制缓存,可随着 GPU 扩展并显著降低南北向存储带宽开销。即使在单节点配置下,Alluxio 也表现出超高的效率,尤其是在搭配高性能 NVMe SSD 时。在此次测试中,我们将缓存配置为使用 PCIe 5.0 TLC 或 PCIe 4.0 QLC,而底层文件存储( UFS )使用了 PCIe 4.0 QLC。
在这里插入图片描述

重要结论

  1. Alluxio 的缓存加载引擎十分高效,能够跑满 UFS QLC 的最大读取带宽,并将数据摄入到 PCIe 5.0 TLC 缓存 SSD中。即使 UFS 支持 10GB/s 的读取带宽,Alluxio 也能轻松地跑满 Solidigm D7-PS1010 9.3GB/s的写入带宽。
  2. Alluxio 的页缓存存储引擎基于 XFS 日志文件系统,并使用 Solidigm Alluxio FIO仿真器进行了严格的使用寿命测试。测试结果表明,无论使用 TLC 还是 QLC SSD,Alluxio 都能实现 1.02 的写放大(WAF )。这种接近理想的 WAF=1的效果能让 SSD 的性能和耐用性最大化,为终端用户提供最佳性能。
    在这里插入图片描述

重要结论

FUSE 的读开销极小。当执行 FUSE 读取,在 SSD 缓存上 100%缓存命中并且绕过 DRAM 页缓存时,FUSE 框架几乎可以跑满单个 PCIe 5.0 SSD 的读带宽,速度达到 14.8 GB/s。
在这里插入图片描述
对于寻求高效缓存方案的客户来说,Solidigm 的 61.44TB QLC 是理想选择。Alluxio 的存储引擎对于写放大十分友好,作为以读取为主的缓存,其写入量极少,使得 QLC 完美适配其读缓存路径。鉴于 Alluxio 的高效设计,我们可以根据 213 PB 的顺序写总量 (PBW)来估算 QLC 缓存设备的耐用性,这也意味着 Solidigm 支持写入高达 213PB 的数据。即使在 5 年周期内以 50% 的使用率(已是较高的阈值)计算,QLC 仍能支持 2900 MB/s 的写带宽,几乎达到其最大值。此外,QLC 每块 SSD 可提供高达 6GB/s 的随机读带宽,实现高性价比的 Alluxio AI 缓存系统。

Solidigm SSD 如何为 Alluxio 提供合适的存储

就读缓存而言,Solidigm D5-P5336 61.44TB QLC 提供了卓越的性能和可扩展性。对于 checkpoint 写入而言,PCIe 5.0 D7-PS1010 提供了一流的写性能。

“我们与 Solidigm 团队紧密合作,验证了将 Alluxio 分布式缓存技术与 Solidigm SSD 和 NVMe 驱动联合用于 AI 模型训练工作负载的性能优势。通过这次合作,我们进一步优化了 Alluxio,通过充分发挥 Solidigm 驱动的优势,将大规模 AI 工作负载的 I/O 吞吐量最大化。” Alluxio 工程副总裁杜璿表示,“我们期待与 Solidigm 继续开展这项重要合作,共同为我们的客户提供高性能、高成本效益的解决方案,帮助客户构建、训练和部署大规模 AI 模型。”

Alluxio 和 Solidigm 的合作成果表明,Solidigm TLC 和 QLC SSD 都能显著提升 Alluxio 的服务,同时降低运营成本。此外,Solidigm 还提高了质量和可靠性标准,并由专门的客户服务团队为 Alluxio 提供出色的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习篇---AnacondaLabelImg

文章目录 前言第一部分:Anaconda是什么?1.简介2.特点(1)包管理器Conda(2)环境管理(3)预装包(4)跨平台(5)社区支持 3.安装WindowsLinux…

基于Redis实现短信验证码登录

目录 1 基于Session实现短信验证码登录 2 配置登录拦截器 3 配置完拦截器还需将自定义拦截器添加到SpringMVC的拦截器列表中 才能生效 4 Session集群共享问题 5 基于Redis实现短信验证码登录 6 Hash 结构与 String 结构类型的比较 7 Redis替代Session需要考虑的问题 8 …

Open3D计算点云粗糙度(方法一)【2025最新版】

目录 一、Roughness二、代码实现三、结果展示博客长期更新,本文最近更新时间为:2025年1月18日。 一、Roughness 通过菜单栏的Tools > Other > Roughness找到该功能。 这个工具可以估计点云的“粗糙度”。 选择一个或几个点云,然后启动这个工具。 CloudCompare只会询问…

(二叉树)

我们今天就开始引进一个新的数据结构了:我们所熟知的:二叉树; 但是我们在引进二叉树之前我们先了解一下树; 树 树的概念和结构: 树是⼀种⾮线性的数据结构,它是由 n ( n>0 ) …

洛谷P8837

[传智杯 #3 决赛] 商店 - 洛谷 代码区&#xff1a; #include<stdio.h> #include<stdlib.h> int cmp(const void*a,const void *b){return *(int*)b-*(int*)a; } int main(){int n,m;scanf("%d%d",&n,&m);int w[n];int c[m];for(int i0;i<n;…

C语言练习(17)

两个乒乓球队进行比赛&#xff0c;各出3人。甲队为A、B、C 3人&#xff0c;乙队为X、Y、Z 3人&#xff0c;并抽签决定比赛名单。有人向队员打听比赛的名单&#xff0c;A说他不和X比&#xff0c;C说他不和X、Z比&#xff0c;请编程序找出3对选手的对阵名单。 #include <stdi…

excel实用工具

持续更新… 文章目录 1. 快捷键1.1 求和 2. 命令2.1 查找 vloopup 1. 快捷键 1.1 求和 windows: alt mac : command shift T 2. 命令 2.1 查找 vloopup vlookup 四个入参数 要查找的内容 &#xff08;A2 6xx1&#xff09;查找的备选集 &#xff08;C2:C19&#xff09;…

【高阶数据结构】布隆过滤器(BloomFilter)

1. 概念 1.1 背景引入 背景&#xff1a;在计算机软件中&#xff0c;一个常见的需求就是 在一个集合中查找一个元素是否存在 &#xff0c;比如&#xff1a;1. Word 等打字软件需要判断用户键入的单词是否在字典中存在 2. 浏览器等网络爬虫程序需要保存一个列表来记录已经遍历过…

Linux内存管理(Linux内存架构,malloc,slab的实现)

文章目录 前言一、Linux进程空间内存分配二、malloc的实现机理三、物理内存与虚拟内存1.物理内存2.虚拟内存 四、磁盘和物理内存区别五、页页的基本概念&#xff1a;分页管理的核心概念&#xff1a;Linux 中分页的实现&#xff1a;总结&#xff1a; 六、伙伴算法伙伴算法的核心…

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…

机器学习10-解读CNN代码Pytorch版

机器学习10-解读CNN代码Pytorch版 我个人是Java程序员&#xff0c;关于Python代码的使用过程中的相关代码事项&#xff0c;在此进行记录 文章目录 机器学习10-解读CNN代码Pytorch版1-核心逻辑脉络2-参考网址3-解读CNN代码Pytorch版本1-MNIST数据集读取2-CNN网络的定义1-无注释版…

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…

【MySQL篇】使用mysqldump导入报错Unknown collation: ‘utf8mb4_0900_ai_ci‘的问题解决

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

WPF2-在xaml为对象的属性赋值

1. AttributeValue方式 1.1. 简单属性赋值1.2. 对象属性赋值 2. 属性标签的方式给属性赋值3. 标签扩展 (Markup Extensions) 3.1. StaticResource3.2. Binding 3.2.1. 普通 Binding3.2.2. ElementName Binding3.2.3. RelativeSource Binding3.2.4. StaticResource Binding (带参…

软考 系统架构设计师系列知识点之面向服务架构设计理论与实践(5)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之面向服务架构设计理论与实践&#xff08;4&#xff09; 所属章节&#xff1a; 第15章. 面向服务架构设计理论与实践 第2节 SOA的发展历史 15.2 SOA的发展历史 15.2.3 SOA的微服务化发展 随着互联网技术的快速发展&a…

ICLR顶会论文学习|DRL-based改进启发式求解方法JSSP

论文名&#xff1a;Deep Reinforcement Learning Guided Improvement Heuristic for Job Shop Scheduling Authors: Cong Zhang, Zhiguang Cao, Wen Song, Yaoxin Wu, Jie Zh… 论文发表致&#xff1a;ICLR 2024 论文链接&#xff1a;https://doi.org/10.48550/arXiv.2211.1…

OpenCV简介、OpenCV安装

OpenCV简介、OpenCV安装 本文目录&#xff1a; 零、时光宝盒 一、OpenCV简介 二、OpenCV图像处理基础知识 三、OpenCV-Python环境安装 2.1、纯python环境下安装OpenCV 2.2、Anaconda管理环境下安装 OpenCV 四、如何用OpenCV 中进行读取展示图像 五、OpenCV读取图像、显…

利用预训练检查点进行序列生成任务

摘要 大型神经模型的无监督预训练最近彻底改变了自然语言处理。通过从公开发布的检查点进行热启动&#xff0c;自然语言处理从业者在多个基准测试中推动了最先进的技术&#xff0c;同时节省了大量的计算时间。到目前为止&#xff0c;重点主要集中在自然语言理解任务上。在本文…

5、原来可以这样理解C语言_数组(5)sizeof 计算数组元素个数

目录 5. sizeof 计算数组元素个数 5. sizeof 计算数组元素个数 在遍历数组的时候&#xff0c;我们经常想知道数组的元素个数&#xff0c;那C语⾔中有办法使⽤程序计算数组元素个数 吗&#xff1f; 答案是有的&#xff0c;可以使⽤sizeof。 sizeof 中C语⾔是⼀个关键字&#xff…

vue中echarts-中国地图,世界地图显示(echarts5.6版本本地导入)

地图去掉南海诸岛右下角的框显示&#xff08;因为显示的不是现在的10段线&#xff09; 资源里面主要是有个改好的中国地图json其他的无所谓&#xff0c;用现有的json也行&#xff0c;主要是为了解决10段线的问题 引入需要注意 import * as echarts from “./echarts”; 目录…