面向大模型的存储加速方案设计和实践
介绍大模型全流程对存储带来的全新挑战; 深入大模型全流程各个环节,看一看有哪些具体的存储问题以及对应的解决思路; 分享百度沧海·存储的加速方案及实践经验。
一、模型对存储的全新挑战
GEEK TALK
第一是海量数据的存储和处理,包括采集导入、清洗、转换、标注、共享和长期归档,是后面各环节的基础。这里对存储的要求跟以前的大数据应用具有很大的共性,也带有大模型自身的特点,总结起来主要是生态的互通、高吞吐和大容量。 第二是模型开发,讲究效率为王,包括实验管理、交互式开发和效果评估等。对存储的要求更多集中在 POSIX 兼容性、可靠性和可共享等方面。 第三是模型训练。真正做过大模型训练的朋友一定深有体会,每分每秒都是经费在燃烧。所以时间就是金钱,拒绝等待,拒绝失败。这里的主要场景,一是训练数据的读取,二是为了容错做的 checkpoint 的保存和加载。数据集的部分就是要尽量读得快,减少计算对 I/O 的等待,而 checkpoint 主要要求高吞吐、减少训练中断的时间。 最后是模型推理,需要把训练完的模型快速分发部署到线上,产生业务效果。而这个过程会高频、反复发生,既要求高并发、高吞吐,又要求整个流程尽量简单高效。
二、大模型全流程存储问题的解决思路
GEEK TALK
其一是扩展能力。HDFS 采用集中式元数据管理,规模相对受限,而对象存储通常采用分布式平坦元数据,具有更强的水平扩展能力,单集群可支持万亿文件、EB 级规模。在我们对于实践的观察中,曾经有业务基于 HDFS 做大模型训练,受限于扩展能力,不得不将海量小文件进行打包存储,在训练时再下载解压,实际上引入了非常多的流程开销; 其二是成本考量。HDFS 诞生于存算一体的时代,而对象存储天然面向存算分离设计,结合 EC 编码、分级存储等丰富的能力,可以实现大规模数据长期保存的更优成本。
优化 shuffle 过程,尽量将耗时控制在较小比例; 优化读取过程,尽量让每一轮读取数据的耗时小于计算耗时,这样就能让 I/O 时间被计算时间完全隐藏掉; 优化 checkpoint 过程,尽量缩短 checkpoint 耗时,减少训练中断时间。
让敌人变弱,也就是通过一些打包格式减少小文件元数据操作的占比。比如 TFRecord、HDF5 等格式已经被大量应用。如果存储能配合这些格式做一些优化,那么效率将得到进一步提升; 让自己变强。硬件上通过燃烧经费购买高性能硬件不需要过多解释。软件上则一般通过架构升级提升系统的扩展能力,缩短 I/O 路径,这里的典型方案就是并行文件系统; 尽可能近身攻击。让存储和计算靠得更近,这里的典型方案就是缓存系统。利用数据集只读的特点,将元数据和数据缓存到计算节点,或者靠近计算节点的地方,也能大幅提高数据的访问效率。
同步速度快,各节点可以并发同步数据,大大加快数据流转效率; 同步策略可定制,可以按照场景需求进行增量同步、选择性同步; 能够与调度器集成,实现数据准备与资源调度的高效配合; 避免了人工方式需要处理各类异常,做垃圾回收的问题。
对象存储 BOS 及周边生态提供了云原生数据湖的完整方案,解决了海量数据的存储和流动,以及大模型各环节间的衔接问题。 RapidFS / PFS 提供了数据湖存储加速的能力,满足了大模型各环节内的存储性能需求。 同时 RapidFS / PFS 通过与 AI 框架和训练平台的配合完成资源调度优化,整体效率做到最优。
END
推荐阅读: