如何通过 ollama 在本地部署 deepseek-v3.1:最简单指南

CometAPI
AnnaSep 6, 2025
如何通过 ollama 在本地部署 deepseek-v3.1:最简单指南

DeepSeek-V3.1 是一种混合“思考/非思考”MoE 语言模型(总计 671B,≈每个 token 激活 37B),只要采用合适的提供方/量化方式与工具链,即可在本地运行。下面我将说明 DeepSeek-V3.1 是什么、硬件/软件要求、本地运行的分步教程(Ollama + llama.cpp 示例),以及如何部署并使用思考模式<think>/</think> 对话模板),并提供可直接复制/粘贴的代码示例。


DeepSeek-V3.1 是什么?

DeepSeek-V3.1 是 DeepSeek 的 MoE(专家混合)家族的 v3.1 版本。它被设计为混合推理模型,通过更换对话模板即可在同一个检查点上支持两种会话模式——思考非思考。模型架构基于 DeepSeek-V3 MoE 设计(总参数 671B;推理时每个 token 约激活 ≈37B 参数),并在后训练阶段增强了工具使用、智能体技能和长上下文处理能力。

速览特性

  • 混合 思考 / 非思考 模式(通过对话模板的分词切换)。
  • MoE 架构:总参数量巨大,但每个 token 的激活参数有限(提升效率)。
  • 后训练增强工具调用与智能体工作流(工具调用格式与智能体模板在模型资产中有文档)。

本地运行 DeepSeek-V3.1 需要什么?

运行完整 DeepSeek-V3.1(原始检查点)非常重量级——训练/检查点存储与推理编排都不简单。但也有可行路径:

硬件

  • 完整分布式推理(研究/集群):多块高显存 GPU(A100/H800 等级)或通过模型并行的 GPU 集群(适用于 600B+ 检查点)。仅在你运行生产级研究集群时使用。
  • 实用的本地选项:采用“激活参数”视角(≈37B 激活)或使用 GGUF/1-bit dynamic 量化构建。社区量化(1-bit dynamic / GGUF)可显著降低磁盘与内存占用——例如,社区帖子报告将 720GB 检查点压缩到 ~170GB GGUF 的量化变体。这让单机/单服务器的本地 GPU 推理在高性能台式机/服务器上变得可行。

结论: 预期为大模型工作流(量化工件占用几十到数百 GB 磁盘);VRAM 方面建议使用量化变体并以 ≥24–48GB VRAM 为目标以获得合理吞吐;否则可用 CPU+swap,但需接受性能折衷。

软件与工具链

Python 3.10+(用于 transformer/分词器工具与自定义脚本)。

transformers(用于分词器与辅助函数)——模型卡展示了使用 transformers.AutoTokenizer 的示例。

一个或多个本地推理运行时:

  • Ollama(简便:ollama pull / ollama run 集成;部分 DeepSeek 构建在 Ollama 上需要预发布版本,请查看模型/Ollama 说明)。Ollama 已成为社区模型的标准本地运行器。
  • llama.cpp / ggml 技术栈或用于 GGUF 量化文件的 llama-server——适合直接执行 GGUF。
  • text-generation-inference / Triton / FlashAttention 技术栈用于更高性能的 GPU 推理(高级部署)。

磁盘:为模型文件准备充足空间(按量化不同为几十 → 数百 GB)。

模型工件(获取哪个文件)

  • 官方 safetensors / BF16 / FP8 / GGUF 变体:Hugging Face 托管了 V3.1 的模型工件及多种量化。如果你需要 llama.cpp 用的 GGUF/量化文件,请查找社区量化发布(或使用从 safetensors → GGUF 的转换脚本)——模型卡列出了量化变体。

如何为本地推理做准备?

以下是从简单 → 高级的推荐准备步骤。

步骤 1 —— 选择运行时(推荐)

  • 入门/快速测试: Ollama —— 极简配置:下载、运行模型、调用 API。注意:一些 DeepSeek-V3.1 构建提到特定功能需要 Ollama v0.11.7。
  • 高级/低层控制: llama.cpp + GGUF 量化(如果有可用的 GGUF 量化)。可获得直接的推理控制与 llama-server 集成。

步骤 2 —— 下载模型

如果使用 Ollama:

# install ollama (see https://ollama.com/docs)

# Pull the model (this downloads the model to your machine)
ollama pull deepseek-ai/DeepSeek-V3.1
# or a specific tag: ollama pull deepseek-ai/DeepSeek-V3.1:quant-q4_0

(Ollama 的 run 会在缺失时自动拉取;使用 pull 可自行控制时机。)

如果使用 Hugging Face + llama.cpp:

# Example: download via huggingface-cli or hf_transfer

pip install huggingface_hub
hf_hub_download(repo_id="deepseek-ai/DeepSeek-V3.1", filename="DeepSeek-V3.1.gguf")
# or use a community quant file (gguf) referenced on the Hugging Face model page

Hugging Face 在模型卡中列出了模型工件、模板与量化。

步骤 3 —— 转换/量化(可选)

