DataScience
728x90

 

 

데이터셋 : 30프레임 1초짜리 영상 train 610개  test 153 총 용량 1기가 

배치사이즈 2로 한번 학습(Epoch) 하는데 약 7분

총 20번 학습하도록 했는데 그러면 약 140분이 걸립니다..

GPU사용률을 더 올리는 방법을 찾아보고

안된다면 그래픽카드 구매를 고려해봐야겠습니다.

 

배치 처리

배치(batch) 단위로 데이터를 처리하여 GPU 사용률을 향상시킬 수 있습니다. GPU는 병렬 처리를 지원하므로, 여러 데이터 샘플을 동시에 처리하면 GPU 사용률이 높아집니다. 배치 크기(batch size)를 적절히 설정하여 GPU를 효율적으로 활용할 수 있습니다.

 

num_workers ++ (Multi Process Data Loading)

가장 간단히 해결할 수 있는 방법은 data를 가져오는 프로세스를 늘리는 방법입니다. PyTorch는 아래 코드와 같이 DataLoader를 설정할 수 있습니다.

train_dataloader = DataLoader(dataset=train_dataset, num_workers=4, batch_size=16, ...)

 

프로세스 a가 한 배치 데이터를 GPU 올려서 학습하는 동안, 프로세스 b는 다음 배치 데이터를 미리 준비하는 것입니다 (Queue 사용). 이렇게 되면 GPU는 끊임없이 data를 가져올 수 있기 때문에 GPU-Util을 높일 수 있습니다. 당연히, num_workers는 다다익선이라 볼 수 있지만, 모든 코어를 전부 데이터 로드에 사용하게되면, 다른 처리에 딜레이를 일으킬 수 밖에 없습니다.

 적당한 값의 num_workers를 설정해줘야합니다. 

 

num_workers 수 = 가용할cpu 스레드 개수

보통 num_worker는 4x가용 gpu 로 두는게 정석이라고 합니다.

 

GPU 2개 이상 병렬 처리

여러 개의 GPU를 사용하는 경우, 모델을 여러 GPU에 분산하여 병렬 처리를 수행할 수 있습니다. torch.nn.DataParallel 또는 torch.nn.parallel.DistributedDataParallel을 사용하여 모델을 병렬화할 수 있습니다. 이를 통해 여러 GPU의 처리 능력을 활용할 수 있습니다.

profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!