05 数据传输:搬得动、搬得快,还要搬得安全
总目录 · 前置:存储 · 下一主题:Serving 与性能
传输层处理地址、长度、设备、连接和完成状态。它把字节送到目标,但不能独自证明这些字节属于正确模型、完整对象,或者已能被目标 GPU 安全消费。
配套图示:部署的数据/控制路径、对象完成协议、联合运行链。跨层所有权与 RDMA 前提见联合实现。
1. 先画真实路径
源 GPU → 源 host staging → 网络 → 目标 host staging → 目标 GPU
有些系统和硬件可以省掉其中的 staging 或复制;也可能增加序列化、压缩、布局转换。不要先写“零拷贝”,先标出每一步谁发起、用哪个设备、等什么完成。
2. 三条需要分别核对的完成边界
| 边界 | 需要证明什么 |
|---|---|
| 传输完成 | 该操作的字节移动成功,具体本地/远端完成语义见传输 API |
| 对象可读 | 上层确认所有必要部分完整,并发布对象状态 |
| 消费安全 | 目标布局和设备依赖满足,消费者可读取,资源仍受保护 |
本地提交返回成功不代表三条边界全部满足。超时也可能只是“没有拿到完成结果”:原任务仍可能在途,不能立即释放或复用源/目标内存。
3. 必须掌握的共同基础
| 机制 | 白话解释 | 主要代价 |
|---|---|---|
| 注册内存 | 为设备访问建立映射和权限 | 注册成本、锁页限制、注册与对象寿命 |
| TCP | 使用 socket/网络栈传数据,适合建立功能基线 | 复制、系统调用、CPU 与协议处理成本因路径而异 |
| RDMA | 在授权内存区上执行设备数据访问 | 连接、注册、队列、完成处理和拓扑仍需管理 |
| GDR | 在支持条件下由网卡直接访问 GPU 内存 | 硬件、驱动、PCIe 拓扑和设备同步限制 |
| 批量与切片 | 合并提交开销,或并行搬运大对象 | 队列深度、切片粒度、部分失败与尾部等待 |
| NUMA 与多网卡 | 选择更接近数据的 CPU/内存/网卡路径 | 跨 NUMA、共享 PCIe 和上联瓶颈 |
锁页、注册和对象所有权是不同概念。拥有一个合法指针也不能证明背后的 tensor 或内存块不会被其他线程、进程或设备提前释放。
4. 先算下界,再解释差距
理想传输时间 = 字节数 / 链路字节速率。例如 1 GiB 在 400 Gbit/s 链路上的理想下界约 21.47 ms,还没有算协议、排队、源/目标内存、拷贝和同步。
端到端吞吐受最窄环节限制。串行阶段耗时相加;能重叠的阶段要按实际时间线估计关键路径,不能先假设全部重叠,也不能用峰值网络带宽代替实际 KV 加载速度。
5. 实现与实验
先读 Mooncake Transfer Engine 实现专题,再看传输与 Store 实验。TE 用作具体案例;一般的内存寿命、完成边界和成本模型适用于其他传输方案。
实验分别记录注册/连接成本、稳态 payload 带宽、小对象延迟、CPU 开销、部分失败和目标设备可用时间。把传输 microbenchmark、Store 对象读写和最终推理指标分开报告。
6. 验收
解释为何网络调用成功后 GPU 仍可能不能读;列出取消任务后安全释放的条件;说明两张网卡不一定获得两倍吞吐的原因;给出远端加载与重算的比较前提。