カテゴリー
コンピューター

ローカルLLM性能改善した。Mac 起動時に自動起動する Ollama アプリが、 OLLAMA_FLASH_ATTENTION=true と OLLAMA_KV_CACHE_TYPE=q8_0 を設定した状態で起動するようにした

💡 本記事は、すべて人間が手書きしました。

まとめ

  • 設定したい値の確認
    launchctl getenv OLLAMA_FLASH_ATTENTION
    launchctl getenv OLLAMA_KV_CACHE_TYPE
    
  • ~/LaunchAgents/com.oki2a24.ollama-env.plist を置き、PC起動時にその内容が実行されるようにする。
  • 内容
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    
        <key>Label</key>
        <string>com.oki2a24.ollama-env</string>
    
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>-c</string>
            <string>
    launchctl setenv OLLAMA_FLASH_ATTENTION 1
    launchctl setenv OLLAMA_KV_CACHE_TYPE q8_0
    
    # Uncomment for troubleshooting:
    # echo "$(date) Environment variables set" >> /tmp/ollama-launchagent.log
            </string>
        </array>
    
        <key>RunAtLoad</key>
        <true/>
    
    </dict>
    </plist>
    
  • LaunchAgents の確認方法など
    # Lint
    plutil -lint ~/dotfiles/LaunchAgents/com.oki2a24.ollama-env.plist
    
    # 登録する
    launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.oki2a24.ollama-env.plist
    
    # 解除する
    launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.oki2a24.ollama-env.plist
    
  • Pull Request feat: Ollama の起動時環境変数を LaunchAgent で設定 by oki2a24 · Pull Request #17 · oki2a24/dotfiles

そもそも。 OLLAMA_FLASH_ATTENTION, OLLAMA_KV_CACHE_TYPE ってなんだ?

たまたま ローカル LLM パフォーマンスガイド(llama.cpp / Ollama / LM Studio)|zephel01 を読み、やってみようと思いました。

ChatGPT に聞いた答えを記します。

OLLAMA_FLASH_ATTENTION

結論から言うと、**Flash Attention は「LLMの頭脳が賢くなる機能」ではなく、「Attention計算をより効率よく実行するアルゴリズム」**です。

つまり、

  • 推論品質はほぼ変わらない
  • 速度が上がる
  • VRAM使用量が減る(特に長文で効果大)

という性質があります。元の論文でも「近似計算ではなく、同じ結果をより効率的に計算する」という位置付けです。

[2205.14135] FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness

何か犠牲になる?

基本的にはほぼありません。

ただし注意点があります。

① GPUが対応していないと使えない 対応GPUでなければ通常のAttentionになります。

② 一部モデルでは未対応 ③ まれにバグ

OLLAMA_KV_CACHE_TYPE

公式ドキュメントでも、Flash Attentionと組み合わせてKVキャッシュを q8_0 にすると、KVキャッシュのメモリ使用量を約半分に削減でき、品質への影響は通常ほとんどありませんと案内されています。

ollama/docs/faq.mdx at main · ollama/ollama

そもそも。 LaunchAgents が必要な理由

launchctl setenv OLLAMA_FLASH_ATTENTION 1
launchctl setenv OLLAMA_KV_CACHE_TYPE q8_0

を実行しても、 Mac 再起動後には無効になるため。

補足。 LaunchAgents では open -a Ollama 不要

Mac 起動後、上部メニューにアルパカアイコン 🦙 が表示されていたので、 Mac 起動した時に Ollama も自動的に起動しているのだろうな、と思い込んでいました。なので、 LaunchAgents にて 1. 環境変数を設定する。 2. Ollama を起動する。、ということをしようと予定していました。

しかし、違ったようです。 Mac 起動後、上部メニューにアルパカアイコン 🦙 が表示されるけれども、それだけです。その後、 open -a Ollama を実行すると Ollama の画面が表示されます。別に Mac 起動後に Ollama 画面を起動したいわけではないので、不要です。

起動シーケンスは実際には次のようになっています。

ログイン
    ↓
LaunchAgent(あなたが作成)
    ↓
launchctl setenv ...
    ↓
終了

その後、

macOS
    ↓
Ollama のバックグラウンド機能
    ↓
ollama serve (生成AIエージェントアプリ Claude Code とか起動時に実行)

という流れになっていると思います。

補足。手順の中で使うと便利なコマンド

# システムやユーザーセッション全体に設定された環境変数を削除
launchctl unsetenv OLLAMA_FLASH_ATTENTION
launchctl unsetenv OLLAMA_KV_CACHE_TYPE

おわりに

gemma4:26b-a4b-it-qat を主に使っています。

今まで、物理メモリ 32 GB 中、 30 GB 以上を利用、スワップも発生していました。同時に Safari は利用できるけども、動作は厳しい感じがするし、発熱するしファンも回るし、バッテリー減りも早い、という問題を感じていました。

そして、今回の設定後はというと、 28, 29 GB くらいに減少した感じです、スワップはゼロ。今のところ生成AIの回答に目立った劣化も感じられないので、しばらくこのままとしようと思います。

以上です。

コメントを残す