7月1日,Meta工程团队发了一篇博客,讲他们怎么把用了很多年的BLOB存储架构整个重写了一遍。动机很直接,现在的GPU太贵了,而存储正在拖它的后腿,这不能忍啊。
Meta很重视存储,然后给了一个很形象的说法:如果AI是大脑,存储就是记忆。模型能力和速度,高度取决于记忆容量有多大、记忆调取的速度有多快。
问题出在这里。
过去这些年,AI算力大概每两年翻三倍,但存储和网络互联的性能只是温和增长。算力越跑越快了,存储越来越跟不上了,结果就是GPU频繁停在那里干等数据。
Meta说得很白,存储瓶颈已经是AI负载里GPU空转的主要原因之一,不仅浪费钱,也会直接拖慢产品上线的节奏,影响公司的竞争力,影响市值,影响在AI时代的存在感甚至说生死存亡。(后面两个是我脑补的)
Meta的存储是这样的,最底层是一个叫Tectonic的块存储层,Tectonic上面才是BLOB存储层,对外提供对象存储、文件系统这些接口。
以前Meta训练Llama模型,都是直接在Tectonic上套一个类似NFS的文件接口来读数据,现在整个训练栈都在往BLOB存储接口迁移,因为大数据湖需要统一的访问入口,也需要更高的性能。
时代变了,老架构喂不饱GPU了
存储真正的麻烦在元数据。
老的BLOB存储是一层一层叠出来的,每一层都有自己的元数据库。你发一个读请求,服务器要先在命名层、卷层、容器层里查好几遍,才能把一个文件路径翻译成实际的存储地址。
这些查询有时候还得跨区域,延迟加起来能到几百毫秒。更要命的是,只要其中任何一次查询慢了,整个请求就慢了。
对传统网页应用来说,这点延迟无所谓,反正数据大多躺在HDD上,本来就慢。但AI负载要的是毫秒级从闪存里取数据,几百毫秒的元数据查找直接就是致命伤。
Meta干脆把当初设计这套架构的几个前提假设重新盘了一遍,发现这四个方面全都变了:
首先,延迟上,传统负载对延迟要求不高,高一点低一点用户也能忍,搞不好还会自责说是自己网络不好。而AI负载不行,它要的是可预测、有上限的延迟,一直卡到最尾部的长尾请求都不能崩。
第二,可靠性上,老架构默认把数据和元数据全球复制,图的是就算某个区域挂了也不丢数据。但AI负载不需要这种全球复制,有区域内的高可用就够了。
第三,成本上,老架构建在HDD上,拼的是每字节要尽可能的便宜。AI负载的IOPS需求逼着你上闪存,而且跟GPU的算力成本一比,存储那点计算开销基本可以忽略。
第四,在功耗上。有了GPU之后,数据中心缺的不再是空间,而是电。每一千瓦喂给存储,就是一千瓦没喂给GPU。这是AI时代才冒出来的新约束,有人说“永远缺电”就是这个意思。
四条假设全变了,那就没什么好说的了,推倒重来,Bro。
推倒地基重来,从哪儿下手呢?
Meta的人主要做了三件事。
第一,元数据摊平。Meta把原来散在各层的元数据全部重写,合并成一张统一的扁平表,底下用ZippyDB存。这样查一次就能定位到存储地址,从多层查找变成O(1)查找,这次变化还挺大的。
第二,砍掉数据代理。以前数据要经过API服务器中转给客户端,现在Meta做了一个胖客户端SDK,直接从存储服务器把字节流甩给客户端。少一道中转,既省电,吞吐和延迟也更好。
第三,区域化部署。新的BLOB存储栈瘦身之后,可以按区域部署,跟GPU放在同一个区域里。

