# GLM-4.6：本地运行指南

GLM-4.6 和 **GLM-4.6V-Flash** 是来自 **Z.ai**的最新推理模型，在编程和智能体基准测试中达到 SOTA 表现，同时提供了更好的对话聊天体验。 [**GLM-4.6V-Flash**](#glm-4.6v-flash) **较小的 9B 模型已于 2025 年 12 月发布，你现在也可以运行它。**

完整的 355B 参数模型需要 **400GB** 磁盘空间，而 Unsloth Dynamic 2-bit GGUF 将大小减少到 **135GB** (-**75%)**. [**GLM-4.6-GGUF**](https://huggingface.co/unsloth/GLM-4.6-GGUF)

{% hint style="success" %}
我们对 GLM-4.6 做了多项 [**聊天模板修复**](#unsloth-chat-template-fixes) 以使 `llama.cpp/llama-cli --jinja` 能够工作——请只使用 `--jinja` 否则输出会出错！

你要求查看我们量化模型的基准测试，所以我们展示 Aider Polyglot 的结果！我们的动态 3 比特 DeepSeek V3.1 GGUF 得分 **75.6%**，超过了许多全精度的 SOTA LLM。 [阅读更多。](/docs/zh/ji-chu/unsloth-dynamic-2.0-ggufs/unsloth-dynamic-ggufs-on-aider-polyglot.md)
{% endhint %}

所有上传都使用 Unsloth [Dynamic 2.0](/docs/zh/ji-chu/unsloth-dynamic-2.0-ggufs.md) ，以获得 SOTA 5-shot MMLU 和 Aider 表现，这意味着你可以在几乎不损失准确率的情况下运行并微调量化的 GLM LLM。

**教程导航：**

<a href="#glm-4.6v-flash" class="button secondary">运行 GLM-4.6V-Flash</a><a href="#glm-4.6" class="button secondary">运行 GLM-4.6</a>

### :bug:Unsloth 聊天模板与 bug 修复

我们做的一项重要修复是解决了 GGUF 提示词中的一个问题，即第二个提示无法工作。我们修复了这个问题，不过在没有我们修复的 GGUF 中，这个问题仍然存在。例如，使用任何非 Unsloth 的 GLM-4.6 GGUF 时，第一轮对话可以正常工作，但第二轮就会出问题。

<figure><img src="/files/7735ec595467153511a3b1c420cf607e36fafa0b" alt="" width="563"><figcaption></figcaption></figure>

我们已在聊天模板中解决了这个问题，因此使用我们的版本时，第二轮之后的对话（第三轮、第四轮等）都不会出现任何错误。工具调用仍然存在一些问题，由于带宽限制，我们尚未完全调查。我们已经把这些遗留问题告知了 GLM 团队。

### :mag\_right:GLM 4.6V Flash 的怪癖与修复

{% hint style="info" %}
GLM-4.6V-Flash 可能会用中文进行推理并输出中文。这并非我们量化模型独有，而是模型本身的一个特性。使用系统提示词“用英语回复并用英语推理”可以强制推理和输出都使用英语！
{% endhint %}

我们测试了其他量化提供方的 BF16 和 Q8\_0 量化版本，似乎都在用中文推理。例如，在 seed 3407 下、对同一个提示词“Create a Flappy Bird game in Python”运行两个独立量化版本时，推理都是中文：

{% columns %}
{% column %}

<figure><img src="/files/a174c3605a99d831bc4e89c05bfe2eca01bc2f29" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="/files/b9da772571c9162198cd90185acb0b27d33cc42d" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

通过使用系统提示词“用英语推理”经由 `--system-prompt "Respond in English"` 在 llama.cpp 中，例如如下：

```bash
./llama.cpp/llama-cli -hf unsloth/GLM-4.6V-Flash-GGUF:BF16 \
    --jinja --temp 0.8 --top-p 0.6 --top-k 2 --repeat-penalty 1.1 --min-p 0.0 --seed 3407 \
    --prompt "Create a Flappy Bird game in Python" --system-prompt "Respond in English"
```

我们得到中文推理，但输出是英文。我们还会继续追问“What is 1+1”，结果也只有英文：

<figure><img src="/files/a831cdf98b10c45e2c633451fe85a0ef88513d52" alt="" width="375"><figcaption></figcaption></figure>

最后，通过使用系统提示词“用英语回复并用英语推理”经由 `--system-prompt "Respond in English and reason in English"` 在 llama.cpp 中，例如如下：

```bash
./llama.cpp/llama-cli -hf unsloth/GLM-4.6V-Flash-GGUF:BF16 \
    --jinja --temp 0.8 --top-p 0.6 --top-k 2 --repeat-penalty 1.1 --min-p 0.0 --seed 3407 \
    --prompt "Create a Flappy Bird game in Python" \
    --system-prompt "Respond in English and reason in English"
```

我们得到英文推理和英文输出！我们还会继续追问“What is 1+1”，结果也只有英文：

<figure><img src="/files/27342bbc6d9d15f6cccec7037bc70f0934f4b132" alt=""><figcaption></figcaption></figure>

## :gear: 使用指南

2-bit 动态量化 UD-Q2\_K\_XL 使用 135GB 磁盘空间——这在 **1x24GB 显卡和 128GB 内存** 配合 MoE 卸载时效果很好。1-bit 的 UD-TQ1 GGUF 也 **可在 Ollama 中原生运行**!

{% hint style="info" %}
你必须使用 `--jinja` 用于 llama.cpp 量化版本——这会使用我们的 [固定聊天模板](#chat-template-bug-fixes) 并启用正确的模板！如果你不使用，可能会得到错误结果 `--jinja`
{% endhint %}

4-bit 量化可放入 1x 40GB GPU 中（并将 MoE 层卸载到 RAM）。如果你还有额外的 165GB RAM，在这种配置下预计速度约为 5 token/s。建议至少有 205GB RAM 来运行该 4-bit 版本。要获得最佳性能，你至少需要 205GB 统一内存，或 205GB 的 RAM+VRAM 组合，才能达到 5+ token/s。要了解如何提高生成速度并适配更长上下文， [请阅读这里](#improving-generation-speed).

{% hint style="success" %}
虽然不是必须的，但为了获得最佳性能，建议你的 VRAM + RAM 总和等于你下载的量化版本大小。如果不满足，使用 llama.cpp 也可以通过硬盘/SSD 卸载运行，只是推理会更慢。
{% endhint %}

### 推荐设置

根据 Z.ai 的说明，GLM-4.6V-Flash 和 GLM-4.6 的推理设置不同：

| GLM-4.6V-Flash                                                     | GLM-4.6                                                                 |
| ------------------------------------------------------------------ | ----------------------------------------------------------------------- |
| <mark style="background-color:green;">**temperature = 0.8**</mark> | <mark style="background-color:green;">**temperature = 1.0**</mark>      |
| <mark style="background-color:green;">**top\_p = 0.6**</mark> （推荐） | <mark style="background-color:green;">**top\_p = 0.95**</mark> （推荐用于编程） |
| <mark style="background-color:green;">**top\_k = 2**</mark> （推荐）   | <mark style="background-color:green;">**top\_k = 40**</mark> （推荐用于编程）   |
| **128K 上下文长度** 或更少                                                 | **200K 上下文长度** 或更少                                                      |
| **repeat\_penalty = 1.1**                                          |                                                                         |
| **max\_generate\_tokens = 16,384**                                 | **max\_generate\_tokens = 16,384**                                      |

* 使用 `--jinja` 用于 llama.cpp 变体——我们 **也修复了一些聊天模板问题！**

## 运行 GLM-4.6 教程：

查看我们关于运行 [GLM-4.6V-Flash](#glm-4.6v-flash) 以及大型 [GLM-4.6](#glm-4.6) 模型。

### GLM-4.6V-Flash

{% hint style="success" %}
**2025 年 12 月 16 日新增：GLM-4.6-V 现已更新，支持视觉功能！**
{% endhint %}

#### ✨ 在 llama.cpp 中运行

{% stepper %}
{% step %}
获取最新的 `llama.cpp` 在 [GitHub](https://github.com/ggml-org/llama.cpp)。你也可以使用下面的构建说明。更改 `-DGGML_CUDA=ON` 改为 `-DGGML_CUDA=OFF` 如果你没有 GPU，或者只想进行 CPU 推理。 **对于 Apple Mac / Metal 设备**，设置 `-DGGML_CUDA=OFF` 然后照常继续——Metal 支持默认开启。

```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
```

{% endstep %}

{% step %}
如果你想使用 `llama.cpp` 直接加载模型，你可以这样做：（:Q8\_K\_XL）是量化类型。你也可以通过 Hugging Face 下载（见第 3 点）。这与 `ollama run` 。使用 `export LLAMA_CACHE="folder"` 来强制 `llama.cpp` 保存到特定位置。请记住，该模型的最大上下文长度只有 128K。

```bash
export LLAMA_CACHE="unsloth/GLM-4.6V-Flash-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/GLM-4.6V-Flash-GGUF:UD-Q8_K_XL \
    --n-gpu-layers 99 \\
    --jinja \
    --ctx-size 16384 \
    --flash-attn on \
    --temp 0.8 \
    --top-p 0.6 \
    --top-k 2 \
    --repeat-penalty 1.1 \
    -ot ".ffn_.*_exps.=CPU"
```

{% endstep %}

{% step %}
通过以下方式下载模型（在安装 `pip install huggingface_hub hf_transfer` 之后）。你可以选择 `UD-`Q4\_K\_XL（动态 4bit 量化）或其他量化版本，例如 `Q8_K_XL` .

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # 有时会触发限流，因此设为 0 以禁用
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/GLM-4.6V-Flash-GGUF",
    local_dir = "unsloth/GLM-4.6V-Flash-GGUF",
    allow_patterns = ["*UD-Q8_K_XL*"],
)
```

{% endstep %}
{% endstepper %}

### GLM-4.6

#### :llama: 在 Ollama 中运行

{% stepper %}
{% step %}
安装 `ollama` 如果你还没安装！要运行模型的更多变体， [请看这里](https://unsloth.ai/docs/zh/mo-xing/tutorials/pages/e159c2414bf59eef4f0d1e98dc6013b013c34532#run-in-llama.cpp).

```bash
apt-get update
apt-get install pciutils -y
curl -fsSL https://ollama.com/install.sh | sh
```

{% endstep %}

{% step %}
运行模型！注意，如果失败，你可以在另一个终端中调用 `ollama serve`！我们在 Hugging Face 上传中包含了所有修复和建议参数（如 temperature 等） `params` ！

```
OLLAMA_MODELS=unsloth ollama serve &

OLLAMA_MODELS=unsloth ollama run hf.co/unsloth/GLM-4.6-GGUF:TQ1_0
```

{% endstep %}

{% step %}
要运行其他量化版本，你需要先将 GGUF 分片文件合并成 1 个，就像下面的代码。然后你需要在本地运行模型。

```bash
./llama.cpp/llama-gguf-split --merge \\
  GLM-4.6-GGUF/GLM-4.6-UD-Q2_K_XL/GLM-4.6-UD-Q2_K_XL-00001-of-00003.gguf \
	merged_file.gguf
```

```bash
OLLAMA_MODELS=unsloth ollama serve &

OLLAMA_MODELS=unsloth ollama run merged_file.gguf
```

{% endstep %}
{% endstepper %}

#### ✨ 在 llama.cpp 中运行

{% stepper %}
{% step %}
获取最新的 `llama.cpp` 在 [GitHub 这里](https://github.com/ggml-org/llama.cpp)。你也可以按照下面的构建说明操作。将 `-DGGML_CUDA=ON` 改为 `-DGGML_CUDA=OFF` 如果你没有 GPU，或者只想进行 CPU 推理。

```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-quantize llama-cli llama-gguf-split llama-mtmd-cli llama-server
cp llama.cpp/build/bin/llama-* llama.cpp
```

{% endstep %}

{% step %}
如果你想使用 `llama.cpp` 来加载模型，可以使用下面的方法：（:Q2\_K\_XL）是量化类型。你也可以通过 Hugging Face 下载（第 3 点）。这类似于 `ollama run` 。使用 `export LLAMA_CACHE="folder"` 来强制 `llama.cpp` 保存到特定位置。请记住，该模型的最大上下文长度只有 128K。

{% hint style="success" %}
请试试 `-ot ".ffn_.*_exps.=CPU"` 将所有 MoE 层卸载到 CPU！这实际上允许你将所有非 MoE 层放到 1 张 GPU 上，从而提高生成速度。如果你有更多 GPU 容量，可以自定义正则表达式以适配更多层。

如果你的 GPU 内存再多一些，尝试 `-ot ".ffn_(up|down)_exps.=CPU"` 这会卸载上、下投影 MoE 层。

再试试 `-ot ".ffn_(up)_exps.=CPU"` 如果你的 GPU 内存更多一些。这样只会卸载上投影 MoE 层。

最后通过以下方式卸载所有层： `-ot ".ffn_.*_exps.=CPU"` 这使用的 VRAM 最少。

你也可以自定义正则表达式，例如 `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` 表示从第 6 层开始卸载 gate、up 和 down MoE 层。
{% endhint %}

```bash
export LLAMA_CACHE="unsloth/GLM-4.6-GGUF"
./llama.cpp/llama-cli \
    --model GLM-4.6-GGUF/UD-Q2_K_XL/GLM-4.6-UD-Q2_K_XL-00001-of-00003.gguf \
    --n-gpu-layers 99 \\
    --jinja \
    --ctx-size 16384 \
    --flash-attn on \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 40 \
    -ot ".ffn_.*_exps.=CPU"
```

{% endstep %}

{% step %}
通过以下方式下载模型（在安装 `pip install huggingface_hub hf_transfer` 之后）。你可以选择 `UD-`Q2\_K\_XL（动态 2bit 量化）或其他量化版本，例如 `Q4_K_XL` 。我们 <mark style="background-color:green;">**建议使用我们的 2.7bit 动态量化**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**`UD-Q2_K_XL`**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**以平衡大小和准确率**</mark>.

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # 有时会触发限流，因此设为 0 以禁用
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/GLM-4.6-GGUF",
    local_dir = "unsloth/GLM-4.6-GGUF",
    allow_patterns = ["*UD-Q2_K_XL*"], # 动态 2bit；动态 1bit 请使用 "*UD-TQ1_0*"
)
```

{% endstep %}

{% step %}
你可以编辑 `--threads 32` 来设置 CPU 线程数， `--ctx-size 16384` 来设置上下文长度， `--n-gpu-layers 2` 来设置 GPU 卸载多少层。如果你的 GPU 显存不足，请尝试调整它。如果你只进行 CPU 推理，也请移除它。

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-cli \
    --model unsloth/GLM-4.6-GGUF/UD-Q2_K_XL/GLM-4.6-UD-Q2_K_XL-00001-of-00003.gguf \
    --jinja \
    --n-gpu-layers 99 \\
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 40 \
    --ctx-size 16384 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```

{% endcode %}
{% endstep %}
{% endstepper %}

### ✨ 使用 llama-server 和 OpenAI 的 completion 库进行部署

要使用 llama-server 进行部署，请使用以下命令：

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-server \
    --model unsloth/GLM-4.6-GGUF/UD-Q2_K_XL/GLM-4.6-UD-Q2_K_XL-00001-of-00003.gguf \
    --alias "unsloth/GLM-4.6" \
    --n-gpu-layers 999 \
    -ot ".ffn_.*_exps.=CPU" \\
    --prio 3 \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 40 \
    --ctx-size 16384 \
    --port 8001 \
    --jinja
```

{% endcode %}

然后在以下命令之后使用 OpenAI 的 Python 库 `pip install openai` :

```python
from openai import OpenAI
import json
openai_client = OpenAI(
    base_url = "http://127.0.0.1:8001/v1",
    api_key = "sk-no-key-required",
)
completion = openai_client.chat.completions.create(
    model = "unsloth/GLM-4.6",
    messages = [{"role": "user", "content": "2+2 等于多少？"},],
)
print(completion.choices[0].message.content)
```

### :minidisc:模型上传

**我们所有的上传** ——包括那些不是基于 imatrix 或动态的——都使用了我们的校准数据集，该数据集专门针对对话、编码和语言任务进行了优化。

* 下面是完整的 GLM-4.6 模型上传：

我们还上传了 [IQ4\_NL](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/IQ4_NL) 和 [Q4\_1](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/Q4_1) 量化版本，它们分别针对 ARM 和 Apple 设备实现了更快运行。

<table data-full-width="false"><thead><tr><th>MoE 比特数</th><th>类型 + 链接</th><th>磁盘大小</th><th>详情</th></tr></thead><tbody><tr><td>1.66bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF?show_file_info=GLM-4.6-UD-TQ1_0.gguf">TQ1_0</a></td><td><strong>84GB</strong></td><td>1.92/1.56bit</td></tr><tr><td>1.78bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-IQ1_S">IQ1_S</a></td><td><strong>96GB</strong></td><td>2.06/1.56bit</td></tr><tr><td>1.93bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-IQ1_M">IQ1_M</a></td><td><strong>107GB</strong></td><td>2.5/2.06/1.56</td></tr><tr><td>2.42bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-IQ2_XXS">IQ2_XXS</a></td><td><strong>115GB</strong></td><td>2.5/2.06bit</td></tr><tr><td>2.71bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-Q2_K_XL">Q2_K_XL</a></td><td><strong>135GB</strong></td><td>3.5/2.5bit</td></tr><tr><td>3.12bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-IQ3_XXS">IQ3_XXS</a></td><td><strong>145GB</strong></td><td>3.5/2.06bit</td></tr><tr><td>3.5bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-Q3_K_XL">Q3_K_XL</a></td><td><strong>158GB</strong></td><td>4.5/3.5bit</td></tr><tr><td>4.5bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-Q4_K_XL">Q4_K_XL</a></td><td><strong>204GB</strong></td><td>5.5/4.5bit</td></tr><tr><td>5.5bit</td><td><a href="https://huggingface.co/unsloth/GLM-4.6-GGUF/tree/main/UD-Q5_K_XL">Q5_K_XL</a></td><td><strong>252GB</strong></td><td>6.5/5.5bit</td></tr></tbody></table>

### :snowboarder: 提升生成速度

如果你有更多 VRAM，可以尝试卸载更多 MoE 层，或直接卸载整个层。

通常， `-ot ".ffn_.*_exps.=CPU"` 会将所有 MoE 层卸载到 CPU！这实际上允许你将所有非 MoE 层放到 1 张 GPU 上，从而提高生成速度。如果你有更多 GPU 容量，可以自定义正则表达式以适配更多层。

如果你的 GPU 内存再多一些，尝试 `-ot ".ffn_(up|down)_exps.=CPU"` 这会卸载上、下投影 MoE 层。

再试试 `-ot ".ffn_(up)_exps.=CPU"` 如果你的 GPU 内存更多一些。这样只会卸载上投影 MoE 层。

你也可以自定义正则表达式，例如 `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` 表示从第 6 层开始卸载 gate、up 和 down MoE 层。

Llama.cpp 还引入了高吞吐模式。使用 `llama-parallel`。了解更多 [这里](https://github.com/ggml-org/llama.cpp/tree/master/examples/parallel)。你还可以 **将 KV 缓存量化为 4bits** ，例如减少 VRAM / RAM 传输，这也可以加快生成过程。

### 📐如何适配长上下文（完整 200K）

要适配更长上下文，你可以使用 **KV 缓存量化** 将 K 和 V 缓存量化到更低位数。由于减少了 RAM / VRAM 数据移动，这也可以提高生成速度。允许的 K 量化选项（默认是 `f16`）如下。

`--cache-type-k f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1`

你应该使用 `_1` 这些变体，以略微提高准确率，尽管会稍慢一些。例如 `q4_1, q5_1`

你也可以量化 V 缓存，但你需要 **通过以下方式编译带有 Flash Attention 支持的 llama.cpp** ： `-DGGML_CUDA_FA_ALL_QUANTS=ON`，并使用 `--flash-attn` 来启用它。然后你可以将其与 `--cache-type-k` :

`--cache-type-v f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/zh/mo-xing/tutorials/glm-4.6-how-to-run-locally.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
