相关 PR:
PR #59544:按 rank slot 选择性 pinning
- 在非 replicated layout 下,每个 worker 只使用共享 CPU region 每一行中属于自己 rank 的 slot;旧实现却让每个 worker 对整个 region 调用
cudaHostRegister,导致同一页被多个 rank 重复 pin。 pin_mmap_region新增按 worker slot 注册的路径:根据当前 rank、row stride 和 slot 大小计算每行的目标区间,并将区间按 CPU page 向下、向上对齐后分别注册。因此注册范围只围绕当前 rank 的 slot 进行 page 对齐;边界页可能包含相邻 slot 的部分内容,但不会再覆盖整行的其他 slots。replicated layout 仍沿用整 region 注册。- 为避免大量小块注册带来的调用开销,仅在 slot 与整行之间至少相差一页且 chunk 数不超过 65,536 时启用 slot 级注册;否则回退到原有的按整行对齐 chunk 注册。
实测效果:在 TP4、256 GiB native CPU offload 的 GLM-5.3 W4A8 + EP 测试中,每个 rank 的注册量从 274.9 GB 降至 68.8 GB;offload 启动时间从 63.6 秒降至 34.8 秒,其中 pinning 时间从 20.8 秒降至 6.8 秒。
PR #59545:按 worker 分片 replicated-layout 的 pre-fault
- replicated layout 下,所有 worker 映射相同的物理字节;旧实现让每个 worker 对整个 shm region 执行 pre-fault,TP4 会对同一批页面重复遍历四次,并产生竞争。
SharedOffloadRegion新增populate_shard=(index, count)。它把整个 region 按 worker 数划分为连续 share,按 page size 向上取整后,每个 worker 只对自己的 share 调用一次MADV_POPULATE_WRITE;最后一个 share 允许因取整或越界而为空。spec.py在 replicated layout 中仍让所有 worker 使用 slot 0,但根据物理设备索引分配不同的 pre-fault shard。由于各 worker 映射的是同一组共享页,所有 shard 合起来仍会覆盖整个 region;非 replicated layout 不使用这条分片路径。
实测效果:在 TP4、256 GiB native CPU offload 的 GLM-5.3 W4A8 + EP 测试中,offload 启动时间从 162.8 秒降至 46.7 秒。
PR #59546:将 CPU offload region 拆分到多个 shm 文件
- 单个 shm 文件中的 page-cache 插入受文件级串行化限制;即使多个 worker pre-fault 不同区间,也会在同一文件上争用,吞吐很快遇到上限。
- 将 CPU offload region 按行切分到最多 32 个 shm 文件,每个 segment 至少约 1 GiB;这些文件通过一块连续的匿名地址预留空间,再用 back-to-back 的
mmap(..., MAP_FIXED)映射,因此逻辑上的 region 仍保持连续,worker 不需要改变访问方式。 - 多 segment region 中,各 worker 的 pre-fault 起始位置分散到不同文件,以并行填充 page cache。小于 2 GiB 的 region 以及其他
SharedOffloadRegion使用者继续使用单文件路径;清理时会一并删除所有 segment 文件。
实测效果:在 TP4、256 GiB native CPU offload 的 GLM-5.3 W4A8 + EP 测试中,offload 启动时间从 63.6 秒降至 38.3 秒,pre-fault 时间从 42.8 秒降至 19.4 秒。单 H200 节点的 pre-fault 吞吐测试从单文件约 9.8 GiB/s 提升到 8 文件 24.6 GiB/s、16 文件 44.8 GiB/s。
PR #59547:非 replicated layout 使用 per-rank region
- 非 replicated layout 下,不同 rank 不会读取彼此的 slot;旧实现却把所有 rank 的 slot 交错放在同一个 shm region 中,使每个 rank 都要在同一文件中处理自己的 stride slots,并与其他 rank 竞争 page-cache 和注册路径。
- PR 为每个 rank 创建独立的 region 和 shm 文件,只放入该 rank 的 slot;region 的 row size 改为当前 worker slot 按块对齐后的大小,region 内统一使用
rank=0。因为没有其他 worker 映射同一文件,非 replicated layout 不再需要跨 worker barrier 才能 unlink;replicated layout 继续使用共享 region。 - 该 PR 没有修改
cudaHostRegister的注册逻辑;加速来自输入 region 的布局变化,使本 rank 的 pre-fault/populate 和 pin 都只处理自己的数据,因此两者的工作量同时下降。
实测效果:在 TP4、256 GiB native CPU offload 的 GLM-5.3 W4A8 + EP 测试中,offload 启动时间从 63.6 秒降至 22.6 秒,pinning 时间从 20.8 秒降至 3.3 秒。