Comparativa entre CPU y GPU para machine learning

pexels photo 24613564 1

Comparativa entre CPU y GPU para machine learning

En los últimos años el crecimiento de los modelos de machine learning ha puesto sobre la mesa una pregunta muy concreta: ¿cuándo conviene usar CPU y cuándo GPU para entrenar o inferir? La respuesta no es tan simple como “la GPU siempre gana”.

Depende del tamaño del modelo, del tipo de datos y del presupuesto disponible. Esta comparativa entre CPU y GPU para machine learning busca aclarar esas diferencias con datos reales de arquitecturas actuales. — Más información: Cornell Virtual Workshop

Table
  1. Arquitectura interna y cómo afecta al machine learning
    1. Latencia frente a throughput
    2. Impacto de las cachés y jerarquía de memoria
    3. Unidades de procesamiento tensorial integradas
    4. Soporte para formatos de baja precisión en CPU modernas
  2. Consumo de memoria y ancho de banda en entrenamiento
    1. Configuraciones habituales en 2024
    2. Gradient checkpointing y técnicas de ahorro en CPU
    3. Técnicas de cuantización para reducir huella en CPU
  3. Comparativa entre CPU y GPU para machine learning en la práctica
    1. Resultados adicionales con otros modelos
  4. Cuándo la CPU sigue siendo la mejor opción
    1. Consejos de optimización para CPU
  5. Ejemplos reales de uso en empresas y laboratorios
    1. Casos en el sector financiero
  6. Perspectiva de futuro y nuevas arquitecturas
  7. Riesgos y desafíos en entornos híbridos CPU-GPU
    1. Compatibilidad de drivers y versiones de CUDA
    2. Seguridad y aislamiento de recursos
    3. Coste total de propiedad a tres años
  8. Optimizaciones específicas con frameworks modernos
    1. PyTorch 2.1 y compilación JIT
    2. TensorFlow y XLA en CPU
    3. ONNX Runtime y ejecución heterogénea
  9. Impacto ambiental y eficiencia energética en despliegues a escala
    1. Huella de carbono por tipo de hardware
    2. Estrategias de optimización energética
    3. Comparativa de eficiencia por TFLOPS útil

Arquitectura interna y cómo afecta al machine learning

Una CPU moderna como el Intel Xeon Platinum 8380 tiene 40 núcleos físicos y maneja hasta 80 hilos gracias al hyper-threading. Cada núcleo cuenta con unidades de ejecución potentes pero limitadas en paralelo. En cambio, una GPU NVIDIA A100 dispone de 6912 núcleos CUDA organizados en 108 streaming multiprocessors. Esa diferencia de escala es la que permite procesar miles de operaciones de multiplicación de matrices al mismo tiempo.

El machine learning depende sobre todo de operaciones de álgebra lineal. Cuando el framework (PyTorch o TensorFlow) envía un tensor a la GPU, este se divide en bloques que se ejecutan de forma masiva. La CPU, por su parte, sigue un modelo más secuencial y depende de cachés grandes para mantener el rendimiento en tareas que no se paralelizan fácilmente.

Latencia frente a throughput

  • La latencia de una CPU es menor en operaciones individuales, por lo que resulta útil cuando el modelo tiene muchas ramas condicionales o cuando se trabaja con lotes muy pequeños de datos.
  • El throughput de una GPU destaca cuando el lote supera las 32 o 64 muestras, momento en el que la ocupación de los núcleos CUDA compensa el coste de transferencia de datos por PCIe.
  • En escenarios de edge computing con Raspberry Pi o Jetson Nano, la CPU integrada sigue siendo la opción más sencilla porque evita la sobrecarga de copiar tensores entre memorias.
  • En cargas de inferencia de modelos de detección de anomalías en series temporales, la CPU mantiene latencias inferiores a 5 ms por muestra individual, mientras que la GPU requiere lotes de al menos 128 elementos para igualar esa velocidad efectiva.

Impacto de las cachés y jerarquía de memoria

Las CPU modernas integran cachés L1, L2 y L3 de gran tamaño que resultan determinantes en cargas de trabajo irregulares. Un Xeon Platinum 8380 dispone de 60 MB de caché L3 compartida, lo que permite mantener conjuntos de pesos parciales sin penalizaciones de acceso a DRAM. En contraste, las GPU priorizan el ancho de banda masivo frente a la latencia baja, confiando en miles de hilos para ocultar esperas.

  • Modelos con acceso aleatorio a embeddings, como sistemas de recomendación con tablas de hash grandes, se benefician de la caché L3 de la CPU y pueden lograr hasta 3 veces más rendimiento que una GPU sin optimizaciones específicas.
  • Cuando se entrena con batch size inferior a 16, la CPU evita el overhead de coalescing de memoria que penaliza a las arquitecturas CUDA en cargas pequeñas.
  • En modelos de grafos como GraphSAGE, la CPU con caché L3 grande reduce los fallos de página en un 40 % respecto a una GPU que debe gestionar accesos dispersos mediante memoria unificada.
  • Los sistemas de recomendación con tablas de embeddings de 50 millones de filas muestran que la caché L3 compartida de 60 MB en Xeon Platinum mantiene tasas de acierto superiores al 78 %, frente al 41 % observado en configuraciones GPU sin pinned memory optimizada.

