29/11/2010
En el mundo del Deep Learning, la fase de inferencia es un momento crítico donde los modelos entrenados se ponen a prueba en el mundo real. Si bien las GPUs suelen acaparar los titulares, la inferencia en CPU sigue siendo una solución viable y, a menudo, más económica para muchas aplicaciones. La pregunta clave es: ¿qué framework de software ofrece el mejor rendimiento y la menor latencia en este entorno? Para responder a esta pregunta, nos sumergimos en un análisis comparativo detallado que enfrenta a cuatro de los frameworks más populares del momento: mxnet, ncnn, OpenVINO y ONNX Runtime. El objetivo es claro: identificar al campeón de la velocidad y entender cómo la asignación de recursos, específicamente el número de hilos del procesador, puede optimizar drásticamente los resultados.

Configuración del Campo de Batalla: El Entorno de Pruebas
Para que una comparativa sea justa y reveladora, es fundamental conocer a fondo el hardware y el software sobre el que se realiza. No se trata de una prueba en un ordenador de escritorio convencional, sino en una configuración de servidor robusta, lo que nos da una idea del rendimiento en entornos de producción.
Especificaciones del Hardware
Las pruebas se ejecutaron en un sistema equipado con un Dual Intel(R) Xeon(R) CPU E5-2630 v4 a 2.20GHz. Esto se traduce en un total de 20 núcleos físicos y 40 hilos de procesamiento, respaldados por 128 GB de memoria RAM. Esta configuración es típica de servidores diseñados para manejar cargas de trabajo intensivas y concurrentes.
El Modelo Bajo la Lupa
El modelo de red neuronal utilizado para la inferencia es el Arcface ResNet100, una arquitectura conocida en el campo del reconocimiento facial. Este es un modelo considerablemente complejo, con 65.131 millones de parámetros (MParams) y que requiere 24.209 GFLOPs (miles de millones de operaciones de punto flotante por segundo) para una sola pasada. El modelo, entrenado originalmente en mxnet, espera una imagen de entrada de 112x112 píxeles en formato RGB.
Metodología de la Medición
La precisión en la medición es clave. En este benchmark:
- El tiempo de inferencia incluye la conversión del buffer de la imagen al formato específico que requiere cada framework.
- Se excluye el tiempo de lectura y decodificación de la imagen desde el disco para aislar únicamente el rendimiento del framework.
- La primera inferencia de cada prueba se descarta. Esto es una práctica estándar conocida como "calentamiento" (warm-up), que asegura que todos los pesos y parámetros de la red ya estén cargados en memoria y no afecten la medición real.
- Los tiempos promedio se calculan sobre una base de aproximadamente 1000 inferencias para garantizar la estabilidad estadística de los resultados.
- El uso de memoria se refiere al "maximum resident set size", es decir, el pico máximo de memoria física utilizada por el proceso.
Análisis de Rendimiento: Framework por Framework
A continuación, desglosamos el comportamiento de cada competidor, observando cómo la velocidad de inferencia y el consumo de memoria varían a medida que aumentamos el número de hilos dedicados a la tarea.
Apache mxnet (v1.8.0.rc3)
Utilizando el backend MKL (Math Kernel Library) de Intel, mxnet muestra una escalabilidad muy buena. Comienza con una latencia de 352 ms con un solo hilo y reduce drásticamente este tiempo a medida que se añaden más. Alcanza su punto óptimo alrededor de los 9-10 hilos, donde se estabiliza con una latencia de 64 ms. Un dato destacable es su consumo de memoria, que se mantiene increíblemente estable en torno a los 0.52 Gb, sin importar el número de hilos utilizados. Mantiene la integridad de la salida, lo que significa que los resultados son consistentes con el modelo original.
ncnn (hash 5e4ea0b)
ncnn también demuestra una excelente capacidad para aprovechar el multithreading. Su punto de partida es de 332 ms con un hilo, ligeramente más rápido que mxnet. Su rendimiento escala de forma muy similar, alcanzando su mejor tiempo de 66 ms con un uso de hilos sin restricciones (aprovechando los 20 núcleos). Sin embargo, su principal desventaja es el consumo de memoria: con 1.72 Gb, es el framework que más memoria RAM demanda en esta comparativa, casi triplicando a sus competidores.

