Llama3 训练每3 小时崩溃一次?大豆袋模型,HKU提升脆皮万卡训练效率

来源:优游网责编:网络时间:2024-09-30 12:02:00

机器之心编辑部

随着大型模型的迭代速度越来越快,训练集群的规模越来越大,高频的软硬件故障成为阻碍训练效率进一步提升的痛点。检查点系统负责训练过程中的状态存储和恢复。成为克服培训失败、保证培训进度、提高培训效率的关键。

Meta官方近日披露,Llama3 405B在16384块H100 80GB训练集群上训练失败率为——次,短短54天就出现了419次中断,平均每三个小时就崩溃一次,引起了众多从业者的关注。

正如业内常言,大规模训练系统唯一确定的就是软硬件故障。随着训练规模和模型规模的增大,克服软硬件故障、提高训练效率已成为大型模型迭代的重要影响因素。

检查点已成为提高培训效果的关键。在Llama训练报告中,技术团队提到,为了对抗高失败率,需要在训练过程中进行频繁的检查点,以保存训练过程中模型、优化器和数据读取器的状态,以减少训练过程中的损失。培训进度。

字节跳动豆宝大模型团队与香港大学近日发布成果—— ByteCheckpoint,是PyTorch原生的、兼容多种训练框架、支持Checkpoint高效读写和自动重分割的大模型Checkpointing系统。

与基线方法相比,ByteCheckpoint 在检查点保存方面性能提升高达529.22 倍,在加载方面性能提升高达3.51 倍。极简的用户界面和检查点自动重分段功能显着降低用户获取和使用成本,提高系统的易用性。

该论文的结果现已公开。

ByteCheckpoint: 用于LLM 开发的统一检查点系统

论文链接:https://team.doubao.com/zh/publication/bytecheckpoint-a-unified-checkpointing-system-for-llm-development?view_from=research

检查点技术在大模型训练中的技术挑战

目前,Checkpoint相关技术在支持大模型训练效率提升方面总共面临四个挑战:

现有系统设计存在缺陷,显着增加了训练的额外I/O 开销。

在训练工业级大语言模型(LLM)的过程中,需要通过检查点技术(Checkpointing)来保存和持久训练状态。通常,一个检查点由5 个部分组成(模型、优化器、数据读取器、随机数和用户定义的配置)。这个过程往往会给训练带来分钟级的阻塞,严重影响训练效率。

此外,共享检查点访问任务的不同训练过程的并行处理潜力尚未得到充分开发。这些系统设计缺陷增加了Checkpoint 训练带来的额外I/O 开销。

Checkpoint重新切分比较困难,手动切分脚本的开发和维护开销太大。

在LLM的不同训练阶段(预训练到SFT或RLHF)和不同任务(从训练任务中拉取不同阶段的Checkpoint进行自动评估)之间迁移Checkpoint时,通常需要迁移持久存储系统中存储的Checkpoint。检查点重新分片(Checkpoint Resharding)以适应下游任务新的并行度配置和可用GPU资源的配额。

现有的检查点系统[1,2,3,4]都假设并行配置和GPU资源在存储和加载过程中保持不变,并且无法处理检查点重新分段的需要。目前业界常见的解决方案是——针对不同模型定制Checkpoint合并或重新拆分脚本。这种方式带来了大量的开发和维护开销,且可扩展性较差。

不同训练框架的Checkpoint模块较为碎片化,这给Checkpoint的统一管理和性能优化带来了挑战。

在工业训练平台上,工程师和科学家经常根据任务特性选择合适的框架(Megatron-LM [5]、FSDP [6]、DeepSpeed [7]、veScale [8, 9])进行训练并保存。存储系统的检查点。然而,这些不同的训练框架都有自己独立的检查点格式和读写模块。不同训练框架的检查点模块设计不同,这给底层系统的统一检查点管理和性能优化带来了挑战。

分布式训练系统的用户面临多重问题

从训练系统的使用者(AI研究科学家或工程师)的角度来看,用户在使用分布式训练系统时,往往会被检查点方向的三个问题所困扰:

