ローカルAI・PC分析

GGUFとSafetensorsはどちらを使う?実行環境と配布経路で選ぶ

GGUFとSafetensorsはどちらを使う? — 実行runtimeと配布経路で選ぶ
目次

同じモデルなのに、GGUF版とSafetensors版がある。ダウンロード画面で立ち止まりやすいところです。

かがり

あぁもう! 同じモデルなのにGGUFとSafetensorsがある! どっちを取ればいいのよぉ!

ロコ

まず使うアプリを決めよう。LM Studioで会話するか、Transformersで学習するかで選べるよ。

WindowsのLM Studioやllama.cppで会話するなら、対応するGGUFが出発点になります。Transformersで追加学習するなら、その手順が指定するSafetensorsの重みと設定ファイルをそろえます。

GGUFもSafetensorsも、モデルの数値を保存する形式です。ただ、同じアプリへ同じように渡せるとは限りません。「性能がよい方」を拡張子だけで選ぶより、やりたい作業に合う配布物を選ぶ方が、変換や取り直しの手間を減らせます。

会話するアプリから、取得する形式を決める

llama.cppや、LM Studioのllama.cppエンジンを使う場合は、対象モデルのGGUFを探します。GGUFにはモデルの重みと、動かすために必要な情報がまとまっています。対応済みの配布物があれば、自分で元の重みから変換せずに始められるのがうれしいところです。

Macでは、アプリ名だけで決めないようにしましょう。Apple SiliconでLM StudioのMLXエンジンを使いたいなら、MLX向けのモデルを選びます。同じLM Studioの中でも、llama.cppでGGUFを使う場合とは取得するものが変わります。

Ollamaには、GGUFを指定する方法と、対応するSafetensorsのモデル一式を取り込む方法があります。公式の取り込み手順で、選んだモデルの形式と対応する経路を合わせます。すでにGGUFを持っている場合のModelfileと登録コマンドも、同じ公式手順で確認できます。

追加学習をしたい場合は、まず学習手順が指定する元モデルを確認します。Safetensorsに入っているのは重みなので、Transformersでは設定やトークナイザーも必要です。大きな重みファイルを一つ取って終わり、とはならない点に気をつけてください。

Qwen2.5-7B-Instructで、取得するものを見てみる

Qwen公式には、Qwen2.5-7B-Instructの元配布と、GGUFの配布があります。同じモデルでも、用途に合わせて取得する範囲が変わります。

会話用のGGUFとしてQ4_K_Mを選ぶなら、次の二つをそろえます。ほかの量子化まで一括で取得する必要はありません。

qwen2.5-7b-instruct-q4_k_m-00001-of-00002.gguf
qwen2.5-7b-instruct-q4_k_m-00002-of-00002.gguf

この二つを合わせた容量は約4.68GBです。分割したまま使うか、先に結合するかは、使うアプリの取り込み手順に合わせましょう。先頭の一つだけを取ったり、名前から連番を消したりしても、足りない重みが補われるわけではありません。

かがり

同じQwen2.5でも、一つのファイルで配っているページがあったわ。どっちかが間違いなの?

ロコ

配布元によって分け方が違うこともあるよ。選んだページの中で、必要な一式をそろえよう。

例えば、LM Studioの取り込み記事はlmstudio-communityの単一ファイルを使います。ここで挙げたQwen公式の分割版とは別の配布物です。一方の先頭ファイルへ他方を混ぜず、配布元・モデル名・量子化・版が一致する一式として選びます。「同じ7Bだから同じファイル」と考えない方が、取り込みで迷わずに済みます。

Transformersで元の重みを使うなら、四つに分割されたSafetensorsと、その対応を示すインデックス、config.json、トークナイザーなどを同じ配布版からそろえます。LoRAのマージや追加学習では、似た名前の派生モデルと取り違えないことも大切です。手順で指定された元モデルかを合わせてから進めます。

ファイルを小さくするのは、形式だけでなく量子化

GGUFを選べば必ず小さくなる、というわけではありません。Q4やQ8のような量子化済みの配布も、FP16の配布もあります。保存する形式をGGUFへ変えることと、重みを少ないビット数で表して容量を減らすことは、分けて考えましょう。

Safetensorsにも量子化済みモデルがあります。つまり、Safetensorsはいつも高精度の原本、GGUFはいつも小さくて速い、とは言えません。配布ページでモデル名と量子化を一緒に見ると、何を比べているのかがはっきりします。

先ほどの約4.68GBは、保存したファイルの容量です。空きVRAMが4.68GBあれば十分、という実行条件ではありません。会話の文脈や作業領域にもメモリを使います。読み込めないときは、別形式へ変換し続ける前に、文脈長も含めて収まるかを見てみましょう。

TransformersにもGGUFを読む機能はありますが、量子化した状態を保って実行できるかは条件によります。たとえばv5.17.0の公式説明では、圧縮した重みをそのまま使う経路はMetal上のQwen3.5が対象で、それ以外では読み込み時に展開する経路があります。小さいGGUFを渡せば、どの環境でも同じ省メモリ効果が得られるわけではありません。

後で追加学習や量子化をやり直すなら、元の重みを残す

後から別の量子化を作りたくなりそうなら、元モデルの重みと設定を残しておくと助かります。量子化で省いた細かな数値は、ファイルを大きな数値型へ展開しても元どおりには戻らないためです。元の精度から学習し直す予定がある場合も同じです。

重みを保存するときは、配布ページのURLと配布版も一緒に控えましょう。自分で変換したものには、変換ツールの版と量子化方式も添えます。後で似たファイルが増えても、どこから作ったものかをたどれれば、別の設定を試す出発点を見失いません。

会話だけが目的なら、対応したGGUFで足りる場合もあります。将来のためにと元のSafetensorsまで全部そろえる前に、追加学習や再量子化をする予定があるか考えてみてください。保存するものも、やりたい作業に合わせて選べます。

配布元と、実行するコードも確認する

Safetensorsは、pickle形式を読み込む際の任意コード実行の危険を避けるために設計されています。ただし、同じ配布ページにあるPythonコードまで、その形式が守ってくれるわけではありません。重みの形式を選んだ後も、実行するコードの確認は残ります。

Transformersでtrust_remote_code=Trueを求められたら、モデル用の追加コードを実行する設定だと理解して、コードの内容と配布元を確認します。公式のセキュリティ方針は、その場合に配布版を固定することも勧めています。

GGUFでも、配布者と元モデル、利用条件は確認してください。第三者が変換したものなら、元モデルへのリンクをたどれる配布物を選びます。

ここまでで、使うソフト、モデル、量子化、必要なファイルが決まれば、ダウンロードへ進めます。LM StudioならGGUFの取得と取り込み手順を使って、まず短い質問を送ってみましょう。必要な回答を得られる構成ができたら、拡張子の比較から離れて、実際に使いたかった作業へ進んでください。

まとめ

  • llama.cpp系で会話するなら、対応済みGGUFを使うと変換を省ける
  • Transformersで元の重みを使う場合は、Safetensorsと設定・トークナイザーをそろえる
  • 形式と量子化を分けて読み、再学習や再量子化の予定がある場合は元の重みを残す
同じテーマから