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