Shortcuts

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": 抛出的内存不足错误数量。

缓存分配器可以通过环境变量配置,以避免分割大于定义大小的块(参见Cuda语义文档中的内存管理部分)。这有助于避免内存碎片化,但可能会带来性能损失。额外的输出有助于调整和评估影响:

  • "max_split_size": 超过此大小的块将不会被分割。

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

  • "oversize_segments.{current,peak,allocated,freed}": 从 cudaMalloc() 中获取的超大保留段的数目。

缓存分配器可以通过环境变量配置,以将内存分配四舍五入,从而减少碎片化。有时,四舍五入的开销可能比它帮助减少的碎片化更大。可以使用以下统计信息来检查四舍五入是否增加了过多的开销:

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

Parameters

设备 (torch.device整数, 可选) – 选择的设备。返回当前设备的统计信息,由 current_device() 提供,如果 deviceNone(默认)。

Return type

字典[字符串, 任意]

注意

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

注意

使用backend:cudaMallocAsync,某些统计数据没有意义,并且始终报告为零。