아마존에서의 분산 교육 SageMaker - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존에서의 분산 교육 SageMaker

SageMaker 분산 교육 라이브러리를 제공하고 컴퓨터 비전 (CV) 및 자연어 처리 (NLP) 와 같은 딥 러닝 작업을 위한 다양한 분산 교육 옵션을 지원합니다. SageMaker의 분산 교육 라이브러리를 사용하면 확장성이 뛰어나고 비용 효율적인 사용자 지정 데이터를 병렬로 실행하고 병렬 딥 러닝 훈련 작업을 모델링할 수 있습니다. PyTorch DistributedDataParallel(DDP)torchrun, MPI (mpirun) 및 파라미터 서버와 같은 다른 분산 교육 프레임워크 및 패키지를 사용할 수도 있습니다. 설명서 전체에서 지침과 예제는 SageMaker Python SDK를 사용하여 딥 러닝 작업을 위한 분산 훈련 옵션을 설정하는 방법에 중점을 둡니다.

작은 정보

기계 학습(ML) 훈련 및 처리 작업의 분산형 컴퓨팅에 대한 일반적인 모범 사례를 알아보려면 SageMaker 모범 사례를 사용한 분산 컴퓨팅을(를) 참고하세요.

시작하기 전에

SageMaker 교육은 단일 인스턴스뿐 아니라 여러 인스턴스에 대한 분산 교육을 지원하므로 모든 규모의 교육을 대규모로 실행할 수 있습니다. 다양한 분산 교육 옵션이 있는 교육 작업 시작 프로그램인 SageMaker Python PyTorchSDK와 TensorFlow같은 프레임워크 추정기 클래스를 사용하는 것이 좋습니다. 추정기 객체를 생성하면 객체가 분산 교육 인프라를 설정하고 백엔드에서 CreateTrainingJob API를 실행하며 현재 세션이 실행 중인 지역을 찾고 AWS 딥러닝 프레임워크, 분산 교육 프레임워크, EFA 드라이버를 비롯한 여러 라이브러리가 사전 패키징된 사전 빌드된 딥러닝 컨테이너 중 하나를 가져옵니다. FSx 파일 시스템을 훈련 인스턴스에 마운트하려면 VPC 서브넷과 보안 그룹 ID를 예측기에 전달해야 합니다. 에서 분산 훈련 작업을 실행하기 전에 기본 인프라 설정에 대한 다음 SageMaker 일반 지침을 읽어보세요.

가용 영역 및 네트워크 백플레인

여러 인스턴스 (노드라고도 함) 를 사용할 때는 인스턴스를 연결하는 네트워크, 인스턴스가 훈련 데이터를 읽는 방식, 인스턴스 간에 정보를 공유하는 방식을 이해하는 것이 중요합니다. 예를 들어 분산 데이터 병렬 훈련 작업을 실행할 때는 AllReduce 연산을 실행하기 위한 컴퓨팅 클러스터의 노드 간 통신, Amazon Simple Storage Service 또는 Amazon FSx for Lustre의 노드와 데이터 스토리지 간 데이터 전송과 같은 여러 요소가 컴퓨팅 리소스를 최적으로 사용하고 훈련 속도를 높이는 데 중요한 역할을 합니다. 통신 오버헤드를 줄이려면 AWS 리전 동일한 가용 영역에서 인스턴스, VPC 서브넷, 데이터 스토리지를 구성해야 합니다.

더 빠른 네트워크와 높은 처리량의 스토리지를 갖춘 GPU 인스턴스

엄밀히 따지자면 어떤 인스턴스든 분산 훈련에 사용할 수 있습니다. 더 빠른 노드 간 통신이 필요한 대형 언어 모델 (LLM) 및 확산 모델과 같은 대규모 모델을 교육하기 위해 다중 노드 분산 교육 작업을 실행해야 하는 경우에는 에서 지원하는 EFA 지원 GPU 인스턴스를 사용하는 것이 좋습니다. SageMaker 특히 에서 가장 성능이 우수한 분산 교육 작업을 수행하려면 NVIDIA A100 GPU가 장착된 P4d SageMaker 및 P4de 인스턴스를 사용하는 것이 좋습니다. 이들은 또한 처리량이 높고 지연 시간이 짧은 로컬 인스턴스 스토리지와 더 빠른 노드 내 네트워크도 갖추고 있습니다. 데이터 스토리지의 경우 훈련 데이터 세트 및 모델 체크포인트를 저장하기 위한 높은 처리량을 제공하는 Amazon FSx for Lustre를 사용하는 것이 좋습니다.

