BLOG

AWS Cloud 에서 GPU를 사용하여 확장가능한 멀티노드 딥 러닝 훈련하기
작성일: 2018년 8월 8일

산업적 크기의 데이터셋에 대한 심층 신경 네트워크의 광범위한 도입에 대한 주요 도전과제는 이를 훈련시키는 데 필요한 시간과 자원입니다. 2012 년 ImageNet 대규모 시각 인식 공모전 (ILSVRC)에서 우승하였고 심층 신경 네트워크의 최신 호황을 누려온 AlexNet은 120만 개의 이미지와 1000개 범주의 데이터셋을 훈련시키기 위해 거의 일주일이 걸렸습니다. 기계 학습 모델을 개발하고 최적화하는 것은 반복적인 과정입니다. 여기에는 새로운 데이터로 모델을 자주 재훈련하고 예측 정확도를 높이기 위해 모델 및 훈련 매개 변수를 최적화하는 작업이 포함됩니다. 2012년부터 GPU 성능이 크게 향상되었지만 훈련 시간을 몇 주에서 몇 시간으로 줄이면서 ML (Machine Learning) 실무자는 모델 훈련 시간을 더욱 단축할 수 있는 기회를 모색합니다. 동시에 예측 정확도를 높이기 위해 모델이 점점 커지고 복잡해짐에 따라 컴퓨팅 리소스에 대한 요구가 증가하고 있습니다.

심층 신경 네트워크를 훈련할 때 클라우드는 기본 옵션이 되어 수요에 맞게 확장할 수 있으므로 민첩성이 향상됩니다. 또한 클라우드를 사용하면 시작을 간편하게 할 수 있으며 종량제 사용량 모델을 제공합니다.

이 글에서는 분산/ 다중 노드 동기식 훈련을 사용하여 딥 러닝 훈련 시간을 최소화하기 위해 AWS 인프라를 최적화하는 방법을 보여줍니다. 저희는 ImageNet 데이터셋과 함께 ResNet-50과 NVIDIA Tesla V100 GPU가있는 Amazon EC2 P3 인스턴스를 사용하여 훈련 시간을 벤치마킹합니다. 단 8 개의 P3.16x large 인스턴스 (64 V100 GPU)를 사용하여 약 50 분 내에 90 에포치(epoch)의 표준 훈련 일정을 통해 75.5 % 이상의 top-1 유효성 검증 정확도로 모델을 훈련합니다.

ML 실무자는 모델을 구축하고 훈련하기 위해 다양한 기계 학습 프레임워크를 사용하기 때문에 Apache MXNet 및 Horovod와 함께 TensorFlow를 사용하여 성능 결과를 보여줌으로써 AWS Cloud의 다양성을 입증합니다. Amazon EC2 P3 인스턴스를 사용하는 고객은 다양한 모델 유형 (CNN, RNN 및 GAN)을 훈련할 수있는 유연성을 보유하고 있으며 다양한 프레임워크와 모델 유형을 효율적으로 확장할 수있는 여기에 설명된 고성능 컴퓨팅 아키텍처가 필요합니다.

 

달성된 성과 및 결과

8 개의 P3.16xlarge 인스턴스를 사용하여 달성할 수 있었던 성능 및 유효성 검사의 정확도 리뷰를 시작하겠습니다.

프레임워크 훈련할 시간 훈련 처리량 Top-1 유효성 검증 정확도 달성 효울성 확장
Apache MXNet 47min ~44,000 Images/Sec 75.75% 92%
TensorFlow + Horovod 50min ~41,000 Images/Sec 75.54% 90%

훈련할 시간 – 8 개의 P3.16xlarge 인스턴스를 사용하면 MXNet을 사용하는 경우 31 초, TensorFlow를 사용하는 경우 33 초의 평균 시간당 에포치(epoch)를 확인할 수 있습니다. 이것은 90 에포치(epoch)에 걸쳐 생성되고 ImageNet 데이터셋에서 각각 75.75 %와 75.54 %의 Top-1 유효성 검증 정확도를 기록하는데 MXNet의 경우 47분, TensorFlow의 경우 50분 정도의 wall clock 훈련 시간이 소요된다고 해석됩니다. 이 시간은 각 에포치(epoch)의 훈련과 체크포인팅 시간을 포함하는 프레임워크를 의미합니다. MXNet의 훈련 작업을 TensorFlow의 표준 워크플로우와 일관되게 유지하기 위해 각 에포치(epoch)가 끝나는 시점이 아니라 훈련이 끝난 시점에서 검증을 수행합니다.

