DeepSeek 本地部署实战:用 Ollama 与 vLLM 把 R1 跑在自有算力上

把大模型跑在自己机器上,正在从「极客玩具」变成工程师的刚需。DeepSeek 本地部署 之所以火,是因为它在保持强推理能力的同时,把参数规模压到了个人显卡也能负担的区间。本文用两条最实用的路线——Ollama 快速体验、vLLM 高并发服务——带你把 DeepSeek-R1 系列模型部署到自有算力,并和同类的 Qwen 本地方案做选型对比。

一、为什么要把 DeepSeek 部署到本地

云端 API 虽方便,但有三个绕不开的痛点:数据要出网、调用按 token 计费、高峰期限流。对涉及代码仓库、内部文档、客户资料的场景,本地部署能把数据留在内网;对需要批处理 thousands 条请求的任务,一次性买断显存比长期付 API 费更划算;对做产品原型的人,本地模型还能随便改温度、改系统提示词而不怕账单爆炸。

DeepSeek 的优势在于「小而强」:蒸馏后的 7B/8B 版本在消费级显卡上就能跑,671B 的满血 R1 则适合用多卡或量化方案在服务器落地。下面先帮你算一笔显存账,避免一上来就买错卡。

二、先算账:不同规格的显存需求

模型参数量、量化精度、上下文长度共同决定显存占用。经验公式:显存(GB) ≈ 参数量(B) × 每参数字节数 × 1.2(激活/碎片冗余)。FP16 每参数 2 字节,INT8 约 1 字节,INT4(GPTQ/AWQ)约 0.5 字节。

模型规格量化方式约需显存适用设备
DeepSeek-R1-Distill 7BQ4_K_M~5 GBRTX 3060 / 4060 8G
DeepSeek-R1-Distill 14BQ4_K_M~9 GBRTX 4070 Ti 12G
DeepSeek-R1-Distill 32BQ4_K_M~20 GBRTX 4090 24G
DeepSeek-V3/R1 671BINT8/FP8 专家~600 GB+多卡 A100/H100 集群

对个人开发者,最划算的起步是「Distill 7B/14B + Q4 量化」,体验完整推理链路几乎零成本;等确认需求再上 32B 或更大的满血版本。

三、方案一:Ollama 五分钟跑通 DeepSeek

Ollama 把模型拉取、量化、服务封装成一条命令,适合快速验证想法。先确认本机已装好Ollama 与 Modelfile 的模型管理技巧,然后直接拉起蒸馏版:

# 拉取并运行 8B 蒸馏版(自动选 Q4 量化)
ollama run deepseek-r1:8b

# 想指定更激进的量化以省显存
ollama run deepseek-r1:8b-q4_K_M

# 查看已安装模型
ollama list

如果默认 tag 不满足需求,可以用 Modelfile 自定义。下面这个例子基于官方 GGUF 构建,并调低上下文以适配小显存:

FROM deepseek-r1:8b
PARAMETER num_ctx 4096
PARAMETER temperature 0.6
SYSTEM "你是一个严谨的中文技术助手,回答需给出可验证的步骤。"

构建并运行:ollama create my-deepseek -f Modelfile 然后 ollama run my-deepseek。Ollama 默认在 11434 端口暴露 OpenAI 兼容接口,后面接界面或代码都方便。

四、方案二:vLLM 部署高并发推理服务

当请求量上来——比如给团队几十人共用、或做批量评测——Ollama 的单进程吞吐就不够了。vLLM / SGLang / Ollama 推理引擎的选型里我们对比过,vLLM 靠 PagedAttention 把显存碎片压到最低,throughput 通常是 Ollama 的数倍。

# 安装(建议独立虚拟环境)
pip install vllm

# 启动 OpenAI 兼容服务,加载量化后的模型
vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-8B \
  --quantization awq \
  --gpu-memory-utilization 0.90 \
  --max-model-len 8192 \
  --port 8000

服务起来后,直接用 OpenAI SDK 调用,业务代码几乎零改动:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY",  # vLLM 本地服务无需真实 key
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
    messages=[{"role": "user", "content": "用 Python 写一个快速排序"}],
    temperature=0.6,
)
print(resp.choices[0].message.content)

如果要做工具调用,可参考Function Calling 让大模型调用 API 的实战,把本地 DeepSeek 包装成能查数据库、发请求的智能体后端。

五、套上可视化界面:Open WebUI

命令行能验证,但日常使用还是图形界面更顺手。Ollama + Open WebUI 搭建团队 AI 助手已经讲透了部署姿势:只要让 Open WebUI 指向本地的 11434(Ollama)或 8000(vLLM)端口,就能获得对话历史、多会话、文档问答等能力,全员通过内网访问,数据完全不出公司。