Amazon에서 분산 교육을 시작하세요 SageMaker

이미 분산 훈련에 익숙하다면 선호하는 전략 또는 프레임워크에 맞는 다음 옵션 중 하나를 선택하여 시작하세요. 분산 훈련 전반에 대해 알아보려면 기본 분산 훈련 개념을(를) 참조하세요.

SageMaker 분산 교육 라이브러리는 교육 환경에 최적화되어 있으며, 분산 SageMaker 교육 작업을 상황에 맞게 조정하고 교육 속도 및 처리량을 개선하는 데 도움이 됩니다. SageMaker 라이브러리는 데이터 병렬 및 모델 병렬 훈련 전략을 모두 제공합니다. 소프트웨어와 하드웨어 기술을 결합하여 GPU 간 및 노드 간 통신을 개선하고, 교육 SageMaker 스크립트의 코드 변경을 최소화하면서 기본 제공 옵션을 통해 학습 기능을 확장합니다. 

SageMaker 분산 데이터 병렬화 (SMDDP) 라이브러리 사용

SMDDP 라이브러리는 AWS 네트워크 인프라 AllReduceAllGather Amazon SageMaker ML 인스턴스 토폴로지에 최적화된 통합 통신 작업을 구현하여 노드 간 통신을 개선합니다. SMDDP 라이브러리는 분산 PyTorch 데이터 병렬 (DDP), PyTorch 완전 샤딩된 데이터 병렬화 (FSDP) 및 Megatron-과 같은 PyTorch 기반 분산 교육 패키지의 백엔드로 사용할 수 있습니다. DeepSpeedDeepSpeed 다음 코드 예제는 두 인스턴스에서 분산 훈련 작업을 시작하기 위한 추정기를 PyTorch 설정하는 방법을 보여줍니다. ml.p4d.24xlarge

from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=2, instance_type="ml.p4d.24xlarge", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather )

훈련 스크립트를 준비하고 분산 데이터 병렬 훈련 작업을 시작하는 방법을 알아보려면 을 참조하십시오 SageMaker. 분산 데이터 병렬화 라이브러리를 사용하여 SageMaker 분산 훈련 실행

SageMaker 모델 병렬화 라이브러리 (SMP) 사용

SageMaker SMP 라이브러리를 제공하고 샤딩된 데이터 병렬화, 파이프라이닝, 텐서 병렬 처리, 옵티마이저 상태 샤딩 등과 같은 다양한 분산 교육 기법을 지원합니다. SMP 라이브러리가 제공하는 기능에 대해 자세히 알아보려면 SageMaker 모델 병렬화 라이브러리의 핵심 기능을(를) 참조하세요.

SageMaker의 모델 병렬화 라이브러리를 사용하려면 프레임워크 추정기의 파라미터를 구성하십시오. distribution SageMaker 지원되는 프레임워크 추정기는 및 입니다. PyTorchTensorFlow 다음 코드 예제는 두 ml.p4d.24xlarge 인스턴스에서 모델 병렬화 라이브러리를 사용하여 분산 훈련을 위한 프레임워크 예측기를 구성하는 방법을 보여줍니다.

from sagemaker.framework import Framework distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # enter parameter key-value pairs here } }, }, "mpi": { "enabled" : True, ... # enter parameter key-value pairs here } } estimator = Framework( ..., instance_count=2, instance_type="ml.p4d.24xlarge", distribution=distribution )

학습 스크립트를 조정하고, estimator 클래스에서 배포 매개변수를 구성하고, 분산 훈련 작업을 시작하는 방법을 알아보려면 SageMaker의 모델 병렬화 라이브러리를 참조하십시오 (SageMaker Python SDK 설명서의 분산 교육 API 참조).

오픈 소스 분산 훈련 프레임워크 사용

SageMaker 또한 백엔드에서 작동하기 위한 다음 옵션도 지원합니다mpirun. torchrun

