Python 如何从gpu内存中释放所有内存

Python 如何从gpu内存中释放所有内存,python,python-3.x,out-of-memory,gpu,pytorch,Python,Python 3.x,Out Of Memory,Gpu,Pytorch,我有一些高级代码,所以模型训练等都是由管道网络类包装的。我的主要目标是培养新的模式,每一个新的折叠 for train_idx, valid_idx in cv.split(meta_train[DEPTH_COLUMN].values.reshape(-1)): meta_train_split, meta_valid_split = meta_train.iloc[train_idx], meta_train.iloc[valid_idx] pipelin

我有一些高级代码,所以模型训练等都是由
管道网络
类包装的。我的主要目标是培养新的模式,每一个新的折叠

for train_idx, valid_idx in cv.split(meta_train[DEPTH_COLUMN].values.reshape(-1)):

        meta_train_split, meta_valid_split = meta_train.iloc[train_idx], meta_train.iloc[valid_idx]

        pipeline_network = unet(config=CONFIG, suffix = 'fold' + str(fold), train_mode=True)
但接下来我要讨论第二个问题:gpu内存中的所有故障:

RuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generic/THCStorage.cu:58
在epoch结束时,我尝试手动删除该管道,但没有成功:

 def clean_object_from_memory(obj): #definition
    del obj
    gc.collect()
    torch.cuda.empty_cache()

clean_object_from_memory( clean_object_from_memory) # calling
打电话也没用:

def dump_tensors(gpu_only=True):
        torch.cuda.empty_cache()
        total_size = 0
        for obj in gc.get_objects():
            try:
                if torch.is_tensor(obj):
                    if not gpu_only or obj.is_cuda:
                        del obj
                        gc.collect()
                elif hasattr(obj, "data") and torch.is_tensor(obj.data):
                    if not gpu_only or obj.is_cuda:
                        del obj
                        gc.collect()
            except Exception as e:
                pass

如何重置Pytork,然后继续下一次折叠?

尝试使用
del
删除对象,然后应用
torch.cuda.empty_cache()
。此操作后,可重用内存将被释放。

我也建议执行此步骤。但你说得对,这是主要的一步