Signo, Exponente, Mantisa
Formato de Punto Flotante IEEE 754
Cada número de punto flotante almacena tres campos:
- Bit de signo (1 bit): positivo o negativo
- Exponente (E bits): la escala de magnitud, una potencia entera de 2
- Mantisa (M bits): la precisión fraccionaria, un número entre 1.0 y ~2.0
Bits totales = 1 + E + M. El valor es aproximadamente (-1)^sign (1 + mantisa) 2^(exponente - bias).
Dos propiedades importan para el entrenamiento:
Rango dinámico = 2^(2^E) (aproximadamente). Más bits de exponente significa representar números más pequeños y más grandes sin desbordamiento.
Precisión = 2^M valores distintos por potencia de 2. Más bits de mantisa significa una representación más fina entre potencias de 2 consecutivas.
Los Tres Formatos
| Formato | Bits totales | Signo | Exp | Mant | Rango dinámico | Precisión |
|---|---|---|---|---|---|---|
| FP32 | 32 | 1 | 8 | 23 | ~10^-38 a ~10^38 | ~7 dígitos |
| FP16 | 16 | 1 | 5 | 10 | ~10^-5 a ~10^5 | ~3 dígitos |
| FP8 E4M3 | 8 | 1 | 4 | 3 | ~2^-9 a ~448 | ~2 dígitos |
FP8 E4M3 se lee como "4 bits de exponente, 3 bits de mantisa". Una alternativa FP8 E5M2 intercambia precisión por rango; los experimentos de ANDREA usan E4M3 porque las activaciones del transformer se mantienen en bandas de magnitud estrechas donde la precisión extra gana sobre el rango extra.
Bytes Por Parámetro
Por qué la Precisión Más Baja se Ejecuta Más Rápido
El Ancho de Banda de Memoria Domina la Velocidad de Entrenamiento
Las GPUs modernas pasan más tiempo esperando la memoria que computando. La RTX 4090 tiene 1008 GB/s de ancho de banda de memoria y 165 TFLOPS de cómputo FP16. Una capa típica lee pesos de VRAM, multiplica activaciones, escribe resultados de vuelta. El ancho de banda, no el cómputo, decide el rendimiento.
Reducir a la mitad la precisión reduce a la mitad los bytes por parámetro, por lo que leer los mismos pesos usa la mitad del ancho de banda de memoria. El rendimiento se duplica aproximadamente.
Núcleos Tensor: Multiplicación de Matrices Acelerada por Hardware
La RTX 4090 incluye unidades dedicadas de núcleos tensor que calculan multiplicaciones de matrices en FP16 o FP8 directamente. Una sola operación de núcleo tensor multiplica un pequeño bloque (p. ej. 16x16) en un ciclo, dramáticamente más rápido que las multiplicaciones escalares FP32.
Números empíricos de ANDREA-120M:
| Precisión | Pasos/min | Notas |
|---|---|---|
| FP32 | ~3 | línea base; sin aceleración por núcleos tensor |
| FP16 | ~6 | núcleos tensoriales cuBLAS; 2x aceleración |
| FP8 E4M3 | ~6 | núcleos tensoriales; comparable a FP16 |
FP8 no superó a FP16 en rendimiento en esta carga de trabajo porque el rendimiento de cómputo dejó de ser el cuello de botella; el ancho de banda de memoria y la sobrecarga de lanzamiento se volvieron limitantes. ANDREA-120M v3 se envía en FP16 cuBLAS a 6 pasos/min para un margen de seguridad cómodo sin perder rendimiento.
Riesgo de NaN en FP8
FP8 E4M3 representa números desde ~2^-9 hasta ~448. Activaciones o gradientes fuera de ese rango desbordan a NaN (no es un número) o subfluyen a cero. Un solo NaN envenena cada cómputo downstream: multiplicaciones de matrices con un NaN devuelven todo-NaN; gradientes todo-NaN corrompen el estado de AdamW; AdamW con NaN m & v produce actualizaciones NaN; los pesos se convierten en NaN; toda la ejecución de entrenamiento muere.
Los experimentos FP8 de ANDREA produjeron ocasionales acantilados NaN que requerían escalado de pérdida, cambio programado de precisión o rutas de fallback. El rango dinámico de FP16 (~10^-5 a ~10^5) es lo suficientemente amplio para que los eventos NaN sigan siendo raros sin trucos de escalado intrincados.
Elegir Precisión para una Nueva Ejecución
Ajustando 120M en una sola 4090
El Multiplicador de 6-8x de la Lección Introductoria
Recuerda de grow_a_language_model_intro que la memoria de entrenamiento equivale aproximadamente a 6-8x el conteo bruto de pesos, considerando:
- Peso (1x)
- Primer momento de Adam m (1x)
- Segundo momento de Adam v (1x)
- Buffer de gradiente (1x)
- Activaciones y temporales (~2-4x, depende del lote y contexto)
ANDREA-120M en FP16 con batch_size=8, context=1024:
| Componente | Tamaño FP16 |
|---|---|
| Pesos | 240 MB |
| m (primer momento) | 240 MB |
| v (segundo momento) | 240 MB |
| Gradientes | 240 MB |
| Activaciones | ~2-4 GB (lote, ctx) |
| Total | ~3.5 GB |
La RTX 4090 tiene 24 GB de VRAM. ANDREA-120M usa ~14% en FP16. Hay mucho espacio para lotes más grandes o ventanas de contexto más largas. ANDREA-12M usó solo 1.4 GB en total.
Dónde vive la precisión mixta
ANDREA NO mantiene todo en una sola precisión. El entrenamiento de precisión mixta almacena:
- Pesos maestros: FP32 (preserva la estabilidad del entrenamiento)
- Cómputo forward y backward: FP16 (usa tensor cores)
- Estado del optimizador AdamW: FP32 (m y v necesitan precisión para actualizaciones de cola larga)
- Buffer de gradientes: FP16 (lado de cómputo)
El presupuesto de memoria final mezcla ambos. La huella real de ANDREA se encuentra entre FP16 puro (720 MB estado del optimizador) y FP32 puro (1.44 GB estado del optimizador), más cerca de FP32 porque m y v permanecen en FP32.
Dimensionando un Presupuesto para ANDREA-480M
Precisión en la Práctica
Actividades Adyacentes
Tres actividades hermanas se relacionan con precisión:
- Actividad 1: Intro / Presupuesto VRAM. La precisión multiplica cada término en la aritmética del presupuesto de memoria. La regla general del multiplicador 6-8x es adimensional; bytes-por-parámetro le da unidades.
- Actividad 10: AdamW. El estado del optimizador (m & v) típicamente permanece en FP32 incluso cuando el cómputo forward/backward se ejecuta en FP16. Razón: la precisión del acumulador de cola larga importa más que la velocidad de ejecución para el optimizador.
- Actividad 12: Recorte de gradientes. El recorte limita las magnitudes de los gradientes antes de las actualizaciones del estado del optimizador. Con forward/backward en FP16 & optimizador en FP32, el recorte ocurre en el límite donde cambia la precisión & donde se concentra el riesgo de desbordamiento.
La precisión es un perilla gratuita: cámbiala, el modelo entrena más rápido & usa menos memoria. El costo es el cuidado numérico: manejo de NaN, escalado de pérdida, disciplina de precisión mixta. ANDREA-120M v3 demuestra el beneficio: 120M parámetros entrenados en hardware de consumo en 23 días porque FP16 redujo todo a la mitad.