ai-infra-interview-305

第 5 题:PyTorch的内存池管理(Caching Allocator)策略是什么?如何分析和优化显存碎片?

题目

PyTorch的内存池管理(Caching Allocator)策略是什么?如何分析和优化显存碎片?


完整讲解

一、Caching Allocator 在做什么?

PyTorch 的 CUDA 内存分配不是每次 malloc 都向 CUDA driver 要一块新显存,而是用缓存分配器:向 driver 申请大块(如 2MB 的 block),再按请求大小切成块还给用户;用户 free 时块不立刻还給 driver,而是放进进程内缓存池,下次相同或更小尺寸的请求可直接从池里拿,减少 cudaMalloc/cudaFree 调用(这两者很慢且易产生碎片)。


二、策略要点


三、显存碎片从哪来?


四、如何分析?


五、如何优化?


面试要点


记忆要点

  1. 缓存分配器 = 大块申请 → 按 size class 切分与复用;free 回池,超阈值才 cudaFree。
  2. 碎片 = 外部(不连续)+ 内部(取整)+ 释放顺序;分析用 memory_summary、profiler、Nsight。
  3. 优化 = 降峰值(checkpoint、inplace)、少频繁小块、慎用 empty_cache。
返回模块 返回总览