РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
696 of 769 menu

Функция cuda.memory_stats

Функция cuda.memory_stats предназначена для получения детальной информации о распределении памяти CUDA. Она возвращает словарь, содержащий различные метрики, такие как количество выделенных блоков, размер активной памяти, пиковые значения и другие статистические данные. Основное применение функции - диагностика утечек памяти и оптимизация использования видеопамяти.

Синтаксис

torch.cuda.memory_stats(device=None)

Параметр device - необязательный, определяет устройство (по умолчанию используется текущее). Возвращает словарь с ключами-строками и значениями-числами.

Пример

Посмотрим базовую статистику для текущего устройства после выделения памяти:

import torch torch.manual_seed(0) if torch.cuda.is_available(): stats = torch.cuda.memory_stats() print("Количество ключей в статистике:", len(stats)) print("Пример ключа:", list(stats.keys())[0]) else: print("CUDA недоступна")

Результат выполнения кода:

"Количество ключей в статистике: 47" "Пример ключа: all.allocated_blocks"

Пример

Создадим тензор и измерим изменения в статистике выделенной памяти:

import torch if torch.cuda.is_available(): stats_before = torch.cuda.memory_stats() allocated_before = stats_before.get("allocated_bytes.all.current", 0) t = torch.randn(1000, 1000, device='cuda') stats_after = torch.cuda.memory_stats() allocated_after = stats_after.get("allocated_bytes.all.current", 0) print("До выделения:", allocated_before) print("После выделения:", allocated_after) print("Разница:", allocated_after - allocated_before) else: print("CUDA недоступна")

Результат выполнения кода:

"До выделения: 0" "После выделения: 4000000" "Разница: 4000000"

Выделение тензора размером 1000x1000 типа float32 занимает 4 000 000 байт (4 МБ).

Пример

Получим статистику для конкретного устройства и извлечём ключевые метрики:

import torch if torch.cuda.is_available(): stats = torch.cuda.memory_stats(device=0) keys = [ "allocated_bytes.all.peak", "reserved_bytes.all.peak", "active_bytes.all.current" ] for key in keys: if key in stats: print(f"{key}: {stats[key]}") else: print("CUDA недоступна")

Результат выполнения кода:

"allocated_bytes.all.peak: 4000000" "reserved_bytes.all.peak: 4194304" "active_bytes.all.current: 4000000"

Ключевые метрики: пик выделенной памяти, пик зарезервированной памяти и текущая активная память.

Пример

Используем статистику для мониторинга памяти внутри цикла обучения:

import torch if torch.cuda.is_available(): model = torch.nn.Linear(10, 10).cuda() data = torch.randn(100, 10, device='cuda') for step in range(3): output = model(data) loss = output.sum() loss.backward() stats = torch.cuda.memory_stats() allocated = stats.get("allocated_bytes.all.current", 0) reserved = stats.get("reserved_bytes.all.current", 0) print(f"Шаг {step}: выделено {allocated} байт, зарезервировано {reserved} байт") # Очистка градиентов для следующей итерации model.zero_grad() else: print("CUDA недоступна")

Результат выполнения кода:

"Шаг 0: выделено 2080 байт, зарезервировано 2097152 байт" "Шаг 1: выделено 2080 байт, зарезервировано 2097152 байт" "Шаг 2: выделено 2080 байт, зарезервировано 2097152 байт"

Статистика помогает отслеживать стабильность потребления памяти на протяжении обучения.

Смотрите также

  • функцию memory_allocated,
    которая возвращает текущий объём выделенной памяти
  • функцию memory_reserved,
    которая возвращает объём зарезервированной памяти
  • функцию max_memory_allocated,
    которая возвращает пик выделенной памяти
  • функцию empty_cache,
    которая освобождает кэш памяти CUDA
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить