읽기일기

Deep Learning with PyTorch: A 60 Minutes Blitz (5) – Optional: Data Parallelism

http://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html

Deep Learning with PyTorch: A 60 Minute Blitz

Optional: Data Parallelism

작성자: Sung Kim, Jenny Kang

이 튜토리얼에서는 DataParallel을 이용해서 여러 GPU를 어떻게 활용하는지 배울 것입니다.

PyTorch에서 GPU를 사용하는 것은 매우 쉽습니다. 그냥 모델을 GPU로 보내기만 하면 됩니다.

다음, 모든 tensor를 GPU로 올릴 수 있습니다.

사실은 mytensor.gpu()를 하는 것만으로는 텐서를 GPU로 올려주질 않습니다. 새로운 tensor로 할당을 해준 뒤, GPU에서 사용해야 합니다.

전방 전파, 역전파 작업을 여러 GPU에서 실행하는 것은 많이들 쓰는 환경입니다. 하지만 Pytorch는 하나의 GPU만을 사용하도록 기본값이 설정되어있습니다. 여러 개의 GPU를 이용해서 연산을 하기 위해서는 모델을 병렬로 실행하도록 만들어주어야 합니다. 이를 위해 DataParallel을 사용하면 됩니다.

이것이 이 튜토리얼에 핵심입니다. 이제 이것에 대해 더 자세히 알아봅시다.

imports and parameters

PyTorch 모듈을 import 하고 파라미터를 정의합시다.

Dummy DataSet

가짜 랜덤 데이터셋을 만듭니다. 그냥 getitem을 구현해버리면 됩니다.

Simple Model

데모를 해보기 위해서, 입력을 받으면 선형 연산을 하고 아웃풋을 주는 간단한 모델을 사용할 것입니다. 하지만 DataParallel은 CNN, RNN, Capsule Net 등 어떤 모델에도 적용할 수 있습니다.

모델 내부에는 입력과 출력 tensor의 크기를 확인할 수 있도록 화면에 출력하는 부분을 넣었습니다. Batch rank가 0일 때 무엇이 출력되는지 주의깊게 봅시다.

Create Model and DataParallel

이것이 이 튜토리얼에서 중요한 부분입니다. 먼저 모델의 인스턴스를 만들고 여러개의 GPU가 있는지 확인합니다. GPU가 여러개 있다면, 우리 모델을 nn.DataParallel로 래핑(wrapping)합니다. 그러면 model.gpu()를 실행했을 때 모델이 여러 GPU로 모두 올라갑니다.

Run the Model

이제 입력과 출력 tensor의 크기를 보겠습니다.

Out:

Results

입력 출력의 배치를 30으로 할 경우 모델 역시 30개의 입/출력을 가질 것입니다. 하지만 여러개의 GPU를 가진 경우에는 다음과 같은 결과를 얻을 것입니다.

2 GPUs

2개를 가질 경우 :

3 GPUs

3개의 GPU를 가질 경우 :

8 GPUs

8개를 가지고 있을 경우 :

Summary

DataParallel은 자동적으로 데이터를 나누어서 여러 GPU에 있는 각 모델에 작업을 시킵니다. 각 모델의 일이 끝나면 Data Parallel은 결과를 모아 합친 뒤, 사용자에게 보냅니다.

더 많은 정보는 다음을 보세요. http://pytorch.org/tutorials/beginner/former_torchies/parallelism_tutorial.html

 


Tags:
Add a Comment Trackback