01
显存碎片初探
什么是显存碎片?为什么会出现?对AI训练/推理的影响。
概念基础
02
环境准备
安装nvidia-ml-py、pynvml、torch等工具库。
工具安装
03
基础工具
使用nvidia-smi查看显存状态,解读关键指标。
监控命令行
04
Python监控脚本
编写脚本实时监控显存分配与释放。
脚本自动化
05
PyTorch显存机制
理解allocated与reserved的区别。
PyTorch核心
06
碎片模拟实验
反复分配/释放不同大小张量,人为制造碎片。
实验模拟
07
碎片可视化
使用memory_summary()输出显存快照。
可视化调试
08
CUDA Memory Caching
理解缓存机制,显存为何不立即归还系统。
CUDA缓存
09
内存池分析
通过pynvml获取进程级显存使用详情。
pynvml进程
10
碎片量化指标
计算碎片率(Fragmentation Ratio)公式与实现。
指标公式
11
案例1:大模型训练OOM
大模型训练中的OOM排查。
案例OOM
12
案例2:推理显存增长
推理服务显存不释放问题定位。
案例推理
13
案例3:多进程显存冲突
多进程共享GPU时的显存冲突。
案例多进程
14
torch.cuda.empty_cache()
它到底做了什么?为什么有时候没用?
API误区
15
显存整理策略
重启进程或重新初始化CUDA上下文。
策略重启
16
内存预分配
使用caching_allocator_alloc提前分配大块内存。
预分配优化
17
张量生命周期管理
del和synchronize()确保及时释放。
生命周期释放
18
梯度累积与显存
梯度检查点如何减少碎片。
梯度检查点
19
混合精度训练
FP16/BF16对显存碎片的影响。
精度FP16
20
数据加载器优化
pin_memory和num_workers减少显存抖动。
DataLoader优化
21
碎片检测工具
自动化检测脚本,输出碎片报告。
工具检测
22
nsys profile
NVIDIA Nsight Systems分析分配事件。
Nsightprofile
23
ncu 分析
NVIDIA Nsight Compute分析kernel与显存交互。
NsightCompute
24
PyTorch Profiler
使用torch.profiler分析显存分配热点。
Profiler热点
25
碎片与吞吐量
碎片如何影响训练吞吐量(throughput)。
性能吞吐
26
碎片与推理延迟
碎片如何影响推理延迟(latency)。
性能延迟
27
自定义CUDA分配器
替换默认Caching Allocator。
高级分配器
28
生产环境最佳实践
DDP/FSDP中的显存管理。
分布式最佳实践
29
容器化环境
Docker中限制显存与碎片关系。
Docker容器
30
总结与展望
未来解决方案:GPU显存虚拟化等。
总结趋势