快捷方式

torch.cuda.memory_stats

torch.cuda.memory_stats(device=None)[源代码]

返回给定设备的 CUDA 内存分配器统计信息字典。

此函数的返回值是统计信息字典,每个统计信息都是一个非负整数。

核心统计信息

  • "allocated.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 内存分配器收到的分配请求数量。

  • "allocated_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 已分配的内存量。

  • "segment.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 从 cudaMalloc() 预留的段数。

  • "reserved_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 预留的内存量。

  • "active.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 活动内存块的数量。

  • "active_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 活动内存量。

  • "inactive_split.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 不活动、不可释放的内存块的数量。

  • "inactive_split_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 不活动、不可释放的内存量。

对于这些核心统计信息,值按如下方式细分。

池类型

  • all: 所有内存池的组合统计信息。

  • large_pool: 大型分配池的统计信息(截至 2019 年 10 月,针对大小 >= 1MB 的分配)。

  • small_pool: 小型分配池的统计信息(截至 2019 年 10 月,针对大小 < 1MB 的分配)。

指标类型

  • current: 此指标的当前值。

  • peak: 此指标的最大值。

  • allocated: 此指标的历史总增长量。

  • freed: 此指标的历史总减少量。

除了核心统计信息之外,我们还提供一些简单的事件计数器

  • "num_alloc_retries": 导致缓存刷新和重试的失败 cudaMalloc 调用次数。

  • "num_ooms": 抛出的内存不足错误次数。

  • "num_sync_all_streams": synchronize_and_free_events 调用的次数。

  • "num_device_alloc": CUDA 分配调用次数。这包括 cuMemMap 和 cudaMalloc。

  • "num_device_free": CUDA 释放调用次数。这包括 cuMemUnmap 和 cudaFree。

缓存分配器可以通过 ENV 进行配置,以不拆分大于定义大小的块(请参阅 Cuda 语义文档的内存管理部分)。这有助于避免内存碎片,但可能会导致性能下降。其他有助于调整和评估影响的输出

  • "max_split_size": 大于此大小的块不会被拆分。

  • "oversize_allocations.{current,peak,allocated,freed}": 内存分配器收到的超尺寸分配请求数量。

  • "oversize_segments.{current,peak,allocated,freed}": 从 cudaMalloc() 预留的超尺寸段数。

缓存分配器可以通过 ENV 进行配置,以对内存分配进行舍入,以减少碎片。有时,舍入带来的开销可能高于它帮助减少的碎片。可以使用以下统计信息来检查舍入是否增加了过多的开销

  • "requested_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}": 客户端代码请求的内存,将其与 allocated_bytes 进行比较以检查分配舍入是否增加了过多的开销。

参数

device (torch.deviceint, 可选) – 选定的设备。如果 deviceNone (默认值),则返回由 current_device() 给出的当前设备的统计信息。

返回类型

Dict[str, Any]

注意

有关 GPU 内存管理的更多详细信息,请参见 内存管理

注意

使用 backend:cudaMallocAsync 时,某些统计信息没有意义,始终报告为零。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源