DataParallel – 단순히 데이터를 분배한후 평균을 취함
→ GPU 사용 불균형 문제 발생, Batch 사이즈 감소 (한 GPU가 병목), GIL
parallel_model = torch.nn.DataParallel(model)
train_sampler = torch.utils.data.distributed.DistributedSampler(train_data)
shuffle = False
pin_memory = True
trainloader = torch.utils.data.DataLoader(train_data, batch_size=20, shuffle=True
pin_memory=pin_memory, num_workers=3,
shuffle=shuffle, sampler=train_sampler)
result = tune.run(
partial(train_cifar, data_dir=data_dir),
resources_per_trial={"cpu": 2, "gpu": gpus_per_trial},
config=config,
num_samples=num_samples,
scheduler=scheduler,
progress_reporter=reporter)
batch_size 줄이고 -> GPU clean -> RUN
GPUUtil
만약에 for loop 돌면서 gpu가 너무 찬다 -> 데이터가 잘못 사용되고 있다라고 체크
torch.cuda.empty_cache()
backward할때 버퍼에 쌓여있음 gpu내부에 남는 메모리를 가져와줌
학습전에 empty_cache넣어주는 것도 좋다.
training loop에서 tensor로 축적되는 변수 확인
1d tensor를 python기본객체로 변환 loss.item
del사용
필요없는 변수 삭제
batch size 1로해서 실험
torch.no_grad()
with torch.no_grad
: inference할때 사용
이외에도 lstm같은 사이즈큰모델 자제, cnn torch.summary로 크기 잘맞는지확인, tensor float precision 16bit로 줄이기