Функция 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