🐋DeepSeek-V3.1:如何在本地运行
关于如何在您自己的本地设备上运行 DeepSeek-V3.1 与 Terminus 的指南!
DeepSeek 的 V3.1 和 终结者 更新引入了混合推理机制,将“思考”和“非思考”合并到一个模型中。完整的 671B 参数模型需要 715GB 磁盘空间。量化的动态 2 位版本使用 245GB(大小减少 75%)。GGUF: DeepSeek-V3.1-GGUF
新: DeepSeek-V3.1-Terminus 现已推出: DeepSeek-V3.1-Terminus-GGUF 2025 年 9 月 10 日更新: 你们要求更严格的基准测试,所以我们展示了 Aider Polyglot 的结果!我们的动态 3 位 DeepSeek V3.1 GGUF 得分 75.6%,超越了许多全精度 SOTA 大语言模型。 阅读更多。
我们的 DeepSeek-V3.1 GGUF 包括 Unsloth 聊天模板修复 用于 llama.cpp 支持的后端。
所有上传都使用 Unsloth Dynamic 2.0 用于 SOTA 的 5-shot MMLU 和 KL 散度性能,这意味着你可以在几乎不损失精度的情况下运行并微调量化的 DeepSeek LLM。
教程导航:
在 llama.cpp 中运行在 Ollama/Open WebUI 中运行
⚙️ 推荐设置
1 位动态量化 TQ1_0(对不重要的 MoE 层使用 1bit,对重要的 MoE 使用 2-4bit,其余使用 6-8bit)使用 170GB 磁盘空间——这在一个 1x24GB 显卡和 128GB 内存 并开启 MoE 卸载 时表现良好——它也 可在 Ollama 中本地工作!
您必须使用 --jinja 用于 llama.cpp 量化 —— 这使用了我们的 固定聊天模板 并启用正确的模板!如果不使用,您可能会得到不正确的结果 --jinja
2 位量化将能放入 1x 24GB GPU(MoE 层卸载到 RAM)。如果你还有额外的 128GB 内存,此配置下预期约 5 令牌/秒。建议至少有 226GB 内存来运行该 2 位版本。为获得最佳性能,你需要至少 226GB 统一内存或 226GB 组合 RAM+VRAM 以达到 5+ 令牌/秒。要了解如何提高生成速度和适应更长的上下文, 请在此处阅读.
虽然不是必须,但为了最好性能,建议 VRAM + RAM 的合计等于你正在下载的量化模型大小。如果没有,硬盘/SSD 卸载在 llama.cpp 上也能工作,只是推理会更慢。
🦋聊天模板错误修复
我们修复了 DeepSeek V3.1 的一些聊天模板问题,因为它们在 llama.cpp 和其他引擎中无法正常工作:
DeepSeek V3.1 是一个混合推理模型,这意味着你可以更改聊天模板来启用推理。聊天模板引入了
thinking = True,但其他模型使用enable_thinking = True。我们添加了使用enable_thinking作为关键字的选项。llama.cpp 的 jinja 渲染器通过 minja 不允许在
.split()命令中使用额外参数,因此使用.split(text, 1)在 Python 中可行,但在 minja 中不可行。我们不得不更改此处以使 llama.cpp 正常运行且不报错。 使用其他量化时你将收到如下错误:在抛出 'std::runtime_error' 实例后终止 what(): split 方法的定位参数必须在 1 到 1 之间,关键字参数必须在 0 到 0 之间,在第 3 行,第 1908 列我们在所有量化中都修复了它!
🐳 官方推荐设置
根据 DeepSeek,以下是 V3.1 推理的推荐设置:
设置 temperature 为 0.6 以减少重复和不连贯。
设置 top_p 为 0.95 (推荐)
128K 上下文长度 或更短
使用
--jinja用于 llama.cpp 变体 —— 我们 也修复了一些聊天模板问题!使用
enable_thinking = True以使用推理/思考模式。默认设置为非推理模式。
🔢 聊天模板/提示格式
你不需要强制使用 <think>\n ,但你仍然可以添加!在给定前缀下,DeepSeek V3.1 在非思考模式下对查询生成响应。与 DeepSeek V3 不同,它引入了额外的标记 </think>.
会强制添加一个 BOS,并且 EOS 用于分隔每次交互。为避免推理时出现双重 BOS 标记,你应该仅调用 tokenizer.encode(..., add_special_tokens = False) 因为聊天模板会自动添加一个 BOS 标记。对于 llama.cpp / GGUF 推理,你应该跳过 BOS,因为它会自动添加。
📔 非思考模式(使用 thinking = False或 enable_thinking = False 且默认即为此)
thinking = False或 enable_thinking = False 且默认即为此)首轮
前缀: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>
在给定前缀下,DeepSeek V3.1 在非思考模式下对查询生成响应。与 DeepSeek V3 不同,它引入了额外的标记 </think>.
多轮
上下文: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>...<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>
前缀: <|User|>{query}<|Assistant|></think>
通过串联上下文和前缀,我们获得了针对该查询的正确提示。
📚 思考模式(使用 thinking = True或 enable_thinking = True 且默认即为此)
thinking = True或 enable_thinking = True 且默认即为此)首轮
前缀: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|><think>
思考模式的前缀与 DeepSeek-R1 相似。
多轮
上下文: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>...<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>
前缀: <|User|>{query}<|Assistant|><think>
多轮模板与非思考多轮聊天模板相同。这意味着最后一轮的思考标记将被删除,但 </think> 在上下文的每一轮中都会保留。
🏹 工具调用
在非思考模式下支持工具调用。格式为:
<|begin▁of▁sentence|>{system prompt}{tool_description}<|User|>{query}<|Assistant|></think> 我们将在系统提示之后的区域填写 tool_description。
▶️运行 DeepSeek-V3.1 教程:
🦙 在 Ollama/Open WebUI 中运行
安装 ollama 如果您还没有安装!要运行更多模型变体, 请查看此处.
运行模型!注意如果失败您可以在另一个终端调用 ollama serve!我们在 Hugging Face 上传中包含了所有修复和建议的参数(温度等),位于 params 在我们上传到 Hugging Face 的页面中运行!
&#xNAN;(新)要在 Ollama 中运行完整的 R1-0528 模型,你可以使用我们的 TQ1_0(170GB 量化):
要运行其他量化版本,您需要先将 GGUF 分割文件合并为一个,如下面代码所示。然后在本地运行模型。
Open WebUI 还制作了一个 逐步教程 关于如何运行 R1 的说明,对于 V3.1,你只需将 R1 替换为新的 V3.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_M 。我们 建议使用我们的 2.7bit 动态量化 UD-Q2_K_XL 以在大小和精度之间取得平衡.
您可以编辑 --threads 32 以设置 CPU 线程数, --ctx-size 16384 以设置上下文长度, --n-gpu-layers 2 以设置多少层使用 GPU 卸载。如果 GPU 出现内存不足,请尝试调整它。如果仅使用 CPU 推理,请移除它。
如果你的组合内存和显存不足,请获取 1bit 版本(170GB):
✨ 使用 llama-server 和 OpenAI 的 completion 库进行部署
要使用 llama-server 进行部署,请使用以下命令:
然后在安装 pip install openai :
💽模型上传
我们所有的上传 - 包括那些不是基于 imatrix 或动态的,也都使用了我们的校准数据集,该数据集专为对话、编码和语言任务进行优化。
以下是完整的 DeepSeek-V3.1 模型上传:
我们还上传了 IQ4_NL 和 Q4_1 这些量化专为 ARM 和 Apple 设备分别运行得更快。
我们还上传了 BF16 格式,以及原始 FP8(float8)格式.
🏂 用于 GLM 4.7 的执行生成 Python 代码的工具调用
https://github.com/ggml-org/llama.cpp/pull/16653
自动尽可能将模型卸载到 GPU,然后将剩余部分放到 CPU。 -ot ".ffn_.*_exps.=CPU" 如果您有更多显存,您可以尝试卸载更多的 MoE 层,或卸载整个层本身。
如果您有更多的 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 发布版 也引入了高吞吐量模式。使用 会将所有 MoE 层卸载到 CPU!这实际上允许您将所有非 MoE 层放入 1 块 GPU,从而提高生成速度。如果您有更多 GPU 容量,可以自定义正则表达式以适配更多层。Llama.cpp 还引入了高吞吐量模式。使用 llama-parallel。更多内容请阅读 此处 。您还可以
将 KV 缓存量化到 4 位
例如以减少 VRAM / RAM 的移动,这也可以加快生成过程。 📐如何适配长上下文(完整 128K) 要适配更长的上下文,您可以使用 KV 缓存量化将 K 和 V 缓存量化为更低位数。这也可以由于减少 RAM / VRAM 数据移动而提高生成速度。K 量化的允许选项(默认是
f16
)包括下面这些。 _1 --cache-type-k f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 您应使用
变体以略微提高精度,尽管它们会稍慢。例如 q4_1, q5_1 您也可以量化 V 缓存,但您需要 使用 Flash Attention 编译 llama.cpp支持,方法是 -DGGML_CUDA_FA_ALL_QUANTS=ON ,并使用 --flash-attn :
来启用它。然后您可以与下面的选项一起使用:
--cache-type-k
最后更新于
这有帮助吗?

