기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
옵티마이저 상태 샤딩
옵티마이저 상태 샤딩은 옵티마이저 상태(옵티마이저 상태를 설명하는 가중치 세트)를 데이터 병렬 디바이스 그룹 전체에 분할하는 유용한 메모리 절약 기법입니다. 상태 저장 옵티마이저(예: Adam)또는 FP16 옵티마이저(파라미터의 FP16 및 FP32 사본을 모두 저장)를 사용할 때마다 옵티마이저 상태 샤딩을 사용할 수 있습니다.
참고
옵티마이저 상태 샤딩은 SageMaker 모델 병렬 처리 라이브러리 v1.6.0 이상에서 PyTorch에 사용할 수 있습니다.
옵티마이저 상태 샤딩 사용 방법
modelparallel
구성에서 "shard_optimizer_state": True
를 설정하여 옵티마이저 상태 샤딩을 켤 수 있습니다.
이 기능을 켜면 라이브러리는 데이터 병렬도를 기반으로 모델 파라미터 세트를 분할합니다. i
번째 파티션에 해당하는 그라디언트는 i
번째 데이터 병렬 랭크에서만 줄어듭니다. smp.step
데코레이터 함수에 대한 첫 번째 호출이 끝나면 smp.DistributedOptimizer
로 래핑된 옵티마이저는 현재 데이터 병렬 랭크의 파티션에 해당하는 파라미터로만 제한되도록 파라미터를 재정의합니다. 재정의된 파라미터를 가상 파라미터라고 하며 원본 파라미터와 기본 저장소를 공유합니다. optimizer.step
으로 처음 호출할 때 이러한 재정의된 파라미터를 기반으로 옵티마이저 상태가 생성되며 이 파라미터는 원래의 파티션 때문에 샤딩됩니다. 옵티마이저 업데이트 후 AllGather 작업(optimizer.step
호출의 일부)은 데이터 병렬 랭크에서 실행되어 파라미터 상태를 일관되게 유지합니다.
작은 정보
옵티마이저 상태 샤딩은 데이터 병렬도가 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 훈련 스크립트 조정
텐서 병렬 처리와 파이프라인 병렬 처리의 결합 섹션에서 PyTorch 훈련 스크립트 조정을 참조하세요. 스크립트에는 추가 수정이 필요하지 않습니다.