テスト: Ollama がインテル CPU のパフォーマンスコアと効率コアをどのように利用しているか

インテルCPUにおけるOllamaの効率コアとパフォーマンスコアの比較

目次

私は理論をテストしたいと思っています - すべてのコアをIntel CPUで使用するとLLMの速度が上がるか?
新しいgemma3 27bitモデル(gemma3:27b、ollama上では17GB)が私のGPUの16GB VRAMに収まらず、部分的にCPU上でも実行されていることが気になります。

正確には、以下のように表示されます:

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

これはあまり悪いとは言えませんが、レイヤーが分割されているのが問題です。実際の負荷は:GPU:28%, CPU: 560%。はい、複数のコアが使用されています。

Llamaと飛ぶCPUの肖像画

ここでアイデアがあります:

もしもOllamaがすべてのIntel CPUコア(パフォーマンスコアと効率コアの両方)を使用するように強制したらどうなるでしょうか?

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

しかし、これはうまく機能しませんでした。

Gemma 3 27B LLMを実行している間、OllamaはCPUの約560%を使用し続けていました。

残念です。

num_threadコールオプション

では、以下のように呼び出してみましょう:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Why is the blue sky blue?",  
"stream": false,
"options":{
  "num_thread": 8
}
}'  | jq .

結果:

  • CPU使用率:585%
  • GPU使用率:25%
  • GPU電力:67w
  • パフォーマンス評価:6.5トークン/秒

では、コアを倍にしましょう。パフォーマンスと効率の両方のコアを使用するようにOllamaに指示します:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Why is the blue sky blue?",  
"stream": false,
"options":{
  "num_thread": 16
}
}'  | jq .

結果:

  • CPU使用率:1030%
  • GPU使用率:26%
  • GPU電力:70w
  • パフォーマンス評価:7.4 t/s

良い!パフォーマンスは約14%向上しました!

では、極端にしましょう。すべての物理コアを使用してみましょう:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Why is the blue sky blue?",  
"stream": false,
"options":{
  "num_thread": 20
}
}'  | jq .

結果:

  • CPU使用率:1250%
  • GPU使用率:10-26%(不安定)
  • GPU電力:67w
  • パフォーマンス評価:6.9 t/s

では、8つのパフォーマンスコア+4つの効率コアを試してみましょう:

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:27b",  
"prompt": "Why is the blue sky blue?",  
"stream": false,
"options":{
  "num_thread": 12
}
}'  | jq .

結果:

  • CPU使用率:801%
  • GPU使用率:27%(不安定)
  • GPU電力:70w
  • パフォーマンス評価:7.1 t/s

ここに至るところです。

比較のために、Gemma 3 14bを実行してみましょう。Gemma 27bに比べてスマートではありませんが、GPU VRAMにうまく収まります。

curl http://localhost:11434/api/generate -d '
{  
"model": "gemma3:12b-it-qat",  
"prompt": "Why is the blue sky blue?",  
"stream": false
}'  | jq .

結果:

  • CPU使用率:106%
  • GPU使用率:94%(不安定)
  • GPU電力:225w
  • パフォーマンス評価:61.1 t/s

これが我々が言うパフォーマンスです。 たとえGemma 3 27bが14bよりはるかにスマートでも、10倍は速くはなりません!

結論

LLMがGPU VRAMに収まらず、Ollamaによって一部のレイヤーがCPUにオフロードされている場合

  • num_threadパラメータを指定することで、LLMのパフォーマンスを10〜14%向上させることができます。
  • オフロードによるパフォーマンスの低下は、この向上に比べてはるかに大きく、補償されません。
  • より高性能なVRAMを持つGPUを入手する。RTX 3090はRTX 5080より優れていますが、私はどちらも持っていない

有用なリンク