SageMaker 분산 모델 병렬화 모범 사례 - 아마존 SageMaker

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

SageMaker 분산 모델 병렬화 모범 사례

SageMaker 모델 병렬 라이브러리를 사용하여 분산 교육 작업을 실행할 때는 다음 지침을 사용하십시오.

지정된 모델에 적합한 구성 설정

모델을 확장할 때는 다음 목록을 순서대로 살펴보는 것이 좋습니다. 각 목록 항목에서는 라이브러리 기법을 사용할 때의 이점과 발생할 수 있는 장단점을 설명합니다.

작은 정보

라이브러리 기능 중 일부를 사용하여 모델을 잘 맞출 수 있는 경우 모델 병렬화나 메모리 절약 기능을 더 추가해도 일반적으로 성능이 향상되지 않습니다.

대형 GPU 인스턴스 유형 사용
  • 모델 병렬화 영역에서는 여러 GPU에 걸친 모델 파티셔닝과 같은 모델 병렬화 작업으로 인한 오버헤드를 처리하려면 대용량 GPU 메모리가 있는 강력한 인스턴스를 사용하는 것이 가장 좋습니다. 대규모 DL 모델을 훈련할 때는 ml.p4d 또는 ml.p3dn 인스턴스를 사용하는 것이 좋습니다. 또한 이러한 인스턴스에는 Elastic Fabric Adapter(EFA)가 장착되어 있어 더 높은 네트워크 대역폭을 제공하고 모델 병렬화를 통한 대규모 훈련을 가능하게 합니다.

샤드 옵티마이저 상태
  • 샤드 옵티마이저 상태의 영향은 데이터 병렬 순위 수에 따라 달라집니다. 일반적으로 데이터 병렬화 수준이 높을수록(컴퓨팅 노드 크기에 비례) 메모리 사용 효율성이 향상될 수 있습니다.

    클러스터를 축소하려면 옵티마이저 상태 샤드 구성을 확인해야 합니다. 예를 들어, GPU가 16개인 컴퓨팅 클러스터에 맞는 옵티마이저 상태 샤드이 포함된 대규모 DL 모델(예: P4d 또는 P4de 인스턴스 2개) 은 GPU가 8개인 노드(예: P4d 또는 P4de 인스턴스 1개)에 맞지 않을 수 있습니다. 이는 8개의 GPU를 합친 메모리가 16개의 GPU를 합친 메모리보다 낮고, 8개 이상의 GPU를 샤드하는 데 필요한 GPU당 메모리도 16개의 GPU 시나리오에서 샤드에 필요한 GPU당 메모리보다 많기 때문입니다. 따라서 증가된 메모리 요구 사항이 소규모 클러스터에 맞지 않을 수 있습니다.

    자세한 정보는 옵티마이저 상태 샤딩을 참조하세요.

활성화 체크포인트
  • 모듈 그룹에 활성화 체크포인트를 사용하면 메모리 효율성을 개선할 수 있습니다. 모듈을 더 많이 그룹화할수록 메모리 사용이 더 효율적입니다. 계층의 순차 모듈을 체크포인팅할 때 smp.set_activation_checkpointing 함수의 strategy 인수는 체크포인트를 위해 계층을 그룹화합니다. 예를 들어, 체크포인트를 위해 둘 이상의 계층를 그룹화하는 것은 한 번에 하나의 계층을 체크포인팅하는 것보다 메모리 효율성이 더 높으며, 이렇게 하면 추가 계산 시간이 절약되어 메모리 사용량이 줄어듭니다.

    자세한 정보는 활성화 체크포인트을 참조하세요.

텐서 병렬화
  • 텐서 병렬도는 2의 거듭제곱(2, 4, 8,..., 2n)이어야 하며, 여기서 최대 차수는 노드당 GPU 수와 같아야 합니다. 예를 들어 GPU가 8개인 노드를 사용하는 경우 텐서 병렬도의 가능한 숫자는 2, 4, 8입니다. 텐서 병렬도의 경우 임의의 숫자(예: 3, 5, 6, 7)는 사용하지 않는 것이 좋습니다. 여러 노드를 사용하는 경우 텐서 병렬화 수준을 잘못 구성하면 노드 전체에서 텐서 병렬화가 실행될 수 있습니다. 이로 인해 노드 간 활성화 통신으로 인해 상당한 오버헤드가 추가되고 계산 비용이 많이 들 수 있습니다.

    자세한 정보는 텐서 병렬 처리을 참조하세요.