如果你只找到 safetensors 或 BF16 工件但需要 llama.cpp 的 GGUF,请使用 llama.cpp 中的转换脚本(或社区工具)进行转换 → 量化。社区存在 1-bit dynamic 量化工具,可在缩小体积的同时尽量保留精度;参见社区帖子,体积可降至 ~170GB。


实际如何在本地运行 DeepSeek-V3.1?(实战教程)

我将展示 Ollama(简单、推荐)与 llama.cpp(GGUF)示例,以及一个使用模型卡分词器辅助的简短 Python 示例。

A —— 使用 Ollama 运行(快速开始)

  1. 安装 Ollama(按官方说明)。
  2. 拉取并运行模型:
# pull model to disk (optional; run will pull automatically)

ollama pull deepseek-ai/DeepSeek-V3.1

# start an interactive session (runs model and exposes local API)

ollama run deepseek-ai/DeepSeek-V3.1
  1. 向本地 Ollama 服务器发起 HTTP 请求:
# curl usage example (local Ollama server usually listens on port 11434)

curl -sS -X POST 'http://localhost:11434/api/generate' \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"deepseek-ai/DeepSeek-V3.1",
    "prompt":"Explain the difference between thinking and non-thinking mode in DeepSeek.",
    "max_tokens":256
  }'

Ollama 的 CLI 与 API 模式非常简单:ollama run 会在需要时拉取并启动模型服务器。参见 Ollama 文档与模型页面以获取内存提示与确切的模型名称/标签。

B —— 通过 llama.cpp 运行量化的 GGUF

  1. 使用 CUDA(可选)或仅 CPU 构建 llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# for CUDA:

make clean && make LLAMA_CUBLAS=1
# or CPU only:

make
  1. 将模型 GGUF 文件放置到路径并运行:
./main -m /path/to/DeepSeek-V3.1.q4_K_M.gguf \
  -p "Explain how to enable thinking mode." \
  --temp 0.2 --n_predict 512
  1. 如需服务器模式,llama-server(社区项目)可暴露 HTTP 端点:
llama-server -m /path/to/DeepSeek-V3.1.q4_K_M.gguf
# then POST to the server like:

curl -X POST "http://localhost:8080/api/v1/generate" -d '{"prompt":"Hello","max_tokens":200}'

使用社区 GGUF 量化(q4/q8/1-bit dynamic)以适配你的 GPU/CPU 预算;llama.cpp 仓库提供了转换工具与指南。

C —— 使用分词器与聊天模板的 Python 示例

Hugging Face 模型卡提供了 tokenizer.apply_chat_template 辅助方法,并展示了如何用 thinking=True 对对话进行编码。下面是根据模型卡改编的最小 Python 示例:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-V3.1")

messages = [
    {"role": "system", "content": "You are a helpful assistant"},
    {"role": "user", "content": "Who are you?"},
    {"role": "assistant", "content": "<think>Hmm</think>I am DeepSeek"},
    {"role": "user", "content": "1+1=?"}
]

# apply thinking chat template

s = tokenizer.apply_chat_template(messages, tokenize=False, thinking=True, add_generation_prompt=True)
print(s)  # the template includes the special <think> token placement

然后你可以将分词后的提示词传入你的推理运行时(Ollama/llama.cpp/TGI),具体取决于你的技术栈。


思考模式如何工作,以及如何在本地部署?

DeepSeek-V3.1 使用包含特殊思考 token(例如 <think></think>)的对话模板。是否启用思考模式由模板决定:

  • 非思考模板在助手前缀放置 </think>,指导模型直接生成回答(非思考模式支持工具调用格式)。
  • 思考模板在助手前缀放置 <think>,促使模型输出内部链式思考风格的中间信号(模型经过训练,会使用该 token 序列进行内部推理并产生更高质量的多步答案)。Hugging Face 模型卡记录了这些确切的 token 以及 tokenizer.apply_chat_template(..., thinking=True) API。

以编程方式切换(示例)

A —— 使用分词器(Python):

# thinking=True or thinking=False changes how the prompt is formatted

prompt_thinking = tokenizer.apply_chat_template(messages, thinking=True, add_generation_prompt=True)
prompt_non_thinking = tokenizer.apply_chat_template(messages, thinking=False, add_generation_prompt=True)

prompt_thinking 送入推理运行时即可获得思考行为。

B —— 使用原始提示(llama.cpp / 手动):

在助手轮次前插入 <think>

<|begin_of_sentence|>You are a helpful assistant<|User|>How to optimize this code?<|Assistant|><think>

(具体的 token 框架在模型卡中——如果使用原始模板,必须严格遵守空格与特殊标记。)

C —— 使用 Ollama(UI 切换):
DeepSeek 官方 Web 演示与发布说明提到了用于切换模式的“DeepThink”按钮/开关。在本地,Ollama 或你的应用应通过切换对话模板来复制该行为(即在传给运行时的提示之间切换两种分词后的形式)。若通过 Ollama 运行 DeepSeek,你可在应用中维护两套提示模板(思考 vs 非思考),并在向 Ollama API 发起请求时进行切换。


