eval_chat_quality() Estaba Conectado al Corredor Equivocado
Un Fallo de 10 Días Que Debería Haber Parado en el Día 3
ANDREA-120M v1 se entrenó durante 16.1 días en una RTX 4090 a 130W continuos. Las salidas de muestra se almacenaron cada 200 pasos pero nunca se analizaron durante la ejecución. En el paso 80K (día 4), las muestras decían region region region region region. En el paso 110K, ''''' ''''' '' ''' ''. El entrenamiento continuó por otros 11 días antes de ser detenido manualmente en el paso 165K.
Qué Falló en la Alarma de Incendio
eval_chat_quality() existía en el código base. Evaluaba la calidad de las muestras. Incluso funcionaba correctamente. Pero estaba conectado solo al corredor multi-fase legacy. El currículo firehose v1 usaba una ruta de código diferente y nunca invocaba la eval. La alarma de humo estaba en otra habitación con la puerta cerrada.
El Costo
16.1 días de cómputo. 130W continuos. ~50 kWh de electricidad. El modelo no produjo salida utilizable en ningún momento. La EMA de pérdida llegó a 3.23 en el paso 110K, luego subió a 4.54 en el paso 165K cuando el entrenamiento se detuvo. Numéricamente razonable; semánticamente vacío.
La probabilidad aleatoria para un vocabulario de 8449 tokens es 9.04. v1 alcanzó una pérdida EMA de 3.23 mientras producía region region region. La pérdida sola no puede detectar el colapso de coherencia. Un modelo que minimiza la entropía cruzada repitiendo un token de alta frecuencia recibe recompensa numérica por el modo de fallo.
Por Qué las Curvas de Pérdida Mintieron
Puntúa Cada Muestra en Cuatro Ejes
La Puntuación Compuesta
v2 implementa una puerta de coherencia que puntúa cada muestra (tomada cada 100 pasos durante el entrenamiento de manguera) en cuatro métricas:
| Métrica | Rango | Lo que detecta |
|---|---|---|
| Diversidad de bigramas | 0-35 | Repetición a nivel de dos tokens (región región) |
| Diversidad de trigramas | 0-35 | Repetición a nivel de tres tokens (a, b, a, b, a, b) |
| Presencia de palabras en inglés | 0-20 | Desviación a no inglés (CJK, cirílico, gibberish) |
| Diversidad de caracteres | 0-10 | Colapso a un solo carácter (''''', ... ... ...) |
Total posible: 100. Umbral: 30.
Por qué cuatro métricas, no una
Cada métrica detecta un modo de fallo diferente:
- Un modelo que colapsa a un bigrama grande falla en Diversidad de bigramas pero pasa en Diversidad de caracteres.
- Un modelo que produce ruido de puntuación (''''' ''''' '') falla en Diversidad de caracteres pero podría pasar en Diversidad de bigramas si las parejas de puntuación varían.
- Un modelo que deriva a un idioma no inglés (contaminación por entrenamiento en traducción) falla en la presencia de palabras en inglés, pero pasa la diversidad de Bigramas y Trigramas si produce mandarín gramatical.
- Un modelo que produce a, b, a, b, a, b pasa Bigram (a-b & b-a aparecen) pero falla Trigram (a-b-a, b-a-b dominan).
Juntas, las cuatro métricas abarcan el espacio de fallos. Una puntuación compuesta por debajo de 30 significa que al menos un eje colapsó lo suficientemente mal como para arrastrar toda la muestra hacia abajo.
Contador Consecutivo
El auto-halt se activa después de 5 muestras consecutivas con puntuación por debajo de 30. Muestras malas individuales pueden ocurrir durante transiciones de fase o extracciones de fuentes raras; cinco seguidas significan que el modelo ha dejado de recuperarse. Con muestras tomadas cada 100 pasos, 5 muestras degeneradas consecutivas = 500 pasos de colapso de coherencia confirmado.
Calcular una Puntuación
Cómo se habría visto v1
Activación probada retrospectivamente
Dadas las muestras almacenadas de v1, aplicar retrospectivamente la puerta de coherencia de v2 muestra que la puerta se habría activado en el paso 132K. v1 se ejecutó hasta el paso 165K antes de la terminación manual. La puerta habría detenido el entrenamiento 33.000 pasos antes.
Computación Ahorrada
RTX 4090 entrenada a ~6 pasos/min en FP16 cuBLAS. 33,000 pasos / 6 pasos/min = 5,500 minutos = 91.6 horas = 3.8 días de computación ahorrados. A 130W continuos, eso son ~12 kWh de electricidad, más 3.8 días de desgaste de GPU.
Por qué el Paso 132K y No el Paso 80K
v1 produjo region region region en el paso 80K. ¿Por qué no se activó la puerta entonces?
Porque aparecieron muestras buenas intermitentes entre las malas. El bandido cicló a través de las fuentes cada 7-42 pasos. Incluso un modelo degenerado ocasionalmente producía salidas más diversas al muestrear de una fuente diferente, reiniciando momentáneamente el contador consecutivo. Para el paso 132K, el modelo se había colapsado lo suficiente como para que 5 muestras degeneradas consecutivas (500 pasos) fueran inevitables.
Lección: Conecta la Alarma de Humo a Cada Cableado
v2 conecta eval_chat_quality() directamente al código de manejo de muestras del currículo de manguera contra incendios, no solo al corredor legacy. Cada muestra, cada ejecución, cada camino de código: la misma puerta. La corrección tomó ~30 líneas de código.