PyTorch에서 동기화된 배치 정규화(Synchronized Batch Normalization)는 다중 GPU 환경에서 모델 훈련 시 유용한 기술입니다. 이 문서에서는 이를 구현하는 방법과 활용 사례를 소개합니다.
프로젝트 소개
동기화된 배치 정규화는 PyTorch의 기본 배치 정규화와 달리 모든 디바이스 간에 평균과 표준편차를 공유하여 일관성을 유지합니다. 특히 `nn.DataParallel`을 사용하는 경우, 모든 GPU에서 동일한 배치 통계를 사용할 수 있게 해줍니다.프로젝트 시작 가이드
설치
먼저 저장소를 클론하고 필요한 의존성을 설치합니다:git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch.git
cd Synchronized-BatchNorm-PyTorch
pip install -r requirements.txt
사용 예제
다음은 동기화된 배치 정규화를 모델에 적용하는 간단한 예제입니다:import torch
import torch.nn as nn
from sync_batchnorm import SynchronizedBatchNorm2d
class BasicNet(nn.Module):
def __init__(self):
super(BasicNet, self).__init__()
self.conv_layer = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.norm_layer = SynchronizedBatchNorm2d(16, momentum=0.99, eps=1e-5)
self.activation = nn.ReLU()
def forward(self, inputs):
x = self.conv_layer(inputs)
x = self.norm_layer(x)
return self.activation(x)
model = BasicNet()
model = nn.DataParallel(model)
input_tensor = torch.randn(64, 3, 64, 64)
output = model(input_tensor)
print(output.shape) # 출력: torch.Size([64, 16, 64, 64])
활용 사례 및 최적 실천 방법
활용 사례
동기화된 배치 정규화는 이미지 분류나 객체 탐지와 같은 작업에서 특히 유용합니다. CIFAR-10 데이터셋에서 이를 사용하는 예제는 다음과 같습니다:cd Synchronized-BatchNorm-PyTorch/examples
python cifar.py --gpu_id 0 1 --data_path /datasets --batch_size 128 --use_sync_bn