기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 모범 사례 페이지에서는 일반적으로 기계 학습(ML) 작업을 위한 다양한 종류의 분산 컴퓨팅을 제공합니다. 이 페이지의 분산 컴퓨팅이라는 용어는 기계 학습 작업을 위한 분산 훈련과 데이터 처리, 데이터 생성, 특성 추출 및 강화 학습을 위한 병렬 컴퓨팅을 포함합니다. 이 페이지에서는 분산 컴퓨팅의 일반적인 문제와 SageMaker 훈련 및 SageMaker 처리에서 사용할 수 있는 옵션에 대해 설명합니다. 분산 컴퓨팅에 대해 추가적인 읽기 자료는 분산 컴퓨팅이란?
여러 노드(인스턴스), 액셀러레이터(NVIDIA GPUs, AWS Trainium 칩) 및 vCPU 코어에서 분산 방식으로 실행되도록 ML 작업을 구성할 수 있습니다. 분산 계산을 실행하면 컴퓨팅 작업 속도 향상, 대규모 데이터세트 처리, 대규모 ML 모델 훈련 등 다양한 목표를 달성할 수 있습니다.
다음 목록은 ML 훈련 작업을 대규모로 실행할 때 직면할 수 있는 일반적인 문제를 다룹니다.
-
ML 작업, 사용하려는 소프트웨어 라이브러리, 컴퓨팅 리소스에 따라 계산을 분산하는 방법을 결정해야 합니다.
-
모든 ML 작업을 쉽게 분산할 수 있는 것은 아닙니다. 또한 모든 ML 라이브러리가 분산 계산을 지원하는 것은 아닙니다.
-
분산 계산으로 인해 항상 컴퓨팅 효율성이 선형적으로 증가하는 것은 아닙니다. 특히 데이터 I/O 및 GPU 간 통신에 병목 현상이 있는지 또는 오버헤드가 발생하는지 식별해야 합니다.
-
분산 계산은 수치 프로세스를 방해하고 모델 정확도를 변화시킬 수 있습니다. 특히 데이터 병렬 신경망 훈련의 경우, 더 큰 컴퓨팅 클러스터로 스케일 업하면서 글로벌 배치 크기를 변경하는 경우 학습률도 그에 따라 조정해야 합니다.
SageMaker AI는 다양한 사용 사례에서 이러한 문제를 완화할 수 있는 분산 훈련 솔루션을 제공합니다. 사용 사례에 가장 적합한 다음 옵션 중 하나를 선택합니다.
주제
옵션 1: 분산 훈련을 지원하는 SageMaker AI 내장 알고리즘 사용
SageMaker AI는 SageMaker AI 콘솔 또는 SageMaker Python SDK를 통해 즉시 사용할 수 있는 기본 제공 알고리즘SageMaker 제공합니다. 기본 제공 알고리즘을 사용하면 코드를 사용자 지정하거나, 모델 이면의 과학을 이해하거나, 프로비저닝된 Amazon EC2 인스턴스에서 Docker를 실행하는 데 시간을 할애할 필요가 없습니다.
SageMaker AI 기본 제공 알고리즘의 하위 집합은 분산 훈련을 지원합니다. 선택한 알고리즘이 분산 훈련을 지원하는지 확인하려면 기본 제공 알고리즘에 대한 일반 정보 표의 병렬화 가능 열을 참조하세요. 병렬화 가능 열에 표시된 대로 일부 알고리즘은 다중 인스턴스 분산 훈련을 지원하는 반면, 나머지 병렬화 가능한 알고리즘은 단일 인스턴스의 여러 GPU에 대한 병렬화를 지원합니다.
옵션 2: SageMaker AI 관리형 훈련 또는 처리 환경에서 사용자 지정 ML 코드 실행
SageMaker AI 작업은 특정 사용 사례 및 프레임워크에 대한 분산 훈련 환경을 인스턴스화할 수 있습니다. 이 환경은 바로 사용할 수 있는 화이트보드 역할을 하며, 여기에서 자체 ML 코드를 가져와 실행할 수 있습니다.
ML 코드가 딥 러닝 프레임워크를 사용하는 경우
SageMaker 훈련용 딥 러닝 컨테이너(DLC)
-
SageMaker AI 분산 훈련 라이브러리
SageMaker AI 분산 훈련 라이브러리는 신경망 데이터 병렬 처리 및 모델 병렬 처리를 위한 AWS관리형 코드를 제안합니다. SageMaker AI 분산 훈련에는 SageMaker Python SDK에 내장된 시작 관리자 클라이언트도 함께 제공되므로 병렬 시작 코드를 작성할 필요가 없습니다. 자세한 내용은 SageMaker AI의 데이터 병렬 처리 라이브러리와 SageMaker AI의 모델 병렬 처리 라이브러리를 참조하세요.
-
오픈 소스 분산 훈련 라이브러리
오픈 소스 프레임워크에는 PyTorch의 DistributedDataParallelism(DDP)
또는 TensorFlow의 tf.distribute
모듈과 같은 자체 배포 메커니즘이 있습니다. SageMaker AI 관리형 프레임워크 컨테이너에서 이러한 분산 훈련 프레임워크를 실행하도록 선택할 수 있습니다. 예를 들어, SageMaker AI에서 MaskRCNN을 훈련하기 위한 샘플 코드는 SageMaker AI PyTorch 프레임워크 컨테이너의 PyTorch DDP와 SageMaker TensorFlow 프레임워크 컨테이너의 Horovod 를 모두 사용하는 방법을 보여줍니다.
SageMaker AI ML 컨테이너에는 MPI
GPU에서의 데이터 병렬 신경망 훈련 참고 사항
-
필요한 경우 다중 GPU 및 다중 시스템 병렬화에 맞게 조정
종종 다중 CPU 또는 다중 GPU 인스턴스에서 신경망 훈련 작업을 실행합니다. 각 GPU 기반 인스턴스에는 일반적으로 여러 GPU 기기가 포함됩니다. 따라서 분산 GPU 컴퓨팅은 여러 GPU가 있는 단일 GPU 인스턴스 내에서 수행되거나(단일 노드 다중 GPU 훈련), 각각에 여러 GPU 코어가 있는 다중 GPU 인스턴스(다중 노드 다중 GPU 훈련)에서 발생할 수 있습니다. 단일 인스턴스 훈련은 코드 작성 및 디버깅이 더 쉽고 노드 내 GPU-GPU 처리량은 일반적으로 노드 간 GPU-GPU 처리량보다 빠릅니다. 따라서 먼저 데이터 병렬화를 수직으로 조정하고(GPU가 여러 개 있는 하나의 GPU 인스턴스 사용) 필요한 경우 여러 GPU 인스턴스로 확장하는 것이 좋습니다. 이는 CPU 예산이 높고(예: 데이터 사전 처리를 위한 대규모 워크로드) 다중 GPU 인스턴스의 CPU 대 GPU 비율이 너무 낮은 경우에는 적용되지 않을 수 있습니다. 모든 경우에 자체 ML 훈련 요구 및 워크로드에 따라 다양한 인스턴스 유형 조합을 실험해 봐야 합니다.
-
컨버전스 품질 모니터링
데이터 병렬화로 신경망을 훈련할 때 GPU당 미니 배치 크기를 일정하게 유지하면서 GPU 수를 늘리면 미니 배치 확률적 경사하강법(MSGD) 프로세스에 사용할 글로벌 미니 배치의 크기가 커집니다. MSGD의 미니 배치 크기는 하강 잡음과 컨버전스에 영향을 미치는 것으로 알려져 있습니다. 정확도를 유지하면서 적절하게 조정하려면 학습률과 같은 다른 하이퍼파라미터를 조정해야 합니다 [Goyal et al.
(2017)]. -
I/O 병목 현상 모니터링
GPU 수를 늘리면 읽기 및 쓰기 스토리지 처리량도 증가해야 합니다. 데이터 소스와 파이프라인에 병목 현상이 생기지 않도록 하세요.
-
필요에 따라 훈련 스크립트 수정
단일 GPU 훈련용으로 작성된 훈련 스크립트는 다중 노드 다중 GPU 훈련에 맞게 수정해야 합니다. 대부분의 데이터 병렬화 라이브러리에서는 다음을 수행하려면 스크립트 수정이 필요합니다.
-
각 GPU에 훈련 데이터 배치를 할당하세요.
-
다중 GPU의 그라데이션 계산과 파라미터 업데이트를 처리할 수 있는 옵티마이저를 사용하세요.
-
체크포인팅 책임을 특정 호스트와 GPU에 할당하세요.
-
ML 코드에 표 형식의 데이터 처리가 포함된 경우
PySpark는 오픈 소스 분산 컴퓨팅 프레임워크인 Apache Spark의 Python 프론트엔드입니다. PySpark는 대규모 프로덕션 워크로드를 위한 분산형 테이블 형식 데이터 처리에 널리 채택되었습니다. 표 형식의 데이터 처리 코드를 실행하려면 SageMaker 프로세싱 PySpark 컨테이너 사용 및 병렬 작업 실행을 고려해 보세요. 또한 Amazon EMR
옵션 3: 사용자 지정 분산 훈련 코드 작성
SageMaker AI에 훈련 또는 처리 작업을 제출하면 SageMaker 훈련 및 SageMaker AI 처리 APIs Amazon EC2 컴퓨팅 인스턴스를 시작합니다. 자체 Docker 컨테이너를 실행하거나 AWS 관리형 컨테이너에 추가 라이브러리를 설치하여 인스턴스에서 훈련 및 처리 환경을 사용자 지정할 수 있습니다. SageMaker 훈련을 사용하는 Docker에 대한 자세한 내용은 SageMaker AI를 사용하도록 자체 Docker 컨테이너 조정 및 자체 알고리즘 및 모델로 컨테이너 생성을 참조하세요. SageMaker AI Processing을 사용하는 Docker에 대한 자세한 내용은 자체 처리 코드 사용을 참조하세요.
모든 SageMaker 훈련 작업 환경에는의 구성 파일이 포함되어 있으며/opt/ml/input/config/resourceconfig.json
, 모든 SageMaker Processing 작업 환경에는의 유사한 구성 파일이 포함되어 있습니다/opt/ml/config/resourceconfig.json
. 코드는 이 파일을 읽고 hostnames
을 찾고 노드 간 통신을 설정할 수 있습니다. JSON 파일의 스키마를 포함하여 자세히 알아보려면 분산 훈련 구성 및 Amazon SageMaker 프로세싱이 처리 컨테이너를 구성하는 방법을 참조하세요. SageMaker AI에서 Ray
또한 SageMaker 훈련 및 SageMaker 프로세싱을 사용하여 작업자 간 통신이 필요하지 않은 사용자 지정 분산 계산을 실행할 수 있습니다. 컴퓨팅 문헌에서 이러한 작업은 당혹스러울 정도로 병렬적이거나 아무 것도 공유하지 않는 것으로 묘사되는 경우가 많습니다. 데이터 파일의 병렬 처리, 다양한 구성에서 병렬로 모델 훈련, 레코드 컬렉션에 대한 일괄 추론 실행 등을 예로 들 수 있습니다. Amazon SageMaker AI를 사용하여 이러한 공유 없음 사용 사례를 거의 병렬화할 수 있습니다. 여러 노드가 있는 클러스터에서 SageMaker 훈련 또는 SageMaker 처리 작업을 시작하면 SageMaker AI는 기본적으로 모든 노드에서 훈련 코드(Python 또는 Docker)를 복제하고 시작합니다. SageMaker AI TrainingInput
API의 데이터 입력 구성S3DataDistributionType=ShardedByS3Key
에서를 설정하여 이러한 여러 노드에 입력 데이터를 무작위로 분산해야 하는 작업을 용이하게 할 수 있습니다.
옵션 4: 여러 작업을 병렬로 또는 순차적으로 실행
ML 컴퓨팅 워크플로를 더 작은 병렬 또는 순차 컴퓨팅 작업으로 분산할 수도 있습니다. 각 작업은 자체 SageMaker 훈련 또는 SageMaker 처리 작업으로 표시됩니다. 작업을 여러 작업으로 분할하면 다음과 같은 상황이나 작업에 유용할 수 있습니다.
-
각 하위 작업에 대한 특정 데이터 채널 및 메타데이터 항목(예: 하이퍼파라미터, 모델 구성 또는 인스턴스 유형)이 있는 경우.
-
하위 작업 수준에서 재시도 단계를 구현하는 경우.
-
배치 크기 증가에 대해 훈련하는 경우와 같이 워크로드 과정에서 하위 작업의 구성을 변경하는 경우.
-
단일 훈련 작업에 허용된 최대 훈련 시간(최대 28일) 보다 오래 걸리는 ML 작업을 실행해야 하는 경우.
-
컴퓨팅 워크플로의 각 단계에 따라 다른 인스턴스 유형이 필요한 경우.
특정 하이퍼파라미터 검색의 경우 SageMaker AI 자동 모델 튜닝을 사용합니다. SageMaker AI 자동 모델 튜닝은 무작위, 베이지안 또는 HyperBand일 수 있는 검색 로직에 따라 사용자를 대신하여 여러 훈련 작업을 시작하는 서버리스 파라미터 검색 오케스트레이터입니다.
또한 여러 훈련 작업을 오케스트레이션하려면 Amazon Managed Workflows for Apache Airflow(MWAA) 및 SageMaker AI 워크플로에서 지원하는 SageMaker Pipelines