🐋DeepSeek-V3.1:如何在本地运行
关于如何在您自己的本地设备上运行 DeepSeek-V3.1 和 Terminus 的指南!
DeepSeek 的 V3.1 与 终结者 更新引入了混合推理(hybrid reasoning)机制,将“思考(think)”与“非思考(non-think)”合并到一个模型中。完整的 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-bit DeepSeek V3.1 GGUF 得分 75.6%,超过了许多全精度的最先进 LLM。 阅读更多。
我们的 DeepSeek-V3.1 GGUF 包含 Unsloth 聊天模板修复 用于 llama.cpp 支持的后端。
所有上传均使用 Unsloth 动态 2.0 用于最先进的 5-shot MMLU 和 KL 散度表现,这意味着你可以在精度损失极小的情况下运行并微调量化的 DeepSeek LLM。
教程导航:
⚙️ 推荐设置
1 位动态量化 TQ1_0(对不重要的 MoE 层使用 1bit,重要的 MoE 使用 2-4bit,其余使用 6-8bit)使用 170GB 磁盘空间——这在 单卡 24GB 和 128GB 内存 并启用 MoE 卸载 的情况下效果良好——它也 可以在 Ollama 中本地运行!
2 位量化可装入 单张 24GB GPU(MoE 层卸载到内存)。如果你还有额外的 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()命令中使用额外参数,因此在 Python 中使用.split(text1)可以工作,但在 minja 中不行。我们不得不更改此处以使 llama.cpp 正常运行而不报错。 使用其他量化时你将看到以下错误:terminate called after throwing an instance of 'std::runtime_error' what(): split method must have between 1 and 1 positional arguments and between 0 and 0 keyword arguments at row 3column 1908我们已在所有量化版本中修复了它!
🐳 官方推荐设置
根据 DeepSeek,以下是 V3.1 推理的推荐设置:
将 温度设为 0.6 以减少重复和不连贯。
设置 top_p 为 0.95 (推荐)
128K 上下文长度 或更少
对 llama.cpp 变体使用
--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|>{系统提示}<|User|>{查询}<|Assistant|></think>
使用给定前缀,DeepSeek V3.1 在非思考模式下生成对查询的响应。与 DeepSeek V3 不同,它引入了额外的标记 </think>.
多轮
上下文: <|begin▁of▁sentence|>{系统提示}<|User|>{查询}<|Assistant|></think>{回复}<|end▁of▁sentence|>...<|User|>{查询}<|Assistant|></think>{回复}<|end▁of▁sentence|>
前缀: <|User|>{查询}<|Assistant|></think>
通过串联上下文与前缀,我们获得了用于查询的正确提示。
📚 思考模式(使用 thinking = True或 enable_thinking = True 且为默认模式)
thinking = True或 enable_thinking = True 且为默认模式)首轮
前缀: <|begin▁of▁sentence|>{系统提示}<|User|>{查询}<|Assistant|><think>
思考模式的前缀类似于 DeepSeek-R1。
多轮
上下文: <|begin▁of▁sentence|>{系统提示}<|User|>{查询}<|Assistant|></think>{回复}<|end▁of▁sentence|>...<|User|>{查询}<|Assistant|></think>{回复}<|end▁of▁sentence|>
前缀: <|User|>{查询}<|Assistant|><think>
多轮模板与非思考多轮聊天模板相同。这意味着最后一轮中的思考标记将被去掉,但 </think> 会在上下文的每一轮中保留。
🏹 工具调用
在非思考模式下支持工具调用。格式为:
<|begin▁of▁sentence|>{系统提示}{工具描述}<|User|>{查询}<|Assistant|></think> 这里我们将工具描述填充在系统提示之后的区域。
▶️运行 DeepSeek-V3.1 教程:
🦙 在 Ollama/Open WebUI 中运行
安装 ollama 如果你还没有安装!要运行更多模型变体, 请参见此处.
运行模型!注意如果失败你可以在另一个终端调用 ollama serve!我们在 Hugging Face 的上传中包含了所有修复和建议参数(如温度等),在 params 中可以找到!
(新增)要在 Ollama 中运行完整的 R1-0528 模型,你可以使用我们的 TQ1_0(170GB 量化):
要运行其他量化,你首先需要将 GGUF 分割文件合并为一个,如下面代码所示。然后你需要在本地运行模型。
Open WebUI 也提供了一个 分步教程 说明如何运行 R1,而对于 V3.1,你只需将 R1 替换为新的 V3.1 量化即可。
✨ 在 llama.cpp 中运行
获取最新的 llama.cpp 在 GitHub 这里。你也可以按照下面的构建说明进行。若你没有 GPU 或只想使用 CPU 推理,请将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 。
如果你想直接使用 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 层卸载到 CPU。
通过(在安装之后)下载模型 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 推理,请移除该参数。
如果你的 RAM 与 VRAM 总和不足,请获取 1bit 版本(170GB):
✨ 使用 llama-server 与 OpenAI 的 completion 库部署
要使用 llama-server 进行部署,请使用以下命令:
然后在 pip install openai :
💽print(completion.choices[0].message.content)
模型上传 我们所有的上传
——包括那些非 imatrix 基础或非动态的版本,均使用我们的校准数据集,其专门针对对话、编程和语言任务进行了优化。
下面是完整的 DeepSeek-V3.1 模型上传: 我们还上传了 IQ4_NL 和 Q4_1
6.5/5.5 位 我们还上传了BF16 格式 ,以及原始的.
🏂 FP8(float8)格式
提升生成速度
如果你有更多 VRAM,可以尝试卸载更多 MoE 层,或卸载整个层本身。 -ot ".ffn_.*_exps.=CPU" 通常,
如果你有更多 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 层卸载到 CPU。
将所有 MoE 层卸载到 CPU!这实际上允许你将所有非 MoE 层放在一张 GPU 上,从而提高生成速度。你可以自定义正则表达式以卸载更多层(如果有更多 GPU 容量)。 最新的 llama.cpp 发布 还引入了高吞吐量模式。使用 llama-parallel。在 这里阅读更多。你也可以 将 KV 缓存量化到 4bit 例如以减少 VRAM / RAM 的移动,这也可以加快生成过程。
📐 如何适配长上下文(完整 128K)
为适配更长的上下文,你可以使用 KV 缓存量化 将 K 与 V 缓存量化到更低位数。由于减少了 RAM / VRAM 数据移动,这也可以提高生成速度。K 量化的可选项(默认是 f16)包括下列内容。
--cache-type-k f32f16bf16q8_0q4_0q4_1iq4_nlq5_0q5_1
你应使用 _1 这些变体以获得略高的准确度,尽管会稍慢。例如 q4_1q5_1
你也可以对 V 缓存进行量化,但你需要 用 Flash Attention 编译 llama.cpp 以支持,通过 -DGGML_CUDA_FA_ALL_QUANTS=ON,并使用 --flash-attn 来启用它。然后你可以与 --cache-type-k :
--cache-type-v f32f16bf16q8_0q4_0q4_1iq4_nlq5_0q5_1
最后更新于
这有帮助吗?

