Prueba: Cómo Ollama está utilizando el rendimiento de la CPU de Intel y los núcleos eficientes

Ollama en CPU de Intel: núcleos eficientes vs. de rendimiento

Índice

Tengo una teoría que quiero probar: ¿utilizar todos los núcleos en un procesador Intel aumentaría la velocidad de los LLMs? Me molesta que el nuevo modelo gemma3 de 27 bits (gemma3:27b, 17 GB en ollama) no entre en los 16 GB de VRAM de mi GPU, y se ejecute parcialmente en el CPU.

Para obtener más información sobre throughput, latencia, VRAM y benchmarks en diferentes entornos de ejecución y hardware, vea Rendimiento de LLM: Benchmarks, Cuellos de Botella y Optimización.

Para ser preciso

ollama ps

muestra

gemma3:27b    a418f5838eaf    22 GB    29%/71% CPU/GPU

Aunque no parece terrible, es la división de capas. La carga real es: GPU: 28%, CPU: 560%. Sí, varios núcleos se están utilizando.

El retrato de Llama y CPUs volando

Y aquí está la idea:

¿Qué pasaría si empujamos a ollama para que utilice TODOS los núcleos del procesador Intel, tanto de rendimiento como eficientes?

Parámetro de configuración OLLAMA_NUM_THREADS

Ollama tiene un parámetro de configuración de variable de entorno OLLAMA_NUM_THREADS que supuestamente le dice a ollama cuántos hilos y núcleos debe utilizar.

Primero intenté restringirlo a 3 núcleos:

sudo xed /etc/systemd/system/ollama.service

# poner OLLAMA_NUM_THREADS=3 como
# Environment="OLLAMA_NUM_THREADS=3"

sudo systemctl daemon-reload
sudo systemctl restart ollama

pero no funcionó.

Ollama seguía utilizando ~560% del CPU al ejecutar el LLM Gemma 3 27B.

Mala suerte.

Opción de llamada num_thread

Vamos a intentar llamar

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "¿Por qué es azul el cielo?",  
"stream": false,
"options":{
  "num_thread": 8
}
}'  | jq .

El resultado:

  • Uso del CPU: 585%
  • Uso del GPU: 25%
  • Potencia del GPU: 67w
  • Evaluación del rendimiento: 6,5 tokens/segundo

Ahora intentemos duplicar los núcleos. Le diremos a ollama que utilice una combinación de núcleos de rendimiento y eficientes:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "¿Por qué es azul el cielo?",  
"stream": false,
"options":{
  "num_thread": 16
}
}'  | jq .

El resultado:

  • Uso del CPU: 1030%
  • Uso del GPU: 26%
  • Potencia del GPU: 70w
  • Evaluación del rendimiento: 7,4 t/s

¡Bueno! El rendimiento aumentó aproximadamente un 14%.

Ahora vayamos al extremo. ¡Utilicemos todos los núcleos físicos!

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "¿Por qué es azul el cielo?",  
"stream": false,
"options":{
  "num_thread": 20
}
}'  | jq .

El resultado:

  • Uso del CPU: 1250%
  • Uso del GPU: 10-26% (inestable)
  • Potencia del GPU: 67w
  • Evaluación del rendimiento: 6,9 t/s

Bien. Ahora vemos una caída en el rendimiento. Intentemos usar 8 núcleos de rendimiento + 4 eficientes:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "¿Por qué es azul el cielo?",  
"stream": false,
"options":{
  "num_thread": 12
}
}'  | jq .

El resultado:

  • Uso del CPU: 801%
  • Uso del GPU: 27% (inestable)
  • Potencia del GPU: 70w
  • Evaluación del rendimiento: 7,1 t/s

Aquí y allá.

Para comparación - al ejecutar Gemma 3 14b, es menos inteligente en comparación con Gemma 27b, pero encaja bien en la VRAM de la GPU.

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:12b-it-qat",  
"prompt": "¿Por qué es azul el cielo?",  
"stream": false
}'  | jq .

El resultado:

  • Uso del CPU: 106%
  • Uso del GPU: 94% (inestable)
  • Potencia del GPU: 225w
  • Evaluación del rendimiento: 61,1 t/s

Eso es lo que llamamos rendimiento. Aunque Gemma 3 27b es más inteligente que 14b, no es 10 veces más.

Conclusión

Si el LLM no encaja en la VRAM de la GPU y algunas capas se transfieren a la CPU por parte de Ollama

  • Podemos aumentar el rendimiento del LLM en un 10-14% proporcionando el parámetro num_thread
  • La caída de rendimiento debido a la transferencia es mucho mayor y no se compensa con este aumento.
  • Tener una GPU más potente con más VRAM. La RTX 3090 es mejor que la RTX 5080, aunque no tengo ninguna de estas

Para más benchmarks, ajuste de CPU/GPU y guía de rendimiento, consulte nuestro Rendimiento de LLM: Benchmarks, Cuellos de Botella y Optimización.

Enlaces útiles