Colaboraciones

¿Cambia FP8 las respuestas de un modelo? Un cambio entre 120

con Anagha Langhe · LLM autoalojado en una sola NVIDIA L4

En medio minuto

Anagha Langhe ejecuta un modelo de lenguaje por su cuenta, en una sola tarjeta NVIDIA L4, y quería saber si pasarlo a FP8 le cuesta precisión. En 120 preguntas, las dos versiones sumaron 72 y 71 aciertos. Eso por sí solo dice poco, así que contamos los cambios: cambió una pregunta, y a favor de bf16. 49 respuestas fueron idénticas palabra por palabra, y cuando las dos versiones se equivocaron dieron la misma respuesta errónea 42 veces de 48. Anagha ejecutó un script abierto de comparación sobre sus dos ejecuciones, obtuvo exactamente las mismas cifras y sacó su propia conclusión: los errores vienen de la recuperación, no de la cuantización.

La pregunta

Ejecutar un modelo en FP8 en lugar de bf16 reduce más o menos a la mitad la memoria que necesita, y esa es la razón de hacerlo en una sola GPU. La duda es simple: ¿hace el formato más pequeño, sin avisar, que las respuestas empeoren?

Anagha lo midió directamente. Hizo las mismas 120 preguntas a las dos versiones y lo contó en LinkedIn: 72 aciertos en bf16, 71 en FP8, con una prueba exacta de McNemar de p = 1.0. En la misma publicación compartió otra cifra de su configuración: la tasa de aciertos de la caché de prefijos pasó del 12% al 26%.

72 contra 71 parece "sin diferencia". Pero con 120 preguntas, una prueba así solo puede descartar una caída grande. Una pérdida de tres o cuatro puntos probablemente tampoco saldría como significativa. Así que lo interesante no es el valor p, sino lo que le pasó realmente a cada pregunta.

Quién hizo qué

  • Anagha montó la configuración, ejecutó las dos versiones sobre las mismas 120 preguntas, corrigió las respuestas y más tarde ejecutó la comparación sobre sus propios archivos.
  • Nosotros (Vadym Chernets) le preguntamos cuántas preguntas habían cambiado en cada sentido, luego añadimos un pequeño modo compare a un script abierto que mantenemos para comprobar la coincidencia entre modelos, y calculamos el intervalo y las cifras de planificación a partir de su resumen.
  • La ejecución de Anagha de ese script con todos sus datos devolvió las mismas cifras, y una más que no podíamos ver en el resumen: con qué frecuencia las dos versiones se equivocaron de la misma manera.

Cómo se ven los números

120 preguntas las mismas para ambas bf16 72 aciertos FP8 71 aciertos 71ambasaciertan 1solo bf16acierta 0solo FP8acierta 48ambasfallan De las 48 que ambas fallaron: 42 la misma respuesta errónea · 6 distintas
Cada una de las 120 preguntas cae en una de cuatro casillas. Solo una queda fuera de la diagonal. La mayoría de los errores compartidos son exactamente la misma respuesta.
1 de 120preguntas cambiaron entre las dos versiones, a favor de bf16
49respuestas coincidieron palabra por palabra
42 de 48errores compartidos fueron la misma respuesta errónea
Medida Valor
Precisión, bf16 72 / 120
Precisión, FP8 71 / 120
Cambios: solo acierta bf16 / solo acierta FP8 1 / 0
Prueba exacta de McNemar p = 1.0
Diferencia bf16 − FP8 +0.8 puntos, intervalo del 95% de aproximadamente −2.3 a +4.6
Respuestas idénticas, palabra por palabra 49 de 120
Ambas fallan, con la misma respuesta errónea 42 de 48

Cómo leerlo. Un solo cambio es totalmente compatible con que FP8 no cueste nada. No es una prueba de que no cuesta nada: una caída de un par de puntos todavía cabe dentro del intervalo. Con menos de seis cambios, una prueba exacta de McNemar no puede llegar a p < 0.05 sea cual sea su dirección, así que aquí los números útiles son los propios cambios y el intervalo. Para detectar una caída de un punto harían falta unas 800 preguntas, incluso si todos los cambios fueran en el mismo sentido.

Lo de 42 de 48 es lo que nos sorprendió. Si la versión FP8 fuera simplemente más ruidosa, sus errores estarían dispersos. En cambio, las dos versiones tropiezan en las mismas preguntas y aterrizan en la misma respuesta errónea. En palabras de Anagha, eso "encaja con mi lectura de que los errores vienen de la recuperación, no de la cuantización": cuando el contexto recuperado es malo, las dos versiones leen el mismo mal contexto y dicen lo mismo.

Pruébalo con tus propias ejecuciones

Si tienes dos ejecuciones sobre las mismas preguntas como JSONL (un identificador de pregunta, la respuesta, y bien un campo correct o un archivo con las respuestas de referencia), la comparación es un solo comando. Forma parte del repositorio abierto memory-agreement-check, licencia MIT, sin dependencias:

git clone https://github.com/vadimchernets/memory-agreement-check
cd memory-agreement-check
python -m memcheck compare bf16.jsonl fp8.jsonl --label-a bf16 --label-b FP8

Una línea por pregunta tiene este aspecto:

{"qid": "q001", "answer": "Paris", "correct": true, "category": "factual"}

Imprime la tabla de 2×2, la prueba exacta de McNemar, el intervalo de la diferencia de precisión, cuántas respuestas son idénticas, con qué frecuencia las dos ejecuciones coinciden y fallan a la vez, y un desglose por categoría si tus preguntas la tienen. --md report.md guarda el informe.

Qué muestra esto y qué no

  • 120 preguntas bastan para ver que FP8 no arruinó este modelo. No bastan para prometer que no hay una caída de uno o dos puntos.
  • La prueba trata las preguntas como independientes. Si muchas provienen de un mismo documento o de una misma plantilla, la muestra real es menor que 120.
  • "Los errores vienen de la recuperación" es la lectura de Anagha sobre su propio sistema. Los 42 de 48 la respaldan; comprobarlo directamente exigiría responder las mismas preguntas una vez con un buen contexto y otra con uno malo.

Lo que viene

Anagha aceptó que su comparación FP8 contra bf16 pase al repositorio como ejemplo trabajado, con su nombre como autora, para que la próxima persona que compare dos versiones tenga un caso real del que partir y no solo uno sintético.

Cronología

  1. Anagha publica su comprobación de FP8 en LinkedIn: 71 contra 72 de 120, McNemar p = 1.0. Comentamos que los recuentos de cambios dicen más que el valor p. Ella responde, y le preguntamos cuántas preguntas cambiaron en cada sentido.
  2. Su respuesta: solo una, bf16 acierta y FP8 falla, ninguna en el otro sentido, y 49 de las 120 respuestas idénticas palabra por palabra. Durante la noche el script abierto gana su modo compare, y le enviamos el intervalo y las cifras de planificación calculados a partir de su resumen.
  3. Anagha lo ejecuta sobre sus dos ejecuciones: las cifras coinciden exactamente, y cuando las dos versiones fallaron dieron la misma respuesta errónea en 42 de 48. Acepta lo del ejemplo trabajado.

← Todas las colaboraciones · Proponer una colaboración