English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

invitado
1 / ?

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


FormatoBits totalesSignoExpMantRango dinámicoPrecisión
FP32321823~10^-38 a ~10^38~7 dígitos
FP16161510~10^-5 a ~10^5~3 dígitos
FP8 E4M38143~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

ANDREA-120M contiene aproximadamente 120,000,000 parámetros. Calcula la huella de almacenamiento solo de las matrices de pesos en (a) FP32, (b) FP16, (c) FP8. Muestra tu aritmética en MB. Luego calcula (d) la huella de almacenamiento con peso + primer momento de Adam + segundo momento de Adam (3x el conteo de pesos) en FP16.

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ónPasos/minNotas
FP32~3línea base; sin aceleración por núcleos tensor
FP16~6núcleos tensoriales cuBLAS; 2x aceleración
FP8 E4M3~6nú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.


Comparación de Precisión: FP32 vs FP16 vs FP8

Elegir Precisión para una Nueva Ejecución

Estás iniciando una nueva ejecución de entrenamiento estilo ANDREA en una RTX 4090. Tienes dos prioridades en conflicto: (1) maximizar pasos/min, (2) evitar depurar fallos NaN a mitad del entrenamiento. ANDREA-120M v3 eligió FP16 cuBLAS sobre FP8 E4M3 a pesar de que ambos corren a ~6 pasos/min. Razona por qué FP16 ganó esta decisión. Referencia el rango dinámico Y el soporte de tensor cores en tu respuesta.

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:


ComponenteTamaño FP16
Pesos240 MB
m (primer momento)240 MB
v (segundo momento)240 MB
Gradientes240 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

ANDREA-480M (el tercer miembro planeado de la familia) tiene ~480 millones de parámetros. Estima (a) solo pesos en FP16 en MB, (b) pesos en FP16 + m + v en MB (asumiendo m y v también en FP16 por simplicidad), y (c) dado la regla general de multiplicador 6-8x, huella total durante el entrenamiento en FP16. ¿Cabe ANDREA-480M en una sola RTX 4090 (24 GB)?

Precisión en la Práctica

Supongamos que descubres a mitad del entrenamiento que ANDREA-120M produce pérdidas NaN ocasionales cada ~5000 pasos en FP16, & cada NaN requiere reiniciar desde un checkpoint. ¿Qué UN cambio probarías primero para reducir la frecuencia de NaN sin salir de FP16? Justifica con un mecanismo de una oración.

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.