멀티 노드 훈련 처리량– GPU당 256의 배치 크기와 P3.16xlarge 인스턴스 8 개 (64 V100 GPU)와 혼합된 정밀도 (총 배치 크기 ~ 16k)를 사용하여 훈련하였고 TensorFlow의 41k 이미지 / 초와 MXNet의 44k 이미지 / 초에 적중하는 선형 정밀도를 관찰했습니다. TensorFlow의 경우보다 나은 확장 효율성을 위해 기본 매개 변수 서버 방식 대신 Horovod라는 분산 훈련 프레임워크를 사용했습니다[6]. MXNet의 경우 고유 매개 변수 서버 방식을 사용했으며 MXNet의 확장 효율성은 단일 노드에서 ‘디바이스’ 유형의 kvstore를 사용하고 여러 노드에서 ‘dist_device_sync’ 유형을 사용하여 계산되었습니다. MXNet을 통한 분산형 훈련을 위한 all-reduce 기반 접근법을 사용하는 향후 작업으로 성능을 더욱 향상시킬 수 있습니다.

유효성 검증 정확도 – 다음 그래프는 P3.16xlarge 인스턴스 8 개를 사용하여 ImageNet에서 Resnet50을 훈련하는 동안의 유효성 검증 정확도 1 위를 보여줍니다. MXNet과 TensorFlow 모두 비슷한 훈련 설정을 사용했기 때문에 두 프레임워크의 수렴 특성이 매우 유사하다는 것을 알 수 있었습니다.

클러스터 아케틱쳐

저희가 사용한 고성능 컴퓨팅 클러스터의 예가 다음과 같습니다. Horovod와 TensorFlow를 함께 사용하면 매개 변수 서버의 M4 인스턴스가 필요하지 않습니다.

컴퓨팅 클러스터의 RAM을 스토리지 대상으로 사용하여 공유 스토리지를 만들었습니다. 병렬 파일 시스템 (BeeGFS)을 사용하여 RAM 대상을 각 노드의 글로벌 네임스페이스(namespace)로 노출합니다. 이 방법을 사용하거나 Amazon EBS, Amazon S3 또는 Amazon EFS 스토리지 서비스를 사용하여 훈련 데이터를 소스로 사용할 수 있습니다.

컴퓨팅 클러스터는 글로벌 네임스페이스(namespace)에서 데이터를 로드하고 (자르기, 뒤집기 또는 흐리게 하기를 사용하여) 증가시킨 다음 순방향 패스, 역 전파, 그라데이션 동기화 및 가중치 업데이트를 수행합니다. 8 개의 NVIDIA Tesla V100 GPU, 64 개의 가상 CPU, 488 GB의 메모리 및 25 Gb / s의 네트워크 대역폭을 갖춘 8 개의 p3.16xlarge 인스턴스를 사용합니다.

MXNet은 별도의 프로세스가 매개 변수 서버의 역할을 하는 매개 변수 서버 방식을 사용하여 각 작업자 노드의 그라데이션을 집계하고 가중치 업데이트를 수행합니다. 개발하는 동안 매개 변수 서버로만 작동하는 추가 노드를 갖는 것이 더 효과적이라는 것을 발견했습니다. 우리는 M4.16xl 인스턴스를 선택하여 P3 인스턴스와 2 : 1 비율로 이 역할을 수행했습니다. 이 조합을 통해 훈련 처리량을 거의 선형으로 조정할 수 있습니다. TensorFlow의 경우 Horovod를 사용하여 TensorFlow 에서 기본 매개 변수 서버 접근 방식을 사용하는 것보다 많은 노드에서 훈련을 확장하는 것이 훨씬 더 우수함을 발견했습니다.[6]

 

훈련 접근법

신경 네트워크를 빠르게 훈련하려면 종종 많은 노드에서 큰 배치 크기를 사용해야 합니다. 실제로 큰 배치 크기를 사용하면 일반화 능력이 약간 손실된다는 사실이 관찰되었습니다[4]. 따라서 큰 배치 크기를 사용하면 모델이 더 낮은 배치 크기에서 동일한 정확도에 도달하도록 특별한 주의가 필요합니다. 다음으로, 이 모델을 이 규모로 훈련시키는 접근법을 설명하겠습니다.

모델

MXNet과 TensorFlow에서 Resnet50 v1 모델을 사용했습니다. 병목 블록이 1×1 계층 대신 3×3 길쌈 계층에서 피쳐(feature) 맵 크기를 다운 샘플링하는 버전을 사용했습니다. 이렇게 하면 더 많은 정보가 보존되고 약간 더 높은 정확도로 훈련할 수 있습니다. 이 버전에 대해 상세히 논의하는 공식적인 문헌은 없지만, 이 버전은 TensorFlow 및 PyTorch와 같은 프레임워크의 예제에서 표준으로 사용되는 몇 개의 논문에서 언급되었습니다 ([1] [2]).

