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

Функция cuda.ipc_collect

Функция cuda.ipc_collect выполняет принудительный сбор мусора для межпроцессного взаимодействия (IPC) в CUDA. Она освобождает память, которая была выделена для IPC, но больше не используется. Функция не принимает никаких параметров.

Синтаксис

torch.cuda.ipc_collect()

Пример

Давайте выполним принудительный сбор мусора для IPC:

import torch torch.cuda.ipc_collect()

Пример

Давайте выполним IPC сбор после выделения и удаления памяти:

import torch # Создаём тензор на GPU t = torch.tensor([1, 2, 3, 4, 5], device='cuda') print(t) # Удаляем тензор del t # Принудительно собираем мусор IPC torch.cuda.ipc_collect() print("IPC collection completed")

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

tensor([1, 2, 3, 4, 5], device='cuda:0') "IPC collection completed"

Пример

Давайте выполним IPC сбор в сочетании с очисткой кэша:

import torch # Создаём большой тензор на GPU t = torch.randn(1000, 1000, device='cuda') # Получаем информацию о памяти до очистки allocated_before = torch.cuda.memory_allocated() print(f"Before: {allocated_before / 1024**2:.2f} MB") # Удаляем тензор del t # Очищаем кэш torch.cuda.empty_cache() # Выполняем IPC сбор torch.cuda.ipc_collect() # Получаем информацию о памяти после очистки allocated_after = torch.cuda.memory_allocated() print(f"After: {allocated_after / 1024**2:.2f} MB")

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

"Before: 3.81 MB" "After: 0.00 MB"

Пример

Давайте выполним IPC сбор в многопроцессорном контексте:

import torch import torch.multiprocessing as mp def worker(): # Создаём тензор для IPC t = torch.tensor([1, 2, 3, 4, 5], device='cuda') # Получаем IPC дескриптор ipc_handle = t.storage()._share_cuda_() del t # Собираем мусор IPC torch.cuda.ipc_collect() return ipc_handle if __name__ == '__main__': mp.set_start_method('spawn', force=True) ctx = mp.get_context('spawn') p = ctx.Process(target=worker) p.start() p.join() print("IPC collection done in child process")

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

"IPC collection done in child process"

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

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