다중 GPU 환경에서 딥러닝을 학습할 때 효율적으로 하드웨어를 사용하는 방법
Single vs Multi
GPU vs Node(System)
Single Node Single GPU (한 개의 컴퓨터의 한 개 GPU)
Single Node Multi GPU (한 개의 컴퓨터의 여러 개 GPU)
Multi Node Multi GPU (여러 개의 컴퓨터의 여러 개 GPU)
우리는 주로 Single Node Multi GPU
class ModelParallelResNet50(ResNet):
def __init__(self,*args,**kwargs):
super(ModelParallelResNet50,self).__init__(
Bottleneck,[3,4,6,3],num_classes=num_classes,*args,**kwargs)
self.seq1 = nn.Sequential(self.conv1,self.bn1,self.relu...).to('cuda:0')
self.seq2 = nn.Sequential(self.layer3,self.layer4...).to('cuda:1')
self.fc.to('cuda:1')
def forward(self,x):
x = self.seq2(self.seq1(x).to('cuda:1'))
return self.fc(x.view(x.size(0),-1))
# encapsule model
parallel_model = torch.nn.DataParallel(model)
predictions = parallel_model(inputs)
loss = loss_fn(predictions,labels)
loss.mean().backward()
optimizer.step()
predictions = parallel_model(inputs)
train_sampler = torch.utils.data.distributed.DistributedSampler(train_data)
shuffle = False
pin_memory = True
trainloader = torch.utils.data.DataLoader(train_data,batch_size=20,shuffle = False, pin_memory = pin_memory,num_workers=3,
sampler=train_sampler)