摘要:机器学习广泛应用于字节跳动,数据作为机器学习训练的核心要素,如何高效灵活的管理支撑大规模训练数据的存储、生产以及训练,成为数据基础设施的一大挑战;近两年大模型迅猛发展,对数据集管理也提出了更多新的场景需求。
导读
机器学习广泛应用于字节跳动,数据作为机器学习训练的核心要素,如何高效灵活的管理支撑大规模训练数据的存储、生产以及训练,成为数据基础设施的一大挑战;近两年大模型迅猛发展,对数据集管理也提出了更多新的场景需求。
字节跳动在开源 Apache Iceberg 的基础上,打造了一套面向大规模机器学习的数据管理解决方案 Magnus,在存储格式、索引、元数据管理、更新机制、训练框架集成等多个维度实现优化。
Magnus 已在字节内部部署超过五年,在搜索、广告、推荐、大模型等核心业务中大规模落地,数据规模超5EB,相关成果已被 VLDB 2025收录。
论文标题:Magnus: A Holistic Approach to Data Management for Large-Scale Machine Learning Workloads
论文作者:Jun Song, Jingyi Ding, Irshad Kandy, Yanghao Lin, Zhongjia Wei, Zilong Zhou, Zhiwei Peng, Jixi Shan, Hongyue Mao, Xiuqi Huang, Xun Song, Cheng Chen, Yanjia Li, Tianhao Yang, Wei Jia, Xiaohong Dong, Kang Lei, Rui Shi, Pengwei Zhao, Wei Chen
论文地址:
背景:机器学习训练场景下的数据管理挑战
机器学习在字节跳动深度应用,数据规模以及丰富的场景为数据管理带来新的挑战。传统方案在应对大规模机器学习工作负载时,局限性日益凸显:
存储效率瓶颈:传统列存格式(如 Parquet)在处理万列大宽表和图像、视频等多模态数据时,难以满足资源效率以及读写性能的需求。
索引能力欠缺:特征调研等场景需要更高效的主键索引来提升更新性能,同时大模型场景下需要更多的索引支撑各种类型的查询,比如倒排索引、向量索引等。
元数据管理困难:元数据是数据的数据,是各种分布式计算引擎使用数据的桥梁,海量训练数据带来了 "大元数据" 问题;且现有方案缺乏类似 Git 的分支管理能力,无法高效支撑特征调研与模型迭代。
高频更新需求:特征工程中的列添加、广告转化数据更新等高频场景,要求高效的增量更新能力。Copy-on-Write(COW)策略写入开销过大,而开源数据湖的 Merge-on-Read(MOR)策略在读写效率上难以满足机器学习场景需求。
大模型训练特殊性:现有方案缺乏与机器学习训练框架的集成以及针对性优化,导致数据集管理困难、资源消耗过高、训练吞吐量受限。
技术突破:Magnus 核心创新
Magnus 围绕大模型训练场景的上述四个痛点,在 Apache Iceberg 开源数据湖的基础上进行了全面优化,具备以下核心能力:
Magnus 系统架构
1 高效存储格式与索引设计
除 Parquet 等开源列存格式外,Magnus 支持新的自研格式以解决大模型训练场景下的存储挑战,包括 Krypton 列存与 Blob 格式。Krypton 列存格式通过与 Parquet 相比更轻量的元数据设计,在宽表场景下大幅节省了存储空间和内存消耗。Blob 格式将图片、视频等多模态数据的二进制对象与其他列分离存储,支持按需提取部分视频帧,大幅减少 I/O 放大。
在原生索引构建上,Magnus 根据不同场景的需求提供哈希索引与 HFile 索引两种主键索引,写入时高效路由数据至特定桶,桶内数据按主键排序并通过单调递增序列号解决冲突,保证了后续读时合并的高效性能。
此外,Magnus 直接在数据湖内构建倒排索引与向量索引,无需将数据导出至 Elasticsearch 等外部系统。通过 Spark SQL 语句即可创建索引,实现训练数据存储与检索功能的统一管理。
2 轻量级元数据管理与版本控制
Magnus 对元数据进行优化,相较 Iceberg 精简了 manifest 文件中 70%-80% 的冗余统计信息,并通过按分区排序文件条目、构建稀疏索引,在查询特定分区时能快速跳过无关数据块,显著提升了元数据解析效率。
Magnus 在 Iceberg 的快照与分支机制的基础上,进一步引入类 Git 的分支 Rebase 与 Merge 等操作,实现高效的调研流程,所有分支操作仅修改元数据,无需复制底层数据文件。此外,Tag 作为不可变的快照引用,配合提交日志,保证模型训练的数据版本可追溯、可复现。
元数据分支与标记
3 高性能 MOR 更新与 Upsert 机制
Magnus 基于轻量级 Merge-on-Read(MOR)策略,构建了一套高性能 Update 与 Upsert 机制,以适配机器学习场景中数据更新需求,既规避了 Copy-on-Write(COW)的高写入开销,又突破了开源数据湖 MOR 策略的性能瓶颈。
Magnus 支持列级更新,仅修改目标列,避免全行重写,且更新文件按主键排序,通过高效的 sort-merge join 进行读时合并,大幅降低读写放大。
Magnus 同时支持主键表 Upsert,通过主键索引,确保相同主键路由至唯一桶,写入时按主键排序数据文件,提交时分配全局唯一序列号标记顺序。处理并发提交无需写时冲突检测,冲突解决延迟至 MOR 阶段,依据序列号确定数据优先级。这种设计既能保证主键全局唯一(通过 HFile 索引),又避免了 Iceberg Upsert 读写放大的问题,Upsert 效率远超开源方案,甚至能完成 Iceberg 无法在合理时间内处理的大规模任务。
配合 Arrow 原生引擎的谓词下推与 IO 预取优化,Magnus 的 MOR 机制在合并阶段实现高效数据过滤与并行处理,最终达成“低写入吞吐+高读取吞吐”的平衡,为特征工程、广告数据更新等高频场景提供坚实支撑。
数据读取流程
4 大模型训练的深度适配
推荐大模型(Large Recommendation Model, LRM)训练优化:LRM 训练样本按用户序列存储在 Magnus 主键表中。Magnus 设计了 Main+Extra 表的双表架构,将事件特征按月分区存储在 Main 表中,而将包含较多重复部分的用户序列特征单独存放在 Extra 表中。训练时,按时间戳截取 Extra 表中所需部分序列特征,再与 Main 表拼接得到完整特征。这种方案通过降低用户序列特征的重复存储,将存储空间降低约50倍;同时在增加或更新用户序列特征时大大减少读写放大,提高回溯效率。
Main x Extra 表
多模态大模型(Large Multimodal Model, LMM) 训练优化:Magnus 通过提供统一的目录服务抽象 HDFS 路径,支持数据在不同存储介质间的迁移。Magnus 与 BytedStreaming 集成,直接使用 Magnus 元数据进行 sharding 和 shuffle,引入更细粒度的 planning 与 plan cache,并实现 lite planning 模式对 scan task 对象进行压缩存储,在保证 LMM 训练效果的同时大幅降低内存占用。
实证效果:生产环境性能验证
存储效率:在万列宽表场景中,Krypton 格式较 Parquet 减少30%存储占用,Footer 解析时间降低80%;Blob 格式在视频抽帧等场景中,读取速度大幅提升。
读写性能:TB 级表的列更新场景中,Magnus 的写入速度是 Iceberg COW 的10倍,且通过定期合并可维持读取性能与 Iceberg 相当。
大模型训练收益:LRM 训练任务中,Magnus Main x Extra 表节省50×存储,吞吐量提升70%;LMM 训练中,内存占用减少约40%,启动性能提升一倍,训练耗时打平甚至更优。
结语
Magnus 解决了字节跳动内部 EB 级数据的管理难题,为行业提供了可复用的大规模机器学习数据管理范式。随着大模型技术的持续演进,Magnus 也将不断创新迭代提供更强有力的数据基础设施支撑。
训练设施团队为字节内部大规模机器学习包括大模型场景提供计算/编排/数据管理的基础框架以及解决方案,包括Primus/Ray/Magnus 等,欢迎感兴趣同学加入我们!联系方式:wuyixin.yx@bytedance.com。
来源:字节跳动技术团队