Teste: Como a Ollama está utilizando o desempenho da CPU e os núcleos eficientes da Intel

Ollama em CPU da Intel: núcleos eficientes vs. núcleos de desempenho

Conteúdo da página

Tenho uma teoria para testar – se utilizar todos os núcleos de um processador Intel aumentaria a velocidade dos LLMs? Estou incomodado com o fato de que o novo modelo gemma3 27 bit (gemma3:27b, 17GB no ollama) não está cabendo na VRAM de 16GB da minha GPU, e está sendo executado parcialmente no CPU.

Para ser mais preciso

ollama ps

mostra

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

Embora não pareça terrível, é a divisão das camadas. A carga real é: GPU:28%, CPU: 560%. Sim, vários núcleos estão sendo usados.

O retrato do Llama e CPUs voando

E aqui está a ideia:

E se empurrarmos o ollama para usar TODOS os núcleos do processador Intel – tanto os de desempenho quanto os eficientes?

Parâmetro de configuração OLLAMA_NUM_THREADS

O ollama tem uma variável de ambiente de configuração chamada OLLAMA_NUM_THREADS, que supostamente deve dizer ao ollama quantos threads e núcleos ele deve utilizar.

Tentei restringi-lo a 3 núcleos primeiro:

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

# coloque OLLAMA_NUM_THREADS=3 como
# Environment="OLLAMA_NUM_THREADS=3"

sudo systemctl daemon-reload
sudo systemctl restart ollama

mas não funcionou.

O ollama ainda estava usando ~560% do CPU ao executar o LLM Gemma 3 27B.

Azar.

Opção de chamada num_thread

Vamos tentar chamar

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Por que o céu azul é azul?",  
"stream": false,
"options":{
  "num_thread": 8
}
}'  | jq .

O resultado:

  • Uso do CPU: 585%
  • Uso da GPU: 25%
  • Potência da GPU: 67w
  • Avaliação de desempenho: 6,5 tokens/seg

Agora vamos dobrar os núcleos. Dizendo ao ollama para usar uma mistura de núcleos de desempenho e eficientes:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Por que o céu azul é azul?",  
"stream": false,
"options":{
  "num_thread": 16
}
}'  | jq .

O resultado:

  • Uso do CPU: 1030%
  • Uso da GPU: 26%
  • Potência da GPU: 70w
  • Avaliação de desempenho: 7,4 t/s

Boa! O desempenho aumentou em cerca de 14%!

Agora vamos ao extremo! Todos os núcleos físicos!

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Por que o céu azul é azul?",  
"stream": false,
"options":{
  "num_thread": 20
}
}'  | jq .

O resultado:

  • Uso do CPU: 1250%
  • Uso da GPU: 10-26% (instável)
  • Potência da GPU: 67w
  • Avaliação de desempenho: 6,9 t/s

Okay. Agora vemos uma queda no desempenho. Vamos tentar alguns 8 de desempenho + 4 eficientes:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Por que o céu azul é azul?",  
"stream": false,
"options":{
  "num_thread": 12
}
}'  | jq .

O resultado:

  • Uso do CPU: 801%
  • Uso da GPU: 27% (instável)
  • Potência da GPU: 70w
  • Avaliação de desempenho: 7,1 t/s

Aqui e ali.

Para comparação – executando o Gemma 3 14b, ele é menos inteligente comparado ao Gemma 27b, mas se encaixa bem na VRAM da GPU.

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:12b-it-qat",  
"prompt": "Por que o céu azul é azul?",  
"stream": false
}'  | jq .

O resultado:

  • Uso do CPU: 106%
  • Uso da GPU: 94% (instável)
  • Potência da GPU: 225w
  • Avaliação de desempenho: 61,1 t/s

Isso é o que chamamos de desempenho. Mesmo que o Gemma 3 27b seja mais inteligente que o 14b, não é 10 vezes mais!

Conclusão

Se o LLM não couber na VRAM da GPU e algumas camadas forem desempenhadas pelo Ollama para o CPU

  • Podemos aumentar o desempenho do LLM em 10-14% fornecendo o parâmetro num_thread
  • A queda no desempenho devido à desempenha é muito maior e não compensada por esse aumento.
  • Melhor ter uma GPU mais poderosa com mais VRAM. A RTX 3090 é melhor que a RTX 5080, embora eu não tenha nenhum desses