Entrenamiento con precisión mixta mediante AMP
torch.cuda.amp.autocast(), GradScaler, FP16 frente a BF16, ahorro de memoria y mejoras de velocidad.
Entrenamiento con precisión mixta mediante AMP es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.
Qué es la precisión mixta
El entrenamiento con precisión mixta ejecuta la mayoría de las operaciones con coma flotante de 16 bits (FP16) en lugar de 32 bits (FP32). FP16 utiliza la mitad de memoria y se ejecuta más rápido en los tensor cores de las GPU modernas, mientras que algunas operaciones sensibles permanecen en FP32 para mantener la estabilidad.
Las ventajas
La precisión mixta ofrece:
- ~2 veces menos memoria, lo que permite usar lotes o modelos más grandes
- Multiplicaciones de matrices más rápidas en los tensor cores
- Poca o ninguna pérdida de precisión final del modelo cuando se aplica correctamente
El problema del underflow en FP16
FP16 tiene un rango reducido. Los valores pequeños de los gradientes pueden sufrir underflow hasta convertirse en cero, deteniendo el aprendizaje silenciosamente. Este es el desafío central que debe resolver la precisión mixta y la razón por la que no se puede convertir todo directamente a FP16.
torch.cuda.amp
La Automatic Mixed Precision (AMP) de PyTorch gestiona los detalles con dos herramientas: autocast elige la precisión para cada operación y GradScaler evita el underflow de los gradientes.
import torch
from torch.cuda.amp import autocast, GradScalerEl contexto de autocast
Envuelva el paso forward en autocast(). Dentro de él, PyTorch ejecuta automáticamente cada operación con la precisión más segura: las multiplicaciones de matrices en FP16 y las reducciones, como softmax y la pérdida, en FP32.
with autocast():
output = model(x)
loss = criterion(output, y)Introducción a GradScaler
GradScaler combate el underflow multiplicando la pérdida por un factor de escala grande antes de la propagación hacia atrás. Esto desplaza los gradientes pequeños al rango representable en FP16; la escala se elimina antes del paso del optimizador.
scaler = GradScaler()Escalar la pérdida
scaler.scale(loss).backward() aumenta la escala de la pérdida y después ejecuta la propagación hacia atrás. Los gradientes resultantes también se escalan, lo que evita que los valores pequeños desaparezcan.
scaler.scale(loss).backward()scaler.step
scaler.step(optimizer) primero deshace la escala de los gradientes para devolverlos a su magnitud real y después llama a optimizer.step(), pero solo si no han aparecido valores inf o NaN. Si los gradientes se desbordan, se omite el paso.
scaler.step(optimizer)scaler.update
scaler.update() ajusta el factor de escala para la siguiente iteración: aumenta la escala cuando los pasos se completan correctamente y la reduce después de un desbordamiento. Esta escala adaptativa mantiene la estabilidad del entrenamiento automáticamente.
scaler.update()El bucle AMP completo
Al unir las piezas, se obtiene un paso completo de entrenamiento con precisión mixta.
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()Consejos prácticos
Tenga en cuenta lo siguiente:
- Llame a
backward()únicamente sobre la pérdida escalada - autocast envuelve solo el paso forward, no la propagación hacia atrás ni el paso del optimizador
- AMP ofrece sus mejores resultados en GPU con tensor cores; las mejoras son menores en hardware antiguo
Comprobación rápida
Compruebe sus conocimientos sobre AMP.
Resumen
Ha aprendido sobre el entrenamiento con precisión mixta mediante AMP:
autocast()elige FP16 o FP32 para cada operación del paso forward- GradScaler escala la pérdida para evitar el underflow de los gradientes
- El ciclo es
scaler.scale(loss).backward(),scaler.step(optimizer),scaler.update() - Resultado: aproximadamente el doble de ahorro de memoria y un entrenamiento más rápido
Preguntas frecuentes
¿La lección «Entrenamiento con precisión mixta mediante AMP» es gratis?
Sí — el texto completo de «Entrenamiento con precisión mixta mediante AMP» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué aprenderé en «Entrenamiento con precisión mixta mediante AMP»?
torch.cuda.amp.autocast(), GradScaler, FP16 frente a BF16, ahorro de memoria y mejoras de velocidad. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn AI with Python?
No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Entrenamiento con precisión mixta mediante AMP»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?
Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Entrenamiento multi-GPU con DataParallel
- DistributedDataParallel (DDP)
- Entrenamiento con precisión mixta mediante AMP
- Entrenamiento eficiente con Hugging Face Accelerate