网络与存储¶
分布式 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”很难指导真实系统。