OllamaのCPU推論が遅い!原因と改善方法
発生している問題
OllamaをGPUなしでCPUのみで運用している際に、推論速度が極端に遅く感じられることはありませんか?甚至は完全に動作しなくなり、長時間待ってもトークンが1つずつしか出力されないという報告が多々あります。特に大規模なモデル(13B以上)を実行している場合にこの問題は顕著になります。
結論
OpenBLASの有効化、モデルの量子化、OLLAMA_KEEP_ALIVEの設定変更により、CPU推論的速度を最大700%向上させることが可能です。以下、具体的な設定方法をステップバイステップで解説します。
具体的な手順
ステップ1:OpenBLASをを有効化する
OpenBLASはCPU推論に最適化された数値計算ライブラリです。以下の環境変数形で設定します:
# Linux/Macの場合
export OLLAMA_FLASH_ATTENTION=0
export OLLAMA_HOST=0.0.0.0
# Windowsの場合(PowerShell)
$env:OLLAMA_FLASH_ATTENTION="0"
$env:OLLAMA_HOST="0.0.0.0"
ステップ2:適切なスレッド数を設定する
CPUスレッド数の設定は重要です。多すぎるとオーバーヘッドが発生し、逆効果になります。的建议値はCPUコア数の4〜6割程度です:
# 8コアCPUの場合、4〜5スレッド程度に設定
export OLLAMA_NUM_PARALLEL=4
export OLLAMA_THREADS=4
ステップ3:モデルの量子化レベルを調整する
RAM容量に応じて、より軽量な量子化モデルを選択することが推奨されます。例えば、13Bモデルを使用する場合はQ5量子化が最適です:
# モデル一覧から適切な量子化モデルを選択
ollama list
# Q5量子化モデルの例(7B-13B推奨)
ollama run llama3:8b-instruct-q5_K_M
ollama run mistral:7b-instruct-q5_K_M
ステップ4:OLLAMA_KEEP_ALIVEを設定する
モデルをメモリに常駐させることで、連続リクエスト時の応答速度を大幅に改善できます:
# 24時間メモリに保持(推奨)
export OLLAMA_KEEP_ALIVE=24h
# 無限に保持する場合
export OLLAMA_KEEP_ALIVE=-1
# 起動時に設定を反映
ollama serve
ステップ5:システムリソースの確認
実際にどの程度のリソースを使用しているか確認しましょう:
# LinuxでCPU使用率とメモリ確認
htop
free -h
# macOSの場合
top -l 1 | grep -E "CPU|PhysMem"
補足・注意点
- バージョン依存:Ollamaのバージョンによって動作が異なる場合があります。最新の安定版を使用することを推奨します(
ollama --versionで確認可能) - RAM容量の考慮:16GB以上のRAMがある場合は7B〜13Bモデル、8GB以下の場合は7B以下のモデルが推奨されます
- Threadripperユーザー:高端デスクトップCPUを使用している場合、300tok/sから2400tok/sへの改善が報告されています
- フラッシュアテンションの無効化:CPU推論ではフラッシュアテンション効果が期待できないため、無効化して問題ありません
- モデルの選択:Q5量子化モデルは精度と速度のバランスが最も優れています
参考元
- Reddit: How to optimize Ollama for CPU-only inference?
- GitHub Issue #8306: Improve speed on cpu-only
- GitHub Issue #10022: CPU inference much slower than expected
- Boost Ollama Performance: Essential Tips and Tricks
- How to Speed Up Ollama Performance