torch.cuda.memory.memory_stats
-
torch.cuda.memory.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: статистика для пула крупных выделений (по состоянию на июнь 2025 года — выделения размером >= 1 МБ). -
small_pool: статистика для пула небольших выделений (по состоянию на июнь 2025 года — выделения размером < 1 МБ).
Тип метрики:
-
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. -
-
"num_oom_rejections": number of allocations preemptively rejected by the -
Политика throw_on_cudamalloc_oom + per_process_memory_fraction.
-
Кэшируемый распределитель можно настроить через 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, чтобы проверить, не приводит ли округление выделений к чрезмерным накладным расходам. -
"reserved_bytes_by_private_pools": вложенный словарь с ключами в виде кортежейtorch.cuda.MemPool.id. Каждое значение имеет ту же структуру{all,large_pool,small_pool}.{current,peak,allocated,freed}, что иreserved_bytes, но относится к одному частному пулу. Вmemory_stats()ключи-кортежи преобразуются в строки путем объединения их строковых представлений с помощью"_", поэтому(0, 1)становится"0_1".
- Параметры:
-
device (torch.device или int, необязательный) – выбранное устройство. Если
deviceимеет значениеNone(по умолчанию), возвращается статистика для текущего устройства, определяемого функциейcurrent_device(). - Тип возвращаемого значения:
Примечание
Подробнее об управлении памятью GPU см. в разделе Управление памятью.
Примечание
При использовании backend:cudaMallocAsync некоторые статистические данные не имеют смысла и всегда равны нулю.
-
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_stats.html