# GGUF への保存

{% tabs %}
{% tab title="ローカルに" %}
GGUF に保存するには、以下を使用してローカルに保存してください:

```python
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 ハブにプッシュするには:

```python
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` は以下に一覧されています:

```python
# https://github.com/ggml-org/llama.cpp/blob/master/examples/quantize/quantize.cpp#L19
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 ビットのエクストラスモール量子化",
}
```

{% endtab %}

{% tab title="手動での保存" %}
まずモデルを 16 ビットで保存してください:

```python
model.save_pretrained_merged("merged_model", tokenizer, save_method = "merged_16bit",)
```

次にターミナルで以下を実行してください:

{% code overflow="wrap" %}

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-mtmd-cli llama-server llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp

python llama.cpp/convert-hf-to-gguf.py FOLDER --outfile OUTPUT --outtype f16
```

{% endcode %}

または <https://rentry.org/llama-cpp-conversions#merging-loras-into-a-model> の手順に従い、モデル名を "merged\_model" として GGUF にマージしてください。
{% endtab %}
{% endtabs %}

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

モデルが Unsloth 上で実行され良い結果を出すが、Ollama や vLLM のような別のプラットフォームで使用すると結果が悪くなったり、意味不明な出力や無限生成が発生することがあります。 *または* 出力が繰り返され&#x308B;**.**

* このエラーの最も一般的な原因は、 <mark style="background-color:blue;">**誤ったチャットテンプレート**</mark>**.** Unsloth でモデルをトレーニングしたときに使用したのと同じチャットテンプレートを、llama.cpp や Ollama など別のフレームワークで実行する際にも必ず使用することが重要です。保存されたモデルから推論する場合は、正しいテンプレートを適用することが重要です。
* 正しいものを使用する必要があります `eos トークン`。そうでないと、長い生成時に意味不明な出力が発生する可能性があります。
* 推論エンジンが不必要な「シーケンス開始」トークンを追加している（または逆に欠如している）ために起こることもあるので、両方の仮説を確認してください！
* <mark style="background-color:green;">**チャットテンプレートを強制するために我々の会話ノートブックを使用してください — これでほとんどの問題が解決します。**</mark>
  * Qwen-3 14B 会話ノートブック [**Colab で開く**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(14B\)-Reasoning-Conversational.ipynb)
  * Gemma-3 4B 会話ノートブック [**Colab で開く**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_\(4B\).ipynb)
  * Llama-3.2 3B 会話ノートブック [**Colab で開く**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.2_\(1B_and_3B\)-Conversational.ipynb)
  * Phi-4 14B 会話ノートブック [**Colab で開く**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Phi_4-Conversational.ipynb)
  * Mistral v0.3 7B 会話ノートブック [**Colab で開く**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Mistral_v0.3_\(7B\)-Conversational.ipynb)
  * **さらに多くのノートブックは我々の** [**ノートブック ドキュメント**](https://unsloth.ai/docs/jp/meru/unsloth-notebooks)

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

保存中の最大 GPU 使用量を減らすために、次を変更してみてください `maximum_memory_usage`.

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

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

まず次を使ってモデルを 16 ビットで保存してください:

```python
model.save_pretrained_merged("merged_model", tokenizer, save_method = "merged_16bit",)
```

以下のようにソースから llama.cpp をコンパイルしてください:

{% code overflow="wrap" %}

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-mtmd-cli llama-server llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp
```

{% endcode %}

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

```bash
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-F16.gguf --outtype f16 \
    --split-max-size 50G
```

```bash
# BF16 の場合:
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-BF16.gguf --outtype bf16 \
    --split-max-size 50G
    
# Q8_0 の場合:
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-Q8_0.gguf --outtype q8_0 \
    --split-max-size 50G
```