노드 간 파이프라인 병렬성
  • 단일 노드와 여러 노드 모두에서 파이프라인 병렬화를 실행할 수 있습니다. 파이프라인 병렬화를 텐서 병렬화와 함께 사용하는 경우 여러 노드에서 파이프라인 병렬화를 실행하고 개별 노드 내에서 텐서 병렬화를 유지하는 것이 좋습니다.

  • 파이프라인 병렬화에는 microbatches, active_microbatches, prescaled_batch 등 세 개의 노브가 있습니다.

    • 파이프라인 병렬화와 함께 텐서 병렬화를 사용하는 경우 효율적인 파이프라이닝을 위해 모델 병렬 그룹당 배치 크기를 늘릴 수 있도록 prescaled_batch를 활성화하는 것이 좋습니다. prescaled_batch를 활성화하면 훈련 스크립트에 설정된 배치 크기가 prescaled_batch 없이 각 랭크에 설정된 배치 크기의 tp_size배가 됩니다.

    • microbatches의 개수를 늘리면 효율적인 파이프라이닝과 더 나은 성능을 달성하는 데 도움이 됩니다. 참고로 유효 마이크로 배치 크기는 배치 크기를 마이크로 배치 수로 나눈 값입니다. 배치 크기를 일정하게 유지하면서 마이크로 배치 수를 늘리면 각 마이크로 배치가 처리하는 샘플 수가 줄어듭니다.

    • active_microbatches 개수는 파이프라이닝 중에 동시에 처리되는 마이크로 배치의 최대 수입니다. 처리 중인 각 활성 마이크로 배치의 활성화 및 그라데이션는 GPU 메모리를 차지합니다. 따라서 active_microbatches가 증가하면 GPU 메모리를 더 많이 차지합니다.

  • GPU와 GPU 메모리 모두 활용도가 낮은 경우 파이프라이닝 중에 병렬화를 개선하려면 active_microbatches를 늘리세요.

  • 파이프라인 병렬과 함께 텐서 병렬을 사용하는 방법에 대한 자세한 내용은 텐서 병렬 처리와 파이프라인 병렬 처리의 결합 단원을 참조하세요.

  • 앞서 언급한 매개변수에 대한 설명을 찾으려면 SageMaker Python SDK 설명서의 매개변수를 참조하십시오. smdistributed

활성화를 CPU로 오프로드
  • 활성화 체크포인트 및 파이프라인 병렬화와 함께 사용해야 합니다. 오프로드 및 프리로드가 백그라운드에서 발생하도록 하려면 마이크로 배치 파라미터에 1보다 큰 값을 지정하세요.

  • 활성화를 오프로드할 때 active_microbatches를 늘리고 때로는 총 마이크로 배치 수와 일치시킬 수도 있습니다. 이는 체크포인트가 적용되는 모듈과 모델 분할 방식에 따라 달라집니다.

    자세한 정보는 활성화 오프로딩을 참조하세요.

참조 구성

SageMaker 모델 병렬화 교육 팀은 GPT-2 모델을 사용한 실험, 512의 시퀀스 길이, 50,000의 어휘 크기를 기반으로 다음과 같은 참조점을 제공합니다.

모델 파라미터의 수 인스턴스 타입 파이프라인 병렬화 텐서 병렬화 옵티마이저 상태 샤드 활성화 체크포인트 프리스케일 배치 배치 크기
100억 16 ml.p4d.24xlarge 1 4 True 각 변환기 계층 True batch_size=40
300억 16 ml.p4d.24xlarge 1 8 True 각 변환기 계층 True batch_size=32
600억 32 ml.p4d.24xlarge 2 8 True 각 변환기 계층 True batch_size=56, microbatches=4, active_microbatches=2

이전 구성에서 추론하여 모델 구성의 GPU 메모리 사용량을 추정할 수 있습니다. 예를 들어, 100억 파라미터 모델의 시퀀스 길이를 늘리거나 모델 크기를 200억 개로 늘리는 경우 먼저 배치 크기를 줄이는 것이 좋습니다. 그래도 모형이 맞지 않으면 텐서 병렬성의 정도를 높여 보세요.

훈련 스크립트 수정하기

  • 학습 스크립트에서 SageMaker 모델 병렬 라이브러리의 기능을 사용하기 전에 먼저 검토하십시오 SageMaker 분산 모델 병렬화 라이브러리 구성 팁과 함정.

  • 학습 작업을 더 빨리 시작하려면 SageMaker 로컬 모드를 사용하십시오. 이렇게 하면 SageMaker 노트북 인스턴스에서 로컬로 교육 작업을 빠르게 실행할 수 있습니다. SageMaker 노트북 인스턴스가 실행되는 ML 인스턴스의 규모에 따라 숨겨진 너비, 트랜스포머 레이어 수, 어텐션 헤드와 같은 모델 구성을 변경하여 모델 크기를 조정해야 할 수도 있습니다. 전체 모델을 훈련시키기 위해 대규모 클러스터를 사용하기 전에 축소된 모델이 노트북 인스턴스에서 잘 실행되는지 확인하세요.

SageMaker 콘솔과 Amazon을 사용한 교육 작업 모니터링 및 로깅 CloudWatch

CPU 메모리 사용률, GPU 메모리 사용률, GPU 사용률과 같은 시스템 수준 지표를 모니터링하려면 콘솔을 통해 제공되는 시각화를 사용하십시오. SageMaker

  1. 왼쪽 탐색 창에서 추적을 선택합니다.

  2. 훈련 작업을 선택합니다.

  3. 기본 창에서 자세한 내용을 보려는 훈련 작업 이름을 선택합니다.

  4. 기본 창을 탐색하고 모니터 섹션을 찾아 자동화된 시각화를 확인하세요.

  5. 훈련 작업 로그를 보려면 모니터 섹션에서 로그 보기를 선택합니다. 에서 교육 작업의 분산된 교육 작업 로그에 액세스할 수 있습니다. CloudWatch 다중 노드 분산 훈련을 시작한 경우 algo-n-1234567890 형식의 태그가 포함된 여러 로그 스트림이 표시될 것입니다. algo-1 로그 스트림은 기본(0번째) 노드의 훈련 로그를 추적합니다.

자세한 정보는 Amazon CloudWatch 메트릭을 사용한 교육 작업 모니터링 및 분석을 참조하세요.

권한

모델 병렬화 또는 SageMaker 분산 SageMaker 교육 예제 노트북을 사용하여 교육 작업을 실행하려면 IAM 역할에 다음과 같은 적절한 권한이 있어야 합니다.