0Pricing
Learn AI with Python · Aula

Treinamento com precisão mista usando AMP

torch.cuda.amp.autocast(), GradScaler, FP16 versus BF16, economia de memória e ganhos de velocidade.

Treinamento com precisão mista usando AMP é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.

O que é precisão mista

O treinamento com precisão mista executa a maioria das operações usando ponto flutuante de 16 bits (FP16), em vez de 32 bits (FP32). FP16 usa metade da memória e é executado mais rapidamente nos núcleos tensoriais das GPUs modernas, enquanto algumas operações sensíveis permanecem em FP32 para manter a estabilidade.

Os benefícios

A precisão mista oferece:

  • economia de memória de aproximadamente 2x, permitindo lotes ou modelos maiores
  • Multiplicações de matrizes mais rápidas nos núcleos tensoriais
  • Pouca ou nenhuma perda na precisão final do modelo quando usada corretamente

O problema do subfluxo em FP16

FP16 tem um intervalo limitado. Valores pequenos de gradiente podem sofrer subfluxo até zero, interrompendo o aprendizado silenciosamente. Esse é o principal desafio que a precisão mista precisa resolver e o motivo pelo qual não podemos simplesmente converter tudo para FP16.

torch.cuda.amp

A precisão mista automática (AMP) do PyTorch cuida dos detalhes com duas ferramentas: autocast escolhe a precisão para cada operação, e GradScaler evita o subfluxo dos gradientes.

import torch
from torch.cuda.amp import autocast, GradScaler

O contexto de autocast

Envolva a passagem direta em autocast(). Dentro dele, PyTorch executa automaticamente cada operação com a precisão mais segura: multiplicações de matrizes em FP16, reduções como softmax e perda em FP32.

with autocast():
    output = model(x)
    loss = criterion(output, y)

Apresentando GradScaler

GradScaler combate o subfluxo multiplicando a perda por um grande fator de escala antes da retropropagação. Isso desloca os gradientes muito pequenos para o intervalo representável em FP16; a escala é removida antes da etapa do otimizador.

scaler = GradScaler()

Escalonando a perda

scaler.scale(loss).backward() aumenta a escala da perda e então executa a retropropagação. Os gradientes resultantes também são escalonados, impedindo que valores pequenos desapareçam.

scaler.scale(loss).backward()

scaler.step

scaler.step(optimizer) primeiro remove a escala dos gradientes, restaurando sua magnitude real, e então chama optimizer.step(), mas somente se não tiverem surgido infinitos ou NaNs. Se os gradientes tiverem estourado, a etapa será ignorada.

scaler.step(optimizer)

scaler.update

scaler.update() ajusta o fator de escala para a próxima iteração: aumenta a escala quando as etapas são bem-sucedidas e a reduz após um estouro. Essa escala adaptativa mantém o treinamento estável automaticamente.

scaler.update()

O ciclo completo de AMP

Ao juntar as partes, obtemos uma etapa completa de treinamento com precisão mista.

scaler = GradScaler()
for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    with autocast():
        out = model(x)
        loss = criterion(out, y)
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

Dicas práticas

Tenha isto em mente:

  • Chame backward() somente na perda escalonada
  • autocast envolve somente a passagem direta, não a retropropagação nem a etapa do otimizador
  • AMP é especialmente eficaz em GPUs com núcleos tensoriais; os ganhos são menores em hardware mais antigo

Verificação rápida

Teste seus conhecimentos sobre AMP.

Recapitulação

Você aprendeu sobre treinamento com precisão mista usando AMP:

  • autocast() escolhe FP16 ou FP32 para cada operação na passagem direta
  • GradScaler escala a perda para evitar o subfluxo dos gradientes
  • O ciclo é scaler.scale(loss).backward(), scaler.step(optimizer), scaler.update()
  • Resultado: economia de memória de aproximadamente 2x e treinamento mais rápido

Perguntas Frequentes

A aula “Treinamento com precisão mista usando AMP” é grátis?

Sim — o texto completo de “Treinamento com precisão mista usando AMP” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.

O que vou aprender em “Treinamento com precisão mista usando AMP”?

torch.cuda.amp.autocast(), GradScaler, FP16 versus BF16, economia de memória e ganhos de velocidade. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Learn AI with Python?

Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Treinamento com precisão mista usando AMP”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Learn AI with Python?

Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Treinamento com várias GPUs usando DataParallel
  2. DistributedDataParallel (DDP)
  3. Treinamento com precisão mista usando AMP
  4. Treinamento eficiente com Hugging Face Accelerate
← Voltar para Learn AI with Python