Тест: Как Ollama использует производительность процессора Intel и эффективные ядра

Ollama на процессоре Intel: эффективные ядра против производительных ядер

Содержимое страницы

У меня есть теория для проверки - если использовать все ядра процессора Intel для повышения скорости LLM Меня беспокоит, что новый модель gemma3 27 бит (gemma3:27b, 17 ГБ на ollama) не помещается в 16 ГБ видеопамяти моего GPU, и частично работает на CPU.

Более точно

ollama ps

показывает

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

Хотя это не выглядит ужасно, но это разделение слоев. Фактическая нагрузка: GPU:28%, CPU: 560%. Да, используются несколько ядер.

Портрет Llama и летающих процессоров

И здесь идея:

А что если заставить ollama использовать ВСЕ ядра процессора Intel - как производительные, так и эффективные?

Параметр конфигурации OLLAMA_NUM_THREADS

Ollama имеет переменную окружения OLLAMA_NUM_THREADS, которая должна указывать ollama, сколько потоков и ядер он должен использовать.

Сначала я попробовал ограничить его до 3 ядер:

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

# добавить OLLAMA_NUM_THREADS=3 как
# Environment="OLLAMA_NUM_THREADS=3"

sudo systemctl daemon-reload
sudo systemctl restart ollama

но это не сработало.

Ollama всё равно использовал ~560% процессора при запуске Gemma 3 27B LLM.

Плохая удача.

Параметр вызова num_thread

Попробуем вызвать

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Почему небо синее?",  
"stream": false,
"options":{
  "num_thread": 8
}
}'  | jq .

Результат:

  • Использование процессора: 585%
  • Использование GPU: 25%
  • Мощность GPU: 67 Вт
  • Оценка производительности: 6,5 токенов/сек

Теперь попробуем удвоить ядра. Попросим ollama использовать смесь производительных и эффективных ядер:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Почему небо синее?",  
"stream": false,
"options":{
  "num_thread": 16
}
}'  | jq .

Результат:

  • Использование процессора: 1030%
  • Использование GPU: 26%
  • Мощность GPU: 70 Вт
  • Оценка производительности: 7,4 т/с

Хорошо! Производительность увеличилась на ~14%!

Теперь пойдём на край! Все физические ядра!

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Почему небо синее?",  
"stream": false,
"options":{
  "num_thread": 20
}
}'  | jq .

Результат:

  • Использование процессора: 1250%
  • Использование GPU: 10-26% (нестабильное)
  • Мощность GPU: 67 Вт
  • Оценка производительности: 6,9 т/с

Хорошо. Теперь мы видим некоторое падение производительности. Попробуем 8 производительных + 4 эффективных:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Почему небо синее?",  
"stream": false,
"options":{
  "num_thread": 12
}
}'  | jq .

Результат:

  • Использование процессора: 801%
  • Использование GPU: 27% (нестабильное)
  • Мощность GPU: 70 Вт
  • Оценка производительности: 7,1 т/с

Тут-то и там.

Для сравнения - запуск Gemma 3 14b, он менее умный по сравнению с Gemma 27b, но хорошо помещается в видеопамять GPU.

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:12b-it-qat",  
"prompt": "Почему небо синее?",  
"stream": false
}'  | jq .

Результат:

  • Использование процессора: 106%
  • Использование GPU: 94% (нестабильное)
  • Мощность GPU: 225 Вт
  • Оценка производительности: 61,1 т/с

Это то, что мы называем производительностью. Даже если Gemma 3 27b умнее, чем 14b, но не в 10 раз!

Вывод

Если LLM не помещается в видеопамять GPU и некоторые слои выгружаются Ollama на CPU

Полезные ссылки