Unidades de procesamiento tensorial integradas

Las CPU Intel Xeon de 4ª generación incorporan extensiones AMX que ejecutan operaciones de matriz de 16×16 en una sola instrucción. Esto permite alcanzar 1 TFLOPS de FP32 por núcleo sin necesidad de GPU. En pruebas con modelos de recomendación de 200 millones de parámetros, estas extensiones reducen el tiempo de inferencia un 2,8× respecto a Xeon de 3ª generación sin AMX.

Soporte para formatos de baja precisión en CPU modernas

Las extensiones AVX-512 de las CPU Xeon permiten operaciones en BF16 y FP16 con un rendimiento cercano al 80 % del FP32 nativo. En cargas de inferencia de modelos de visión como EfficientNet-B7, esta capacidad reduce el consumo de memoria en un 45 % manteniendo una precisión top-1 superior al 83 % en ImageNet.

Consumo de memoria y ancho de banda en entrenamiento

El ancho de banda de memoria es otro factor clave. Una A100 con HBM2E alcanza 2 TB/s, mientras que un Xeon con seis canales DDR4 llega apenas a 150 GB/s. Esa diferencia determina cuánto tiempo se pierde esperando datos durante el entrenamiento de redes grandes como ResNet-152 o BERT-large.

Cuando se entrena con precisión mixta (FP16 + FP32), la GPU reduce el tamaño de los gradientes y puede mantener más capas en memoria simultáneamente. La CPU, en cambio, suele requerir técnicas de gradient checkpointing más agresivas para evitar que el consumo de RAM del sistema supere los 256 GB habituales en estaciones de trabajo.

Configuraciones habituales en 2024

  • Una estación con dos A100 de 80 GB permite entrenar modelos de 7 mil millones de parámetros sin necesidad de paralelismo de modelo si se usa DeepSpeed ZeRO-3.
  • Un servidor con cuatro Xeon 8380 y 1 TB de RAM resulta más económico cuando el dataset cabe en memoria principal y el modelo tiene menos de 500 millones de parámetros.
  • En cloud, la instancia g5.12xlarge de AWS con A10G ofrece mejor relación precio-rendimiento para inferencia de Stable Diffusion que una instancia c6i.16xlarge basada solo en CPU.
  • Configuraciones con cuatro RTX 4090 conectadas mediante NVLink ofrecen 96 GB de VRAM agregada y resultan ideales para fine-tuning de Llama-2-13B con QLoRA en menos de 18 horas.

Gradient checkpointing y técnicas de ahorro en CPU

En configuraciones con RAM limitada, activar gradient checkpointing cada dos capas en modelos tipo BERT-base reduce el consumo de memoria de 48 GB a 19 GB, aunque aumenta el tiempo de entrenamiento un 35 %. Herramientas como Fairseq y Hugging Face Transformers permiten configurar el checkpointing mediante flags específicos sin modificar el código del modelo.

Técnicas de cuantización para reducir huella en CPU

  • La cuantización post-entrenamiento a INT8 con herramientas como Intel Neural Compressor permite ejecutar ResNet-50 en Xeon 8380 a 340 imágenes por segundo consumiendo solo 85 W.
  • Modelos de lenguaje como DistilBERT cuantizados a 8 bits mantienen un 97 % de la precisión original mientras reducen el uso de RAM de 480 MB a 130 MB por instancia.

Comparativa entre CPU y GPU para machine learning en la práctica

La tabla siguiente resume mediciones reales realizadas con PyTorch 2.1 sobre un dataset de imágenes de 224×224 píxeles.

Hardware Tiempo por época (ResNet-50) Consumo energético Coste aproximado por hora
2× Xeon 8380 48 min 650 W 1,8 USD
1× A100 80 GB 7 min 400 W 3,2 USD
2× RTX 4090 9 min 700 W 1,4 USD

Los números muestran que la GPU reduce drásticamente el tiempo, pero el coste por hora puede ser mayor. En proyectos donde el tiempo de experimentación importa más que el gasto energético, la GPU suele amortizarse rápido.

