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
。
可以通过环境变量配置缓存分配器,使其不对大于指定大小的块进行拆分(参见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
对比来检查分配过程中是否因舍入导致了过多的开销。
- 参数
-
device (torch.device 或 int, 可选) – 选定的设备。如果
current_device()
返回当前设备(当device
为None
(默认值)时),则返回该设备的统计信息。 - 返回类型
注意
关于GPU内存管理的更多信息,请参见内存管理。
注意
使用backend:cudaMallocAsync时,某些统计信息无意义,始终显示为零。
-