Transformers documentation
Accelerate
Accelerate
Accelerate는 FSDP나 DeepSpeed와 같은 분산 학습 백엔드를 위한 통합 인터페이스를 제공합니다. 사용자의 환경(GPU 수, 분산 백엔드, 혼합 정밀도 등)을 감지하고, DDP를 사용하는 1개의 GPU든 FSDP를 사용하는 8개의 GPU든 자동으로 학습을 구성합니다.
Accelerate는 모델을 적절한 분산 래퍼로 감싸고, 올바른 장치로 이동하며, 호환되는 옵티마이저를 생성합니다. 학습 중에 Accelerate는 자체 backward 메서드를 사용하여 혼합 정밀도의 그래디언트 스케일링을 처리합니다. Trainer는 적절한 Accelerate API를 호출하고 모든 분산 메커니즘을 Accelerate에 위임합니다.
Accelerate config 파일 또는 TrainingArguments를 사용하여 Trainer에 Accelerate를 구성합니다.
Accelerate 설정 파일
accelerate config 명령을 실행하고 하드웨어 및 학습 환경에 대한 질문에 답하세요. 이 과정은 캐시에 default_config.yaml 파일을 생성합니다. 아래 예시는 FSDP를 위한 것입니다.
compute_environment: LOCAL_MACHINE
distributed_type: FSDP
fsdp_config:
fsdp_version: 2
fsdp_reshard_after_forward: true
fsdp_cpu_offload: false
fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
fsdp_cpu_ram_efficient_loading: true
fsdp_activation_checkpointing: false
fsdp_state_dict_type: SHARDED_STATE_DICT
fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer
mixed_precision: bf16
num_machines: 1
num_processes: 4accelerate launch를 Trainer 기반 스크립트로 실행하면 Accelerate가 설정 파일을 읽어 훈련을 설정합니다. Accelerate 설정 파일이 동일한 설정을 포함하므로 fsdp_config 및 deepspeed 인자는 불필요합니다.
accelerate launch train.pyaccelerator_config에는 전용 최상위 인자가 없는 설정을 전달할 수 있습니다. 예를 들어, non_blocking=True를 dataloader_pin_memory()와 함께 설정하면 데이터 전송과 계산을 겹쳐서 GPU 처리량을 높일 수 있습니다.
from transformers import TrainingArguments
TrainingArguments(
...,
dataloader_pin_memory=True,
accelerator_config={
"non_blocking": True,
},
)TrainingArguments
TrainingArguments에 백엔드별 설정을 전달합니다. create_accelerator_and_postprocess() 메서드는 설정을 읽고 학습을 구성합니다.
~TrainingArguments.fsdp_config에 JSON 설정 파일 또는 dict를 전달합니다. 전체 가이드 및 설정 참조는 FSDP를 확인하세요.
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)~TrainingArguments.deepspeed에 JSON 설정 파일 또는 dict를 전달합니다. 전체 가이드 및 설정 참조는 DeepSpeed를 확인하세요.
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)DDP는 TrainingArguments 필드를 통해 직접 구성됩니다. 자세한 내용은 DDP를 참조하세요.
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)다음 단계
- 모델이 GPU 하나에 들어가는 경우의 데이터 병렬 학습에 대해서는 DDP를 참조하세요.
- GPU 간에 매개변수, 기울기, 옵티마이저 상태를 샤딩하는 방법은 FSDP를 참조하세요.
- ZeRO 최적화 및 오프로딩에 대해 DeepSpeed를 참조하세요.