OpenVINO (v2021.2)
El kit de herramientas de Intel, OpenVINO, se presenta como el claro contendiente por la corona de la velocidad. Utilizando su plugin de CPU MKL-DNN, parte de una ya impresionante latencia de 301 ms con un solo hilo. A medida que se incrementan los hilos, su rendimiento se dispara, superando a todos los demás. Con 10 hilos, logra una latencia de solo 47 ms, y en modo sin restricciones, baja hasta los 46 ms. Su uso de memoria es muy contenido, manteniéndose en 0.57 Gb. Sin embargo, hay una advertencia importante: debido a la optimización del modelo que realiza OpenVINO, la salida numérica es ligeramente diferente a la del modelo original. Para muchas aplicaciones esto es aceptable, pero en escenarios que requieren precisión bit a bit, podría ser un factor a considerar.
ONNX Runtime (v1.6.0)
ONNX Runtime se posiciona como un competidor extremadamente equilibrado. Su latencia inicial es de 311 ms y escala de manera muy eficiente hasta los 57 ms con 10 hilos. Aunque no es el más rápido, se mantiene muy cerca de los líderes. Su mayor ventaja es, sin duda, la eficiencia de memoria. Con un consumo de solo 0.37 Gb, es el framework más ligero de la comparativa, lo que lo hace ideal para entornos con recursos de memoria limitados. Además, mantiene la integridad de la salida, ofreciendo resultados consistentes.
Tabla Comparativa y Veredicto Final
Para visualizar mejor las diferencias, hemos consolidado los datos clave en una tabla comparativa.
| Framework | Latencia (1 Hilo) | Latencia (10 Hilos) | Mejor Latencia | Uso de Memoria | Integridad Salida |
|---|---|---|---|---|---|
| mxnet | 352 ms | 64 ms | 64 ms | 0.52 Gb | Sí |
| ncnn | 332 ms | 68 ms | 66 ms | 1.72 Gb | Sí |
| OpenVINO | 301 ms | 47 ms | 46 ms | 0.57 Gb | No (ligeramente diferente) |
| ONNX Runtime | 311 ms | 57 ms | 57 ms | 0.37 Gb | Sí |
¿Quién se lleva la corona?
Si la única métrica fuera la latencia, OpenVINO es el ganador indiscutible. Su capacidad para optimizar el modelo y exprimir al máximo el hardware de Intel le otorga una ventaja significativa, siendo casi un 20% más rápido que su competidor más cercano en la prueba de 10 hilos.
Sin embargo, la elección final depende de las prioridades del proyecto:
- Máxima Velocidad: OpenVINO es la elección clara, siempre que la ligera alteración en la salida no sea un problema.
- Eficiencia de Memoria: ONNX Runtime es el campeón, ideal para dispositivos con RAM limitada o cuando se ejecutan múltiples modelos en paralelo.
- Equilibrio y Consistencia: Tanto mxnet como ONNX Runtime ofrecen un excelente equilibrio entre velocidad, uso de memoria y consistencia en los resultados.
- Alto Consumo de Memoria: ncnn, a pesar de su buen rendimiento en velocidad, queda penalizado por su elevado consumo de memoria en esta prueba específica.
Consideraciones Adicionales: ¿Y si mi CPU es AMD?
Un punto crucial a tener en cuenta es que varios de estos frameworks (especialmente mxnet y OpenVINO) dependen de la librería MKL de Intel para su alto rendimiento en CPU. Históricamente, se ha sabido que MKL puede reducir artificialmente su rendimiento cuando detecta que se está ejecutando en una CPU que no es de Intel, como las de AMD. Por lo tanto, los resultados de este benchmark, realizados en procesadores Intel Xeon, son representativos de ese ecosistema. Si su infraestructura de despliegue utiliza CPUs AMD, es muy probable que los resultados varíen y sería necesario realizar una comparativa similar en dicho hardware para tomar una decisión informada.
Preguntas Frecuentes (FAQ)
- ¿Cuál es el framework de inferencia más rápido en CPU según esta prueba?
- OpenVINO demostró ser el más rápido en este benchmark específico, alcanzando la menor latencia (46 ms) al aprovechar al máximo la arquitectura de la CPU Intel utilizada.
- ¿Aumentar el número de hilos siempre mejora el rendimiento?
- Sí, pero con rendimientos decrecientes. El mayor salto de rendimiento se observa al pasar de 1 a 2 hilos y continúa mejorando hasta aproximadamente los 8-10 hilos. Más allá de ese punto, la ganancia de velocidad se vuelve marginal para este modelo y hardware específicos.
- ¿Qué CPU se utilizó para estas pruebas?
- Se utilizó un sistema de servidor con dos procesadores Intel Xeon E5-2630 v4, sumando un total de 20 núcleos y 40 hilos.
- ¿Estos resultados son aplicables a cualquier modelo o CPU?
- No necesariamente. Los resultados son específicos para el modelo Arcface ResNet100 y la CPU Intel Xeon probada. Diferentes arquitecturas de modelos (ej. Transformers, CNNs más pequeños) y diferentes CPUs (ej. AMD, procesadores de escritorio) pueden y probablemente mostrarán resultados distintos.
Si quieres conocer otros artículos parecidos a Benchmark de Frameworks DL en CPU: ¿Cuál es el más rápido? puedes visitar la categoría Juegos.
