- ZeRO Stage 3 + FP16/BF16 + Gradient Accumulation + Optional LoRA
zeRO의 3단계
단계 | 나누는 대상 | 설명 |
---|---|---|
Stage 1 | 옵티마이저 상태 | 옵티마이저 메모리 분산 저장 |
Stage 2 | 옵티마이저 + 그래디언트 | 학습 시 gradient까지 분산 |
Stage 3 | 모델 파라미터까지 | 전체 모델을 분산 (가장 메모리 절약) |
이 조합은 속도, 안정성, 메모리 효율, 확장성 모두를 갖춘 최적화 전략
(필요에 따라 LoRA도 선택적으로 사용할 수 있음)
{
"train_batch_size": 64,
"train_micro_batch_size_per_gpu": 4,
"gradient_accumulation_steps": 4,
"bf16": { "enabled": true },
"zero_optimization": {
"stage": 3,
"offload_param": { "device": "none" },
"offload_optimizer": { "device": "cpu", "pin_memory": true }
}
}
offload는 선택 사항이며, GPU 메모리가 충분하면 꺼도 됨
deepspeed --num_gpus=4 train.py --deepspeed ds_config.json
train.py
는 Hugging Face의 Trainer
나 TRL의 SFTTrainer
를 활용한 학습 코드여야 함.