跳转至

网络与存储

分布式 AI 系统把“本机函数调用”变成了大量跨设备数据移动。网络与存储设计的关键,是让通信模式、拓扑和工作负载阶段匹配。

带宽、时延与消息大小

一次传输的粗略时间模型:

\[ T \approx L + \frac{S}{B_{effective}} \]
  • \(L\):固定时延,包括协议、排队与软件栈开销。
  • \(S\):数据量。
  • \(B_{effective}\):有效带宽,通常低于链路标称带宽。

小消息更敏感于时延,大消息更敏感于有效带宽。训练中的大 collective、MoE all-to-all、推理中的跨卡张量通信,对网络的压力模式并不相同。

Collective 速记

操作 语义 常见位置
broadcast 一个 rank 发给所有 rank 参数/状态初始化
all-reduce 各 rank 聚合并获得相同结果 DDP 梯度同步
all-gather 各 rank 收集所有分片 FSDP 参数、张量并行
reduce-scatter 聚合后按 rank 分片 FSDP 梯度同步
all-to-all 每个 rank 向所有 rank 交换不同数据 MoE token dispatch

NCCL 是面向多 GPU 的拓扑感知 collective 通信库。性能不仅取决于接口,还取决于算法(ring/tree 等)、通道、消息大小、GPU/NIC 亲和性与网络路径。

RDMA 与 GPUDirect 思维模型

传统路径可能经过 GPU → 主机内存 → 内核网络栈 → NIC。RDMA 旨在减少 CPU 参与与拷贝;GPUDirect RDMA 允许合适拓扑和软硬件条件下 NIC 直接访问 GPU 内存。

不要只问是否支持 RDMA

还要验证实际流量是否走预期网卡、GID/MTU/PFC/路由是否一致、GPU 与 NIC 拓扑是否理想,以及容器权限与驱动组件是否完整。

AI 数据路径

flowchart LR
    O[(对象存储)] --> C[缓存 / 数据准备]
    C --> F[(并行文件系统)]
    F --> L[DataLoader / Reader]
    L --> H[主机内存]
    H --> G[GPU HBM]
    G --> K[(Checkpoint / Model Registry)]

不同阶段的 I/O 特征:

  • 训练样本:大量顺序/随机读取,受文件数量、解码、shuffle 和小文件影响。
  • 检查点:阶段性大规模写入,容易制造带宽尖峰和全局同步。
  • 模型加载:扩容或发布时多个副本同时读取大文件,形成 thundering herd。
  • 推理缓存:权重缓存、编译缓存、前缀/KV 缓存的介质和一致性要求不同。

存储分层

优点 代价 适合
对象存储 容量大、耐久、成本低 首字节和小文件访问较慢 数据集、模型制品、归档 checkpoint
并行文件系统 POSIX 语义、聚合吞吐高 元数据与热点治理复杂 共享训练数据、并行 checkpoint
节点本地 NVMe 低时延、高吞吐 容量有限、随节点故障 权重/数据缓存、临时 spill
内存/显存 最快 昂贵、易失 热数据、KV Cache、工作集

常见优化

  • 把海量小文件打包为适合流式读取的 shard,降低元数据压力。
  • 预取、并行解码和 pinned memory 要与 CPU/NUMA 配合,避免“GPU 等数据”。
  • checkpoint 分片并异步化,但明确一致性点和失败恢复语义。
  • 模型扩容前预热本地缓存,限制并发下载,避免存储雪崩。
  • 用 checksum、版本和不可变路径保证模型制品可验证。

必测而不是猜

网络至少分层测试:链路连通与错误计数、host-to-host、GPU collective、真实模型端到端。存储至少测试:单客户端与多客户端、不同 block/file size、冷/热缓存、读写混合和元数据操作。

记录测试时的节点拓扑、并发、消息大小/文件大小、版本和 P50/P95;只报一个“峰值 GB/s”很难指导真实系统。

延伸阅读