简介:这份文档面向希望将开源大模型落地到个人项目或团队工作中的技术人员,系统讲解在本地环境部署DeepSeek的完整路径。内容围绕Ollama、LM Studio与Jan三类主流工具展开,从最低与推荐硬件配置、操作系统与Python、CUDA等软件依赖,到模型拉取、服务启动与接口调用,均给出可跟随的命令行示例,并对比各工具优缺点,帮助读者按自身设备条件做出选择。资源包为1个docx文件,约20KB,以图文与代码片段结合的方式组织,便于边看边操作。文档还包含部署成功后的测试方法与实际调用示例,如通过Python接口访问本地服务,让读者能快速验证模型可用性并接入自有应用。目前已有1436人学习,适合具备一定深度学习与NLP基础、希望低成本获取最新AI技术支持并降低实验门槛的开发者参考。
1. 本地跑 DeepSeek:为什么我宁愿折腾三小时也不碰在线 API
上个月帮一个做医疗问答的团队看架构,他们想把 DeepSeek 接进内部知识库,但数据合规部门死活不批在线调用。这不是个例——我接触过的 NLP 项目里,超过一半最终都走向了本地部署。原因很实在:推理延迟可控、数据不出内网、没有 token 计费焦虑,而且 DeepSeek 作为开源模型,蒸馏版本在消费级硬件上就能跑出可用效果。
但本地部署这件事,坑比想象中多。Ollama、LM Studio、Jan 三个工具我都完整走过一遍流程,有的场景下 Ollama 一条命令搞定,有的场景下 LM Studio 的 GGUF 量化格式才是唯一解。这篇文章不跟你讲大道理,就按我实际踩过的路线,把选型逻辑、硬件底线、三个工具的完整操作链路、以及那些文档里不会写的翻车点,全部拆开讲清楚。如果你手头有一台 16GB 内存以上的机器,跟着走完至少能跑起来一个能用的本地推理服务。
2. 部署工具选型:Ollama、LM Studio、Jan 到底怎么选
2.1 三个工具的核心差异不在界面,在推理后端
很多人选工具看的是「哪个好看」,但真正决定体验的是底层推理引擎。Ollama 底层用的是 llama.cpp,对 GGUF 格式支持最成熟,命令行交互为主,适合脚本化和服务化部署。LM Studio 同样基于 llama.cpp,但封装了图形界面和模型市场,下载模型不用记命令,适合快速验证。Jan 则走的是另一条路——它更像一个桌面 AI 工作台,支持多模态输入,底层可以切换不同的推理后端,但依赖项也最多。
从实际使用感受来说,Ollama 的冷启动速度最快,服务化最干净;LM Studio 的模型管理最省心,但内存占用偏高;Jan 的功能最全,但首次配置最容易卡在依赖安装上。如果你是要把模型集成到现有 Python 项目里,Ollama 的 OpenAI 兼容接口是首选;如果只是想在本地聊天窗口里试试效果,LM Studio 更顺手。
2.2 选型决策表:按你的场景对号入座
| 维度 | Ollama | LM Studio | Jan |
|---|---|---|---|
| 操作系统 | macOS/Linux/Windows | macOS/Windows/Linux | macOS/Windows/Linux |
| 交互方式 | 命令行 + API | 图形界面 + API | 图形界面 + API |
| 模型格式 | GGUF | GGUF/MLX | GGUF/多格式 |
| 最低内存 | 16GB | 16GB | 16GB |
| 服务端口 | 11434 | 1234 | 1337 |
| 适合场景 | 服务化/脚本集成 | 快速验证/对话 | 多模态/桌面助手 |
| 依赖复杂度 | 低 | 中 | 高 |
这张表是我自己三台机器上实测后的总结。注意「最低内存」这一行——16GB 是跑 7B 量化模型的底线,低于这个数,模型加载阶段就会 OOM。如果你只有 8GB 内存,建议直接放弃本地部署,或者考虑更小的蒸馏版本。
2.3 硬件底线:别信「CPU 也能跑」的鬼话
官方文档说 CPU 支持 AVX2 指令集就能跑,这话没错,但「能跑」和「能用」是两回事。我在一台 i7-10700 + 32GB 内存的无显卡机器上试过 DeepSeek-R1 7B 的 Q4 量化版,推理速度大约 3-5 token/秒,问一个问题等半分钟才出第一句话。这个速度做批量离线处理勉强可以,做交互式对话就是折磨。
推荐配置里写的 RTX 3090 + 32GB 内存是合理门槛。有 GPU 的情况下,7B 模型能跑到 40-60 token/秒,14B 模型也有 20-30 token/秒,基本达到可用状态。如果你手头是 RTX 4060 8GB 显存,跑 7B Q4 量化版没问题,但 14B 就吃力了。显存不够时,Ollama 会自动把部分层卸载到内存,速度会明显下降,这是正常现象。
注意:CUDA 版本必须和 PyTorch 版本匹配,否则 Ollama 会静默回退到 CPU 推理。装完驱动后先用
nvidia-smi确认 CUDA 版本,再决定装哪个版本的推理后端。
3. Ollama 部署 DeepSeek:从安装到 API 调用的完整链路
3.1 安装与版本验证
Ollama 的安装是三个工具里最简单的。Linux 下一条命令,Windows 和 macOS 直接下载安装包。装完之后第一件事不是急着拉模型,而是确认版本和服务状态。
# 检查 Ollama 是否安装成功 ollama --version # 预期输出类似:ollama version is 0.5.6 # 查看当前已下载的模型列表 ollama list # 启动 Ollama 服务(后台运行) ollama serve &ollama --version返回版本号说明二进制文件没问题。ollama list在首次安装后是空的,这是正常的。ollama serve启动的是 API 服务,默认监听 11434 端口,后面 Python 调用就是连这个端口。如果你在 Windows 上安装,Ollama 会自动注册为系统服务,不需要手动执行ollama serve。
3.2 拉取模型:版本标签决定一切
ollama pull deepseek-r1这条命令会拉取默认标签的模型,通常是 7B 版本。但如果你想要特定大小的模型,必须显式指定标签。
# 拉取默认版本(通常是 7B) ollama pull deepseek-r1 # 拉取 7B 版本(适合 16GB 内存 + 8GB 显存) ollama pull deepseek-r1:7b # 拉取 14B 版本(适合 32GB 内存 + 16GB 显存) ollama pull deepseek-r1:14b # 拉取 32B 版本(适合 64GB 内存 + 24GB 显存) ollama pull deepseek-r1:32b模型标签里的数字代表参数量,参数量越大效果越好,但对硬件要求也越高。7B 模型文件大约 4-5GB,14B 大约 9-10GB,32B 大约 20GB。下载时间取决于网络,国内拉取速度一般在 5-10MB/s,7B 模型大概需要 10-15 分钟。
拉取完成后用ollama list确认模型已就位。如果下载中断,重新执行ollama pull会断点续传,不需要删除重来。
3.3 启动服务与 Python 调用
模型拉取完成后,Ollama 服务已经在运行了。直接用 Python 的 OpenAI SDK 就能调用,因为 Ollama 提供了 OpenAI 兼容接口。
import openai # 连接到本地 Ollama 服务 client = openai.Client( base_url="http://localhost:11434/v1", api_key="ollama" # 本地服务无需真实密钥,但必填 ) # 发起对话请求 response = client.chat.completions.create( model="deepseek-r1:7b", # 必须与 ollama list 中的名称一致 messages=[ {"role": "system", "content": "你是一个简洁的助手。"}, {"role": "user", "content": "用三句话解释什么是注意力机制。"} ], temperature=0.7, # 0-1,越高越有创造力,越低越确定 max_tokens=512 # 限制回复长度,防止无限生成 ) print(response.choices[0].message.content)base_url指向本地 11434 端口,api_key填任意字符串即可,Ollama 不做鉴权。model参数必须和ollama list里显示的名称完全一致,写错会报 404。temperature控制随机性,做知识问答建议 0.3-0.5,做创意生成可以调到 0.8-1.0。max_tokens建议显式设置,否则模型可能生成超长回复导致等待时间过长。
如果调用返回连接错误,先确认ollama serve是否在运行,再检查端口是否被占用。Linux 下用ss -tlnp | grep 11434查看端口状态。
4. LM Studio 与 Jan 部署:图形界面下的模型管理与服务启动
4.1 LM Studio:GGUF 与 MLX 格式的选择逻辑
LM Studio 的核心优势是模型市场,搜索「DeepSeek R1」就能看到各种量化版本。但下载之前要搞清楚格式选择:Windows 和 Linux 选 GGUF,Apple Silicon 的 MacBook 选 MLX。选错格式模型加载会直接失败。
下载完成后,在「Local Models」里找到模型,点击「Load」加载。加载时注意右侧的配置面板:GPU Offload 层数建议拉满,Context Length 根据内存调整,7B 模型建议 4096,14B 建议 2048。加载成功后进入「Developer」标签页,点击「Start Server」,服务默认监听 1234 端口。
LM Studio 的 API 同样兼容 OpenAI 格式,Python 调用只需把base_url改成http://localhost:1234/v1,api_key填lm-studio即可。模型名称在「Local Models」列表里可以看到,通常是模型文件夹名。
4.2 Jan:多模态场景下的依赖处理
Jan 的安装包不大,但首次启动会提示安装额外依赖。在 Windows 上主要是 Visual C++ 运行库,在 Linux 上需要确认libfuse2已安装。如果启动后界面空白,大概率是依赖没装全。
模型下载走的是 Hugging Face 渠道,搜索「unsloth gguf deepseek r1」能找到社区量化版本。点击「Use this model」后选择 Jan,模型会自动下载并出现在模型列表中。加载模型后,Jan 会自动在 1337 端口启动服务,API 格式同样兼容 OpenAI。
Jan 的特点是支持多模态输入,如果你需要处理图片+文本的混合任务,Jan 是三个工具里唯一原生支持的。但代价是内存占用更高,同样跑 7B 模型,Jan 比 Ollama 多占 1-2GB 内存。
4.3 三个工具的 API 调用对比
| 工具 | Base URL | API Key | 模型名称来源 |
|---|---|---|---|
| Ollama | http://localhost:11434/v1 | ollama | ollama list |
| LM Studio | http://localhost:1234/v1 | lm-studio | Local Models 列表 |
| Jan | http://localhost:1337/v1 | jan | 模型列表 |
三个工具的调用代码结构完全一致,只需要改base_url、api_key和model三个参数。这意味着你可以写一套代码,通过环境变量切换后端,不用为每个工具单独适配。
5. 避坑指南:本地部署 DeepSeek 的五个血泪教训
5.1 模型加载成功但推理极慢
现象:ollama list显示模型已加载,但每次提问要等 30 秒以上才出结果。
原因:Ollama 默认优先使用 GPU,但如果 CUDA 版本不匹配或显存不足,会静默回退到 CPU 推理。CPU 推理 7B 模型的速度就是 3-5 token/秒,体感极慢。
解决:执行ollama ps查看模型实际运行在 GPU 还是 CPU 上。如果显示 100% CPU,检查nvidia-smi确认驱动正常,然后重新安装匹配 CUDA 版本的 Ollama。Linux 下可以用ollama serve启动时加OLLAMA_DEBUG=1环境变量查看详细日志。
5.2 端口冲突导致服务启动失败
现象:ollama serve报错「address already in use」,或者 Python 调用返回连接拒绝。
原因:11434 端口被其他进程占用,常见于之前启动的 Ollama 实例没有正常退出,或者有其他服务占用了同一端口。
解决:Linux 下用lsof -i :11434找到占用进程并 kill 掉。Windows 下用netstat -ano | findstr 11434找到 PID,然后在任务管理器里结束。如果不想杀进程,可以设置OLLAMA_HOST=0.0.0.0:11435环境变量换一个端口启动。
5.3 模型名称写错导致 404
现象:Python 调用返回model not found错误。
原因:model参数必须和ollama list里显示的完整名称一致,包括标签。比如拉取的是deepseek-r1:7b,调用时写deepseek-r1就会报错。
解决:先执行ollama list复制完整名称,再粘贴到代码里。LM Studio 和 Jan 同理,模型名称以界面显示为准。
5.4 内存不足导致模型加载中断
现象:拉取模型时进度条卡住,或者加载时直接崩溃退出。
原因:7B 模型 Q4 量化版需要约 5GB 内存,加上系统占用和推理时的 KV Cache,16GB 内存是底线。如果同时开了浏览器和其他大型应用,很容易触发 OOM。
解决:关闭不必要的应用,或者换用更小的量化版本。Ollama 支持deepseek-r1:1.5b这种小模型,虽然效果打折扣,但 8GB 内存也能跑。LM Studio 下载时选择 Q3 或 Q2 量化级别,文件更小,内存占用更低。
5.5 首次推理等待时间过长
现象:第一次提问等了很久才出结果,后续提问速度正常。
原因:模型首次加载时需要把权重从磁盘读入内存并初始化推理引擎,这个过程通常需要 10-30 秒,取决于磁盘速度和模型大小。
解决:这是正常现象,不是故障。如果觉得等待太久,可以提前执行一次空推理「预热」模型。Ollama 下用ollama run deepseek-r1:7b "hi"触发加载,之后再通过 API 调用就会很快。
6. 进阶技巧:用环境变量和批量脚本把本地推理压榨到极致
6.1 环境变量调优:让 Ollama 更听话
Ollama 支持通过环境变量控制运行行为,几个关键参数值得调整:
# 设置模型常驻内存,避免反复加载 export OLLAMA_KEEP_ALIVE=24h # 限制并行请求数,防止内存溢出 export OLLAMA_NUM_PARALLEL=2 # 指定 GPU 层数,-1 表示全部卸载到 GPU export OLLAMA_GPU_LAYERS=-1 # 启动服务 ollama serveOLLAMA_KEEP_ALIVE控制模型在内存中的驻留时间,默认 5 分钟。设成 24h 后模型不会自动卸载,后续调用零加载延迟,代价是内存一直被占用。OLLAMA_NUM_PARALLEL控制并发请求数,设太高会导致显存溢出,设太低又浪费 GPU 算力,一般 2-4 比较合适。OLLAMA_GPU_LAYERS设为 -1 表示所有层都跑在 GPU 上,显存不够时可以设成具体数字,比如 20 表示前 20 层跑 GPU,剩余跑 CPU。
6.2 批量推理脚本:一次处理多个问题
单次调用适合交互场景,但如果你要批量处理数据,逐条调用效率太低。下面这个脚本用并发方式批量提问,速度能提升 3-5 倍:
import openai from concurrent.futures import ThreadPoolExecutor client = openai.Client( base_url="http://localhost:11434/v1", api_key="ollama" ) def ask(question): """单次提问,返回模型回复""" response = client.chat.completions.create( model="deepseek-r1:7b", messages=[{"role": "user", "content": question}], temperature=0.3, max_tokens=256 ) return response.choices[0].message.content # 待处理的问题列表 questions = [ "什么是梯度下降?", "解释一下过拟合。", "Transformer 和 RNN 的区别是什么?", "如何评估一个分类模型?", "什么是数据增强?" ] # 并发执行,最多同时 3 个请求 with ThreadPoolExecutor(max_workers=3) as executor: results = list(executor.map(ask, questions)) for q, a in zip(questions, results): print(f"Q: {q}\nA: {a}\n{'-'*40}")ThreadPoolExecutor的max_workers控制并发数,建议不超过OLLAMA_NUM_PARALLEL的值。每个请求的max_tokens设小一点可以加快响应速度,批量场景下不需要长篇大论。这个脚本跑 5 个问题大约 15-20 秒,比逐条调用快一倍以上。
6.3 验证部署是否真正可用
部署完成后,用下面这个检查清单确认服务状态:
| 检查项 | 命令/操作 | 预期结果 |
|---|---|---|
| 服务进程 | ollama ps | 显示模型名称和运行状态 |
| 端口监听 | ss -tlnp | grep 11434 | 显示 LISTEN 状态 |
| API 连通 | curl http://localhost:11434/v1/models | 返回模型列表 JSON |
| 推理测试 | Python 调用示例 | 返回合理回复 |
| GPU 占用 | nvidia-smi | 显示 Ollama 进程占用显存 |
这五项全部通过,说明部署链路完整可用。如果 API 连通但推理失败,重点检查模型名称和max_tokens设置。
6.4 我踩过最深的坑:别在模型加载时改配置
最后说一个我反复翻车的点。Ollama 在模型加载过程中会锁定配置文件,如果你在加载时修改环境变量或切换模型,会导致服务状态不一致,表现为「模型列表里有但调用报错」。从那以后我每次调整配置都先ollama stop停掉所有模型,改完环境变量再重新ollama serve,这个习惯帮我省了至少十次重启排查的时间。
本地部署 DeepSeek 这件事,工具选对了能省一半力气,参数调对了能再省一半。希望这些实操记录能帮你少走点弯路。
本文还有配套的精品资源,点击获取