기본 분산 훈련 개념

SageMaker의 분산 교육 라이브러리는 다음과 같은 분산 교육 용어 및 기능을 사용합니다.

데이터 세트 및 배치

  • 훈련 데이터 세트: 모델을 훈련시키는 데 사용하는 모든 데이터.

  • 글로벌 배치 크기: 클러스터의 GPU로 보내기 위해 각 반복의 훈련 데이터 세트에서 선택한 레코드 수입니다. 각 반복에서 그라데이션이 계산되는 레코드 수입니다. 데이터 병렬화를 사용하는 경우 총 모델 복제본 수에 복제본별 배치 크기 global batch size = (the number of model replicas) * (per-replica batch size)을(를) 곱한 값과 같습니다. 기계 학습 문헌에서는 글로벌 배치 크기의 단일 배치를 미니 배치라고 하는 경우가 많습니다.

  • 복제본별 배치 크기: 데이터 병렬화를 사용하는 경우 각 모델 복제본으로 전송되는 레코드 수입니다. 각 모델 복제본은 이 배치로 정방향 및 역방향 전달을 수행하여 가중치 업데이트를 계산합니다. 결과 가중치 업데이트는 다음 복제본별 배치 세트가 처리되기 전에 모든 복제본에서 동기화(평균화) 됩니다.

  • 마이크로 배치: 미니 배치의 서브셋입니다. 하이브리드 모델과 데이터 병렬화를 사용하는 경우 이는 복제본당 크기 배치의 서브셋입니다. SageMaker의 분산 모델 병렬 처리 라이브러리를 사용하면 각 마이크로 배치가 교육 one-by-one 파이프라인에 공급되고 라이브러리 런타임에서 정의한 실행 일정을 따릅니다.

훈련

  • 에포크: 전체 데이터 세트에 대한 한 번의 훈련 주기. 한 에포크마다 여러 번 반복하는 것이 일반적입니다. 훈련에 사용하는 에포크 수는 모델 및 사용 사례에 따라 다릅니다.

  • 반복: 훈련 데이터의 글로벌 배치 크기 배치(미니 배치)를 사용하여 수행한 단일 순방향 및 역방향 패스. 훈련 중에 수행되는 반복 횟수는 전체 배치 크기와 훈련에 사용된 에포크 수에 따라 결정됩니다. 예를 들어 데이터 세트에 5,000개의 샘플이 포함되어 있고 글로벌 배치 크기를 500으로 사용하는 경우 단일 에포크를 완료하는 데 10번의 반복이 필요합니다.

  • 학습률: 모델의 계산된 오차에 따라 가중치가 변경되는 정도에 영향을 미치는 변수입니다. 학습률은 수렴 속도 및 최적성뿐만 아니라 모델의 수렴 능력에도 중요한 역할을 합니다.

인스턴스 및 GPU

  • 인스턴스: AWS 기계 학습 컴퓨팅 인스턴스. 이를 노드라고도 합니다.

  • 클러스터 크기: SageMaker 의 분산 교육 라이브러리를 사용하는 경우 인스턴스 수에 각 인스턴스의 GPU 수를 곱한 값입니다. 예를 들어 훈련 작업에 각각 GPU가 4개인 ml.p3.8xlarge 인스턴스 2개를 사용하는 경우 클러스터 크기는 8입니다. 클러스터 크기를 늘리면 훈련 시간이 빨라질 수 있지만 인스턴스 간 통신을 최적화해야 합니다. 그렇지 않으면 노드 간 통신으로 인해 오버헤드가 추가되어 훈련 시간이 느려질 수 있습니다. SageMaker 분산 교육 라이브러리는 Amazon EC2 ML 컴퓨팅 인스턴스 간의 통신을 최적화하여 디바이스 활용도를 높이고 교육 시간을 단축하도록 설계되었습니다.

