对象存储、并行文件系统与本地缓存
上一章讲了检查点怎么写,这一章讲写在哪。训练集群的存储是三层结构:本地 NVMe(快、小)、并行文件系统(快、共享)、对象存储(慢、大、安全)。每一层有自己的角色,选错层是存储性能问题的第一来源。本章给一张清晰的分工表与流量模型。
三层存储的角色
Section titled “三层存储的角色”| 层 | 典型带宽(聚合) | 容量 | 延迟 | 角色 |
|---|---|---|---|---|
| 本地 NVMe | 每 node 数 GB/s | 每 node 4–16 TB | ~100 μs | 工作区:token 流、最近检查点、热数据 |
| 并行文件系统(Lustre/GPFS/JuiceFS) | 集群级 100 GB/s–1 TB/s | 10 PB 级 | ~ms | 共享区:数据集、检查点仓库 |
| 对象存储(S3/OSS/MinIO) | 按带宽包 | 无限 | ~10–100 ms | 仓库:冷数据、灾备、发布 |
三条铁律:
一、训练的热数据(token 流)必须在本地 NVMe。对象存储的延迟(10–100 ms)与抖动是数据管道(数据加载)的天敌——每步都打对象存储的集群,GPU 利用率注定锯齿。
二、并行文件系统是"集群共享的中间层":数据集放这里,所有节点都能读;检查点仓库放这里,任何节点都能恢复。
三、对象存储做仓库与灾备:数据的最终家、检查点的异地副本、模型发布的地方——它不参与训练的热路径。
训练的流量模型
Section titled “训练的流量模型”一次训练的存储流量,三种不同性质:
| 流量 | 大小 | 模式 | 落在哪层 |
|---|---|---|---|
| 读 token 流 | 每 step 数百 MB,持续 | 顺序读、热 | 本地 NVMe(预热过) |
| 写检查点 | 每 30 分钟 1 TB+ | 突发大写 | 并行 FS(+ 异步落对象存储) |
| 读数据集/写日志/加载模型 | 一次性/低频 | 随机 | 并行 FS / 对象存储 |
检查点的突发写入是存储设计的第一挑战:万卡集群每 30 分钟同时写 TB 级——并行文件系统的聚合带宽必须扛住这个突发,否则检查点的写入时间失控(挤占训练)。
容量与带宽规划
Section titled “容量与带宽规划”一个 1000 节点(8000 卡)训练集群的典型配置:
| 层 | 容量 | 带宽 | 说明 |
|---|---|---|---|
| 本地 NVMe | 8 PB(每 node 8 TB) | 每 node 3–10 GB/s | token 流 + 最近检查点 |
| 并行 FS | 10–50 PB | 聚合 0.5–1 TB/s | 数据集 + 检查点仓库 |
| 对象存储 | 无限 | 100+ GB/s(出口带宽) | 灾备 + 发布 |
规划公式:
- token 流:1T token × 2 B = 2 TB(一个 epoch 的量)——本地 NVMe 轻松装下,但必须预热
- 检查点:70B 模型 1.1 TB × 保留 3 份 × 每 30 分钟 = 并行的写入压力,聚合带宽按"多训练共享存储"叠加
- 多训练共享存储是隐藏的坑:三四个训练同时写检查点,聚合需求 ×4——存储容量规划要按峰值叠加
数据集的预热管道
Section titled “数据集的预热管道”标准流程:对象存储(仓库)→ 并行 FS(集群共享)→ 本地 NVMe(工作区):
训练开始前: 1. 数据集从对象存储拉到并行 FS(一次性,可复用) 2. token 流从并行 FS 预热到各节点本地 NVMe(按节点分片) 3. 训练只读本地 NVMe(顺序读,零远程依赖)预热是训练启动的标准步骤(几 TB 到几十 TB 的分发要提前做);训练中途才发现数据没预热,是新手集群最常见的断粮原因。
- 监控三层的带宽与容量:并行 FS 的聚合带宽是共享资源,多训练互相挤压是" mysteriously slow checkpoint"的头号原因
- 检查点双写:本地(快恢复)+ 对象存储/并行 FS(安全)——上一章的结论在存储层的落地
- 小文件问题:对象存储/并行 FS 都怕海量小文件(元数据瓶颈);token 流用大分片(数百 MB),日志按天聚合
- 生命周期管理:旧检查点自动清理(保留策略)、冷数据下沉对象存储——并行 FS 的容量是最贵的,别让冷数据占着
- 三层角色:本地 NVMe 是工作区(token 流 + 热检查点)、并行 FS 是共享区(数据集 + 仓库)、对象存储是仓库与灾备。
- 训练热数据必须在本地 NVMe;对象存储不参与训练热路径。
- 检查点的突发写入是第一挑战;多训练共享存储按峰值叠加规划。
- 预热管道:对象存储 → 并行 FS → 本地 NVMe,训练启动的标准步骤。
- 监控聚合带宽(多训练挤压)、大分片防小文件、生命周期管理防贵层被冷数据占用。
- 检查点保存与恢复 — 上一章:写什么
- 数据加载性能 — token 流怎么读
- 训练容错与弹性 — 存储之上的容错
- 功耗、散热与机房约束 — 机房里的另一类容量规划