vLLM-Omni 分布式层级卸载 (Distributed Layerwise Offload)
vLLM-Omni 的分布式层级卸载 (DLO) 允许超过单个设备 HBM 容量的视频生成模型(例如 64B Cosmos3-Super)在多个 NPU 或 GPU 上运行,且仅产生极小的宿主机内存开销。该系统通过结合 meta-device 初始化、权重分片 (weight sharding) 和双缓冲预取流水线 (double-buffered prefetch pipeline),解决了与大型 Diffusion Transformer (DiT) 模型相关的内存瓶颈问题。
解决 HBM 和宿主机内存瓶颈
大型 DiT 模型通常无法放入设备 HBM 中,而传统的卸载或并行策略会引入显著的权衡。在数据并行 (DP) 配置中,纯层级卸载通常要求每个 rank 都在宿主机内存中存储模型的完整副本,导致宿主机 RAM 的需求随设备数量线性增长 (O(dp_size \times model_size))。
分布式层级卸载通过四个主要技术机制解决了这些限制:
1. Meta-Device 初始化与 mmap 权重加载
为了防止在模型创建期间出现巨大的驻留集大小 (RSS) 峰值,vLLM-Omni 使用了 meta-device 初始化和内存映射 (mmap) 加载。
- 机制:系统使用
to_empty(device="meta")将 DiT 模块转换为 meta device,在保留元数据的同时释放参数存储。然后,它将这些参数替换为直接指向共享 OS 页缓存的 mmap 视图。 - 结果:由于所有 rank 都 mmap 相同的 safetensors 文件,操作系统仅在缓存中维护一份文件页副本。对于 Cosmos3-Nano DP4,这使得冷启动时 cgroup 可见的峰值内存从 178 GB 降至 47 GB(降幅达 73%)。
2. 权重分片与 AllGather 重建
为了消除每个 rank 必须在锁存 (pinned) CPU 内存中持有完整模型副本的需求,vLLM-Omni 实现了权重分片。
- 机制:每个 rank 仅存储模型权重的 1/dp_size。在运行时,当前层的完整权重会在设备上通过专用通信流上的
all_gather_into_tensor进行重建。 - 结果:所有 rank 的总锁存宿主机内存从
dp_size \times model_size降至仅为model_size。对于 Cosmos3-Super DP4,这使得每个 rank 的锁存内存从 124 GB 降至 31 GB。
3. 双缓冲预取流水线
为了防止 GPU 在数据移动期间处于闲置状态,并确保无论模型深度如何,HBM 使用量都保持恒定,vLLM-Omni 使用了双缓冲方案。
- 机制:系统维护恰好两个大小为模型中最大块大小的设备缓冲区。当计算流处理 slot 0 中的第 N 层时,后台流处理第 N+1 层的 H2D (Host-to-Device) 传输和 AllGather,并将其放入 slot 1。
- 结果:HBM 权重使用量被限制在 2 \times max_block_size 以内。在对 Cosmos3-Nano 和 Cosmos3-Super 的测试中,尽管模型大小增加了 3.8 倍,但峰值 HBM 仅增长了 22% (23.1 GB 到 28.1 GB)。
4. DP 多并发以提高吞吐量
由于 AllGather 是请求无关的(它收集的是权重而非激活值),vLLM-Omni 允许不同的 DP rank 在保持权重重建同步的同时,并行处理不同的请求。
- 机制:调度器将多达
dp_size个请求进行批处理。每个 DP rank 从列表中选取一个请求,并通过流水线的单请求前向路径执行。 - 结果:这摊销了 AllGather 的开销。在测量中,4 个并发请求实现了 3. la 吞吐量,达到了理想线性扩展的约 83%。
性能与验证结果
平台无关性
分布式层级卸载是平台无关的,可以在 NVIDIA GPU (CUDA/NCCL) 和 Ascend NPU (CANN/HCCL) 上运行。
在 NVIDIA B300 GPU 上,对于 1024\times 1024 T2I 任务,使用 4 个并发请求的 DLO+AG DP4 实现了 HSDP+USP4 吞吐量的 1.39 倍,同时仅使用了 30% 的 HBM (12.6 GiB vs 42.0 GiB)。对于 720p 10s 视频生成,DLO+AG+USP4 的延迟与 HSDP 相比在 2.13% 以内,而 HBM 使用量仅为 47%。
拓扑感知策略 (MiniMax-H3 研究)
使用 MiniMax-H3 模型在 8\times NVIDIA B300 GPU 上的研究表明,最佳 DLO 模式取决于硬件拓扑:
- DP1\times SP8:AllGather 模式对于最低延迟 (P50 34.55s) 最为理想。
- DP4\times SP2:AllGather 模式为吞吐量提供了平衡点 (151.89 videos/h)。
- DP8\times SP1:Rank-local DLO 模式对于最高吞吐量 (183.78 videos/h) 和最低能耗 (43.97 Wh/video) 最为理想。
Ascend NPU 内存统计
在 Ascend 硬件上,pin_memory() 通过 /dev/davinci_manager 进行分配,将分片存放在 CPU 内核 DMA 内存中。这种内存对 cgroup 内存控制器是不可见的。因此,cgroup 可见的内存随 O(model_size + dp_size \times constant) 增长,尽管总物理 RAM 仍包含这些锁存的 DMA 分片。
内存扩展性总结 (推导)
基于测量的内存模型,vLLM-Omni 可以在 2 TB 系统 RAM 限制内扩展到非常大的模型:
| Model Size | dp_size | Est. cgroup Peak | Est. Total RAM | Fits 2 TB? |
|---|---|---|---|---|
| 33 GB | 4 | 47 GB | ~80 GB | Yes |
| 124 GB | 4 | 172 GB | ~296 GB | Yes |
| 185 GB | 4 | 4 | ~405 GB | Yes |
| 400 GB | 4 | ~423 GB | ~823 GB | Yes |
| 400 GB | 8 | ~443 GB | ~843 GB | Yes |
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- Dispatch