容量計算の式
モデルの重みは、精度によってパラメータあたりのバイト数が固定されます。GGUF Q4_K_M は混合精度であり、K-quants が異なるテンソルに異なるビット幅を割り当てるため、パラメータあたり約 0.5–0.56 バイトに平均化され、一律の 0.5 ではありません。これらの名称の読み方については、量子化を参照してください。
パラメータ数にパラメータあたりのバイト数を掛けて生重みのサイズを求め、次に modest なコンテキスト長における KV キャッシュ、活性化値、フレームワークのオーバーヘッドに対して約 20% を加算します。
29 GB で bf16、~15 GB で 8-bit、~9.5 GB で 4-bit でした。詳細は、Hugging Face の LLM 最適化ガイドを参照してください。より長いコンテキストは、この 1.2× ベースラインの上にさらに KV キャッシュを追加します。なぜそのようなスケーリングになるかは、KV キャッシュとコンテキストを参照してください。
この式は重みサイズの計画推定値であり、厳密な真値ではありません。実際の値は、実行する正確な量子化における実際の
GGUF ファイルサイズに、ターゲットのコンテキスト長に対する KV キャッシュを加えたものです。計算例とインタラクティブな推定ツールについては、GPU モデル適合ガイドを参照してください。実際にメモリを争う要素
三つの要素が同じ VRAM(または統一メモリ)プールを共有します。- モデルの重み — モデルの読み込み時に固定され、プロンプトの長さには影響されません。
- KV キャッシュ — コンテキスト長とバッチサイズに応じて増加します。詳細は KV キャッシュとコンテキストを参照してください。
- 活性化値とフレームワークのオーバーヘッド — 各フォワードパス中に必要な小さな作業メモリであり、上記の式における
1.2×係数が概ねこれを説明しています。
オフロード:モデルが完全に収まらない場合
モデルの重みが GPU の VRAM に完全に収まらない場合、llama.cpp などのバックエンドは、完全に失敗するのではなく、モデルを GPU と CPU で分割して実行できます。これは --n-gpu-layers(短縮形 -ngl)フラグで制御されます。このフラグは、モデルのレイヤーのうち何層を GPU に読み込むかを設定し、残りはシステム RAM に保持します。
- 完全オフロード(すべてのレイヤーをカバーするのに十分な
-nglを設定):モデル全体が GPU で実行され、GPU のフル速度で動作します。 - 部分的なオフロード:一部のレイヤーが GPU で実行され、残りはシステム RAM を使用して CPU で実行されます。これにより、VRAM より大きなモデルを実際に読み込んで実行できますが、コストがかかります。
- オフロードなし(
-ngl 0):モデル全体が CPU のみで実行されます。
llama.cpp を使用していることが多く、独自の設定を通じて同じアイデアを提供しています。
統一メモリが状況をどう変えるか
システムで統一メモリ(Apple Silicon および AMD の Strix Halo プラットフォーム)を搭載した場合、CPU と GPU が個別の小さな VRAM を持つ GPU とは異なり、単一のメモリプールを共有します。これにより、オフロードの計算が変化します。- 容量:統一メモリシステムは、固定された VRAM を持つディスクリート GPU よりもはるかに大きなモデルを読み込むことができます。「VRAM」プールは、グラフィックス使用に割り当てられた部分まで、マシンの合計 RAM と同じ大きさになるためです。
- 帯域幅:同じプールは、ディスクリート GPU 上の専用 GDDR メモリよりも低い帯域幅で動作します。統一メモリに完全に収まるモデルでも、同じモデルがディスクリート GPU の VRAM に完全に収まる場合よりも、デコード速度が遅くなります。デコード速度は容量だけでなく帯域幅に追従するためです。
さらに詳しく
推論の仕組み
なぜデコードがそもそもメモリ帯域幅に制限されるのか。
KV キャッシュとコンテキスト
モデルだけでなく、会話に応じて増加するメモリ使用量の部分。
量子化
パラメータあたりのバイト数を縮小し、容量計算の式で最も大きな入力を変更する。
GPU モデル適合ガイド
VRAM 表、インタラクティブな推定ツール、および一般的なハードウェアに収まるもの。
収まり、実行された後
容量計算とオフロードにより、モデルは完全に GPU で実行するか、CPU と分割するかを問わず、ハードウェア上で実行されます。localhost でリクエストに応答し始めたら、次のステップは他の場所からアクセスすることです。
安定したエンドポイントを提供する
Tokios はモデルを選択、ホスト、ファインチューニングしません。ローカルで実行されると、Tokios はそれをどこからでも呼び出せる安定した認証済みエンドポイントに変換します。