GLM-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 Dynamic 2-bit GGUF 将大小减少到 135GB (-75%). GLM-4.6-GGUF
所有上传都使用 Unsloth Dynamic 2.0 ,以获得 SOTA 5-shot MMLU 和 Aider 表现,这意味着你可以在几乎不损失准确率的情况下运行并微调量化的 GLM LLM。
教程导航:
🐛Unsloth 聊天模板与 bug 修复
我们做的一项重要修复是解决了 GGUF 提示词中的一个问题,即第二个提示无法工作。我们修复了这个问题,不过在没有我们修复的 GGUF 中,这个问题仍然存在。例如,使用任何非 Unsloth 的 GLM-4.6 GGUF 时,第一轮对话可以正常工作,但第二轮就会出问题。

我们已在聊天模板中解决了这个问题,因此使用我们的版本时,第二轮之后的对话(第三轮、第四轮等)都不会出现任何错误。工具调用仍然存在一些问题,由于带宽限制,我们尚未完全调查。我们已经把这些遗留问题告知了 GLM 团队。
🔎GLM 4.6V Flash 的怪癖与修复
GLM-4.6V-Flash 可能会用中文进行推理并输出中文。这并非我们量化模型独有,而是模型本身的一个特性。使用系统提示词“用英语回复并用英语推理”可以强制推理和输出都使用英语!
我们测试了其他量化提供方的 BF16 和 Q8_0 量化版本,似乎都在用中文推理。例如,在 seed 3407 下、对同一个提示词“Create a Flappy Bird game in Python”运行两个独立量化版本时,推理都是中文:


通过使用系统提示词“用英语推理”经由 --system-prompt "Respond in English" 在 llama.cpp 中,例如如下:
我们得到中文推理,但输出是英文。我们还会继续追问“What is 1+1”,结果也只有英文:

最后,通过使用系统提示词“用英语回复并用英语推理”经由 --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 中原生运行!
你必须使用 --jinja 用于 llama.cpp 量化版本——这会使用我们的 固定聊天模板 并启用正确的模板!如果你不使用,可能会得到错误结果 --jinja
4-bit 量化可放入 1x 40GB GPU 中(并将 MoE 层卸载到 RAM)。如果你还有额外的 165GB RAM,在这种配置下预计速度约为 5 token/s。建议至少有 205GB RAM 来运行该 4-bit 版本。要获得最佳性能,你至少需要 205GB 统一内存,或 205GB 的 RAM+VRAM 组合,才能达到 5+ token/s。要了解如何提高生成速度并适配更长上下文, 请阅读这里.
虽然不是必须的,但为了获得最佳性能,建议你的 VRAM + RAM 总和等于你下载的量化版本大小。如果不满足,使用 llama.cpp 也可以通过硬盘/SSD 卸载运行,只是推理会更慢。
推荐设置
根据 Z.ai 的说明,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 模型。
GLM-4.6V-Flash
2025 年 12 月 16 日新增:GLM-4.6-V 现已更新,支持视觉功能!
✨ 在 llama.cpp 中运行
获取最新的 llama.cpp 在 GitHub。你也可以使用下面的构建说明。更改 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 如果你没有 GPU,或者只想进行 CPU 推理。 对于 Apple Mac / Metal 设备,设置 -DGGML_CUDA=OFF 然后照常继续——Metal 支持默认开启。
如果你想使用 llama.cpp 直接加载模型,你可以这样做:(:Q8_K_XL)是量化类型。你也可以通过 Hugging Face 下载(见第 3 点)。这与 ollama run 。使用 export LLAMA_CACHE="folder" 来强制 llama.cpp 保存到特定位置。请记住,该模型的最大上下文长度只有 128K。
通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。你可以选择 UD-Q4_K_XL(动态 4bit 量化)或其他量化版本,例如 Q8_K_XL .
GLM-4.6
🦙 在 Ollama 中运行
安装 ollama 如果你还没安装!要运行模型的更多变体, 请看这里.
运行模型!注意,如果失败,你可以在另一个终端中调用 ollama serve!我们在 Hugging Face 上传中包含了所有修复和建议参数(如 temperature 等) params !
要运行其他量化版本,你需要先将 GGUF 分片文件合并成 1 个,就像下面的代码。然后你需要在本地运行模型。
✨ 在 llama.cpp 中运行
获取最新的 llama.cpp 在 GitHub 这里。你也可以按照下面的构建说明操作。将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 如果你没有 GPU,或者只想进行 CPU 推理。
如果你想使用 llama.cpp 来加载模型,可以使用下面的方法:(:Q2_K_XL)是量化类型。你也可以通过 Hugging Face 下载(第 3 点)。这类似于 ollama run 。使用 export LLAMA_CACHE="folder" 来强制 llama.cpp 保存到特定位置。请记住,该模型的最大上下文长度只有 128K。
请试试 -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 层。
通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。你可以选择 UD-Q2_K_XL(动态 2bit 量化)或其他量化版本,例如 Q4_K_XL 。我们 建议使用我们的 2.7bit 动态量化 UD-Q2_K_XL 以平衡大小和准确率.
你可以编辑 --threads 32 来设置 CPU 线程数, --ctx-size 16384 来设置上下文长度, --n-gpu-layers 2 来设置 GPU 卸载多少层。如果你的 GPU 显存不足,请尝试调整它。如果你只进行 CPU 推理,也请移除它。
✨ 使用 llama-server 和 OpenAI 的 completion 库进行部署
要使用 llama-server 进行部署,请使用以下命令:
然后在以下命令之后使用 OpenAI 的 Python 库 pip install openai :
💽模型上传
我们所有的上传 ——包括那些不是基于 imatrix 或动态的——都使用了我们的校准数据集,该数据集专门针对对话、编码和语言任务进行了优化。
下面是完整的 GLM-4.6 模型上传:
我们还上传了 IQ4_NL 和 Q4_1 量化版本,它们分别针对 ARM 和 Apple 设备实现了更快运行。
🏂 提升生成速度
如果你有更多 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。了解更多 这里。你还可以 将 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
最后更新于
这有帮助吗?

