

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Ponto de verificação de ativação
<a name="model-parallel-core-features-v2-pytorch-activation-checkpointing"></a>

O *ponto de verificação de ativação* é uma técnica para reduzir o uso de memória limpando as ativações de determinadas camadas e recalculando-as durante uma passagem para trás. Na prática, isso troca o tempo extra de computação pelo uso reduzido da memória. Se um módulo for verificado, no final de uma passagem direta, somente as entradas iniciais do módulo e as saídas finais do módulo permanecerão na memória. PyTorch libera quaisquer tensores intermediários que façam parte da computação dentro desse módulo durante a passagem para frente. Durante a passagem para trás dos módulos de ponto de verificação, PyTorch recalcula esses tensores. Nesse ponto, as camadas além desse módulo de ponto de verificação concluíram sua passagem para trás, portanto, o pico de uso da memória com o ponto de verificação se torna menor.

O SMP v2 suporta o módulo de ponto de verificação de PyTorch ativação,. [https://pytorch.org/blog/scaling-multimodal-foundation-models-in-torchmultimodal-with-pytorch-distributed/#activation-checkpointing](https://pytorch.org/blog/scaling-multimodal-foundation-models-in-torchmultimodal-with-pytorch-distributed/#activation-checkpointing) A seguir estão exemplos de pontos de verificação de ativação do modelo GPT-NeoX da Hugging Face.

**Realização de pontos de verificação de camadas transformadoras do modelo GPT-NeoX da Hugging Face**

```
from transformers.models.gpt_neox import GPTNeoXLayer
from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import (
    apply_activation_checkpointing
)
    
# check_fn receives a module as the arg, 
# and it needs to return whether the module is to be checkpointed
def is_transformer_layer(module):
    from transformers.models.gpt_neox import GPTNeoXLayer
    return isinstance(submodule, GPTNeoXLayer)
    
apply_activation_checkpointing(model, check_fn=is_transformer_layer)
```

**Realização de pontos de verificação de algumas camadas transformadoras do modelo GPT-NeoX da Hugging Face**

```
# check_fn receives a module as arg, 
# and it needs to return whether the module is to be checkpointed
# here we define that function based on global variable (transformer_layers)
from transformers.models.gpt_neox import GPTNeoXLayer
from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import (
    apply_activation_checkpointing
)

transformer_layers = [
    m for m model.modules() if isinstance(m, GPTNeoXLayer)
]

def is_odd_transformer_layer(module):
    return transformer_layers.index(module) % 2 == 0
    
apply_activation_checkpointing(model, check_fn=is_odd_transformer_layer)
```

Como alternativa, PyTorch também tem o `torch.utils.checkpoint` módulo para checkpoint, que é usado por um subconjunto dos modelos Hugging Face Transformers. Esse módulo também funciona com o SMP v2. No entanto, ele exige que você tenha acesso à definição do modelo para adicionar o wrapper do ponto de verificação. Por isso, recomendamos usar o método `apply_activation_checkpointing`.