옵티마이저 상태 샤딩 - Amazon SageMaker

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

옵티마이저 상태 샤딩

옵티마이저 상태 샤딩은 옵티마이저 상태(옵티마이저 상태를 설명하는 가중치 세트)를 데이터 병렬 디바이스 그룹 전체에 분할하는 유용한 메모리 절약 기법입니다. 스테이트풀 옵티마이저 (예: Adam) 또는 옵티마이저 (파라미터 및 파라미터 사본을 모두 저장하는 옵티마이저) 를 사용할 때마다 옵티마이저 상태 샤딩을 사용할 수 있습니다. FP16 FP16 FP32

참고

옵티마이저 상태 샤딩은 모델 병렬 처리 라이브러리 v1.6.0 PyTorch 이상에서 사용할 수 있습니다. SageMaker

옵티마이저 상태 샤딩 사용 방법

modelparallel 구성에서 "shard_optimizer_state": True를 설정하여 옵티마이저 상태 샤딩을 켤 수 있습니다.

이 기능을 켜면 라이브러리는 데이터 병렬도를 기반으로 모델 파라미터 세트를 분할합니다. i번째 파티션에 해당하는 그라디언트는 i번째 데이터 병렬 랭크에서만 줄어듭니다. smp.step 데코레이터 함수에 대한 첫 번째 호출이 끝나면 smp.DistributedOptimizer로 래핑된 옵티마이저는 현재 데이터 병렬 랭크의 파티션에 해당하는 파라미터로만 제한되도록 파라미터를 재정의합니다. 재정의된 파라미터를 가상 파라미터라고 하며 원본 파라미터와 기본 저장소를 공유합니다. optimizer.step으로 처음 호출할 때 이러한 재정의된 파라미터를 기반으로 옵티마이저 상태가 생성되며 이 파라미터는 원래의 파티션 때문에 샤딩됩니다. 옵티마이저 업데이트 후에는 (optimizer.step호출의 일부로서) AllGather 작업이 데이터 병렬 랭크에서 실행되어 파라미터 상태를 일관되게 유지합니다.

작은 정보

옵티마이저 상태 샤딩은 데이터 병렬도가 1보다 크고 모델에 10억 개 이상의 파라미터가 있는 경우에 유용합니다.

데이터 병렬도는 (processes_per_host * instance_count / pipeline_parallel_degree)에 의해 계산되며 smp.dp_size() 함수는 백그라운드에서 크기 조정을 처리합니다.

추정기 구성 SageMaker PyTorch

mpi_options = { "enabled" : True, "processes_per_host" : 8, # 8 processes "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none " } smp_options = { "enabled":True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, # alias for "partitions" "placement_strategy": "cluster", "tensor_parallel_degree": 2, # tp over 2 devices "ddp": True, "shard_optimizer_state": True } }

훈련 스크립트 수정하기 PyTorch

Tensor 병렬성과 파이프라인 병렬성의 결합 섹션에서 PyTorch 훈련 스크립트 조정을 참조하세요. 스크립트에는 추가 수정이 필요하지 않습니다.