1)如何高效存储Checkpoint,在不影响训练效率的情况下保存Checkpoint。

2)对于一级并行度下存储的Checkpoint,如何根据新的并行度重新对Checkpoint进行分段并正确读取。

3)如何将训练好的产品上传到云存储系统(HDFS、S3等)并手动管理多个存储系统,用户学习和使用成本较高。

针对上述问题,字节跳动豆宝模型团队与香港大学吴川教授实验室联合推出了ByteCheckpoint。

ByteCheckpoint是一个高性能的分布式检查点系统,统一了多种训练框架,支持多种存储后端,并具有自动重新分段检查点的能力。 ByteCheckpoint提供了简单易用的用户界面,实现了大量I/O性能优化技术来提高存储和读取检查点性能,并支持不同并行度配置的任务中检查点的灵活迁移。

系统设计

存储架构

Llama3 训练每3 小时崩溃一次?大豆袋模型,HKU提升脆皮万卡训练效率

ByteCheckpoint采用元数据/张量数据分离的存储架构,实现了Checkpoint管理、训练框架和并行性的解耦。

不同训练框架和优化器中的模型的张量切片(Tensor Shard)存储在存储文件中,元信息(TensorMeta、ShardMeta、ByteMeta)存储在全局唯一的元数据文件中。

使用不同并行度配置读取Checkpoint时,如下图所示,每个训练进程只需要根据当前并行度设置查询元信息,即可获取该进程所需张量的存储位置,然后直接根据位置读取。实现Checkpoint自动重分割。

巧妙解决不规则张量分割问题

当不同的训练框架运行时,它们通常会将模型或优化器中张量的形状展平为一维,从而提高集合通信性能。这种扁平化操作给Checkpoint存储带来了不规则张量分片(Irregular Tensor Sharding)的挑战。

如下图所示,在Megatron-LM(NVIDIA开发的分布式大模型训练框架)和veScale(字节跳动开发的PyTorch原生分布式大模型训练框架)中,模型参数对应的优化器状态会Flatten为1维度、合并,然后根据数据并行性进行拆分。这导致张量被不规则地分割到不同的进程中,并且张量切片的元信息无法使用偏移和长度元组表示,导致存储和读取困难。

FSDP框架中也存在不规则张量分割的问题。

为了解决这个问题,ByteCheckpoint提出了Asynchronous Tensor Merging技术。

系统架构

下图展示了ByteCheckpoint的系统架构:

API层为不同的训练框架提供简单易用、统一的读写(Save)和读取(Load)接口。

Planner层将根据访问对象生成不同训练过程的访问计划,而Execution层将执行实际的I/O任务。

执行层执行I/O任务并与存储层交互,利用各种I/O优化技术来执行高性能的检查点访问。

存储层管理不同的存储后端,并在I/O任务时根据不同的存储后端进行相应的优化。

分层设计增强了系统的可扩展性,以支持未来更多的训练框架和存储后端。

API 用例

ByteCheckpoint的API使用示例如下:

ByteCheckpoint提供极简的API,降低用户的上手成本。在存储和读取Checkpoints时,用户只需要调用存储和加载函数,传入要存储和读取的内容、文件系统路径以及各种性能优化选项。

I/O性能优化技术

检查点存储优化

管道执行

避免重复分配内存

另外,为了减少高频存储场景下同步等待固定内存池回收带来的额外时间开销,ByteCheckpoint 在固定内存池的基础上增加了Ping-Pong 缓冲机制。两个独立的内存池交替扮演读写缓冲区的角色,与执行后续I/O操作的GPU和I/O工作线程交互,进一步提高存储效率。

负载平衡

在数据并行(Data-Parallel或DP)训练中,模型在不同数据并行处理组(DP Group)之间是冗余的。 ByteCheckpoint 使用负载平衡算法将冗余模型张量均匀分配到不同的进程。分组存储有效提高了Checkpoint存储效率。

检查点读取优化

零冗余负载

