问题域/PD-425

GC 与内存管理优化

Runtime Memory Optimization

精细的 Python GC 控制与 GPU 内存管理策略

子问题

1.GC 暂停消除(freeze+disable)

2.meta device 延迟初始化

3.expandable segments 减少碎片

4.FP8 模块运行时热切换

5.pinned memory 预分配与单次 HtoD 批量传输

6.FP8 评估时的模块级精度回退

各项目的解法1 solutions

Signals

横向对比

维度nanochat
GC 策略三步曲 collect→freeze→disable + 每5000步安全网collect
显存分配expandable_segments 可扩展段,进程启动时环境变量配置
模型初始化meta device 零内存构建 → to_empty → init_weights 三阶段
精度切换Float8Linear↔nn.Linear context manager 热切换,权重共享零拷贝
数据传输pinned memory 预分配 + inputs/targets 连续buffer 单次 HtoD copy

最佳实践

1.gc.freeze 冻结存活对象后 gc.disable 消除扫描开销

2.expandable_segments 必须在 import torch 之前通过环境变量设置

3.meta device __init__ 中禁止任何依赖实际数据的计算,参数初始化必须移到独立方法

4.FP8↔BF16 切换通过 weight 引用赋值实现零拷贝,不维护两份模型