기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker 분산 모델 병렬화 모범 사례
SageMaker 모델 병렬 라이브러리 v2 (SMP v2) 를 사용하여 분산 교육 작업을 실행할 때는 다음 지침을 사용하십시오.
분산 교육을 위한 올바른 구성 설정
SMP v2에서 제공하는 분산 교육 기법을 적용하기 위한 최적의 출발점을 추정하고 찾으려면 다음 목록을 검토하십시오. 각 목록 항목에서는 를 사용할 때의 이점과 잠재적 SageMaker 모델 병렬 처리 라이브러리 v2의 핵심 기능 장단점을 설명합니다.
구성 팁
이 섹션에서는 글로벌 배치 크기 요구 사항에 따라 최적의 처리량을 위한 최상의 모델 구성을 결정하는 방법에 대한 지침을 제공합니다.
먼저, 모델 크기와 상관없이 다음 설정을 권장합니다.
-
사용할 수 있는 가장 강력한 인스턴스 유형을 사용하십시오.
-
Mixed Precision을 사용하면 성능과 메모리 감소에 상당한 이점이 있으므로 항상 혼합 정밀도를 켜십시오. 보다
bfloat16
정확하므로 사용하는 것이 좋습니다float16
. -
와 같이 해당하는 경우 언제든지 NCCL을 사용하는 대신 SageMaker 분산 데이터 병렬화 라이브러리를 켜십시오. AWS 인프라에 최적화된 SMDDP 라이브러리와의 호환성 tensor-parallelism-only 사용 사례 (및) 의 경우는 예외입니다.
hybrid_shard_degree = 1
tensor_paralle_degree > 1
-
모델에 약 600억 개 이상의 매개변수가 있는 경우에는 를 사용하는 것이 좋습니다지연된 파라미터 초기화. 또한 지연된 매개변수 초기화를 사용하여 모든 모델의 초기화 속도를 높일 수 있습니다.
-
활성화하는 것이 좋습니다. 활성화 체크포인트
모델 크기에 따라 다음 지침으로 시작하는 것이 좋습니다.
-
샤딩된 데이터 병렬화를 사용하십시오.
-
GPU 메모리에 담을 배치 크기에 따라 적절한 샤딩 데이터 병렬도를 선택하십시오. 일반적으로 네트워크 통신으로 인한 오버헤드를 최소화하면서 모델을 GPU 메모리에 맞출 수 있도록 가장 낮은 등급부터 시작해야 합니다. 캐시 플러시가 발생한다는 경고가 표시되면 샤딩 수준을 높이는 것이 좋습니다.
-
최대 로컬 배치 크기 및 필요한 글로벌 배치 크기 (있는 경우) 를
world_size
기준으로 결정하십시오. -
활성화 오프로딩을 실험해 볼 수 있습니다. 시나리오에 따라 샤딩 수준을 높이지 않고도 메모리 요구 사항을 해결할 수 있으므로 커뮤니케이션이 줄어듭니다.
-
-
에서 소개한 것처럼 PyTorch FSDP의 샤딩된 데이터 병렬화와 SMP v2의 텐서 병렬화를 동시에 사용하십시오. 텐서 병렬화
-
FSDP만 사용하는 대규모 클러스터에서 훈련할 경우 글로벌 배치 크기가 너무 커져 모델에 수렴 문제가 발생할 수 있습니다. 일반적으로 대부분의 연구 작업에서는 배치 크기를 4백만 토큰 미만으로 유지합니다. 이 경우 SMP v2의 텐서 병렬 처리를 사용하여 PyTorch FSDP를 구성하여 배치 크기를 줄이면 문제를 해결할 수 있습니다.
예를 들어 노드가 256개이고 시퀀스 길이가 4096개인 경우 GPU당 배치 크기가 1개라도 글로벌 배치 크기는 8백만 토큰이 됩니다. 그러나 차수가 2이고 배치 크기가 텐서 병렬 그룹당 1인 텐서 병렬화를 사용하면 GPU당 배치 크기가 1/2이 되며, 이는 4백만 개의 토큰으로 변환됩니다.
-
8k와 같이 컨텍스트 길이가 긴 상태에서 학습하면 16k 활성화 메모리가 매우 커질 수 있습니다. FSDP는 활성화를 분할하지 않으므로 활성화로 인해 GPU의 메모리 부족이 발생할 수 있습니다. 이러한 시나리오에서는 SMP v2의 텐서 병렬 처리를 사용하여 PyTorch FSDP를 구성하여 효율적으로 훈련할 수 있습니다.
-
참조 구성
SageMaker 모델 병렬성 교육 팀은 Lama 2 모델을 사용하여 torch.sagemaker.transform SMP 변환기 모델로 변환하고 시퀀스 길이 4096 및 혼합 정밀도 (FP16 또는 BF16) 를 갖는 ml.p4d.24xlarge
인스턴스를 대상으로 훈련한 실험을 기반으로 다음과 같은 참조점을 제공합니다.
모델 | 모델 크기 (모델 파라미터 수) | 인스턴스의 수 | 샤딩된 데이터 병렬도 | 텐서 병렬도 | 활성화 체크포인트 | 활성화 오프로딩 | 배치 크기 |
---|---|---|---|---|---|---|---|
라마 2 | 7B | 1 | 8 | 1 | TRUE | FALSE | 4 |
70B | 32 | 256 | 1 | TRUE | FALSE | 2 | |
175B | 64 | 128 | 4 | TRUE | TRUE | 6 |
이전 구성에서 추론하여 모델 구성의 GPU 메모리 사용량을 추정할 수 있습니다. 예를 들어, 100억 파라미터 모델의 시퀀스 길이를 늘리거나 모델 크기를 200억 개로 늘리는 경우 먼저 배치 크기를 줄이는 것이 좋습니다. 그래도 모형이 맞지 않으면 텐서 병렬성의 정도를 높여 보세요.
SageMaker 콘솔 및 Amazon을 사용하여 교육 작업 모니터링 및 로깅 CloudWatch
CPU 메모리 사용률, GPU 메모리 사용률, GPU 사용률과 같은 시스템 수준 지표를 모니터링하려면 콘솔을 통해 제공되는 시각화를 사용하십시오. SageMaker
-
왼쪽 탐색 창에서 추적을 선택합니다.
-
훈련 작업을 선택합니다.
-
기본 창에서 자세한 내용을 보려는 훈련 작업 이름을 선택합니다.
-
기본 창을 탐색하고 모니터 섹션을 찾아 자동화된 시각화를 확인하세요.
-
훈련 작업 로그를 보려면 모니터 섹션에서 로그 보기를 선택합니다. 에서 교육 작업의 분산된 교육 작업 로그에 액세스할 수 있습니다. CloudWatch 다중 노드 분산 훈련을 시작한 경우 algo-n-1234567890 형식의 태그가 포함된 여러 로그 스트림이 표시될 것입니다. algo-1 로그 스트림은 기본(0번째) 노드의 훈련 로그를 추적합니다.
자세한 정보는 훈련 작업 모니터링 및 분석을 위한 Amazon CloudWatch 지표을 참조하세요.
권한
모델 병렬화를 사용하여 SageMaker 교육 작업을 실행하려면 IAM 역할에 다음과 같은 적절한 권한이 있어야 합니다.
-
FSx for Lustre
를 사용하려면 AmazonFSxFullAccess
를 추가하세요. -
Amazon S3를 데이터 채널로 사용하려면
AmazonS3FullAccess
를 추가하세요. -
Docker를 사용하려면 자체 컨테이너를 구축하여 Amazon ECR로 푸시하려면
AmazonEC2ContainerRegistryFullAccess
를 추가하세요. -
전체 SageMaker 기능 제품군을 사용할 수 있는 전체 액세스 권한을 가지려면 추가하세요.
AmazonSageMakerFullAccess