モデルをダウンロードしたのに、実行時にメモリ/ビデオメモリが足りないと表示されるのは、ローカルモデルを試す多くの人が最も見たくない結果でしょう。
前述したように、モデルを実行するには重みをメモリまたはビデオメモリにロードする必要があり、回答の生成にはさらに追加のスペースが必要です。手元のデバイスにモデルが収まらない場合は、パラメータ数のより小さなモデルに変える他に、Quantizationバージョンがあるか確認することもできます。
モデルの重みは大量の数値で構成されており、各数値の保存には一定のスペースが必要です。Quantizationは、これらの数値の表現精度を下げることで、モデルのリソース占有を削減します。例えば、元々16ビット浮動小数点数で保存されていた重みを、8ビットや4ビットを中心とした低精度表現に変換します。パラメータ数は通常変化せず、各パラメータが占めるスペースが小さくなります。
70億パラメータのモデル为例に、重み自体のみを計算し、Quantizationの追加情報を無視すると、以下の大まかな推定が得られます。
重みの表現方式 | 理論的な重みサイズ |
16ビット | 約14 GB |
8ビット | 約7 GB |
4ビット | 約3.5 GB |
ここでのGBは10進法で計算しており、実際のQuantizationファイルにはスケーリング係数などの情報も保存され、異なる精度が混在する場合もあるため、サイズは推定と異なる場合があります。
一般ユーザーにとって、Quantizationの最も直接的な利点はモデルファイルが小さくなり、ダウンロードと保存のスペースが節約でき、実行時に重みが占めるメモリまたはビデオメモリも減少することです。ハードウェアと推論フレームワークが適切にサポートしている場合、Quantizationは推論速度の向上も期待できます。
ただし、ファイルが元の4分の1に縮小されても、回答速度が4倍に向上するわけではありません。
精度を下げると回答品質に影響を与える場合があり、その影響はモデル、Quantization方法、タスクによって異なります。Quantizationバージョンを選択する際は、実行できることを確認するだけでなく、自分の関心のある問題で試し、回答がまだ信頼できるか確認することをお勧めします。
ダウンロード済みまたはファインチューニング済みのモデルに対しては、一般的な方法は訓練後Quantization(PTQ)です。これはモデルの訓練後に、重みなどの数値をより低精度の表現に変換するものです。一部の方法はQuantizationプロセスを較正するために、代表的なデータの小さなバッチを準備する必要があります。
もう一つのカテゴリはQuantization意識訓練(QAT)であり、訓練中にQuantizationの影響をシミュレーションし、モデルを低精度の表現に事前に適応させます。
本章ではまずローカル実行で一般的なGGUF Quantizationモデルについて説明し、ファイルの理解、バージョンの区別、選択のサポートをします。その他のQuantization方法の具体的な操作は、後で追加予定です。Ollamaでモデルを実行する際、よくGGUF、Q4、Q8などの名称が出てきます。これらの名称は主にモデルの保存形式とQuantization方式に関連しており、大規模モデルがパーソナルコンピュータで実行できる重要な理由です。
2023年8月、Georgi GerganovがGGUFフォーマットをリリースしました。主な利点には、単一ファイルでのデプロイ、拡張性、メモリマッピングのサポート、情報の完全性、使いやすさがあります。GGUFファイルにはファイルヘッダー、メタデータのキーバリューペア、テンソル情報などが含まれています。これらの構成要素がモデルの構造と動作を定義しています。具体的には以下の通りです:GGUFは大規模モデル推論用のモデルファイル形式で、現在llama.cpp、Ollamaなどのローカル推論ツールで広く使用されています。OllamaはGGUF形式、モデルQuantization、モデル読み込みなどのプロセスをカプセル化しており、ユーザーはモデル形式を自力で変換する必要がなく、Quantization済みモデルを直接ダウンロードして実行できます。GGUFファイルにはモデルパラメータだけでなく、モデルの基本情報、モデル構造、テンソルなどが含まれています。GGUFは統一されたファイル形式でこれらの情報を組織化し、llama.cppなどの推論ツールが直接読み込み-loadできるようにしています。その基本構造は以下の図の通りです。
ModelScopeでも構造化されたGGUFファイルの表示がサポートされており、以下の図のように、推論ツールがGGUFファイルを読み込む際に、これらの情報を直接読み取ってモデルをロードでき、複数のモデル設定ファイルを別途用意する必要はありません。
GGUF自体はモデルファイル形式であり、直接モデルのメモリとビデオメモリの占有を低減するものではありません。モデルのリソース占有を実際に低減するのはQuantizationです。
llama.cppとGGUFモデルにおいて、Q4、Q5、Q8、Q4_K_Mは異なるQuantization名を表します。ここでQはQuantizationを意味し、後の数字は主に使用されるQuantizationビット数を表します。例えばQ4は4ビットQuantizationが主、Q8は8ビットQuantizationが主であることを示します。
注意すべきは、Q4がモデル内のすべてのパラメータが統一的に4ビットで表現されることを意味するわけではないということです。一般的なQ4_K_Mを例にとると、これはllama.cppのK-quant Quantizationタイプに分類されます。名称中のQ4は4ビットQuantizationが主であることを示し、KはK-quant Quantizationスキームを使用することを示し、Mはそのスキーム中のMedium構成を示します。実際のモデルでは、異なるテンソルが異なるQuantization精度を使用する場合があり、すべてのパラメータが統一的に4ビットで表現されるわけではありません。詳細は以下の図を参照してください。
ログイン ディスカッションに参加
GGUFモデルを選択する際は、まず推論ツールがこのモデルをサポートしているか確認し、次に具体的なQuantizationバージョンを確認します。より低いQuantization精度は通常、メモリとビデオメモリの占有を減らし、モデルを一般的なデバイスでより容易に実行できるようにしますが、モデルの効果の一部を損なう可能性があります。より高いQuantization精度は通常、元のモデルの能力をより多く保持しますが、より多くのハードウェアリソースも必要とします。
あるバージョンがデバイスのメモリまたはビデオメモリの上限に近づいている場合は、より占有が小さなバージョンに変更を検討し、コンテキストと実行プロセスに余裕を持たせる必要があります。リソースが十分であれば、同じ質問で異なるバージョンの回答を比較し、特に自分の使用するタスク、例えば情報抽出、コード生成、または規定フォーマットの出力に注目することをお勧めします。
まず安定して実行できることを確認し、次に回答品質を確認します。これにより選択されたQuantizationバージョンが、自分のデバイスと用途に最も適したものになります。