데이터 사전 처리 및 기능 보강

데이터 병렬 처리를 사용하여 각 GPU가 자체 모델 데이터셋으로 전체 모델을 훈련하도록 했습니다. 이를 가능하게 하기 위해 각 미니 배치는 각 GPU 당 하나에 64 개 부분으로 나누어집니다. 그런 다음 각 작업자는 데이터 조각을 로드하고 일부 데이터 기능을 수행합니다. 데이터 증가는 훈련 데이터셋을 증가시키고 네트워크를 훈련할 때 정규화 효과를 제공합니다. 이러한 정규화는 대규모 배치 크기로 훈련할 때 과도한 경향을 퇴치하는 데 도움이 됩니다 [4]. 훈련 도중 영상 비율을 특정 범위 (3./4. , 4./3.)로 유지하면서 원래 이미지를 224 × 224 크기로 무작위로 잘라 냈습니다. 그 다음에 수평의 이미지를 무작위로 뒤집었습니다. MXNet에서는 희미한 채도, 색조 및 밝기의 형태로 몇 가지 추가 기능을 수행하고 PCA (Principal Component Analysis) 배포본에서 샘플링된 노이즈를 추가했습니다. 이점이 MXNet 훈련 작업이 비슷한 훈련 일정으로 보다 높은 유효성 검사 정확도를 달성하는 데 도움이 되었다고 생각합니다. 두 경우의 유효성 확인 이미지는 단지 가운데를 자르고 무작위 확대 과정을 거치지는 않았습니다. 훈련 및 유효성 확인 이미지는 전체 데이터셋에서 이미지의 평균을 뺀 값으로 정규화되었습니다.

최적화

이전 연구[3]와 일치하여 학습률은 미니 배치 크기를 기준으로 조정할 때 중요한 최적화 매개 변수라는 것을 알았습니다. 미니 배치 크기가 256 이미지, 0.1의 학습 속도, 0.9의 가속도 및 0.0001의 중량 감소인 Volta V100 GPU의 경우, 최적화 비율로 Nesterov Accelerated Gradient Descent(Nesterov 가속 기울기 하강)를 사용하였습니다. 하나의 GPU에서 64 GPU (8 개의 P3.16xlarge 인스턴스)로 확장함에 따라 GPU당 이미지 수를 256(한 개의 GPU당 미니배치 크기는 256, 64 GPU는 16,384)에 일정하게 유지하면서 사용된 GPU 수 (1 GPU는 0.1, 64 GPU는 6.4)에 따라 학습 속도를 선형적으로 조정했습니다. 중량 감소 및 가속도 매개 변수는 GPU 수가 증가함에 따라 변경되지 않았습니다.

큰 학습 속도로 최적화 불안정성을 극복하기 위해 우리는 워밍업 계획[3]을 사용했습니다. 학습 속도는 점진적으로 10 개 epoch(에포치)에 0.001에서 6.4까지 선형적으로 확대되었습니다. 10 개의 epoch(에포치) 이후에, 학습률은 다항식 (degree = 2) 붕괴 계획에 의해 다음 80 epoch(에포치)동안 망가졌습니다. 모든 모델은 사용된 노드 수에 관계없이 총 90 개 epoch(에포치)에 대해 훈련을 받았습니다. 각 잔여 블록의 최종 배치 표준 층의 감마 매개 변수를 0으로 초기화하면 큰 배치 크기에서 수렴에 도움이 될 수 있음이 밝혀졌습니다 [3]. 이점이 정확성을 향상시키는 데 도움이 되었다는 것을 관찰했습니다. 다른 시나리오에서 잠재적으로 사용될 수 있는 표준 접근법을 제공하기 위해 하이퍼 매개 변수를 추가로 변경하지 않았습니다.

혼합 정밀도

P3 인스턴스에서 Nvidia Volta GPU가 지원하는 가속화된 float16 연산을 활용하기 위해 두 프레임워크에서 혼합된 정밀도를 사용하여 훈련했습니다. 이를 통해 훈련 시간을 약 50 % 단축 할 수 있었습니다. 흥미롭게도 TensorFlow는 손실 범위를 1024 배로 확장하면서 범위를 벗어나 발산하지 않도록 그라데이션을 계산해야 했습니다. 그러나 MXNet은 손실 확장이 필요하지 않았습니다. 손실 스케일링 및 작동 방식에 대한 자세한 내용은 이 백서 [5]에서 확인할 수 있습니다.

 

재현 단계

