Spec-Zone.ru › PyTorch 2.14

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().

Тип возвращаемого значения:

dict[str, Any]

Примечание

Подробнее об управлении памятью 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API