llama.cppで複数GPUを使うときのsplit-mode設定を確認する

目次
GPUを2枚以上搭載していても、llama.cppでは「VRAMを全部足せば、その容量の1枚GPUと同じように使える」とは考えない方がよい。
複数GPUでは、モデルをどのGPUへどう分けて配置するかを設定し、その結果をログで確認する必要がある。
先に各GPUが同じ実行経路から見えているか確認する
分割設定へ進む前に、使用するllama.cppのビルドから対象GPUが認識されているかを見る。
llama.cppのバージョン:
バックエンド:
GPU 1:
GPU 2:
ドライバー:
片方のGPUが認識されない問題やドライバーの問題を、split設定で解決しようとしない。
split-modeなどの設定は使用中のバージョンで確認する
llama.cppには複数GPU向けにsplit-mode、tensor-split、main-gpuなどの設定がある。
利用できる値やそれぞれの意味は更新で変わる可能性があるため、使用中のバージョンの公式資料と--helpを確認する。
「名前から見てこのモードが速そう」と決めず、まずどのようにモデルが分割される設定なのかを確認する。
VRAM容量が違うGPUでは実際の配置を見る
容量の違うGPUを組み合わせる場合、tensor-splitなどで配分を調整できる場合がある。
設定したら、起動ログを見て各GPUへどの程度配置されたかを確認する。
ログに表示された個別のバッファー容量を、そのまま推論中の最大VRAM使用量とみなさない。必要ならGPU監視ツールを使い、実行中の最大値を別に測る。
GPU間の接続も速度へ影響し得る
複数GPUへ処理を分けると、GPU間でデータをやり取りする場面が生じる。PCIeなどの接続条件によって処理時間へ影響が出る可能性はある。
ただし、接続規格だけから生成速度を計算することはできない。実際の構成で測る。
同じGGUFで配置だけを変える
比較では、次を固定する。
GGUF:
コンテキスト長:
プロンプト:
生成条件:
llama.cppのバージョン:
バックエンド:
そのうえで複数GPUの配置設定だけを変え、
- モデルを読み込めたか
- 各GPUへどう配置されたか
- プロンプト処理時間
- 生成速度
- 各GPUのメモリ使用量
を記録する。
複数GPU設定は、必ず高速化するためのスイッチではなく、手元のGPUへモデルをどう配置するかを選ぶ機能として考えると分かりやすい。
GPUを追加購入する段階から迷っている場合は、大容量VRAMの1枚GPUと複数GPUのどちらを選ぶ?でハードウェア側の判断を先に整理できる。
まとめ
- 複数GPUを設定する前に、使うllama.cppのビルドから各GPUが正しく認識されていることを確認する
- split-mode、tensor-split、main-gpuなどの利用可能な設定は、使用中のバージョンの公式資料と--helpで確認する
- 複数GPUのVRAMを単純な一つの大容量メモリとして扱わず、実際にどのGPUへ何が配置されたかを見る
- 比較するときはGGUF、コンテキスト長、プロンプトを固定し、GPUへの配置だけを変える
公式サイトで次に進む
この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。
llama.cpp
local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。
この記事で扱ったデータ
モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。