P3 인스턴스를 광범위하고 대규모로 사용할 수 있으므로 전 세계 개발자 및 데이터 과학자가 이 작업을 활용하고 훈련 시간을 단축 할 수 있기를 바랍니다. 이 모델을 훈련하기 위해 사용된 스크립트와 여기에 설명된 클러스터를 설정하기 위한 스크립트를 다음 GitHub 저장소(https://github.com/aws-samples/deep-learning-models)에서 공유합니다. 그것들을 확인하고 딥 러닝 작업량을 위해 클라우드의 파워를 활용할 것을 권장합니다.

앞에서 설명한 성능 수치는 다음 주요 구성 요소가 포함된 스택을 사용합니다.

Ubuntu 16.04, NVIDIA 드라이버 396, CUDA 9.2, cuDNN 7.1, NCCL 2.2, OpenMPI 3.1.1, Intel MKL 및 MKLDNN, TensorFlow 1.9 및 Horovod 0.13, MXNet 1.3b (현재 마스터, v1.3으로 곧 출시 될 예정)

 

단계

  1. 앞에서 설명한 hpc-cluster에서 설명한 저장소의 AWS CloudFormation과 이를 사용하는 방법에 대한 지침을 사용하여 P3 클러스터를 설정하는 스크립트를 제공합니다. 스크립트와 함께 CloudFormation 템플릿을 사용하여 클러스터를 쉽게 시작하고 실행할 수 있습니다.
  2. ImageNet 데이터셋은 http://www.image-net.org/에서 제공됩니다. 원본 데이터셋 (ILSVRC2012_img_train.tar.gz 및 ILSVRC2012_img_val.tar.gz)에서 다음 파일을 등록하고 다운로드 해야합니다. 여기에는 1000 개의 클래스 중 원본 1.28M 이미지가 포함됩니다. utils 디렉토리에 제공된 스크립트를 사용하여 ImageNet 이미지를 처리하여 MXNet용 RecordIO 파일 또는 Tensorflow용 TF 레코드를 만듭니다.
  3. 이제 저장소의 모델과 스크립트를 사용하여 AWS에서 훈련 작업을 시작할 수 있습니다.

 

향후 업무

이 작업의 결과는 AWS의 뛰어난 성능과 유연성 및 확장 가능한 아키텍처를 사용하여 딥 러닝 네트워크를 신속하게 훈련하는 데 사용될 수 있음을 보여줍니다. 이 글에 설명된 구현은 추가 최적화를 위한 여지가 있습니다. 8 개의 NVIDIA V100 GPU가 있는 단일 Amazon EC2 P3 인스턴스는 초수렴 및 기타 고급 최적화 기술을 사용하여 약 3 시간 만에 ImageNet 데이터로 ResNet50을 훈련할 수 있습니다 (NVIDIA,  Fast.AI). 유사한 기술을 적용하여 분산 구성에서 훈련 시간을 절약 할 수 있다고 생각합니다.

더 많은 성능을 추출할 수 있는 또 다른 영역은 확장 효율성을 향상시키는 것입니다. 마지막으로, 모든 인기 있는 프레임워크를 동등하게 지원하려는 저희의 바람에 대응하기 위해 이제는 PyTorch 및 Chainer와 같은 다른 프레임워크에서 유사한 결과를 복제하는 데 중점을 둘 것입니다.

 

References

[1] Xie, Saining, Ross Girshick, Piotr Dollár, Zhuowen Tu, and Kaiming He. “Aggregated residual transformations for deep neural networks.” In Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on, pp. 5987-5995. IEEE, 2017.
[2] Hu, Jie, Li Shen, and Gang Sun. “Squeeze-and-excitation networks.” arXiv preprint arXiv:1709.01507 7 (2017).
[3] Goyal, Priya, Piotr Dollár, Ross Girshick, Pieter Noordhuis, Lukasz Wesolowski, Aapo Kyrola, Andrew Tulloch, Yangqing Jia, and Kaiming He. “Accurate, large minibatch SGD: training imagenet in 1 hour.” arXiv preprint arXiv:1706.02677 (2017).
[4] Keskar, Nitish Shirish, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, and Ping Tak Peter Tang. “On large-batch training for deep learning: Generalization gap and sharp minima.” arXiv preprint arXiv:1609.04836 (2016).
[5] Micikevicius, Paulius, Sharan Narang, Jonah Alben, Gregory Diamos, Erich Elsen, David Garcia, Boris Ginsburg et al. “Mixed precision training.” arXiv preprint arXiv:1710.03740(2017).
[6] Sergeev, Alexander, and Mike Del Balso. “Horovod: fast and easy distributed deep learning in TensorFlow.” arXiv preprint arXiv:1802.05799 (2018).

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/scalable-multi-node-deep-learning-training-using-gpus-in-the-aws-cloud/

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.