Test: Come Ollama utilizza le prestazioni della CPU Intel e i core efficienti

Ollama su CPU Intel: efficienza vs prestazioni

Indice

Ho un’ipotesi da testare: se utilizzare TUTTI i core su un processore Intel aumenterebbe la velocità degli LLM? Mi sta infastidendo il fatto che il nuovo modello gemma3 27 bit (gemma3:27b, 17 GB su ollama) non si adatti ai 16 GB di VRAM della mia GPU, e venga eseguito parzialmente sul CPU.

Per ulteriori informazioni sul throughput, la latenza, la VRAM e i benchmark su diversi runtimes e hardware, vedi Prestazioni degli LLM: Benchmark, collo di bottiglia & Ottimizzazione.

Per essere precisi

ollama ps

mostra

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

Sebbene non sembri terribile, è la divisione dei layer. Il carico effettivo è: GPU: 28%, CPU: 560%. Sì, vengono utilizzati diversi core.

Il ritratto di Llama e CPU volanti

E qui c’è un’idea:

Cosa succederebbe se spingessimo ollama a utilizzare TUTTI i core del processore Intel - sia quelli di Prestazione che quelli Efficienti?

Parametro di configurazione OLLAMA_NUM_THREADS

Ollama ha un parametro di configurazione dell’ambiente OLLAMA_NUM_THREADS che dovrebbe indicare a ollama quanti thread e core dovrebbe utilizzare.

Ho provato prima a limitarlo a 3 core:

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

# metti OLLAMA_NUM_THREADS=3 come
# Environment="OLLAMA_NUM_THREADS=3"

sudo systemctl daemon-reload
sudo systemctl restart ollama

ma non ha funzionato.

Ollama continuava comunque a utilizzare circa il 560% del CPU quando eseguiva il modello Gemma 3 27B LLM.

Sfortunatamente.

Opzione num_thread

Proviamo a chiamare

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Perché il cielo è blu?",  
"stream": false,
"options":{
  "num_thread": 8
}
}'  | jq .

Il risultato:

  • Utilizzo CPU: 585%
  • Utilizzo GPU: 25%
  • Potenza GPU: 67w
  • Valutazione delle prestazioni: 6,5 token/sec

Ora proviamo a raddoppiare i core. Diciamo a ollama di utilizzare una combinazione di core di prestazione e efficienti:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Perché il cielo è blu?",  
"stream": false,
"options":{
  "num_thread": 16
}
}'  | jq .

Il risultato:

  • Utilizzo CPU: 1030%
  • Utilizzo GPU: 26%
  • Potenza GPU: 70w
  • Valutazione delle prestazioni: 7,4 t/s

Bene! Le prestazioni sono aumentate del ~14%!

Ora andiamo all’estremo! Tutti i core fisici!

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Perché il cielo è blu?",  
"stream": false,
"options":{
  "num_thread": 20
}
}'  | jq .

Il risultato:

  • Utilizzo CPU: 1250%
  • Utilizzo GPU: 10-26% (instabile)
  • Potenza GPU: 67w
  • Valutazione delle prestazioni: 6,9 t/s

Okay. Ora vediamo una leggera riduzione delle prestazioni. Proviamo con 8 core di prestazione + 4 efficienti:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Perché il cielo è blu?",  
"stream": false,
"options":{
  "num_thread": 12
}
}'  | jq .

Il risultato:

  • Utilizzo CPU: 801%
  • Utilizzo GPU: 27% (instabile)
  • Potenza GPU: 70w
  • Valutazione delle prestazioni: 7,1 t/s

Qui e là.

Per confronto - eseguire Gemma 3 14b, è meno intelligente rispetto a Gemma 27b, ma si adatta bene alla VRAM della GPU.

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:12b-it-qat",  
"prompt": "Perché il cielo è blu?",  
"stream": false
}'  | jq .

Il risultato:

  • Utilizzo CPU: 106%
  • Utilizzo GPU: 94% (instabile)
  • Potenza GPU: 225w
  • Valutazione delle prestazioni: 61,1 t/s

Questo è ciò che chiamiamo prestazioni. Anche se Gemma 3 27b è più intelligente di 14b, non è 10 volte migliore!

Conclusione

Se l’LLM non si adatta alla VRAM della GPU e alcuni layer vengono spostati da Ollama sul CPU

  • Possiamo aumentare le prestazioni dell’LLM del 10-14% fornendo il parametro num_thread
  • La riduzione delle prestazioni dovuta allo spostamento è molto maggiore e non è compensata da questo aumento.
  • Meglio avere una GPU più potente con più VRAM. L’RTX 3090 è migliore dell’RTX 5080, anche se non ho nessuna di queste

Per ulteriori benchmark, ottimizzazione CPU/GPU e guide sulle prestazioni, controlla il nostro Prestazioni degli LLM: Benchmark, collo di bottiglia & Ottimizzazione hub.