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 动态 2-bit GGUF 将大小减少到 135GB (-75%). GLM-4.6-GGUF
所有上传均使用 Unsloth Dynamic 2.0 以实现 SOTA 的 5-shot MMLU 和 Aider 性能,这意味着您可以在几乎没有精度损失的情况下运行并微调量化的 GLM LLM。
教程导航:
🐛Unsloth 聊天模板与错误修复
我们做的一个重要修复是解决了提示 GGUF 时第二个提示无法工作的一个问题。我们已修复此问题,然而在没有我们修复的 GGUF 中该问题仍然存在。例如,使用任何非 Unsloth 的 GLM-4.6 GGUF 时,第一次对话能正常工作,但第二次会出错。

我们已在我们的聊天模板中解决此问题,所以在使用我们的版本时,第二次之后的对话(第三次、第四次等)可正常进行且不会出错。工具调用仍存在一些问题,由于带宽限制我们尚未完全调查。我们已将这些剩余问题告知 GLM 团队。
🔎GLM 4.6V Flash 的怪癖与修复
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 中,例如如下:
我们得到中文的推理,但输出为英语。我们还进行了后续询问“1+1 等于多少”,并仅得到英语:

最后,通过使用系统提示“Respond in English and reason in English”并通过 --system-prompt "Respond in English and reason in English" 在 llama.cpp 中,例如如下:
我们得到用英语推理且输出为英语!我们也询问了后续问题“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 层卸载到内存)中。如果您还有额外的 165GB 内存,使用此配置大约可达 5 tokens/s。建议至少有 205GB 内存以运行该 4-bit。为获得最佳性能,您需要至少 205GB 的统一内存或 205GB 的 RAM+VRAM 组合以达到 5+ tokens/s。要了解如何提高生成速度并适配更长的上下文, 在此阅读.
虽然不是必须,但为了最佳性能,建议 VRAM + RAM 的总和等于你正在下载的量化模型大小。如果不能,则使用硬盘/SSD 卸载在 llama.cpp 下也能工作,只是推理会更慢。
推荐设置
根据 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 分割文件合并为一个,如下面代码所示。然后您需要在本地运行模型。
✨ 在 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 层放在一块 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 进行部署,请使用以下命令:
然后在 pip install openai :
💽模型上传
我们所有的上传 - 包括那些不是基于 imatrix 或 动态 的版本,均使用我们的校准数据集,该数据集专门为对话、编码和语言任务进行了优化。
完整 GLM-4.6 模型上传如下:
我们也上传了 IQ4_NL 和 Q4_1 这些量化版本分别专为 ARM 和 Apple 设备优化,运行速度更快。
🏂 "content": [{"type": "text", "text": "用 Python 创建一个 Fibonacci 函数并求 fib(20)。"}],
如果你有更多显存,可以尝试卸载更多 MoE 层,或将整个层本身卸载(offload)。
通常, -ot ".ffn_.*_exps.=CPU" 会将所有 MoE 层卸载到 CPU!这实际上允许你将所有非 MoE 层放在一块 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 层。
会将所有 MoE 层卸载到 CPU!这实际上允许您将所有非 MoE 层放在一块 GPU 上,从而提高生成速度。如果您有更多 GPU 容量,可以自定义正则表达式以卸载更多层。 llama-parallel。在此处阅读更多内容 这里。你也可以 例如将 KV 缓存量化为 4 bit 将 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 缓存进行量化,但你需要 在编译 llama.cpp 时启用 Flash Attention 支持 通过 -DGGML_CUDA_FA_ALL_QUANTS=ON,并使用 --flash-attn --flash-attn 来启用它。然后您可以与 :
--cache-type-k 一起使用 --cache-type-v f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
最后更新于
这有帮助吗?

