본문 바로가기
Deep learning/Pytorch

[pytorch] Multi GPU-DistributedDataParallel와 Horovod사용하기

by min0114 2022. 8. 6.

여러대가 장착된 GPU를 딥러닝을 돌리다보면 nvidia-smi 를 통해 GPU Util이 아주 낮은경우를 볼 수 있다. 

 

GPU Util을 향상시키기 위해

1. DistributedDataParalle와 DistributedSampler 를 통해서 설정 하는 것과 

2. Horovod 라이브러리를 사용하는 방법이 있다. 

 

 

먼저 DistributedDataParalle와 DistributedSampler를 통해서 먼저 dataloader 하기전에 sampler를 만들어서 sampler인자값에 만들어준 sampler를 넣는다. 

사용 예시는 아래와 같다. 

from torch.utils.data.distributed import DistributedSampler
from torch.utils.data import DataLoader

train_dataset = Detection_dataset(data_dir=DATA_DIR,phase="train", transform=train_tranformer)
train_sampler = DistributedSampler(train_dataset)
trainDataset = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=False,
         	   num_workers=NUM_WORKERS, pin_memory=True, sampler=train_sampler,
               worker_init_fn=seed_worker)

 

하지만 DistributedDataParalle를 사용하기 위해 고려해야할 점이 많다. 이에 두번째 방법이 보다 간편할 수 있다. 

 

horovod는 보다 간단하게 라이브러리를 사용할 수 있다. 

 

* gpu가 장착되있는 컴퓨터면 아래와 같이 

HOROVOD_GPU_OPERATIONS=NCCL pip install horovod

* cpu일 경우 아래와 같이 설치해 주면 된다. 

pip install horovod

 

 

https://github.com/horovod/horovod#install

 

GitHub - horovod/horovod: Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.

Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet. - GitHub - horovod/horovod: Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.

github.com

 

 

파이토치를 사용하는 경우 horovod의 사용방법은 아래 사이트에서 자세히 확인 할 수 있다. 

 

https://horovod.readthedocs.io/en/stable/pytorch.html

 

Horovod with PyTorch — Horovod documentation

Horovod with PyTorch To use Horovod with PyTorch, make the following modifications to your training script: Run hvd.init(). Pin each GPU to a single process. With the typical setup of one GPU per process, set this to local rank. The first process on the se

horovod.readthedocs.io

 

반응형

댓글