服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-08-31 更新于 2026-08-31 简米科技 3,077 字 7 分钟阅读

检查点高频保存会影响存储吞吐吗,如何优化检查点保存性能?

导读高频保存检查点对存储吞吐的要求,核心就一句话:存储的写带宽和IOPS必须大于所有GPU同时保存检查点时的峰值写入速度,否则训练就得停下来等待存储,得不偿失,高频保存听起来很稳妥,但存储系统往往是那个被忽略的“拖油瓶”,你每多存一次,GPU就要多等一次,本文不绕弯子,直接拆解检查点保存频率怎么设置、存储性能要多少……

高频保存检查点对存储吞吐的要求,核心就一句话:存储的写带宽和IOPS必须大于所有GPU同时保存检查点时的峰值写入速度,否则训练就得停下来等待存储,得不偿失。

高频保存听起来很稳妥,但存储系统往往是那个被忽略的“拖油瓶”,你每多存一次,GPU就要多等一次,本文不绕弯子,直接拆解检查点保存频率怎么设置、存储性能要多少、方案怎么选,以及如何用实操手段把存储压力降下来。

检查点保存频率怎么设置才不拖慢训练?

很多人习惯拍脑袋定一个间隔,比如每1小时存一次,但真正科学的做法是:先算存储账,再定保存间隔,因为保存频率和存储吞吐是强耦合的,频率越高,单位时间内产生的写IO就越多。

一个实用的估算公式

假设你的模型检查点文件大小是 C(GB),保存间隔是 T(秒),那么单个节点所需的平均写带宽至少是:

带宽需求 = C / T

这只是理想平均情况,实际中,所有GPU并行保存时,写流量会瞬间叠加,比如8张卡同时保存,每张卡的检查点都是独立文件,那峰值带宽就是 8 C / T,如果你的存储扛不住这个峰值,训练就会阻塞在保存这一步。

具体场景:70亿参数模型,每5分钟存一次

业内专家指出,一个70亿参数的模型,仅权重在FP16精度下就约14GB,加上优化器状态(Adam的动量和方差)后,检查点总大小通常会翻倍到30GB以上,如果每5分钟(300秒)保存一次,单卡需要的带宽是:

30GB / 300s ≈ 100MB/s

8卡同时写就是800MB/s,这还只是带宽,别忘了这些文件往往是很多小文件,存储的IOPS压力比带宽更致命,看起来800MB/s不算夸张,但如果是几十个节点并行训练,轻松突破10GB/s,普通NAS根本接不住。

先定恢复目标,再倒推频率

最好的办法是:明确你能容忍丢失多少训练时长,比如设定的保存间隔是10分钟,那最坏情况就是丢10分钟进度,然后去评估存储能不能在这个间隔内顺利完成所有GPU的写入,如果存储吞吐不够,要么调大间隔,要么换存储,不能硬扛。

检查点高频保存会影响存储吞吐吗,如何优化检查点保存性能?

高频检查点存储性能要求:写带宽、IOPS与延迟

高频保存不是简单地“多写几次”,它会从三个维度考验存储系统,这三个维度缺一个,都会让训练变慢。

写带宽:决定保存时长的天花板

写带宽不够,最直接的表现就是保存时间变长,你以为保存过程是非阻塞的?大多数深度学习框架(如PyTorch Lightning、Horovod)在默认情况下是同步保存的,GPU要等所有rank的检查点写盘完成才会继续下一轮迭代,保存一次要花1分钟,那这1分钟里所有GPU都在空转,高频保存时,这部分浪费会被放大。

IOPS:小文件写入的隐形杀手

检查点通常不是一个单独的文件,而是多个分片文件(shard),以DeepSpeed为例,一个检查点可能包含模型权重、优化器状态、调度器状态,每个文件还按层拆成多个块,这就意味着一次保存会产生成百上千个小文件,每个几十KB到几MB不等,存储的IOPS如果不够高,写入队列就会堵塞,哪怕你的存储带宽很大,实际速度也上不去。

行业共识认为:对于高频检查点场景,存储的随机写IOPS至少要达到数万级别,才不至于成为训练的瓶颈。

延迟:同步训练中的“锁”

