快捷键

torch.cuda.memory_stats

torch.cuda.memory_stats(device=None)[source][source]

返回给定设备的 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 进行比较,以检查分配四舍五入是否增加了过多的开销。

参数:

设备(torch.device 或 int,可选)- 选定的设备。如果 deviceNone (默认),则返回当前设备的统计信息。

返回类型:

dict[str, Any]

注意

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

注意

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


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

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

查看资源