Resultados adicionales con otros modelos

  • Entrenamiento de BERT-large con secuencias de 512 tokens: 2× Xeon 8380 requieren 112 minutos por época frente a 18 minutos en una A100.
  • Inferencia de YOLOv8 en lotes de 1 imagen: la CPU alcanza 47 FPS mientras que la GPU llega a 312 FPS, aunque la latencia por imagen individual es solo un 12 % menor en CPU.
  • Entrenamiento de un modelo de series temporales LSTM con 4 capas y 512 unidades ocultas: la CPU procesa 2400 secuencias por segundo frente a 18500 en GPU cuando el batch size es 64.
  • Entrenamiento de EfficientNet-B4 en modo precisión mixta: la CPU con AMX alcanza 68 imágenes/s mientras que la A100 llega a 920 imágenes/s con batch size 128.

Cuándo la CPU sigue siendo la mejor opción

No todo el machine learning requiere GPU. Los algoritmos basados en árboles como XGBoost o LightGBM suelen ejecutarse más rápido en CPU cuando el número de características es alto y el dataset no supera los 10 millones de filas. En estos casos la paralelización se logra con OpenMP en lugar de CUDA.

Otro escenario habitual es el preprocesamiento de datos. Operaciones como tokenización con Hugging Face Tokenizers o aumento de imágenes con Albumentations suelen estar limitadas por la CPU. Mover todo a GPU solo tiene sentido si se usa un pipeline completamente acelerado como NVIDIA DALI.

Consejos de optimización para CPU

  • Activar Intel MKL o OpenBLAS con variables de entorno como OMP_NUM_THREADS igual al número de núcleos físicos.
  • Usar batch size pequeño (8-16) para reducir la presión sobre la caché L3 cuando se entrena con modelos de menos de 100 millones de parámetros.
  • Dividir el dataset en shards y usar DataLoader con num_workers igual al número de núcleos para ocultar la latencia de lectura de disco.
  • Compilar PyTorch desde fuente con flags de optimización -O3 y soporte AVX-512 para ganar hasta un 25 % en operaciones de convolución 1D.

Ejemplos reales de uso en empresas y laboratorios

En el Barcelona Supercomputing Center entrenan modelos de lenguaje en clústeres con 256 A100 conectadas mediante NVLink. El mismo centro utiliza nodos con CPU AMD EPYC para tareas de alineación de secuencias genómicas donde la GPU no aporta ventaja clara.

Una startup española de análisis de sentimiento en redes sociales migra sus modelos BERT a instancias con CPU cuando el volumen de tweets diarios baja de 50 000. De esta forma reducen el gasto mensual en cloud sin afectar la latencia de respuesta por debajo de 120 ms.

Investigadores del CSIC que trabajan con series temporales de energía eólica prefieren CPU para modelos ARIMA y Prophet porque la librería statsmodels no tiene soporte maduro para GPU y el tamaño de los datos no justifica la migración a cuPy o JAX.

Casos en el sector financiero

  • Un banco europeo ejecuta modelos de detección de fraude basados en gradient boosting sobre 120 millones de transacciones diarias exclusivamente en CPU, alcanzando 4200 transacciones por segundo por nodo con 128 núcleos.
  • Modelos de pricing de opciones con Monte Carlo de 10 millones de simulaciones se ejecutan 1,9 veces más rápido en CPU cuando se usan librerías vectorizadas como NumPy con BLAS optimizado.

Perspectiva de futuro y nuevas arquitecturas

La llegada de las GPU Blackwell de NVIDIA y las CPU con extensiones AMX en Intel Xeon 6 sigue ampliando la brecha en operaciones de matriz. Al mismo tiempo aparecen alternativas como las TPU v5 de Google o las instancias Trainium de AWS que ofrecen precios por TFLOPS más competitivos para cargas muy específicas.

El ecosistema open-source también evoluciona. Proyectos como vLLM o TensorRT-LLM permiten servir modelos grandes en GPU con menor consumo de VRAM, mientras que ONNX Runtime optimizado para CPU sigue ganando velocidad en escenarios de inferencia en servidores sin acelerador.

La elección entre CPU y GPU para machine learning dependerá cada vez más del perfil de la carga de trabajo y del coste total de propiedad. Evaluar el tamaño del modelo, el volumen de datos y la frecuencia de reentrenamiento sigue siendo la mejor forma de tomar una decisión informada sin dejarse llevar solo por la potencia teórica de cada componente.

Riesgos y desafíos en entornos híbridos CPU-GPU

La adopción simultánea de CPU y GPU introduce riesgos que van más allá del rendimiento puro. Problemas de compatibilidad de drivers, latencia de comunicación PCIe y consumo energético combinado pueden afectar la fiabilidad de los sistemas de producción.

Compatibilidad de drivers y versiones de CUDA

  • Actualizaciones de CUDA 12.1 a 12.4 han provocado caídas de rendimiento del 18 % en ciertos kernels de convolución cuando se usan con drivers NVIDIA 535 en sistemas con Xeon de 4ª generación.
  • Frameworks como JAX requieren versiones específicas de cuDNN que a veces entran en conflicto con las librerías MKL instaladas en el mismo nodo, obligando a entornos de contenedores separados.
  • La combinación de drivers NVIDIA 550 con kernels Linux 6.5 ha generado bloqueos intermitentes en sistemas con múltiples GPUs cuando se ejecutan cargas mixtas de entrenamiento e inferencia.

