1. はじめに
OllamaでLLMを動かす際、モデルのサイズによっては自動的にCPUオフロードされますが、個人的には著しくパフォーマンスが低下しているようには感じられませんでした。筆者が鈍いだけかもしれませんが、GPUだけで動かしたときと比べてどの程度の差があるか数値で比較してみることにします。
※ モデルのサイズがVRAM内に収まることは確認済です。
2. パフォーマンス比較手順
筆者の貧弱なPC環境でも動作する1bのgemma3を使用し、ollama runコマンドをverboseオプション付きで実行して、出力結果を比較することにします。
ollama run gemma3:1b --verbose "AIについて教えて"
LLMへの質問は、回答がある程度の文章量となるよう、以下の3種類を使用することにします。
- 質問1: AIについて教えて
- 質問2: 宇宙について教えて
- 質問3: フランスについて教えて
PC環境は以下の通りです。Ivy Bridgeおじさん代表として頑張ります。
- グラフィックボード: NVIDIA GeForce GT 1030 GDDR5 2GB
- メモリ: 16GB
- CPU: Core i7-3770
- OS: Windows 11 Pro 24H2
- Ollama: 0.32.13
3. 計測結果
3.1. 質問1
| 項目 | CPUオフロード | GPUのみ |
|---|---|---|
| total duration | 35.6213227s | 33.7988335s |
| load duration | 784.0427ms | 773.8901ms |
| prompt eval count | 13 token(s) | 13 token(s) |
| prompt eval duration | 412.27ms | 226.327ms |
| prompt eval rate | 31.53 tokens/s | 57.44 tokens/s |
| eval count | 674 token(s) | 754 token(s) |
| eval duration | 34.401961s | 32.761027s |
| eval rate | 19.59 tokens/s | 23.02 tokens/s |
3.2. 質問2
| 項目 | CPUオフロード | GPUのみ |
|---|---|---|
| total duration | 48.9528754s | 51.0145176s |
| load duration | 777.9191ms | 786.2553ms |
| prompt eval count | 13 token(s) | 13 token(s) |
| prompt eval duration | 452.681ms | 238.992ms |
| prompt eval rate | 28.72 tokens/s | 54.40 tokens/s |
| eval count | 896 token(s) | 1158 token(s) |
| eval duration | 47.695124s | 49.959089s |
| eval rate | 18.79 tokens/s | 23.18 tokens/s |
3.3. 質問3
| 項目 | CPUオフロード | GPUのみ |
|---|---|---|
| total duration | 45.9193001s | 42.7725076s |
| load duration | 783.6216ms | 787.6288ms |
| prompt eval count | 13 token(s) | 13 token(s) |
| prompt eval duration | 337.687ms | 214.219ms |
| prompt eval rate | 38.50 tokens/s | 60.69 tokens/s |
| eval count | 876 token(s) | 962 token(s) |
| eval duration | 44.777592s | 41.736391s |
| eval rate | 19.56 tokens/s | 23.05 tokens/s |
4. まとめ
今回のケースではCPUオフロードの有無に関わらず、合計処理時間(total duration)は大差が無いように見受けられます。
ちなみに生成トークン数(eval count)が異なるためかもしれませんが、GPUのみでも合計処理時間が数秒遅くなるケースも発生しました(質問2)。
なお「prompt eval rate」における「tokens/s」の値はGPUのみの方が速かったため、LLMへの質問文が今回のケース(13トークン)よりも長くなると合計処理時間がどうなるか、追加検証する必要があるかもしれません。
「eval rate」における「tokens/s」の値はGPUのみの方が速かったため、LLMによる純粋な回答生成処理については一般論の通りGPUに任せると速いと言えそうです。
値の計測はしませんでしたが、CPUオフロード時はCPU使用率が上昇し、他のタスクに影響を与える場合もあるようでした。LLMと並行で実施するタスクがある場合には、CPUオフロードを抑止すべきか判断すると良いと思われます。