Skip to content

存储高级特性:多租户 QoS、元数据治理与分层归档实战 ​

一句话结论:存储瓶颈很少来自"总带宽不够",而是来自三个结构性病灶——租户之间互相抢 IO、元数据热点被小文件风暴打穿、检查点与冷数据混在同一层互相拖累。本文按"先隔离、再治理、后分层"的顺序,给出大规模 AI/HPC 集群存储的进阶工程方案。

1. 多租户 IO 隔离与 QoS ​

在混部集群里,一个租户的 checkpoint 全量落盘就能把整条存储链路打满,其他租户的训练随之"间歇性卡死"。QoS 的目标不是限制总吞吐,而是给每个租户一个可承诺的带宽与 IOPS 下限,同时允许峰值突发。

1.1 三层 QoS 手段 ​

层级手段粒度典型工具
客户端计算节点侧限流进程/容器tc、cgroup blkio、ionice
文件系统服务端配额与限速目录/用户/租户BeeGFS beegfs-ctl quota、Lustre QoS(ladvise)、GPFS 存储池
网络存储网络带宽隔离流量类别RoCE PFC/ETS、InfiniBand SL、交换机 QoS 队列

工程上最推荐组合是"文件系统服务端限速 + 客户端 cgroup 兜底":

  • 服务端限速保护全局公平性(一个租户无法打垮共享元数据服务);
  • 客户端 cgroup 兜底防止单节点上多任务内部互相挤占;
  • 不要只在客户端限流——客户端可以换节点、换容器,绕过你。

1.2 关键参数与口径 ​

  • 带宽口径:QoS 应基于"可观测的实时速率"而非静态配置。训练任务每 30~60 分钟写一次 checkpoint,瞬时带宽需求是平均值的 5~10 倍,配额必须允许 burst,否则等价于强制降速;
  • IOPS 口径:小文件场景(数据预处理、日志)看 IOPS 不看带宽。元数据服务 IOPS 是硬上限;
  • 隔离粒度:按"租户 = 一组目录 + 一组用户/组 ID"建模,而不是按单客户端 IP——训练任务会在节点间漂移。
bash
# BeeGFS 租户带宽限速示例(按用户组)
beegfs-ctl --quota --addquota --storage --ugid 20001 --limitby 8G --timelimit 3600
# 查看实时租户用量
beegfs-ctl --quota --list --storage --ugid 20001

2. 元数据热点治理 ​

元数据性能决定了任务能同时打开多少个文件。AI 训练数据集的"海量小文件"形态(几十万到上千万个样本文件)是元数据热点最常见的来源。

2.1 热点从哪来 ​

  1. 目录打散不足:数据集按 label 或日期单层目录组织,单目录百万文件,哈希查找退化为线性;
  2. 文件创建风暴:DataLoader 并行预取时每个 worker 同时 open/stat,元数据服务单点打满;
  3. 周期性扫描:监控、归档任务每天全量 stat 一遍,把缓存全部冲掉。

2.2 四步治理清单 ​

  • 目录打散:按 label/子集/前两字符 分层,单目录文件数控制在 1 万以内(BeeGFS/Lustre 均建议 1K~10K 上限);
  • 预取与缓存对齐:DataLoader 用 torchdata/WebDataset 打包为 tar/shard 顺序读,把"百万小文件随机读"变成"大文件顺序读"——这一步通常能消除 80% 的元数据压力;
  • 元数据落盘加速:元数据服务配 NVMe + NVRAM 写缓存,mdstats/ladvise 开启元数据预读;
  • 扫描任务错峰:监控与归档的 stat 全扫放到训练低峰(如 checkpoint 间隙),并加 --fiemap/批量接口减少单次 RPC。

3. 检查点与冷数据分层策略 ​

3.1 检查点带宽预算 ​

一个 384 卡集群全量 checkpoint 约 0.5~2 TB。若存储给训练提供 20 GB/s 可用带宽,一次全量保存就要 30~100 秒——训练必须停摆等待。工程标准做法:

  • 渐进式保存:每 N 步只写增量(优化器状态分片),全量检查点放到低峰;
  • 异步落盘:checkpoint 先写本节点 NVMe 暂存,再异步刷到并行文件系统;
  • 带宽预算公式:checkpoint 大小 ÷ 允许暂停时间 = 最低带宽要求。按这个数字向存储团队要 SLA,而不是拍脑袋要"越大越好"。

3.2 冷数据分层 ​

数据生命周期天然分三层,混存是最大的隐性浪费:

层介质用途生命周期
L1 热集群 NVMe / 计算节点本地盘训练集、活跃 checkpoint天级
L2 温并行文件系统(BeeGFS/Lustre/GPFS)全部训练数据、历史 checkpoint月级
L3 冷对象存储(S3 兼容)/ 磁带归档数据、不可再生实验输出年级

落地要点:L1 与 L2 之间用策略自动迁移(如 3 天未访问降级到 L2 只读),L2→L3 用对象存储的 Lifecycle 规则按目录打标归档。归档对象必须带元数据清单(实验名、代码版本、数据版本),否则三个月后就是不可用数据。

4. 实战落地顺序 ​

  1. 先建立存储可观测性:每个租户的带宽/IOPS/延迟面板(beegfs-ctl、Grafana);
  2. 再做租户 QoS:服务端配额 + 客户端 cgroup 兜底,跑满 72 小时验证无互相拖累;
  3. 再治元数据:小文件打包 + 目录打散 + 元数据 NVMe;
  4. 最后做分层:checkpoint 渐进保存 + L1/L2/L3 自动迁移。

判断标准:存储是否可承诺。租户能随时回答"我现在能拿到多少带宽、延迟多少",比任何峰值测速都重要——可承诺性才是大集群存储工程的核心产出。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com