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, GradScalerO 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
- Treinamento com várias GPUs usando DataParallel
- DistributedDataParallel (DDP)
- Treinamento com precisão mista usando AMP
- Treinamento eficiente com Hugging Face Accelerate