현대 딥러닝은 엄청난 데이터와의 싸움이라고 볼 수 있다.
GTP-3모델은 천억개의 데이터.. 많기도 하다.
그러니 이 엄청난 데이터를 처리할 수 있는 장비도 딥러닝에 있어서 실력(?)이라고 볼 수 있다. 즉 GPU를 얼마나 확보했는지가 딥러닝에 있어서는 중요한 이슈라고 볼 수 있다.
Single : 1개 사용 vs Multi : 2개 이상 사용
GPU vs Node : Node(System)는 1대의 컴퓨터를 의미
Single Node Single GPU : 1대의 컴퓨터에서 1개의 GPU 사용
Single Node Multi GPU : 1대의 컴퓨터에서 여러 개의 GPU 사용
Multi Node Multi GPU : 서버실에서 여러 개의 GPU 사용
class ModelParallelResNet50(ResNet):
def __init__(self, *args, **kwargs):
super(ModelParallelResNet50, self).__init__(Bottleneck,
[3, 4, 6, 3], num_classes=num_classes, *args, **kwargs)
# 첫번째 모델을 cuda 0에 할당
self.seq1 = nn.Sequential(
self.conv1, self.bn1, self.relu, self.maxpool, self.layer1, self.layer2
).to('cuda:0')
# 두번째 모델을 cuda 1에 할당
self.seq2 = nn.Sequential(
self.layer3, self.layer4, self.avgpool,).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))
PyTorch에서는 아래 두 가지 방식을 제공
→ DataParallel, DistributedDataParallel