분산 훈련 솔루션

  • 데이터 병렬화: 훈련 데이터 세트를 다중 Amazon EC2 ML 인스턴스로 구성된 컴퓨팅 클러스터의 여러 GPU로 분할하는 분산 훈련의 전략입니다. 각 GPU는 모델의 복제본을 포함하고, 서로 다른 배치의 훈련 데이터를 수신하고, 순방향 및 역방향 패스를 수행하고, 동기화를 위해 다른 노드와 가중치 업데이트를 공유한 다음 배치와 궁극적으로 또 다른 에포크로 넘어갑니다.

  • 모델 병렬화: 모델을 여러 Amazon EC2 ML 인스턴스로 구성된 컴퓨팅 클러스터의 여러 GPU로 분할하는 분산 훈련 전략입니다. 모델이 복잡하고 숨겨진 계층과 가중치가 많아 단일 인스턴스의 메모리에 다 담을 수 없을 수도 있습니다. 각 GPU는 모델의 서브셋을 포함하며, 이를 통해 데이터 흐름과 변환이 공유되고 컴파일됩니다. GPU 사용률 및 훈련 시간 측면에서 모델 병렬화의 효율성은 모델을 분할하는 방식과 정방향 및 역방향 전달을 수행하는 데 사용되는 실행 일정에 따라 크게 달라집니다.

  • 파이프라인 실행 일정(파이프라이닝): 파이프라인 실행 일정에 따라 모델 훈련 중에 디바이스 간에 계산(마이크로 배치)이 수행되고 데이터가 처리되는 순서가 결정됩니다. 파이프라이닝은 GPU가 서로 다른 데이터 샘플에서 동시에 계산하도록 함으로써 모델 병렬화의 진정한 병렬화를 달성하고 순차 계산으로 인한 성능 손실을 극복하는 기법입니다. 자세한 내용은 파이프라인 실행 일정을 참조하세요.

고급 개념

기계 학습(ML) 실무자는 모델을 훈련할 때 일반적으로 모델 크기 조정훈련 데이터 확장이라는 두 가지 스케일링 문제에 직면합니다. 모델 크기와 복잡성으로 인해 정확도가 향상될 수 있지만 단일 CPU 또는 GPU에 맞출 수 있는 모델 크기에는 한계가 있습니다. 또한 모델 크기를 조정하면 계산 횟수가 늘어나고 훈련 시간이 길어질 수 있습니다.

훈련을 위해 모든 훈련 데이터를 메모리에 수집해야 하기 때문에 모든 모델이 훈련 데이터 스케일링을 똑같이 잘 처리하는 것은 아닙니다. 수직으로만 확장되며 점점 더 큰 인스턴스 유형으로 확장됩니다. 대부분의 경우 훈련 데이터를 확장하면 훈련 시간이 길어집니다.

딥 러닝(DL)은 여러 계층의 인공 신경망으로 구성된 특정 ML 알고리즘 패밀리입니다. 가장 일반적인 훈련 방법은 미니 배치 확률적 경사하강법(SGD)을 사용하는 것입니다. 미니 배치 SGD에서는 오차가 줄어드는 방향으로 계수를 조금씩 반복적으로 변경하여 모델을 훈련합니다. 이러한 반복은 훈련 데이터 세트의 동일한 크기의 서브샘플인 미니 배치에서 수행됩니다. 각 미니 배치에 대해 미니 배치의 각 레코드에서 모델을 실행하고 오차를 측정하고 오차의 기울기를 추정합니다. 그런 다음 미니 배치의 모든 레코드에서 평균 기울기를 측정하고 각 모델 계수의 업데이트 방향을 제공합니다. 훈련 데이터 세트을 한 번 완전히 통과하는 것을 에포크(epoch)라고 합니다. 모델 훈련은 일반적으로 수십~수백 개의 에포크로 구성됩니다. 미니 배치 SGD에는 여러 가지 이점이 있습니다. 첫째, 반복 설계로 인해 훈련 시간이 이론적으로 데이터 세트 크기에 선형적으로 비례합니다. 둘째, 주어진 미니 배치에서 각 레코드는 최종 기울기 평균 이외의 레코드 간 통신 없이 모델에 의해 개별적으로 처리됩니다. 따라서 미니 배치 처리는 특히 병렬화 및 배포에 적합합니다. 

