# Ejecutar IA en una CPU: cuantización, ONNX y por qué ganan los modelos pequeños

> No siempre hace falta una GPU. Cómo la cuantización int8, ONNX Runtime y el tamaño adecuado hacen que un modelo responda en milisegundos en CPU.

Source: https://www.vigimod.com/es/learn/running-ai-on-a-cpu · VigiMod (https://www.vigimod.com) · actualizado el 2026-11-11 · 7 min

## En resumen

- Un modelo es sobre todo multiplicación de números; menos números y más pequeños significan más velocidad.
- La cuantización guarda los pesos como enteros de 8 bits en lugar de decimales de 32 bits: unas 4 veces más pequeño y a menudo de 2 a 4 veces más rápido.
- ONNX Runtime ejecuta los modelos de forma eficiente en las CPU usando sus instrucciones vectoriales (AVX-512, AMX).
- Después de cuantizar hay que revisar los umbrales: las puntuaciones cambian un poco.

## Por qué importa la velocidad

Una API de moderación de chats tiene que responder mientras el usuario todavía mira la pantalla: unos cientos de milisegundos como mucho. Las GPU son rápidas pero caras; los servidores normales tienen CPU. Conseguir que un modelo sea rápido en una CPU es lo que hace asequible un servicio de moderación.

## Qué calcula un modelo

Una red neuronal es sobre todo **multiplicación de matrices**: los números que representan el texto se multiplican por los pesos del modelo, capa tras capa. La velocidad depende de cuántas multiplicaciones hay (el tamaño del modelo y la longitud del texto) y de lo rápida que es cada una.

## La cuantización

Los pesos se guardan normalmente como números decimales de 32 bits. La **cuantización** los guarda como enteros de 8 bits (int8), con un factor de escala por fila o canal:

| Formato | Tamaño de un modelo de 560 millones de parámetros | Velocidad típica en CPU |
|---|---|---|
| float32 | unos 2,2 GB | referencia |
| int8 | unos 0,6 GB | a menudo de 2 a 4 veces más rápido |

Las CPU modernas tienen instrucciones que multiplican muchos números de 8 bits a la vez (VNNI, AVX-512, Intel AMX), y de ahí viene la velocidad.

El precio es una pérdida mínima de precisión. Con la **cuantización dinámica por canal**, un buen clasificador no suele perder casi nada medible, pero las puntuaciones se desplazan un poco. Por eso hay que **volver a ajustar** los umbrales después de cuantizar: cada umbral se mueve para que el modelo cuantizado marque la misma proporción de mensajes que el original en un conjunto de calibración.

## ONNX y ONNX Runtime

**ONNX** es un formato abierto para guardar un modelo como un grafo de operaciones, independiente del framework con el que se entrenó. **ONNX Runtime** ejecuta ese grafo y está optimizado para CPU: fusiona operaciones, usa todos los núcleos y elige las instrucciones más rápidas disponibles.

## Un ejemplo real

VigiMod 1.2.1 tiene unos 560 millones de parámetros. Con 4 núcleos de CPU:

| Versión | Tiempo por par mensaje–categoría |
|---|---|
| Precisión completa | unos 113 ms |
| ONNX int8 | **unos 32 ms** (3,5 veces más rápido) |

Tras ajustar los umbrales, la pérdida de calidad medida en datos de validación fue inferior a 0,005 de F1, dentro del ruido.

## Otros trucos

- **Entradas más cortas:** limita el contexto a los últimos mensajes que importan.
- **Lotes:** puntúa varios mensajes a la vez cuando llegan juntos.
- **Guardar en caché la parte fija** de la entrada (por ejemplo una política larga) en los modelos que lo permiten.
- **Modelo más pequeño, mejores datos:** un modelo pequeño entrenado con los ejemplos adecuados suele superar a uno grande y genérico, a una fracción del coste.

## Cuándo sí hace falta una GPU

Para entrenar y para ejecutar modelos muy grandes que generan respuestas largas. Un diseño habitual es una **cascada**: un modelo pequeño y rápido para cada mensaje y uno más grande solo para los pocos casos dudosos.

## Cuestionario

1. ¿Qué cambia la cuantización a int8?
   Respuesta: Los pesos se guardan como enteros de 8 bits en lugar de decimales de 32 bits. Números más pequeños significan un modelo más pequeño y rápido.
2. ¿Por qué hay que revisar los umbrales después de cuantizar?
   Respuesta: Las puntuaciones se desplazan un poco. Al ajustarlos se mantiene la misma proporción de mensajes marcados que en el original.
3. ¿Qué es ONNX Runtime?
   Respuesta: Un motor que ejecuta modelos de forma eficiente, también en CPU. Ejecuta el grafo del modelo con las instrucciones de CPU más rápidas.
4. ¿Qué es una cascada?
   Respuesta: Un modelo rápido para cada mensaje y uno grande solo para los casos dudosos. Mantiene la mayoría de las peticiones rápidas y baratas.
