{
"zero_optimization": {
"stage": 3, // stage 0, stage 1, stage 2, stage 3
"offload_optimizer": { // 모델 파라미터를 CPU에 오프로드
"device": "cpu",
"pin_memory": true
},
"offload_param": { // 옵티마이저 상태를 CPU에 오프로드
"device": "cpu",
"pin_memory": true
},
"overlap_comm": true, // 기울기 감소를 역전파 계산과 겹치도록 하여 속도 빨라짐
"contiguous_gradients": true, // 기울기가 생성되는 대로 연속적인 버퍼에 복사
"sub_group_size": 1e9, // 버킷으로 그룹화하여 파라미터 기울기 업데이트
"reduce_bucket_size": "auto", // 한 번에 줄어들 bucket 사이즈
"stage3_prefetch_bucket_size": "auto", // 파라미터 미리 불러올 때 고정된 버퍼 사이즈
"stage3_param_persistence_threshold": "auto", // 보다 작은 파라미터는 분할 x
"stage3_max_live_parameters": 1e9, // GPU에서 언제나 유지하려는 전체 파라미터 수의 상한선
"stage3_max_reuse_distance": 1e9, // 다시 사용될 파라미터 버리지 않기
"stage3_gather_16bit_weights_on_model_save": true // GPU에 퍼져 있는 가중치를 모아서 fp16으로 저장
},
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"steps_per_print": 2000,
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
}