python

[CUDA] cuda 정리하기

jiheek 2022. 5. 27. 22:18

CUDA - GPU로 push, synchronize, 병렬처리 등.. 대해 알아보자

 

CUDA(computed unified device architecture)는 GPU에서 수행하는 병렬 처리 알고리즘을 C 프로그래밍 언어 등을 사용해서 작성할 수 있도록 하는 nvidia에서 개발 중인 GPGPU 기술이다.

CUDA 흐름 예시

1. 메인 메모리를 GPU 메모리로 복사 --> 2. CPU가 GPU에 프로세스 지시

3. GPU가 각 코어에 병렬 수행 --> 4. GPU 메모리부터 결과물을 메인 메모리로 다시 복사

(위 설명은 wiki 출처)

 

  • 데이터 GPU로 push하기

데이터를 GPU 메모리로 push하기 위해서는 data = data.to('cuda')를 사용하면 되고, print(data.device)를 통해 push한 device를 확인할 수 있다.

data = data.to('cuda')
print(data.device)

 

  • CUDA synchronize

CUDA operations은 asynchronous하게 (비동기적으로) 동작하기 때문에, DataLoader가 CUDA operation이 끝나길 기다려야 하고, 잘못된 결과를 낼 수도 있다.

따라서 모델의 forward, backward 전후에 torch.cuda.synchronize() 을 사용해주어 수동적으로 동기화해주는 것이 좋다. 

 

 

병렬처리

  • nn.DataParallel

nn.DataParallel은 forward pass에서 각 GPU 디바이스에 모델을 복제하고, batch 차원(dim0)에서 데이터 tensor를 분할하고, 분할된 데이터 덩어리를 각 디바이스에 전달한다.

 

 

  • nn.DistributedDataParallel

각 프로세스는 데이터의 subset을 load할 수 있다. DataPrallel과 DistributedDataparallel(DDP)를 비교했을 때는 DDP가 더 빠르다고 한다. 두 개에 대한 더 자세한 설명과 차이점은 앞으로 알아볼 예정

 

 

-계속 추가중-

 


참고 사이트:

https://ko.wikipedia.org/wiki/CUDA

https://discuss.pytorch.org/t/how-to-load-all-data-into-gpu-for-training/27609/18

 

'python' 카테고리의 다른 글

torch.tensor mul_  (0) 2022.07.21
[pycharm] 단축키 정리  (0) 2022.06.22
[warning] Leaking Caffe2 thread-pool after fork 해결하기  (0) 2022.05.27
[python] Logger class, timezone Seoul  (0) 2022.05.27
[pycharm] debugger- collecting data 에러  (0) 2022.05.27