여러대가 장착된 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
파이토치를 사용하는 경우 horovod의 사용방법은 아래 사이트에서 자세히 확인 할 수 있다.
https://horovod.readthedocs.io/en/stable/pytorch.html
반응형
댓글