ある種の高レベルのコードがあるので、モデルのトレーニングなどはpipeline_network
クラスによってラップされています。私の主な目標は、すべての新しい折り目で新しいモデルをトレーニングすることです。
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)
しかし、それから私は2倍に進み、すべてがgpuメモリから失敗します:
RuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generic/THCStorage.cu:58
エポックの終わりに、私は手動でそのパイプラインを運なしで削除しようとしました:
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
どのようにpytorchをリセットしてから次のフォールドに進むことができますか?
del
でオブジェクトを削除してから、torch.cuda.empty_cache()
を適用してください。この操作の後で、再利用可能なメモリが解放されます。