如何将思考模式部署为智能体(工具调用、代码智能体)?

DeepSeek-V3.1 在模型资产中记录了工具调用智能体模板。模型要求以特定的 JSON/指令格式呈现工具,并且如果遵循模型卡中描述的严格包装 token,可以在单次轮次中串联多次工具调用。

示例:简单的工具调用包装(伪)

模型定义了工具描述块,以及严格的 tool_calls_begin / tool_call_begin 格式。一个最小示例(概念):

## Tools

You have access to the following tools:

### web_search

Description: Query the web
Parameters: {"q": "string"}

<|begin_of_sentence|>{system prompt}

## Tools

...tool descriptions...

<|User|>Find the population of Tokyo<|Assistant|></think>
<|tool_calls_begin|><|tool_call_begin|>web_search<|tool_sep|>{"q":"population of Tokyo 2025"}<|tool_call_end|><|tool_calls_end|>

随后应将工具输出在下一轮中按模型规定的格式反馈给模型(参见模型页面的 assets/search_tool_trajectory.html 以了解完整流程)。实现智能体需要程序化编排:调用工具 → 捕获结果 → 按模板精确注入回对话上下文 → 再次调用模型。


实用提示、故障排查与安全注意事项(需要关注什么?)

  • Token 模板很严格。 建议使用模型的 tokenizer.apply_chat_template,或严格复现 <think>/</think> token。如有空格或标记缺失,模型行为会发生变化。
  • 工具格式必须为合法 JSON。 模型会将工具参数解析为 JSON——无效 JSON 会导致工具调用失败。
  • 量化的权衡。 1-bit dynamic / 激进量化可缩小存储与内存占用,但可能略微影响数值保真。请在你的任务上进行测试。社区量化可将磁盘占用降低约 80%(示例报告:720GB → ~170GB),但务必用你的提示进行验证。
  • Ollama 兼容性。 一些 DeepSeek 变体注明特定功能需要 Ollama v0.11.7——请检查 Ollama 模型页面并按需更新。

端到端示例:在本地运行带思考模式的 DeepSeek-V3.1(迷你演练)

  1. 安装 Ollama 并拉取模型:
# install ollama per docs, then:

ollama pull deepseek-ai/DeepSeek-V3.1
ollama run deepseek-ai/DeepSeek-V3.1 &
  1. 使用 Python 分词器构造思考提示:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-V3.1")

msgs = [
  {"role":"system","content":"You are a helpful assistant."},
  {"role":"user","content":"Plan a multi-step strategy to prototype a mobile app in 2 weeks."}
]
prompt = tokenizer.apply_chat_template(msgs, thinking=True, add_generation_prompt=True)

import requests
resp = requests.post("http://localhost:11434/api/generate", json={
    "model": "deepseek-ai/DeepSeek-V3.1",
    "prompt": prompt,
    "max_tokens": 400
})
print(resp.json())
  1. 如果模型按工具调用格式返回了工具调用,请解析 JSON 并运行工具,然后按模型卡模板在下一条消息中注入结果。

应如何选择你的部署路径?

  • 若想最快上手实验: 使用 Ollama 与 Hugging Face 模型卡示例。Ollama 隐藏了大量基础设施细节,并提供本地 HTTP API。
  • 若需更低成本/更强可移植性: 使用社区 GGUF 量化工件并通过 llama.cppllama-server 运行。量化能节省磁盘与内存,但请针对你的任务验证精度。
  • 若在构建智能体或工具: 严格遵循模型卡的工具调用智能体模板;将工具输出编排回模型上下文。

入门

CometAPI 是一个统一的 API 平台,将来自领先提供方的 500+ AI 模型(如 OpenAI 的 GPT 系列、Google 的 Gemini、Anthropic 的 Claude、Midjourney、Suno 等)聚合到单一、对开发者友好的接口中。通过提供一致的身份认证、请求格式与响应处理,CometAPI 极大地简化了将 AI 能力集成到应用中的流程。无论你在构建聊天机器人、图像生成器、音乐创作工具,还是数据驱动的分析管线,CometAPI 都能帮助你更快迭代、控制成本、保持供应商无关,同时利用 AI 生态的最新突破。

开发者可通过 DeepSeek V3.1 访问 CometAPI,文章发表时列出的为最新模型版本。开始之前,请在 Playground 中探索模型能力,并参考 API guide 获取详细说明。在访问之前,请确保你已登录 CometAPI 并获得 API key。CometAPI 提供远低于官方价格的方案,帮助你集成。


结论

DeepSeek-V3.1 通过务实的混合推理理念(单一检查点 + 模板化思考行为),让你在遵守对话模板与工具链要求的前提下,轻松开展链式思考风格的推理与智能体工具使用。将 Hugging Face 模型卡与 DeepSeek 发布说明作为首选参考,选择本地运行时(简便用 Ollama,控制用 llama.cpp),并测试量化构建以实现切实可行的本地部署。

阅读更多

一个 API 中超 500 个模型

最高 20% 折扣