Azure Machine Learning을 사용한 분산 학습

이 문서에서는 분산 학습, 그리고 Azure Machine Learning이 이를 딥 러닝 모델에 맞게 지원하는 방법에 대해 알아봅니다.

분산 학습에서는 모델 학습을 위한 워크로드가 분할되어 작업자 노드라고 불리는 여러 미니 프로세서 간에 공유됩니다. 작업자 노드는 동시에 작동하여 모델 학습 속도를 향상시킵니다. 분산 학습은 기존 기계 학습 모델에 사용할 수 있지만 심층 신경망 학습을 위한 딥 러닝과 같은 컴퓨팅 및 시간 집약적 작업에 더 적합합니다.

딥 러닝 및 분산 학습

분산 학습에는 데이터 병렬 처리모델 병렬 처리라는 두 가지 주요 유형이 있습니다. 딥 러닝 모델에 대한 분산 학습을 위해 PythonAzure Machine Learning SDK는 PyTorch 및 TensorFlow와의 통합을 지원합니다. 둘 다 분산 학습에 데이터 병렬 처리를 사용하는 인기 있는 프레임워크이며 Horovod를 사용하여 컴퓨팅 속도를 최적화할 수 있습니다.

분산 학습이 필요하지 않은 기계 학습 모델의 경우 Python SDK를 사용하여 모델을 학습하는 다양한 방법은 Azure Machine Learning을 사용하여 모델 학습을 참조하세요.

데이터 병렬 처리

데이터 병렬 처리는 두 개의 분산 학습 방법을 구현하는 가장 쉬운 방법이며 대부분의 사용 사례에 충분합니다.

이 방식에서는 데이터가 컴퓨팅 클러스터 또는 서버리스 컴퓨팅에서 사용 가능한 총 노드 수와 동일한 파티션으로 나누어집니다. 모델은 이러한 각 작업자 노드에서 복사되고 각 노드는 데이터의 자체 하위 집합에서 작동합니다. 각 노드에는 학습 중인 모델을 지원할 수 있는 용량이 있어야 합니다. 즉, 전체 모델이 각 노드에 맞아야 합니다.

다음 다이어그램에서는 이 방법을 보여 줍니다.

작업자 노드에 복사된 모델을 보여 주는 데이터 패럴리즘 다이어그램

각 노드는 학습 샘플과 레이블이 지정된 출력에 대한 예측 간의 오류를 독립적으로 계산합니다. 결국 각 노드가 오류를 기반으로 모델을 업데이트하고 모든 변경 내용을 다른 노드에 전달하여 해당 모델을 업데이트해야 합니다. 작업자 노드는 일괄 처리 계산이 끝날 때 모델 매개 변수 또는 그라데이션을 동기화하여 consis텐트 모드l을 학습하는지 확인해야 합니다.

모델 병렬 처리

네트워크 병렬 처리라고도 하는 모델 병렬 처리에서 모델은 서로 다른 노드에서 동시에 실행할 수 있는 서로 다른 부분으로 분할되고 각 모델은 동일한 데이터에서 실행됩니다. 이 메서드의 확장성은 알고리즘의 작업 병렬 처리 정도에 따라 달라지며 데이터 병렬 처리보다 구현하기가 더 복잡합니다.

모델 병렬 처리에서 작업자 노드는 일반적으로 전달 또는 역 전파 단계마다 공유 매개 변수를 한 번만 동기화해야 합니다. 또한 각 노드가 동일한 학습 데이터를 기반으로 하는 모델의 하위 섹션에서 작동하므로 더 큰 모델은 문제가 되지 않습니다.