权重卸载与预取
Weight Offloading & Prefetch
将模型权重卸载到CPU内存,按需预取到GPU,突破显存限制
子问题
1.卸载策略选择
2.预取调度与流水线
3.UVA统一虚拟寻址
4.与量化的协同
5.torch.compile 重排序导致同步语义破坏
6.CUDA Graph 捕获期与非捕获期的事件有效性差异
7.process_weights_after_loading 后 CPU 存储与量化权重的一致性
各项目的解法1 solutions
Signals
横向对比
| 维度 | vLLM |
|---|---|
| 卸载策略 | 双策略:UVA 零拷贝 + Prefetch 异步预取,工厂方法自动选择 |
| 缓冲管理 | StaticBufferPool 预分配 + slot 循环复用,避免动态分配 |
| 同步机制 | per-layer CUDA Event + 捕获期/非捕获期双路径同步 |
| 编译兼容 | 自定义 Op mutates_args 声明假数据依赖,兼容 torch.compile + CUDA Graph |
| 粒度控制 | group_size/num_in_group 分组选择 + offload_params 参数级白名单 |
| 平台适配 | CUDA/ROCm/XPU 三平台 UVA 实现,环境变量控制降级 |
最佳实践
1.优先使用Prefetch模式隐藏传输延迟
2.结合量化进一步降低传输量
3.用 mutates_args 自定义 Op 创建假数据依赖防止编译器重排序
4.pinned memory 必须全程保证,否则 non_blocking H2D 会触发隐式流同步
5.静态缓冲池 slot 数等于 prefetch_step,循环复用避免显存碎片