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 引用赋值实现零拷贝,不维护两份模型