在分布式训练中,每个rank保存完后还要与其他节点通信,确认“我存完了”,这个握手过程对延迟很敏感,存储系统若延迟过高(比如网络存储跨机房),每一次保存都会增加几十毫秒甚至几百毫秒的额外开销,高频保存时,这些延迟会累积成可观的训练时间损失。

扛得住高频保存的存储方案对比

不是所有存储都适合高频检查点保存,我们直接对比主流方案,让你看得清楚:

存储方案 典型吞吐 IOPS能力 多节点共享

检查点高频保存会影响存储吞吐吗,如何优化检查点保存性能?

适用场景

本地NVMe SSD 高达数GB/s 非常高(数十万) 不支持 单机多卡,临时保存
网络附加存储(NAS/NFS) 数百MB/s 中低(数千) 支持 小规模训练,低频保存
并行文件系统(Lustre/GPFS) 数十GB/s 高(数万) 支持 大规模集群,高频保存
分布式对象存储(Ceph/S3) 吞吐高但延迟大 中等 支持 归档或异步备份,不适合高频同步保存

从上表能看出,本地NVMe SSD性能最好但无法共享,NFS虽然方便但IOPS容易爆,对于高频保存,最稳妥的方案是并行文件系统或高性能分布式存储,如果你的基础设施没有这类存储,那就得靠后面的实操手段“削峰填谷”了。

实操:降低高频保存存储压力的六个手段

存储硬件升级要花钱,但只要改动代码或训练策略,就能显著减轻存储负担,以下六个手段按推荐程度排序,个个实用。

  • 异步保存:把“写入存储”和“训练”解耦,具体做法是,训练进程先将检查点写进内存或临时目录,然后立刻返回继续训练;后台一个独立线程负责把临时文件搬运到持久化存储,PyTorch里可以用 torch.save 配合线程池实现,注意要确保内存足够容纳临时检查点。
  • 内存暂存后落盘:利用 /dev/shm 或tmpfs把检查点直接写到内存文件系统,速度极快,训练结束后(或几个检查点之后)再统一复制到慢速磁盘,适合单机场景,多节点需要共享存储时效果有限。
  • 增量检查点:只保存“变化”的部分,比如优化器状态在训练后期变化很小,就可以减少保存频率,DeepSpeed的 auto_compression 和Microsoft的ZeRO系列支持增量快照,能节省大量IO。
  • 压缩与合并文件

    检查点高频保存会影响存储吞吐吗,如何优化检查点保存性能?

    :保存时用zstd或lz4压缩,体积可减少50%以上,同时把多个分片文件合并成一个tar包,减少文件数量,提高IOPS效率,虽然压缩会消耗CPU,但通常比等待存储IO划算。

  • 调整保存时机:训练初期损失函数剧烈变化,没必要频繁保存;等loss趋于平稳后再按固定间隔保存,可以设置“只在验证集指标提升时保存”,直接降低保存次数。
  • 分级存储:本地SSD作为第一落点,保存速度快;再通过定时任务把本地检查点同步到远端对象存储,这样既满足了高频保存,又不会让远端存储拖累训练。

Q&A:高频检查点保存的常见疑问

检查点保存频率设多少合适?

没有绝对标准,要看你的模型大小和存储能力,一个安全做法是:先按上面公式算存储需求,如果存储带宽足够,那就以“能容忍丢失的时间”来定间隔,例如每10分钟保存一次,崩溃最多丢10分钟计算量,如果存储紧张,就放宽到30分钟或更久,保存频率不是越高越好,稳定恢复比频繁保存更重要

分布式训练检查点存储方案怎么选?

如果是2-4台机器的小集群,可以用NFS配合异步保存,勉强够用,如果是几十台节点以上,直接上并行文件系统(Lustre/GPFS)或高性能对象存储,关键指标看它的聚合写带宽和IOPS,而不是单盘速度,尽量选择支持POSIX接口的存储,因为大多数深度学习框架的检查点API都依赖标准文件操作,兼容性要优先考虑。

高频保存时,如何检测存储是否成了瓶颈?

最简单的方法:在训练日志中打印每个检查点保存的耗时,如果保存耗时随着训练轮次增加而线性增长,说明存储队列堆积严重,另一个方法是监控GPU利用率,保存期间GPU利用率如果掉到接近0%,那就是在等存储,用 iostat 看存储设备的 %utilw_await,前者接近100%、后者超过几百毫秒,就要采取降频或换存储的方案。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