现有大规模集群训练主要通过CKPT(checkpoint)机制,即在训练过程中周期性保存训练过程数据(模型参数等)作为CKPT。当业务平台检测到故障发生后,可退出当前训练任务,通过重新加载CKPT数据,从CKPT保存时刻开始恢复训练,避免从头开始重新进行训练。
周期性CKPT保存分为2个部分:异步CKPT保存以及内存CKPT加载。
MindIO ACP提供异步保存周期性CKPT的能力。未使用MindIO ACP时,需要将需要保存的参数从设备拷贝到主机侧,再从主机侧落盘到存储上,这一时间通常在分钟级。MindIO ACP提供异步落盘的能力,当需要保存的参数从设备拷贝到主机侧后,通过异步进程进行落盘到存储,不会阻塞训练进程,落盘的过程中训练可以继续进行。
MindIO ACP提供基于内存的周期性CKPT加载的能力。在训练恢复时,通常需要从存储加载之前保存的周期性CKPT,加载完成后恢复训练状态再继续训练。但是,由于数据量较大和存储性能限制,大模型任务通常加载时间在分钟级。为了降低CKPT加载时间,从而降低训练恢复的时间,MindIO ACP提供基于内存的周期性CKPT加载机制,故障后直接基于内存加载,将降低大量加载的时间。
在使用故障重调度的ckpt保存能力时,需根据实际情况选择周期性保存ckpt频率,用户可参考如图1所示的推荐频率。
使用周期CKPT恢复能力,训练恢复后将丢失上一次周期保存点到故障点这一时间段的训练状态。因此,如果想要降低每次故障导致的训练状态损失,需要降低周期性保存的间隔。但是,每次保存需要中断训练后将ckpt从设备侧落盘到存储侧,这浪费了大量的训练时间。如果降低周期性保存的间隔,将导致训练时间的浪费,从而也会带来训练时间的损失。综上所述,如果单次保存时间恒定,通常需要作出保存损失和故障损失的综合权衡。
为了降低上述损失,需要降低单次保存时间。单次保存时间受到保存数据量及存储性能的影响,通常难以改变这两者。本产品提供MindIO ACP产品解决周期性CKPT恢复损失高的问题。