미니 배치의 레코드를 여러 컴퓨팅 디바이스에 분산하여 SGD 훈련을 병렬화하는 것을 데이터 병렬 분산 훈련이라고 하며, 이것은 가장 일반적으로 사용되는 DL 분산 패러다임입니다. 데이터 병렬 훈련은 미니 배치 크기를 확장하고 각 미니 배치를 더 빠르게 처리하기 위한 적절한 분포 전략입니다. 하지만 데이터 병렬 훈련에는 모든 작업자에서 가져온 기울기로 미니 배치 기울기 평균을 계산하고 이를 모든 작업자에 전달해야 하는 추가적인 복잡성이 수반됩니다. allreduce라는 단계는 훈련 클러스터가 확장됨에 따라 증가하는 오버헤드를 의미할 수 있으며, 부적절한 하드웨어를 빼고 잘못 구현하거나 구현한 경우 훈련 시간에 막대한 불이익을 줄 수 있습니다. 

데이터 병렬적 SGD를 사용하려면 여전히 개발자가 최소한 모델과 단일 레코드를 단일 CPU 또는 GPU와 같은 컴퓨팅 디바이스에 맞출 수 있어야 합니다. 자연어 처리(NLP)의 대형 변환기와 같은 대형 모델을 훈련시키거나 고해상도 이미지를 대상으로 분할 모델을 훈련시키는 경우 이것이 불가능한 상황이 발생할 수 있습니다. 워크로드를 분할하는 또 다른 방법은 모델을 여러 컴퓨팅 디바이스로 분할하는 것인데, 이를 모델 병렬 분산 훈련이라고 합니다.

전략

분산 훈련은 일반적으로 데이터 병렬과 모델 병렬이라는 두 가지 접근 방식으로 나뉩니다. 데이터 병렬은 분산 훈련에 대한 가장 일반적인 접근 방식입니다. 데이터가 많으면 이를 배치로 묶어 신경망이나 ML 알고리즘으로 처리할 수 있도록 데이터 블록을 여러 CPU 또는 GPU(노드)로 보낸 다음 결과를 조합하는 것입니다. 신경망은 각 노드에서 동일합니다. 모델 병렬 접근 방식은 노드 메모리에 한 조각으로 담을 수 없는 대형 모델에 사용됩니다. 즉, 모델을 분할하고 여러 노드에 각 부분을 배치합니다. 이 경우 모델의 모든 부분에서 데이터가 처리되도록 데이터 배치를 각 노드로 보내야 합니다.

네트워크모델이라는 용어는 종종 같은 의미로 사용됩니다. 대규모 모델은 실제로 많은 계층과 파라미터가 있는 대규모 네트워크입니다. 대규모 네트워크를 사용하여 훈련하면 큰 모델이 생성되고, 사전 훈련된 파라미터와 가중치를 모두 포함하여 모델을 네트워크에 다시 로드하면 대형 모델이 메모리에 로드됩니다. 모델을 분리하여 여러 노드로 분할하면 기본 네트워크도 분리됩니다. 네트워크는 여러 계층으로 구성되며, 네트워크를 분할하려면 여러 컴퓨팅 디바이스에 계층을 배치해야 합니다.

디바이스 간에 계층을 순진하게 분할할 때 흔히 발생하는 함정은 GPU 사용률이 심각하게 낮다는 것입니다. 훈련은 기본적으로 순방향 패스와 역방향 패스 모두에서 순차적이며, 주어진 시간에 한 GPU만 능동적으로 컴퓨팅을 수행할 수 있고 다른 GPU는 활성화가 전송될 때까지 기다립니다. 모던 모델 병렬 라이브러리는 파이프라인 실행 일정을 사용하여 디바이스 사용률을 높임으로써 이 문제를 해결합니다. 하지만 SageMaker Amazon의 분산 모델 병렬 라이브러리에만 자동 모델 분할이 포함되어 있습니다. 라이브러리의 두 가지 핵심 기능인 자동 모델 분할과 파이프라인 실행 스케줄링은 자동화된 결정을 내림으로써 모델 병렬화를 구현하는 프로세스를 단순화하여 디바이스를 효율적으로 활용합니다.

데이터 병렬과 모델 병렬을 사용한 훈련