如图所示,当改变并行度读取检查点时,新的训练过程可能只需要读取原始张量切片的一部分。

ByteCheckpoint采用按需部分文件读取(Partial File Reading)技术,直接从远程存储中读取所需的文件片段,避免下载和读取不必要的数据。

Llama3 训练每3 小时崩溃一次?大豆袋模型,HKU提升脆皮万卡训练效率

在数据并行(Data-Parallel或DP)训练中,模型在不同数据并行进程组(DP Group)之间是冗余的,不同进程组会重复读取相同的张量切片。在大规模训练场景中,不同的进程组同时向远程持久存储系统(如HDFS)发送大量请求,这会给存储系统带来巨大的压力。

为了消除重复的数据读取,减少训练进程向HDFS发送的请求,优化加载性能,ByteCheckpoint将相同的张量切片读取任务均匀分配给不同的进程,并利用GPU之间的空闲带宽进行张量切片传输。

实验结果

实验配置

团队使用DenseGPT和SparseGPT模型(基于GPT-3[10]结构实现)评估ByteCheckpoint在不同模型参数量、不同训练框架和不同规模训练任务下的Checkpoint访问正确性、存储性能和读取性能。有关实验配置和正确性测试的更多详细信息,请参阅完整论文。

存储性能测试

在存储性能测试中,团队比较了不同的模型大小和训练框架。在训练过程中,每50 或100 步存储一次检查点。 ByteCheckpoint 和基线(Baseline)方法给训练带来了总阻塞时间(Checkpointstalls)。

得益于写入性能的深度优化,ByteCheckpoint在各种实验场景下均取得了较高的性能。在576卡的SparseGPT 110B - Megatron-LM训练任务中,相比基线存储方法取得了66.65~74.55倍的成绩。在256卡的DenseGPT 10B-FSDP训练任务中性能提升甚至可以达到529.22倍。

读取性能测试

在读取性能测试中,团队根据下游任务并行度比较了不同读取检查点方法的加载时间。与基线方法相比,ByteCheckpoint 实现了1.55 至3.37 倍的性能提升。

该团队观察到ByteCheckpoint 相对于Megatron-LM 基线方法有更显着的性能改进。这是因为Megatron-LM 需要运行离线脚本来重新分片分布式检查点,然后再将检查点读取到新的并行配置。相比之下,ByteCheckpoint可以直接进行自动检查点重切分,无需运行离线脚本,高效完成读取。

最后,关于ByteCheckpoint未来的规划,团队希望从两个方面入手:

首先,实现支持超大规模GPU集群训练任务高效检查点的长期目标。

其次,它在大模型训练的整个生命周期中实现检查点管理,支持所有场景的检查点,从预训练(Pre-Training),到监督微调(SFT),再到强化学习(RLHF)和评估(评估)等场景。

团队介绍

字节跳动豆宝大模型团队成立于2023年,致力于开发业界最先进的AI大模型技术,成为世界一流的研究团队,为科技和社会发展做出贡献。

目前,团队正在持续吸引优秀人才加盟。硬核、开放、富有创新精神是团队氛围的关键词。团队致力于创造积极的工作环境,鼓励团队成员不断学习和成长,不惧挑战,追求卓越。

希望与具有创新精神和责任感的技术人才一起,推动提高大型模型训练效率的工作,取得更多的进展和成果。

参考

[1] Mohan、Jayashree、Amar Phanishaye 和Vijay Chidambaram。 “{CheckFreq}: 频繁,{细粒度}{DNN} 检查点。”第19 届USENIX 文件和存储技术会议(FAST 21)。 2021 年。

[2] 艾森曼、阿萨夫等人。 “{Check-N-Run}: 用于训练深度学习推荐模型的检查点系统。”第19 届USENIX 网络系统设计与实现研讨会(NSDI 22)。 2022 年。

[3] 王庄,等。 “Gemini: 通过内存检查点实现分布式训练中的快速故障恢复。”第29 届操作系统原理研讨会论文集。 2023 年。

