localaiforum
Iniciar sesión
Guía › Hardware

Ejecutar solo con CPU

La inferencia solo con CPU es viable, y los números son menos
deprimentes de lo que sugiere el folclore — siempre que entiendas que es
el mismo juego de ancho de banda que la decodificación en GPU, jugado con
la décima parte de la tubería. Un escritorio moderno con DDR5 de doble
canal tiene ~80–100 GB/s de ancho de banda de memoria. Ese es todo tu
presupuesto; nada de lo que hagan los núcleos de la CPU lo cambia mucho.

La fórmula, resuelta

tok/s decode ≈ ancho de banda efectivo (GB/s) ÷ tamaño del modelo (GB)

La DDR5-5600 de doble canal mueve ~90 GB/s sobre el papel; llama 60–80
GB/s efectivos una vez que núcleos y prefetchers toman su parte. Un
modelo 8B Q4 es ~5 GB, así que:

90 GB/s ÷ 5 GB ≈ 18 tok/s de techo teórico → 8–14 tok/s en la práctica.

Eso no es un bug — es la misma aritmética que usa una GPU discreta
grande, con la décima parte del ancho de banda.

Qué esperar según el hardware

Plataforma Ancho de banda aprox. Decodificación 8B Q4 Se siente como
Portátil, DDR4 doble canal 40–50 GB/s 5–8 tok/s legible, arranque lento
Portátil, DDR5 doble canal 60–80 GB/s 8–12 tok/s chat utilizable
Escritorio, DDR5 doble canal 80–100 GB/s 10–16 tok/s agradable para ≤8B
Threadripper/EPYC, cuatro+ canales 200–460 GB/s 30–80 tok/s genuinamente bueno
Servidor de doble zócalo 400+ GB/s 60–100 tok/s casi una GPU de RAM

Niveles de comodidad en un escritorio de doble canal:

  • Agradable: chat y ayuda de código con 7–8B Q4 a 10+ tok/s.
  • Utilizable: 13–14B Q4 a ~5–8 tok/s. Esperas, no para siempre.
  • Paciencia: 24–32B Q4 a ~2–4 tok/s. Lotes nocturnos, no chat.
  • No: 70B Q4 por debajo de 1 tok/s en doble canal. Solo estaciones
    de cuatro canales, y aun así piénsalo dos veces.

La vía de escape: descarga parcial

Si hay una GPU pequeña presente, llama.cpp reparte capas entre CPU y GPU
— digamos 20 de 32 capas en una tarjeta de 8 GB. La fracción residente
en la GPU corre al ancho de banda de la VRAM, el resto al de la RAM, así
que la velocidad aterriza entre los dos extremos. Vence a ambos modos
puros cuando los pesos no caben enteros en ninguno, y vence a ver una
«descarga completa a GPU» azotar contra memoria compartida.

El prefill es el dolor real

La decodificación se lleva toda la atención, pero el prefill es donde
duele la CPU: está limitado por cómputo, y una CPU de escritorio tiene
una fracción pequeña de los FLOPs de una GPU. Un prompt de 4,000 tokens
en un modelo 8B puede costar decenas de segundos antes de que aparezca
el primer token. Las tuberías estilo RAG con contextos grandes inyectados
lo pagan en cada petición. Mitigaciones: mantén los prompts cortos, da al
prefill por lotes más hilos que a la decodificación, y trata la
indexación como un coste único (véase RAG).

Flags prácticas

# hilos de decodificación = núcleos físicos; el prefill por lotes puede usar también los lógicos
llama-server -m qwen2.5-7b-instruct-q4_k_m.gguf -c 8192 -t 8 --threads-batch 16

# caja multizócalo: intercala la memoria entre nodos NUMA
numactl --interleave=all ./llama-server -m model.gguf -t 32

# ¿qué SIMD tiene esta CPU? AVX2 es el mínimo; AVX-512 ayuda al prefill
lscpu | grep -o 'avx[0-9a-z_]*' | sort -u
  • -t fijado a los núcleos físicos suele vencer a los recuentos
    lógicos/SMT para la decodificación; compara ambos en tu máquina, el
    punto de cruce es específico de cada carga.
  • AVX2 es la línea base en todas partes; AVX-512 (Zen 4/5, Xeon
    recientes) da ganancias reales de prefill. llama.cpp detecta el soporte
    al compilar.
  • En máquinas multizócalo, el fijado NUMA puede valer 20%+ — la memoria
    en el zócalo lejano es memoria lenta.
  • La DDR4 de portátil lleva aproximadamente la mitad del ancho de banda
    de la DDR5 de escritorio. Misma fórmula, constante peor: espera 5–8
    tok/s donde el escritorio da 12.

Cuándo solo-CPU es genuinamente la respuesta correcta

  • Embeddings e indexación para RAG — importa el rendimiento, no la
    latencia; unas horas de incrustación de fragmentos por la noche son
    gratis.
  • Modelos diminutos en scripts — clasificadores, extractores y
    rerankers de 0.5–3B responden en decenas de milisegundos incluso en
    CPU.
  • Trabajos por lotes en segundo plano — resume lo pendiente a 3 tok/s
    mientras duermes; nadie está mirando el flujo.
  • Probar antes de comprar — valida que una familia de modelos hace
    el trabajo antes de comprometerte a comprar una GPU.

Si el objetivo es chat interactivo y hay alguna GPU disponible, pon el
modelo ahí. Usa Primera ejecución para arrancar hoy,
y Velocidad para entender qué significan los números que
ves.

Relacionados: Primera ejecución · Velocidad ·
RAG