# Accelerate

[Accelerate](https://hf.co/docs/accelerate/index) fornece uma interface unificada para backends de treinamento distribuído, como [FSDP](https://docs.pytorch.org/tutorials/intermediate/FSDP_tutorial.html) ou [DeepSpeed](https://www.deepspeed.ai/). Ele detecta seu ambiente (número de GPUs, backend distribuído, precisão mista, etc.) e configura automaticamente o treinamento, seja em 1 GPU com DDP ou em 8 GPUs com FSDP.

O Accelerate envolve o modelo no wrapper distribuído apropriado, move-o para o dispositivo correto e cria um otimizador compatível. Durante o treinamento, o Accelerate usa seu próprio método [backward](https://huggingface.co/docs/accelerate/main/en/package_reference/accelerator#accelerate.Accelerator.backward) para lidar com o escalonamento de gradientes para precisão mista. O [Trainer](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer) chama as APIs apropriadas do Accelerate e delega toda a mecânica distribuída ao Accelerate.

Configure o Accelerate para o [Trainer](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer) com um arquivo de configuração do Accelerate ou [TrainingArguments](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments).

## Arquivo de configuração do Accelerate

Execute o comando [accelerate config](https://huggingface.co/docs/accelerate/en/package_reference/cli#accelerate-config) e responda às perguntas sobre seu hardware e configuração de treinamento. Isso cria um arquivo `default_config.yaml` no seu cache. O exemplo abaixo é para FSDP.

```yaml
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: 4
```

Execute [accelerate launch](https://huggingface.co/docs/accelerate/en/package_reference/cli#accelerate-launch) com um script baseado em [Trainer](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer), e o Accelerate lê o arquivo de configuração para configurar o treinamento. Os argumentos [fsdp_config](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments.fsdp_config) e [deepspeed](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments.deepspeed) são desnecessários, pois o arquivo de configuração do Accelerate cobre as mesmas configurações.

```cli
accelerate launch train.py
```

O [accelerator_config](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments.accelerator_config) aceita configurações que não possuem argumentos de nível superior dedicados. Por exemplo, defina `non_blocking=True` junto com `dataloader_pin_memory()` para sobrepor a transferência de dados com o cálculo, obtendo maior throughput na GPU.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    dataloader_pin_memory=True,
    accelerator_config={
        "non_blocking": True,
    },
)
```

## TrainingArguments

Passe uma configuração específica do backend para [TrainingArguments](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments). O método [create_accelerator_and_postprocess()](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer.create_accelerator_and_postprocess) lê as configurações e configura o treinamento.

Passe um arquivo de configuração JSON ou um dicionário para `~TrainingArguments.fsdp_config`. Consulte [FSDP](./fsdp) para obter um guia completo e a referência de configuração.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    fsdp=True,
    fsdp_config="path/to/fsdp.json",
)
```

Passe um arquivo de configuração JSON ou um dicionário para `~TrainingArguments.deepspeed`. Consulte [DeepSpeed](./deepspeed) para obter um guia completo e uma referência de configuração.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    deepspeed="path/to/ds_config.json",
)
```

O DDP é configurado diretamente por meio dos campos de [TrainingArguments](/docs/transformers/main/pt/main_classes/trainer#transformers.TrainingArguments). Consulte [DDP](./ddp) para obter mais detalhes.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    ddp_backend="nccl",
    ddp_find_unused_parameters=False,
    ddp_bucket_cap_mb=25,
    ddp_timeout=1800,
)
```

## Próximas etapas

- Consulte [DDP](./ddp) para treinamento paralelo de dados quando o seu modelo couber em uma única GPU.
- Consulte [FSDP](./fsdp) para particionar parâmetros, gradientes e estados do otimizador entre GPUs.
- Consulte [DeepSpeed](./deepspeed) para otimização ZeRO e offloading.