[4] 古普塔、坦迈伊等人。 “即时检查点:从深度学习训练失败中进行低成本错误恢复。”第十九届欧洲计算机系统会议论文集。 2024 年。

[5] 穆罕默德·舒伊比等人。 “Megatron-lm: 使用模型并行性训练数十亿参数语言模型。” arXiv 预印本arXiv:1909.08053 (2019)。

[6] 赵艳丽,等 “Pytorch fsdp: 在扩展完全分片数据并行方面的经验。” arXiv 预印本arXiv:2304.11277 (2023)。

[7] 杰夫·拉斯利等人。 “Deepspeed: 系统优化支持训练具有超过1000 亿个参数的深度学习模型。”第26 届ACM SIGKDD 国际知识发现数据挖掘会议论文集。 2020.

[8]蒋子恒,等。 “{MegaScale}: 将大型语言模型训练扩展到超过10,000 个{GPU}。”第21 届USENIX 网络系统设计与实现研讨会(NSDI 24)。 2024 年。

[9] veScale: PyTorch 原生LLM 培训框架https://github.com/volcengine/veScale

用户评论

孤岛晴空

这款游戏简直就是在挑战我的耐心,Llama3的崩溃频率太高了!

    有6位网友表示赞同!

花花世界总是那么虚伪﹌

虽然游戏很有创意,但经常要重启真的很让人头疼。

    有8位网友表示赞同!

景忧丶枫涩帘淞幕雨

我真希望开发者能解决一下这个问题,不然每次都得等三小时,好恼火。

    有15位网友表示赞同!

非想

喜欢豆包大模型的特效,只是稳定性问题真的成了我的心头病。

    有18位网友表示赞同!

闷骚闷出味道了

Llama3的游戏过程被打断太多次了,每次崩溃都让人心累。

    有5位网友表示赞同!

半世晨晓。

期待的是游戏本身的质量和乐趣,而不是这些崩溃和重启的问题。

    有5位网友表示赞同!

强辩

对港大的技术抱有希望,但也真心希望能提高Llama3的稳定性。

    有8位网友表示赞同!

冷落了♂自己·

游戏的核心玩法很好,就是崩溃频率太高影响体验了。

    有7位网友表示赞同!

轨迹!

Llama3在崩溃和复原之间的时间让我无法沉浸进去享受游戏。

    有9位网友表示赞同!

太易動情也是罪名

真的很想知道如果开发者解决了这个问题,游戏会变得多么出色。

    有11位网友表示赞同!

来自火星的我

每次等待3小时才能继续玩Llama3时,都感觉像是度日如年。

    有11位网友表示赞同!

相知相惜

期待有天看到关于Llama3崩溃问题的改进公告,那时游戏体验或许能提升好多。

    有9位网友表示赞同!

暖栀

Llama3如果能改善稳定性和取消‘崩’的现象,简直就是完美啊!

    有14位网友表示赞同!

来瓶年的冰泉

游戏的魅力在于其玩法,如果它能在稳定性上更进一层楼,则会更好玩。

    有8位网友表示赞同!

迷路的男人

豆包大模型的设计让我着迷,但Llama3的问题真是让人倒胃口。

    有12位网友表示赞同!

莫阑珊

对于港大的技能提升和脆皮万卡的训练效率改进,我都抱有期望于Llama3上。

    有12位网友表示赞同!

你很爱吃凉皮

Llama3在崩溃这个问题上需要大调整,我真希望能体验到游戏的核心内容。

    有8位网友表示赞同!

烟雨萌萌

喜欢这款游戏是因为玩法好,如果稳定些就好了,不然总是让人感到沮丧。

    有12位网友表示赞同!

稳妥

Llama3的游戏体验被频繁的崩溃给破坏了,期待改进和提升稳定性。

    有7位网友表示赞同!

艺菲

除了崩溃导致的体验断档外,Llama3在其他方面表现得还是挺不错的。

    有14位网友表示赞同!

猜你喜欢
最新游戏更多
热门专题更多
最新资讯更多