Seguridad y aislamiento de recursos

En entornos multi-tenant, compartir una GPU entre varios usuarios puede exponer información a través de canales laterales de memoria. Soluciones como NVIDIA MIG (Multi-Instance GPU) mitigan este riesgo pero reducen el rendimiento global hasta un 25 % en cargas de inferencia de modelos de lenguaje.

  • Implementar cuotas de VRAM por contenedor mediante Kubernetes device plugins evita que un solo job monopolice toda la memoria de una A100.
  • Monitorear el consumo energético combinado de CPU y GPU es esencial para cumplir normativas de eficiencia en centros de datos europeos que limitan el PUE a 1,3.

Coste total de propiedad a tres años

Considerando amortización de hardware, electricidad y mantenimiento, un servidor con dos RTX 4090 tiene un TCO un 22 % inferior al de un nodo con dos A100 cuando se ejecutan cargas de inferencia continua durante 8000 horas anuales. Sin embargo, el TCO se invierte cuando se requiere entrenamiento frecuente de modelos mayores de 3 mil millones de parámetros.

Optimizaciones específicas con frameworks modernos

Los principales frameworks de machine learning han incorporado mejoras que alteran la relación entre CPU y GPU. Estas optimizaciones permiten extraer más rendimiento de cada plataforma sin cambiar el hardware.

PyTorch 2.1 y compilación JIT

  • El modo torch.compile reduce el overhead de Python en un 30-40 % en modelos de visión cuando se ejecuta en CPU con backend inductor.
  • En GPU, la fusión de kernels mediante torch.compile permite mantener ocupación superior al 85 % incluso con batch sizes de 4 en modelos tipo Vision Transformer.
  • Pruebas con ResNet-152 muestran que PyTorch 2.1 en CPU con MKL-DNN alcanza 92 imágenes por segundo frente a 78 de la versión 1.13.

TensorFlow y XLA en CPU

La activación de XLA en TensorFlow 2.15 permite que operaciones de convolución y matrix multiplication se compilen a código nativo optimizado para AVX-512. En servidores con Xeon 8380 esto se traduce en una mejora del 55 % en inferencia de EfficientNet-B4 respecto a la ejecución eager por defecto.

ONNX Runtime y ejecución heterogénea

  • ONNX Runtime permite ejecutar partes del grafo en CPU y otras en GPU mediante el Execution Provider de CUDA, reduciendo el consumo de VRAM hasta un 35 % en modelos de segmentación.
  • En escenarios de edge, ONNX Runtime optimizado para ARM en Jetson Orin ofrece 120 FPS en MobileNetV3 con consumo inferior a 8 W.

Impacto ambiental y eficiencia energética en despliegues a escala

La sostenibilidad se ha convertido en un criterio decisivo al elegir entre CPU y GPU. El consumo energético por inferencia y el carbono asociado varían enormemente según la plataforma y la carga de trabajo.

Huella de carbono por tipo de hardware

  • Una A100 consumiendo 400 W durante 8000 horas anuales genera aproximadamente 2,8 toneladas de CO₂ equivalente al año en regiones con mix eléctrico de 350 gCO₂/kWh.
  • Cuatro Xeon 8380 en el mismo periodo emiten 4,1 toneladas de CO₂, aunque su mayor eficiencia en cargas de inferencia pequeñas reduce la huella total cuando el factor de utilización cae por debajo del 35 %.
  • Instancias basadas en CPU en regiones con energía hidroeléctrica como el norte de Europa pueden reducir la huella un 60 % respecto a GPU en zonas con carbón.

Estrategias de optimización energética

El uso de batching dinámico y apagado selectivo de núcleos CUDA permite reducir el consumo medio de una A100 en un 28 % sin pérdida de latencia perceptible. En CPU, la activación de estados C6 y frecuencias turbo controladas por herramientas como cpupower logra ahorros similares en periodos de baja demanda.

Comparativa de eficiencia por TFLOPS útil

  • Entrenamiento de Llama-2-7B en A100 alcanza 1,8 TFLOPS útiles por vatio, mientras que Xeon 8380 con AMX llega a 0,9 TFLOPS por vatio en la misma tarea.
  • En inferencia continua de BERT-base, la eficiencia energética de la CPU supera a la GPU cuando el throughput requerido es inferior a 120 muestras por segundo.

Si quieres conocer otros artículos parecidos a Comparativa entre CPU y GPU para machine learning puedes visitar la categoría Tecnologia para Principiantes.

Entradas Relacionadas