文章

分布式文件系统选型

分布式文件系统选型

GPU 集群存储方案对比:并行文件系统、对象存储与本地缓存的组合策略。

概述

GPU 训练任务对存储的需求极为苛刻:高吞吐(数百 GB/s 读取)、低延迟(检查点写入不阻塞训练)、高容量(PB 级数据集)。选择合适的存储架构直接影响 GPU 利用率和训练效率。

文件系统对比

文件系统类型最大吞吐典型延迟适用场景
Lustre并行 FSTB/s 级ms 级超大规模 HPC/AI
GPFS/Spectrum Scale并行 FSTB/s 级ms 级企业级 AI
WekaFS并行 FSTB/s 级μs 级高性能 AI
JuiceFS云原生 FSGB/s 级ms 级多云/混合云
BeeGFS并行 FSTB/s 级ms 级社区 HPC
本地 NVMe本地 FS7+ GB/s/盘μs 级热数据缓存
S3/MinIO对象存储GB/s 级10-100ms冷数据归档

典型架构

分层存储

┌─ Hot Tier ─────────────────────┐
│  本地 NVMe RAID0                │  数据预处理、临时结果
│  延迟: ~10μs                    │
├─ Warm Tier ────────────────────┤
│  Lustre / WekaFS (并行 FS)      │  训练数据集、频繁访问
│  延迟: ~1ms                     │
├─ Cold Tier ────────────────────┤
│  MinIO / S3                     │  模型版本、历史日志
│  延迟: ~50ms                    │
└────────────────────────────────┘

数据流水线

原始数据 (S3) → 预处理节点 (CPU/GPU) → Lustre → 训练节点 (GPU)

                                     Checkpointing

                                    Lustre / 本地 NVMe

                                     S3 (定期归档)

关键要点

Lustre 部署要点

OST (Object Storage Target): 数据实际存储
MDT (Metadata Target):      元数据存储
MGS (Management Server):    配置管理

典型配置:
- OST 数量 × OSS 节点 = 聚合带宽
- 使用 InfiniBand 网络 (IPoIB 是瓶颈)
- stripe_count = -1 (分散到所有 OST)
- stripe_size = 1MB (适合大文件 AI 场景)

训练场景优化

# 数据集缓存到本地 NVMe (避免 Lustre 争抢)
rsync -avP /mnt/lustre/dataset/ /mnt/nvme/dataset/

# 检查点先写本地,再异步同步
torch.save(checkpoint, "/mnt/nvme/ckpt/model_step1000.pt")
# 异步同步到 Lustre
rsync /mnt/nvme/ckpt/* /mnt/lustre/checkpoints/ &

# 使用内存映射减少 IO
mmap_mode='r'  # PyTorch Dataset 加载

常见问题

  1. Lustre 元数据瓶颈:大量小文件会导致 MDT 压力,需合并或预处理
  2. 检查点风暴:多机同时写检查点导致 Lustre OST 拥塞
  3. 网络拥塞:存储流量与 NCCL 通信共用 IB 网络时相互干扰
  4. 数据预热不足:冷数据加载慢,GPU 空等

关联知识

参考资源

学习时间

阶段时间备注
框架搭建2026-06-29骨架创建

状态标记

📝 待补充 — 需补充各文件系统性能 benchmark 对比、自动化数据集缓存方案、检查点管理策略