# 用 Docker 一键起 Open WebUI,连到本机 Ollama
docker run -d -p 3000:8080 \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

六、接 Dify 搭私有知识库

如果想让 DeepSeek 吃进公司文档做 RAG,Dify + Ollama 搭建私有 AI 知识库是现成的脚手架:在 Dify 里把模型供应商填成本地 Ollama/vLLM 地址,上传 PDF/Word,就能生成带引用的问答。整个链路不碰公网,满足很多企业的合规底线。

七、与 Qwen 本地部署怎么选

同属国产第一梯队,Qwen 本地部署和 DeepSeek 经常被人拿来比。简单说:Qwen 在中文理解和多语言更广谱,DeepSeek 在推理、数学、代码上更锐利。选型看场景:

维度DeepSeek(蒸馏版)Qwen(同量级)
代码 / 数学推理更强良好
中文长文本理解良好更强
工具调用生态逐步完善较成熟
本地显存门槛相近相近
典型用途解题、写码、Agent文档、客服、多语

实操里常见做法是两个都部署,用 LiteLLM 做路由:简单问答走 Qwen,重推理走 DeepSeek,成本与效果双赢。

八、性能调优与三个常见坑

部署只是开始,跑稳才是关键。三个高频坑:

  • 显存爆了(CUDA OOM):先降 num_ctx 和量化位宽,再调 gpu-memory-utilization,别一上来就用最长上下文。
  • 首 token 慢:蒸馏版冷启动要加载权重,配合 --enforce-eager 排查是否是 CUDA graph 兼容问题;生产环境用 --enable-prefix-caching 复用系统提示词前缀。
  • 并发上不去:vLLM 默认张量并行为 1,多卡要显式 --tensor-parallel-size N,并确认模型权重已分片到各卡。
# 多卡并发示例(2 卡)
vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-8B \
  --tensor-parallel-size 2 \
  --enable-prefix-caching \
  --max-num-seqs 64

另一个常被忽略的点是显存监控:部署后务必用 nvidia-smi 或 dcgm-exporter 盯住显存占用与温度,避免长上下文把卡撑满导致服务雪崩。量化选型上,优先 AWQ/GPTQ 这类训练后量化,比单纯降精度更保精度;如果显存实在紧张,再考虑把部分层 offload 到 CPU,代价是延迟上升。监控数据接进 Prometheus 后,还能对「首 token 延迟」「每秒 token 数」做长期基线,方便后续容量规划。

九、安全与访问控制

本地服务一旦暴露到公网就成风险点。最小闭环:用反向代理加一层 Basic Auth 或 OAuth,再限制来源 IP;vLLM 的 api_key 参数要设成真实随机串而非留空;Ollama 的 OLLAMA_HOST 不要直接绑 0.0.0.0,改走内网地址或 socket。团队共用时,用 LiteLLM 统一收口密钥与限流,既安全又好审计。

十、小结

DeepSeek 本地部署的门槛比想象中低:消费级显卡用 Ollama 五分钟就能跑通蒸馏版,要扛并发就换 vLLM,再叠 Open WebUI 做界面、Dify 做知识库,一条「数据不出内网」的私有 AI 链路就成型了。和 Qwen 互补部署,基本能覆盖绝大多数工程场景。下一步可以试试用 Function Calling 把本地模型接进你自己的业务系统,让推理真正闭环。

上一篇 Maven Wrapper 实战:用 mvnw 锁定团队构建版本
下一篇 Typesense 实战:用 Rust 打造毫秒级即时搜索
最新评论
Docker 网络模式详解:bridge/host 生产选型 - FSData
Docker 网络模式详解:bridge/host 生产选型 - FSData
8月20日
[…] 注意最后那条:把端口绑定到 127.0.0.1,再由宿主机上的 Nginx 反代进来,比直接 -p 80:80 暴露安全得多,也方便统一做
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
8月20日
[…] Pinia 的工程化用法,可以参考我们之前的实战文章 《Vue3 组合式 API + Pinia:状态管理从入门到实战》,那里覆盖了 Sto
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
8月19日
[…] 状态,点一下就能起停容器,配合我们讲过的 Docker Compose 编排 […]
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
8月19日
[…] 缓存三大坑的本质都是”缓存失效导致请求穿透到数据库”。记住口诀:穿透用布隆、击穿用锁、雪崩用错峰。配合合理的过期策略
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
8月19日
[…] Docker 镜像部署。结合我们之前写的 Docker Compose 一键编排实战,可以在 CI […]