GGUF への保存

モデルを 16bit で GGUF に保存して Ollama、Jan AI、Open WebUI などで使えるようにする方法!

GGUF に保存するには、以下を使用してローカルに保存してください:

model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q4_k_m")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q8_0")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "f16")

Hugging Face ハブにプッシュするには:

model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q4_k_m")
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q8_0")

すべてのサポートされている量子化オプションは quantization_method 以下に一覧されています:

# https://github.com/ggerganov/llama.cpp/blob/master/examples/quantize/quantize.cpp#L19
# From https://mlabonne.github.io/blog/posts/Quantize_Llama_2_models_using_ggml.html
ALLOWED_QUANTS = \
{
    "not_quantized"  : "推奨。変換は高速。推論は遅く、ファイルサイズは大きい。",
    "fast_quantized" : "推奨。変換は高速。推論はまあまあ、ファイルサイズもまあまあ。",
    "quantized"      : "推奨。変換は遅い。推論は高速で、ファイルサイズは小さい。",
    "f32"     : "推奨されません。100%の精度を維持しますが、非常に遅くメモリを大量に消費します。",
    "f16"     : "変換は最速で100%の精度を維持します。推論は遅くメモリを多く消費します。",
    "q8_0"    : "変換は高速。リソース使用は高いが、一般的には許容範囲です。",
    "q4_k_m"  : "推奨。attention.wv と feed_forward.w2 テンソルの半分に Q6_K を使用し、それ以外は Q4_K を使用します",
    "q5_k_m"  : "推奨。attention.wv と feed_forward.w2 テンソルの半分に Q6_K を使用し、それ以外は Q5_K を使用します",
    "q2_k"    : "attention.vw と feed_forward.w2 テンソルに Q4_K を使用し、その他のテンソルに Q2_K を使用します。",
    "q3_k_l"  : "attention.wv、attention.wo、feed_forward.w2 テンソルに Q5_K を使用し、それ以外は Q3_K を使用します",
    "q3_k_m"  : "attention.wv、attention.wo、feed_forward.w2 テンソルに Q4_K を使用し、それ以外は Q3_K を使用します",
    "q3_k_s"  : "すべてのテンソルに Q3_K を使用します",
    "q4_0"    : "元の量子化方法、4ビット。",
    "q4_1"    : "q4_0 より精度が高いが q5_0 ほどではありません。ただし q5 モデルより推論が速いです。",
    "q4_k_s"  : "すべてのテンソルに Q4_K を使用します",
    "q4_k"    : "q4_k_m のエイリアス",
    "q5_k"    : "q5_k_m のエイリアス",
    "q5_0"    : "より高い精度、より高いリソース使用、より遅い推論。",
    "q5_1"    : "さらに高い精度、リソース使用、およびより遅い推論。",
    "q5_k_s"  : "すべてのテンソルに Q5_K を使用します",
    "q6_k"    : "すべてのテンソルに Q8_K を使用します",
    "iq2_xxs" : "2.06 bpw の量子化",
    "iq2_xs"  : "2.31 bpw の量子化",
    "iq3_xxs" : "3.06 bpw の量子化",
    "q3_k_xs" : "3ビットの超小型量子化",
}

Unslothでの実行はうまくいきますが、エクスポートして他のプラットフォームで実行すると結果が悪い

モデルがUnsloth上では正しく動作して良い結果を出すのに、OllamaやvLLMのような別のプラットフォームで使うと結果が悪くなったり、意味不明な出力や終わりのない/無限の生成が発生することがあります。 または 繰り返し出力.

  • このエラーの最も一般的な原因は、 誤ったチャットテンプレート. です。Unslothでモデルを訓練したときに使用したのと同じチャットテンプレートを、llama.cppやOllamaなど別のフレームワークで実行する際にも必ず使用することが重要です。保存されたモデルから推論する場合、正しいテンプレートを適用することが不可欠です。

  • 正しい eos トークンを使用する必要があります。そうしないと、長い生成で意味のない出力が出ることがあります。

  • また、推論エンジンが不要な「シーケンス開始」トークンを追加している(あるいは逆に欠如している)ことが原因の可能性もあるため、両方の仮説を確認してください!

  • チャットテンプレートを強制する私たちの会話用ノートブックを使用してください — これでほとんどの問題が解決します。

GGUF / vLLM 16bit への保存がクラッシュする

保存中の最大GPU使用量を減らすには、 maximum_memory_usage.

のデフォルトは model.save_pretrained(..., maximum_memory_usage = 0.75)です。ピークGPUメモリの50%を使うように0.5などに下げるか、それ以下にしてください。これにより保存中のOOMクラッシュを減らせます。

手動で GGUF に保存するにはどうすればよいですか?

まず次でモデルを16ビットで保存します:

以下のようにソースから llama.cpp をコンパイルします:

次に、モデルを F16 に保存します:

最終更新

役に立ちましたか?