然而,光重建地基还不够。
AI负载有个特点,几百张GPU会同时来抢同一批数据,比如模型权重就是典型的热数据,一遇到GPU重启这种事件,流量瞬间就冲上去。
Meta的解法是两层缓存:
一层是分布式数据缓存,直接借用GPU主机上闲着的内存,把热数据缓在那里,平均命中率能到80%;
另一层是把路径到地址的映射也给缓起来,能把元数据访问压到1到2毫秒。这两层干的事,就是把流量尖峰吸掉,再把常见请求的延迟压下来。
剩下还有些细节,比如某个存储节点慢了拖累长尾,用客户端对冲读取来兜底;做检查点的时候客户端会瞬间涌出大量请求造成拥塞,就在SDK里加动态并发控制自动调。
这些加起来,新架构基本做到了在Tectonic之上零额外开销,GPU不再因为等存储而空转。
让研究员少等几个小时
GPU利用率解决了,Meta又盯上另一个更少被讨论的问题,研究员的迭代速度。
GPU又贵又分散在不同地理区域,而训练又要求数据跟GPU待在一起。这就把一个活儿甩给了研究员,他们得自己把数据集在区域之间搬来搬去。
Meta拆解了一下典型的训练任务流程:研究员先整理数据存进BLOB,然后选一个区域,提交一个数据摄取任务,把数据集做成快照灌到目标区域,接着就是等……
要等多久呢?数据集大的话要等好几个小时,等完才能跑训练,跑完调数据再来一遍。中间光是选区域、灌数据、等这几步,就要耗掉几个小时。摸鱼的时间一抓一大把!
Meta灵机一动,想通了一件事,这些训练数据集都是写一次读很多次的,那存储为什么不能像操作系统管磁盘那样管?
你看,你在Linux上读一个文件时,系统会自动把数据从磁盘一层层调进缓存,内存页缓存、CPU的L2和L1,全是透明的,你根本不用管。
照着这个思路,Meta把存储做成了一套分层缓存。

GPU主机上的内存和闪存当L1和L2,区域内的闪存BLOB存储当L3,最底下全局的HDD存储当最终真相。
研究员还是用原来那套SDK,但底下多了几个机制,数据加载器一边处理当前批次一边预取下一批;还开放了一个显式的预取接口,能提前几分钟把远端数据灌到本地L3,顺便把元数据缓存也预热;数据在L3待多久有自动淘汰策略,按TTL或LRU来,还会看容量配额。

效果Meta用一张对比图说了,所有负载的数据摄取时间,在这套东西上线前后差了一大截,从原来动辄几个小时压到了分钟级,差别还是非常显而易见的。
对存储这行意味着什么
这篇博客虽然是在讲Meta自己的架构,但底下藏着几个对整个存储行业都有意义的洞察。
一个是存储的设计逻辑正在被GPU反过来定义。过去存储优化的是每字节成本和全球可靠性,现在优先级换成了延迟上限、闪存IOPS和功耗。
HDD不是没用了,它还在最底层当便宜的大仓库,但热路径已经彻底交给闪存。这也是这一轮NAND需求起来的一个底层原因。
存力这个词这两年被反复提,总有人喊存为王,Meta这套架构就让存为王具象化了,存储能力本身正在变成AI基础设施的一块核心指标。
另一个是功耗。以前聊存储很少聊电,现在在GPU数据中心里,存储省下来的每一瓦都能换成算力,毕竟电力现在是AI数据中心建设最大的阻碍之一(仅限于北美市场)。
还有一个容易被忽略的,存储优化的目标从来不只是喂饱GPU,也包括让人少等。Meta把摄取时间从小时压到分钟,省的是研究员的时间(研究院的工资那么高,一点不比GPU便宜,),而在模型几周就迭代一代的节奏下,这种时间就是竞争力。
Meta还说,接下来还准备走这三件事:把存储吞吐推到网络极限;在更大规模下做不卡GPU的检查点;应对推理负载带来的新问题。
前两个是训练侧的延续,最后一个信号更强,存储的战场正在从训练往推理转。
本文来源于DOIT传媒,文章内容仅供参考,不构成投资建议。
评论列表