メモリとモデル

LLMの量子化:Q4・Q8・FP16をどう選ぶか

同じモデルでもダウンロードリストにはQ4、Q8など複数の名前が付いています。小さなファイルを受け取った場合、回答の品質もそれだけ悪化するのでしょうか?大きなファイルを受け取った場合、必ずしも良い選択とは限らないのでしょうか?容量を減らす際に何を失うのか、そして私の作業でその差異をどのように確認するのかを調べます。

減らすのは言葉ではなく、重みを表す数値の精度

モデルの重みは多くの数値で保存されます。量子化は、これらの数値の表現をより少ないビットに変換し、ファイルおよびメモリの負担を軽減します。これは文の削除による圧縮ではなく、元の数値を完全に同じように復元する方法でもありません。

単純な仮定では、1つの数値の表現を16ビットから4ビットに減らすと、その部分は1/4になります。実際のファイルには補情報やより高い精度で残された部分もあるため、正確に同じ比率で減るとは限りません。そのため、ダウンロードサイズを直接確認する必要があります。

量子化プロセスの図:複数の値で細かく分割されたモデルの重みを、より小さいグリッドにまとめる
量子化は重みをより少ないステップでまとめてファイルおよびメモリを減らしますが、圧縮が強くなるほど損失の可能性も高まります。

同Q4名前でも異なります

どの重みをより正確に保持するか、またブロックをどのように分割するかによって結果が異なる。Q4_K_M、AWQ、GPTQおよびMLXの4ビット表現を1つのファイルのように扱うことはできない。実行プログラムがサポートする形式から確認する。

モデルのサイズだけでなく、変換版に必要なトークナイザーとテンプレート、ビジョンやMTPのコンポーネントが含まれているかどうかを確認すべきです。ファイルが小さくなった理由が量子化によるものか、必要な機能が削除されたものかを区別すべきです。

重み表現ステップが、元の細かい段階から中間段階および粗い段階へと減少する図
ビット数が低いほど保存サイズは減りますが、同じ4ビットでもグループサイズや補正値の方法によって結果は異なります。

メモリに収まるようになると、差が大きくなる

高精度では、一部がRAMに移されたモデルが低精度ではGPUに読み込まれる可能性があります。この場合、伝送負荷を減らし、実感的な性能向上の余地があります。重みを読み込む量自体が減少するという利点もあります。

逆に、すでに十分な余裕で読み込まれるモデルについては、圧縮表現処理のコストやカーネル効率によって速度の差が小さく、期待と異なる場合があります。ファイルサイズが半分になるなら生成時間も半分であるという計算の代わりに、同じアプリケーションとデバイスで比較してください。

モデルサイズとメモリ節約、回答品質の保持の間のバランスを天秤のように示す図
品質を維持しながら、デバイスメモリに余裕を持たせ、最も小さいファイルよりも頻繁に実行されるタスクに対しては、量子化を選択する方がよいです。

自分が気にしている間違いを選びます

全体ベンチマーキングスコアの変化が小さくても、私の作業では重要な差が現れる可能性があります。コードの実行結果、ドキュメント内の金額や条件、ツール呼び出しの形式など、正解を確認できる項目を準備してください。自然な文だけでは正確性を判断するのは難しいです。

Q4とQ8で同じ質問を送って、誤りが繰り返されるかどうかを確認します。1回の回答の違いは生成の変動に過ぎない可能性があるため、複数のケースが必要です。大きなモデルの低精度と小さなモデルの高精度のどちらが良いかは、タスクごとに異なる可能性があります。

高い精度を保つにも、コストがかかる

Q8を使用するにはより大きなメモリを購入しなければならない場合、その差が実際に必要かどうかまず確認してください。Q4で頻繁に行っていることが十分にうまく機能する場合、高精度のためにハードウェアを拡張する必要が減ります。逆に重要なミスが減れば、追加のコストが生じます。

モデルの重みとKVキャッシュの精度は別です。両方の設定を同時に変更しないでください。比較したファイルと設定を残してください。最も大きなファイルを所有するよりも、自分自身が信頼し検証できる結果を得ることを基準としてください。