GGUFが生まれた背景

LLMをローカルPCで動かしたいと思ったとき、HuggingFaceからダウンロードできるモデルファイルは通常「safetensors」や「PyTorch bin」形式です。これらはPython環境とGPUがあることを前提にしており、CPUだけのマシンや省メモリ環境には向いていません。

GGUFはCPUでもLLMを動かすことを目的としたllama.cppプロジェクトが開発したモデルフォーマットです。量子化(浮動小数点数を低精度に圧縮する処理)を前提に設計されており、7Bクラスのモデルを8GBのRAMで動かすことも可能です。

GGMLとGGUFの違い

GGUFの前身がGGMLです。どちらもGiorgio Gargaglioという開発者のイニシャルから名前が付いています。

GGMLは単純なバイナリ形式で、モデルをC++から読み込みやすい構造になっていましたが、メタデータ(モデルのパラメータ数、語彙サイズ、ハイパーパラメータなど)の格納方法が固定されており、新しいアーキテクチャへの対応が難しくなっていました。

GGUFは2023年8月に導入された後継フォーマットで、主な改善点は次のとおりです。

  • メタデータをキーバリュー形式で柔軟に拡張できる
  • テンソル情報とデータをまとめて1ファイルに収められる
  • バージョン番号が明示されており後方互換性の管理がしやすい
  • LLaMA以外のアーキテクチャ(Mistral・Phi・Qwen等)を統一フォーマットで扱える

GGMLはllama.cppではサポートが終了し、現在の標準はGGUFです。

量子化レベルと表記の読み方

GGUFファイルのファイル名には量子化レベルが示されています。

Llama-3.2-3B-Instruct-Q4_K_M.gguf

この場合の読み方は次のとおりです。

  • Q4:4ビット量子化
  • K:k-quantと呼ばれる改良量子化方式
  • M:Medium品質(SはSmall、Lは通常Large)

よく使われる量子化レベルの特徴を整理します。

Q2・Q3(超低精度)

最もファイルサイズが小さくなりますが、精度の低下が顕著です。スペックが非常に限られた環境での実験的な利用向けです。

Q4(バランス型)

サイズと精度のバランスが取れた主流の選択肢です。Q4_K_Mは特に精度/容量比が優れており、ローカルLLMを初めて試す際の推奨設定です。

Q5・Q6

Q4より精度が高く、8Bクラスでも高品質な出力が得られます。VRAMや共有メモリが16GB以上あれば検討する価値があります。

Q8

8ビット量子化で、元の16ビット(float16)にかなり近い品質です。精度を最大限保ちたい場合に使いますが、ファイルサイズもfloat16の約半分と大きめです。

メモリ要件の計算方法

モデルを動かすのに必要なRAM量はおおよそ以下の式で見積もれます。

必要メモリ(GB) ≈ パラメータ数(B) × ビット数 ÷ 8

例:Llama 3.2 3BをQ4で動かす場合 3 × 4 ÷ 8 = 1.5GB(モデル重みのみ)

ただしコンテキスト(KVキャッシュ)にも追加メモリが必要です。コンテキスト長が長いほど増えます。8Bモデルをデフォルトコンテキスト(2048〜4096トークン)で使う場合、Q4なら8〜10GB程度が目安です。

実際に必要なメモリは使用するllama.cppのバージョンやコンテキストサイズによって変わるため、Ollamaの ollama show モデル名 コマンドで事前に確認するのが確実です。

OllamaでGGUFを使う

OllamaはGGUFファイルのダウンロードと管理を自動化してくれるツールです。対応モデルはOllama公式ライブラリに登録されており、コマンド1つで取得できます。

# モデルをダウンロードして起動
ollama run llama3.2

# 特定の量子化レベルを指定
ollama run llama3.2:3b-instruct-q4_K_M

自分でGGUFファイルをダウンロードして使いたい場合はModelfileを作成します。

# Modelfile
FROM /path/to/model.gguf
PARAMETER num_ctx 4096
ollama create mymodel -f Modelfile
ollama run mymodel

HuggingFace上のGGUFファイル(Bartolomelaosが公開しているモデルなど)をダウンロードしてそのまま利用できます。

まとめ

GGUFはローカルLLM実行のデファクトスタンダードとなったモデルフォーマットです。GGMLの課題を解消しつつ、幅広いアーキテクチャを統一形式でサポートしています。Q4_K_Mが精度とサイズのバランスで最も選ばれており、8GBのRAMがあれば7Bクラスのモデルを十分快適に動かせます。Ollamaと組み合わせると管理が手軽になるため、ローカルLLMを始める際はこの組み合わせがファーストチョイスになるでしょう。