대규모 데이터 세트로 훈련하는 경우 데이터 병렬 접근법부터 시작하세요. 훈련 중에 메모리가 부족하면 모델 병렬 접근 방식으로 전환하거나 하이브리드 모델 및 데이터 병렬화를 시도해 볼 수 있습니다. 또한 다음을 시도하여 데이터 병렬 성능을 개선할 수 있습니다.

  • 모델의 하이퍼파라미터를 변경하세요.

  • 배치 크기를 줄이세요.

  • 크기가 맞을 때까지 배치 크기를 계속 줄이세요. 배치 크기를 1로 줄였는데도 여전히 메모리가 부족하다면 모델 병렬 훈련을 시도해야 합니다.

그라데이션 압축(FP16, INT8)을 사용해 보세요.

입력 크기를 줄여 보세요.

  • 시퀀스 링크를 늘리거나, 배치 크기를 줄이거나, GPU를 조정하여 배치를 분산해야 하는 경우 NLP 시퀀스 길이를 줄이세요.

  • 이미지 해상도를 낮추세요.

수렴에 영향을 줄 수 있으므로 배치 정규화를 사용하는지 확인하세요. 분산 훈련을 사용하면 배치가 GPU로 분할되며, 배치 크기가 훨씬 작을수록 오류율이 높아져 모델 수렴에 방해가 될 수 있습니다. 예를 들어, 배치 크기가 64인 단일 GPU에서 네트워크의 프로토타입을 만든 다음 p3dn.24xlarge 4개를 사용하여 확장하면 이제 GPU가 32개이고 GPU당 배치 크기가 64개에서 2로 줄어듭니다. 이렇게 하면 단일 노드에서 볼 수 있었던 수렴이 깨질 수 있습니다.

다음과 같은 경우 모델 병렬 훈련으로 시작하세요.

  • 모델이 단일 디바이스에 맞지 않습니다.

  • 모델 크기 때문에 더 큰 배치 크기를 선택하는 데 한계가 있습니다. 예를 들어 모델 무게가 GPU 메모리의 대부분을 차지하고 더 작고 최적이 아닌 배치 크기를 선택해야 하는 경우가 이에 해당합니다. 

SageMaker 분산 라이브러리에 대한 자세한 내용은 다음을 참조하십시오.

분산 훈련 최적화

사용 사례와 데이터에 맞게 하이퍼파라미터를 사용자 지정하여 최고의 스케일링 효율성을 확보하세요. 다음 토론에서는 가장 영향력 있는 훈련 변수 몇 가지를 강조하고 state-of-the-art 구현에 대한 참조를 제공하여 옵션에 대해 자세히 알아볼 수 있도록 합니다. 또한 선호하는 프레임워크의 분산 훈련 문서를 참조하는 것이 좋습니다.

배치 크기

SageMaker 분산 툴킷을 사용하면 일반적으로 대규모 배치로 학습할 수 있습니다. 예를 들어, 모델이 단일 디바이스 내에 적합하지만 작은 배치 크기로만 훈련할 수 있는 경우 모델 병렬 훈련 또는 데이터 병렬 훈련을 사용하면 더 큰 배치 크기를 실험할 수 있습니다.

배치 크기는 각 반복마다 모델 업데이트의 노이즈 양을 제어하므로 모델 정확도에 직접적인 영향을 미친다는 점에 유의하세요. 배치 크기를 늘리면 기울기 추정의 노이즈 양이 감소하므로 아주 작은 배치 크기에서는 유용하기도 하지만, 배치 크기가 커지면 모델 정확도가 저하될 수 있습니다. 

작은 정보

모델이 만족스러운 수렴으로 훈련되도록 배치 크기를 늘림에 따라 하이퍼파라미터를 조정하세요.

배치를 늘릴 때 모델 수렴을 양호하게 유지하기 위해 여러 가지 기법이 개발되었습니다.

미니 배치 크기

SGD에서 미니 배치 크기는 기울기 추정에 존재하는 노이즈의 양을 정량화합니다. 미니 배치를 작게 만들면 노이즈가 매우 많은 미니 배치 그라데이션이 생성되는데, 이는 데이터 세트의 실제 그라데이션을 나타내지 않습니다. 미니 배치의 크기가 크면 미니 배치 그라데이션이 데이터 세트의 실제 그라데이션에 가깝고 노이즈가 충분히 발생하지 않아 관련 없는 최소값에 고정될 수 있습니다.

