zGLM-4.6:本地运行指南

关于如何在您自己的本地设备上运行 Z.ai GLM-4.6 和 GLM-4.6V-Flash 模型的指南!

GLM-4.6 和 GLM-4.6V-Flash 是来自 Z.ai的最新推理模型,在代码和代理基准上达到了 SOTA 性能,同时提供了改进的对话聊天体验。 GLM-4.6V-Flash 较小的 9B 模型已于 2025 年 12 月发布,你现在也可以运行它。

完整的 355B 参数模型需要 400GB 的磁盘空间,而 Unsloth 动态 2-bit GGUF 将大小减少到 135GB (-75%). GLM-4.6-GGUFarrow-up-right

circle-check

所有上传都使用 Unsloth Dynamic 2.0 以实现 SOTA 的 5-shot MMLU 和 Aider 性能,这意味着您可以以最小的精度损失运行和微调量化的 GLM LLM。

教程导航:

运行 GLM-4.6V-Flash运行 GLM-4.6

🐛Unsloth 聊天模板与错误修复

我们所做的一个重要修复是解决了对 GGUF 提示的问题,其中第二个提示无法工作。我们修复了此问题,但在没有我们修复的 GGUF 中该问题仍然存在。例如,使用任何非 Unsloth 的 GLM-4.6 GGUF 时,第一次对话正常,但第二次会中断。

我们已在我们的聊天模板中解决了此问题,因此使用我们的版本时,第二次之后的对话(第三次、第四次等)可正常进行且不会出错。工具调用方面仍存在一些问题,由于带宽限制我们尚未完全调查。我们已将这些剩余问题告知 GLM 团队。

🔎GLM 4.6V Flash 的怪异行为与修复

circle-info

GLM-4.6V-Flash 可能在推理和输出时使用中文。这并非我们量化模型独有,而是模型的一个特性。使用系统提示“Respond in English and reason in English”可强制以英语进行推理和输出!

我们测试了其他量化提供者的 BF16 和 Q8_0 量化结果,所有似乎都在用中文进行推理。例如在种子 3407 上的两个不同量化结果,并且在相同提示“Create a Flappy Bird game in Python”下显示中文推理:

通过使用系统提示“Reason in English”通过 --system-prompt "Respond in English" 在 llama.cpp 中,例如如下:

我们得到的是中文推理,但输出为英语。我们还询问了后续问题“What is 1+1”,并只得到英语:

最后,通过使用系统提示“Respond in English and reason in English”通过 --system-prompt "Respond in English and reason in English" 在 llama.cpp 中,例如如下:

我们得到的是用英语推理并以英语输出!我们也询问了后续问题“What is 1+1”,并只得到英语:

⚙️ 使用指南

2-bit 动态量化 UD-Q2_K_XL 使用 135GB 的磁盘空间 —— 这在 1x24GB 显卡和 128GB 内存 配合 MoE 卸载时效果良好。1-bit UD-TQ1 GGUF 也 可在 Ollama 中本地工作!

circle-info

您必须使用 --jinja 用于 llama.cpp 量化 —— 这使用了我们的 固定聊天模板 并启用正确的模板!如果不使用,您可能会得到不正确的结果 --jinja

4-bit 量化可以适配 1x 40GB GPU(MoE 层卸载到内存)。如果您还有额外的 165GB 内存,此设置下生成速度约为 5 令牌/秒。建议至少有 205GB 内存来运行此 4-bit。为了获得最佳性能,您需要至少 205GB 的统一内存或 205GB 的 RAM+VRAM 组合以达到 5+ 令牌/秒。要了解如何提高生成速度并适配更长的上下文, 请在此处阅读.

circle-check

推荐设置

根据 Z.ai 的说法,GLM-4.6V-Flash 和 GLM-4.6 推理有不同的设置:

GLM-4.6V-Flash
GLM-4.6

temperature = 0.8

temperature = 1.0

top_p = 0.6 (推荐)

top_p = 0.95 (推荐用于代码编写)

top_k = 2 (推荐)

top_k = 40 (推荐用于代码编写)

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.6 models.

GLM-4.6V-Flash

circle-check

✨ 在 llama.cpp 中运行

1

获取最新的 llama.cppGitHubarrow-up-right. 你也可以使用下面的构建说明。更改 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF

2

如果您想直接使用 llama.cpp 直接加载模型,你可以如下操作:(:Q8_K_XL)是量化类型。你也可以通过 Hugging Face(第 3 点)下载。这与 ollama run 。使用 export LLAMA_CACHE="folder" 来强制 llama.cpp 保存到特定位置。请记住模型的最大上下文长度为 128K。

3

通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。您可以选择 UD-Q4_K_XL(动态 4 位量化)或其他量化版本例如 Q8_K_XL .

GLM-4.6

🦙 在 Ollama 中运行

1

安装 ollama 如果您还没有安装!要运行更多模型变体, 请查看此处.

2

运行模型!注意如果失败您可以在另一个终端调用 ollama serve!我们在 Hugging Face 上传中包含了所有修复和建议的参数(温度等),位于 params

3

要运行其他量化版本,您需要先将 GGUF 分割文件合并为一个,如下面代码所示。然后在本地运行模型。

✨ 在 llama.cpp 中运行

1

获取最新的 llama.cppGitHub(此处)arrow-up-right。您也可以按照下面的构建说明。若没有 GPU 或仅想用 CPU 推理,请将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF

2

如果您想直接使用 llama.cpp 来加载模型,您可以如下操作:(:Q2_K_XL)是量化类型。您也可以通过 Hugging Face(第 3 点)下载。这类似于 ollama run 。使用 export LLAMA_CACHE="folder" 来强制 llama.cpp 保存到特定位置。请记住模型的最大上下文长度为 128K。

circle-check
3

通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。您可以选择 UD-Q2_K_XL(动态 2bit 量化)或其他量化版本,如 Q4_K_XL 。我们 建议使用我们的 2.7bit 动态量化 UD-Q2_K_XL 以在大小和精度之间取得平衡.

4

您可以编辑 --threads 32 以设置 CPU 线程数, --ctx-size 16384 以设置上下文长度, --n-gpu-layers 2 以设置多少层使用 GPU 卸载。如果 GPU 出现内存不足,请尝试调整它。如果仅使用 CPU 推理,请移除它。

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

要使用 llama-server 进行部署,请使用以下命令:

然后在安装 pip install openai :

💽模型上传

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

  • 下面是完整 GLM-4.6 模型的上传:

我们还上传了 IQ4_NLarrow-up-rightQ4_1arrow-up-right 这些量化专为 ARM 和 Apple 设备分别运行得更快。

MoE 比特数
类型 + 链接
磁盘大小
详情

1.66 位

84GB

1.92/1.56 位

1.78 位

96GB

2.06/1.56 位

1.93 位

107GB

2.5/2.06/1.56

2.42 位

115GB

2.5/2.06 位

2.71 位

135GB

3.5/2.5 位

3.12 位

145GB

3.5/2.06 位

3.5 位

158GB

4.5/3.5 位

4.5 位

204GB

5.5/4.5 位

5.5 位

252GB

6.5/5.5 位

🏂 用于 GLM 4.7 的执行生成 Python 代码的工具调用

如果你有更多显存,可以尝试卸载更多 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-parallel。在 这里arrow-up-right可以了解更多信息。你也可以 例如将 KV 缓存量化到 4 位 。您还可以

📐如何适配长上下文(完整 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 ,并使用 --flash-attn :

来启用它。然后您可以与下面的选项一起使用: --cache-type-k

最后更新于

这有帮助吗?