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()
提供,如果device
为None
(默认)。- Return type
注意
有关GPU内存管理的更多详细信息,请参阅内存管理。
注意
使用backend:cudaMallocAsync,某些统计数据没有意义,并且始终报告为零。