이러한 기법에 대한 자세한 내용은 다음 문서를 참조하세요.

시나리오

다음 섹션에서는 교육을 확대할 수 있는 시나리오와 AWS 리소스를 사용하여 확장할 수 있는 방법을 다룹니다.

단일 GPU에서 여러 GPU로 확장

기계 학습에 사용되는 데이터의 양이나 모델 크기로 인해 모델을 훈련하는 데 걸리는 시간이 기다릴 수 있는 시간보다 길어지는 상황이 발생할 수 있습니다. 모델이나 훈련 데이터가 너무 커서 훈련이 전혀 작동하지 않기도 합니다. 이 떄 한 가지 솔루션은 훈련에 사용하는 GPU 수를 늘리는 것입니다. GPU가 8개인 p3.16xlarge와(과) 같이 GPU가 여러 개인 인스턴스에서는 데이터와 처리가 8개의 GPU로 분할됩니다. 분산 훈련 라이브러리를 사용하면 모델을 훈련하는 데 걸리는 시간이 거의 선형적으로 빨라질 수 있습니다. 하나의 GPU로 p3.2xlarge에서 처리했을 때의 소요되는 시간의 약 1/8보다 조금 더 걸리는 수준입니다.

인스턴스 유형 GPU
p3.2xlarge 1
p3.8xlarge 4
p3.16xlarge 8
p3dn.24xlarge 8
참고

SageMaker 훈련에 사용되는 ml 인스턴스 유형에는 해당하는 p3 인스턴스 유형과 동일한 수의 GPU가 있습니다. 예를 들어, ml.p3.8xlarge의 GPU 수는 p3.8xlarge와(과) 같이 4개입니다.

단일 인스턴스에서 다중 인스턴스로 확장

훈련을 더 확장하고 싶다면 더 많은 인스턴스를 사용할 수 있습니다. 하지만 인스턴스를 더 추가하기 전에 더 큰 인스턴스 유형을 선택해야 합니다. 이전 테이블을 검토하여 각 p3 인스턴스 유형에 몇 개의 GPU가 있는지 확인하세요.

p3.2xlarge의 단일 GPU에서 p3.8xlarge의 GPU 4개로 전환했지만 더 많은 처리 성능이 필요하다고 판단한 경우 인스턴스 수를 늘리기 전에 p3.16xlarge을(를) 선택하면 성능이 향상되고 비용이 절감될 수 있습니다. 사용하는 라이브러리에 따라 다르지만, 단일 인스턴스에서 계속 훈련하는 것이 여러 인스턴스를 사용하는 시나리오보다 성능이 향상되고 비용도 절감됩니다.

인스턴스 수를 확장할 준비가 되면 SageMaker Python SDK estimator 함수로 를 설정하여 이 작업을 수행할 수 있습니다instance_count. 예를 들어 instance_type = p3.16xlarge와(과) instance_count = 2을(를) 설정할 수 있습니다. 단일 인스턴스 p3.16xlarge에 8개의 GPU를 사용하는 대신 두 개의 동일한 인스턴스에 16개의 GPU를 사용할 수 있습니다. 다음 차트는 단일 인스턴스에서 8개의 GPU로 시작하여 64개 인스턴스로 증가하고 총 256개의 GPU가 되는 규모 조정 및 처리량을 보여줍니다.

Chart showing how throughput increases and time to train decreases with more GPUs.

사용자 지정 훈련 스크립트

SageMaker 사용하면 인스턴스와 GPU 수를 간단하게 배포하고 확장할 수 있지만 선택한 프레임워크에 따라 데이터와 결과를 관리하는 것은 매우 어려울 수 있으므로 외부 지원 라이브러리가 자주 사용됩니다. 이 가장 기본적인 형태의 분산 교육을 수행하려면 교육 스크립트를 수정하여 데이터 배포를 관리해야 합니다.

SageMaker 또한 Horovod 및 각 주요 딥 러닝 프레임워크에 기본으로 제공되는 분산 교육 구현을 지원합니다. 이러한 SageMaker 프레임워크의 예제를 사용하기로 선택한 경우 Deep Learning Containers용 컨테이너 가이드와 구현을 보여주는 다양한 예제 노트북을 따를 수 있습니다.