简介:这份由郭震编写的10页DeepSeek图解指南,为初学者和技术爱好者提供了一条从本地部署到理解大模型训练原理的清晰路径。内容围绕本地运行DeepSeek的三大优势展开:保障隐私与数据安全、支持定制化微调、满足离线场景使用;同时用图解方式讲解LLM基础概念、Transformer架构以及预训练、监督微调、强化学习三种主流训练方法,帮助读者建立大模型知识框架。针对DeepSeek-R1,文档重点拆解其两项核心创新——含R1-Zero的中间推理模型与通用强化学习训练,并结合训练过程图解说明这些设计如何增强模型推理能力与任务泛化性,还附有进一步学习参考资料。资源仅含1个PDF文件,压缩包大小2.66MB,目录结构清晰,读者能快速定位本地部署步骤、架构图解和训练流程。已有931人学习,适合希望低成本入门大模型部署、并想深入理解推理优化与强化学习机制的研究人员和实践者。
1. 本地部署 DeepSeek:先把离线推理这件事讲清楚
很多开发者第一次听到「本地部署大模型」,脑子里冒出来的都是顶配 GPU、双路电源、数据中心机架,但实际上用 Ollama 拉一个 deepseek-r1:1.5b,一台 8G 内存的普通笔记本就能把推理模型跑起来。这里面的 1.5b 是 15 亿参数,属于 DeepSeek-R1 推理模型系列里最小的一档,也是大多数没接触过本地模型的开发者最合适的入口。装不好的典型症状我也见过不少:模型明明拉下来了,一对话就崩,CPU 推理慢到半分钟蹦不出一个词,最后只能把锅甩给「电脑不行」。这篇记录从 Ollama 安装、模型拉取写到推理参数配置和常见翻车现场,覆盖 Windows、macOS、Linux 三种环境,同时结合 DeepSeek-R1 的训练原理把模型行为讲透,适合想离线使用大模型、又想弄明白推理优化背后逻辑的开发者。
2. 先把环境列清楚:Ollama 版本、模型尺寸与硬件下限
2.1 为什么选 Ollama:把「装大模型」压缩成三条命令
本地跑大模型的路子不少,直接编译底层推理引擎、拼 Python 依赖、写量化脚本,每一步都能劝退一批人。我最早折腾时也是从底层入手的,编译环境、CUDA 版本、依赖冲突,光环境就搭了快一天,最后模型还没跑起来。后来换到 Ollama,整个体感完全不同:它把模型仓库、量化格式、推理引擎和 API 服务打包成一个命令行工具,安装完直接拉模型就能对话。
Ollama 的核心逻辑是三层:模型管理、推理引擎、本地 API 服务。模型管理负责下载和存放不同尺寸的模型文件;推理引擎负责把模型跑起来,自动处理显卡显存和 CPU 内存的分配;本地 API 服务则监听一个端口,让任何程序都能通过 HTTP 请求调用模型。这个设计对新手很友好——不需要知道底层用的是哪种注意力实现,也不需要手写推理代码,装好就能用。
我一般会把 Ollama 和另外几种常见方案做个简单对比:直接编译底层推理引擎灵活度最高,但配置成本极高,适合想深入源码的开发者;带图形界面的工具上手快,但远程调用和脚本自动化不如命令行方便;而 Ollama 正好卡在中间,既能命令行操作,又提供了完整的本地 API,日常开发和验证都够用。
2.2 读懂 1.5b、7b、8b:参数规模决定硬件预算
先明确一个概念:deepseek-r1:1.5b、qwen:7b、llama:8b 里的 b 是 billion 的缩写,1.5b 是 15 亿参数,7b 是 70 亿,8b 是 80 亿。这里的参数指大模型神经元的权重和偏置总量,可以粗略理解成模型的「知识容量」。参数越多,模型能记住的模式越复杂,回答质量通常也越高,但代价是推理时需要把全部参数加载到内存或显存里。
DeepSeek-R1 是面向推理优化的模型,它的强项在数学、逻辑和代码这类需要长链思考的任务。文档里详细介绍了 R1-Zero 通过纯强化学习提升推理能力的过程,以及通用强化学习阶段对帮助性和安全性的优化,这些训练机制最终体现在模型行为上,比如回复前会有一段思考过程。参数越小的版本,思考链条越短,回答深度也越有限,但胜在普通电脑就能跑。
我给不同配置的机器一个选型参考,这是基于我装过几十台机器的经验总结:
| 模型 Tag | 参数量 | 内存/显存建议 | 适合场景 |
|---|---|---|---|
| deepseek-r1:1.5b | 15 亿 | 2GB 内存即可起步 | 普通办公本、入门体验、API 开发测试 |
| deepseek-r1:7b | 70 亿 | 8GB 显存或 16GB 内存 | 独立显卡、中等推理需求 |
| deepseek-r1:8b | 80 亿 | 同上,略高 | 质量要求更高的对话与代码生成 |
有一个血泪经验要分享:参数越大,对内存带宽的要求越高。CPU 推理时,模型每生成一个 token 都要把所有参数从内存搬到计算单元,内存带宽决定速度上限。所以如果你的电脑没有独立显卡,选 1.5b 是明智的,硬上 7b 会慢到怀疑人生。
2.3 安装 Ollama:三种系统的落地命令
Ollama 的安装本身没什么技术含量,官方提供了各平台的安装包,Windows 和 macOS 都是图形界面安装,一路下一步就能完成。关键是装完后要确认三件事:命令行能用、系统托盘服务起来了、模型目录可写。
Windows 推荐直接下载安装包安装,安装完成后 Ollama 会注册成用户态服务,并在系统 PATH 中加入可执行文件路径。macOS 用户也可以直接用 Homebrew 安装:
brew install ollamaLinux 服务器最省事的方式是官方安装脚本,一条命令搞定:
curl -fsSL https://ollama.com/install.sh | sh这条命令会下载安装脚本并以当前用户身份安装 Ollama,同时注册 systemd 服务。脚本执行完成后,用下面这条命令确认版本:
ollama --version正常会输出类似ollama version 0.x.x的版本号。如果提示找不到命令,大概率是 PATH 没刷新,重新打开终端或手动注销登录一次即可。
提示:Linux 上安装脚本会自动创建 systemd 服务,服务名为 ollama,可以用systemctl status ollama查看运行状态。
2.4 装完先做三件事:确认服务、查看命令、预留磁盘
安装完成后不要急着拉模型,先检查三个基础项。第一,确认后台服务在运行。Windows 上任务栏右下角应该有 Ollama 图标,macOS 菜单栏同理,Linux 上执行:
systemctl status ollama看到active (running)才算正常。第二,在命令行输入:
ollamaOllama 会打印出全部可用命令,包括pull、run、serve、list、ps、stop等。初次看到这些命令时心里大概有个数就行,后面真正常用的只有三四个。第三,确认模型存储目录所在盘有足够的剩余空间。1.5b 模型量化后大约 1GB 多点,7b 模型要 4GB 以上,别把模型目录放在系统盘——Windows 上默认在C:\Users\你的用户名\.ollama,Linux 在~/.ollama,后面我会讲怎么改到别的盘。
这三件事都确认完,Ollama 这边就绪了,下一步开始拉模型。
3. 三步装完:拉取模型、命令行对话与 API 调用
3.1 第一步:用 ollama pull 拉取 deepseek-r1:1.5b
一切就绪后的第一个正式动作,是把模型下载到本地。打开命令行窗口,执行:
ollama pull deepseek-r1:1.5b这条命令会从模型仓库拉取 deepseek-r1 的 1.5b 量化版本。下载过程中终端会显示进度条,包含下载速率和已下载百分比。模型文件会解包成多层结构,默认存放在~/.ollama/models目录下。
为什么要选 1.5b 而不是直接上 7b?我遇到过太多人第一次就拉 7b,看到下载进度条跑完以为万事大吉,结果一运行内存立刻爆掉,进程直接被系统杀死。1.5b 是验证整个链路能否走通的最小成本方案,确认流程没问题后再根据硬件水平换更大尺寸的模型也不迟。
下载完成后可以用ollama list验证模型已经入库:
ollama list输出会列出本地已有的模型名称和大小,看到deepseek-r1:1.5b就说明下载这步完成了。
提示:如果下载到一半中断,重新执行一遍ollama pull deepseek-r1:1.5b即可,Ollama 支持断点续传,不会从头开始。
3.2 第二步:用 ollama run 进入对话界面
模型就位后,直接运行:
ollama run deepseek-r1:1.5b终端会进入一个交互式对话界面,输入问题回车就能得到回答。第一次启动可能需要几秒到十几秒的加载时间,因为模型要从磁盘读入内存,这是正常的。
DeepSeek-R1 系列有个显著特点:模型在给出正式回答之前,会先输出一段思考过程。在对话界面上,这段思考被包在think和/think标签里,里面是模型内部推演的内容,不是最终回复。我看到很多新手第一次见到这堆标签会误以为是 bug,其实这是 R1 的推理机制——模型通过这种长链思考(Chain-of-Thought)逐步拆解问题,然后才整理成正式答案输出。文档里讲到 R1-Zero 通过纯强化学习获得了这种推理能力,它在数学题和逻辑题上的表现甚至超越了对比基准模型。
如果想退出对话界面,输入/bye回车即可,模型会从内存中释放。对话中还可以用/set修改运行参数,比如温度、上下文长度等,后面讲参数配置时会详细说。
这里多说一句:1.5b 模型由于参数量小,思考深度有限,复杂问题可能答得比较浅,想体验完整推理能力建议在有条件的机器上换 7b 或更大尺寸的版本。
3.3 第三步:用本地 API 把模型变成服务
命令行对话只是验证过程,实际开发中更常用的是 API 方式。Ollama 安装后会在本地默认监听11434端口,运行:
ollama serve命令执行后服务就在后台待命了。如果你之前已经用过ollama run,服务其实已经被自动拉起,不需要重复执行。用 curl 直接测试:
curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "请用中文解释什么是 Transformer 的多头注意力机制", "stream": false }'这里解释几个关键参数。model字段指定使用哪个模型,必须和ollama list里的名称完全一致;prompt是输入给模型的文本;stream设为false表示等模型生成完整后再一次性返回结果,设为true则按 token 流式返回。返回的 JSON 里会包含response字段,里面是模型正式回答的内容,total_duration字段则是本次推理的耗时,单位是纳秒,这个数值后面验证性能时会用到。
API 的意义在于:它把命令行交互变成了标准 HTTP 服务,任何语言都能通过 HTTP 客户端调用。我通常会在确认命令行能对话后立刻跑一遍这个 curl 请求,这样等于同时验证了模型加载、服务监听和响应链路三个环节,比单纯在对话框里玩要省事得多。
4. 配置推理参数:模型路径、上下文长度与并发控制
4.1 改模型存储路径:解决系统盘爆满问题
默认情况下,模型文件存放在用户目录下的.ollama文件夹。这个安排在 Linux 上问题不大,但 Windows 机器如果系统盘分区本身不大,几个模型一放就红了。一个 7b 模型大约 4GB,如果后续再拉几个不同尺寸的模型,系统盘会被迅速填满。
改路径的方法是通过环境变量OLLAMA_MODELS指定新的存储位置。Windows 上先创建好目标文件夹,比如D:\ollama\models,然后打开系统环境变量设置:
setx OLLAMA_MODELS "D:\ollama\models"setx是 Windows 自带命令,执行成功后需要重新打开终端让环境变量生效。macOS 和 Linux 在启动 Ollama 前手动导出即可:
export OLLAMA_MODELS=/data/ollama/models如果是 Linux 上通过 systemd 方式安装的 Ollama,光是 export 还不够,因为服务环境里没有这个变量。正确做法是编辑 systemd 服务配置,在[Service]段下指定:
Environment="OLLAMA_MODELS=/data/ollama/models"改完执行systemctl daemon-reload && systemctl restart ollama重启服务。注意,换路径后旧路径下已下载的模型不会自动迁移,需要手动把.ollama/models目录整体复制到新位置,或者重新执行ollama pull。
提示:修改OLLAMA_MODELS前先执行ollama list记录已有的模型,迁移后用同样的命令复查,防止遗漏。
4.2 上下文长度与生成参数:让输出更可控
模型回答质量除了取决于模型本身,很大程度上也受生成参数影响。Ollama 在交互模式下用/set调整配置,进入对话后输入:
/set parameter temperature 0.6 /set parameter top_p 0.9 /set parameter num_ctx 4096三个参数各有作用。temperature控制随机性,值越低回答越保守稳定,适合逻辑推理和代码生成;值越高回答越发散,适合写作创意类任务。DeepSeek-R1 这类推理模型我一般会把温度压在 0.6 以下,因为推理模型本身已经具备较强的探索能力,过高的温度反而会让思考链条跑偏。top_p是核采样阈值,控制候选 token 的范围,0.9 是多数场景的均衡值。num_ctx是上下文窗口长度,单位 token,默认值通常只有 2048 或 4096,处理长文档或长对话时要调大。
API 调用时这些参数直接放在请求 JSON 里:
curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "请分步骤解答:a 和 b 合作完成一项工作需要 6 天,a 单独完成需要 10 天,b 单独完成需要几天?", "stream": false, "options": { "temperature": 0.6, "top_p": 0.9, "num_ctx": 4096 } }'有个细节值得注意:加大num_ctx会显著增加内存占用,因为每个上下文位置都要保存对应的注意力缓存。1.5b 模型在 4096 上下文下内存吃紧不明显,但 7b 模型如果从 2048 调到 8192,额外内存开销可能有 1GB 以上。所以调上下文长度时先看机器内存水位。
4.3 服务级参数:并发、常驻内存与监听地址
Ollama 服务还提供几个环境变量,控制的是整体运行行为,比单次对话参数影响更大。
| 环境变量 | 默认值 | 作用与建议 |
|---|---|---|
OLLAMA_HOST | 127.0.0.1:11434 | API 监听地址,只允许本机访问。需要局域网其他机器调用时改为0.0.0.0:11434 |
OLLAMA_NUM_PARALLEL | 1 | 并行处理请求数。显存足够时可以调到 2 或 4,显存不足时保持默认 |
OLLAMA_KEEP_ALIVE | 5m | 模型在内存中常驻的时间。频繁请求时改为-1永久常驻,避免反复加载 |
OLLAMA_MODELS | ~/.ollama/models | 模型存储路径,见上文 |
OLLAMA_NUM_PARALLEL是最容易出问题的一个。默认值是 1,也就是说服务端一次只处理一个请求,后续请求排队等待。如果你对接的业务有并发调用需求,调大这个值能明显降低响应延迟,但代价是每个并行请求都会在显存或内存中保留一份模型副本。1.5b 模型并行开 4 没问题,7b 模型并行开到 2 就可能把显存打满,具体值要根据nvidia-smi观察显存余量后再定。
OLLAMA_KEEP_ALIVE影响的是模型加载和卸载的频率。默认 5 分钟内无请求就会释放内存,频繁调用场景下模型反复加载反而更慢。我会把开发环境的此参数设为-1,让模型常驻内存,换来的是稳定一致的响应速度。注意-1是数值负一,不是字符串,设置时不要带引号。
设置这些环境变量的方式和上一节OLLAMA_MODELS完全一致,Windows 用setx OLLAMA_NUM_PARALLEL 2,Linux 直接写入 systemd 配置。改完后重启 Ollama 服务,再用ollama ps查看当前加载的模型和内存占用,确认配置生效。
5. 避坑排查:本地跑 DeepSeek 最容易翻车的五个地方
5.1 拉取模型卡在 0% 不动
现象:执行ollama pull deepseek-r1:1.5b后,进度条一直停留在 0%,等十几分钟毫无变化。
原因:最常见的有三类,一是本地网络访问模型仓库不稳定,连接超时;二是磁盘空间不足导致写入失败,但错误提示不明显;三是目标目录权限受限,Windows 上路径含中文或空格时偶发。
解决:先执行ollama list确认本地是否已有残留文件,再检查磁盘剩余空间,至少留出模型体积的 1.5 倍。网络方面可以尝试ping registry.ollama.ai看连通性,如果丢包严重就换个时段再拉。路径含中文的,把模型目录改到纯英文路径,方法见第 4 章。实测中卡住的场景九成是网络或空间,少数是路径编码问题。
5.2 CPU 推理慢到半分钟蹦不出来一个字
现象:没有独立显卡的机器上跑 deepseek-r1:1.5b,输入问题后等了很久才看到第一个字,之后也是逐字往外蹦,整体速度没法用。
原因:CPU 推理时模型权重从内存搬运到计算核心的带宽是瓶颈,内存越老、通道越少,速度越慢。另外如果后台挂着浏览器、IDE 等多个内存大户,可用内存带宽进一步被压缩。
解决:关掉不必要的后台应用,释放内存带宽;然后执行ollama run deepseek-r1:1.5b --verbose,观察输出里的几个耗时指标。prompt eval是提示词处理耗时,eval是生成回答耗时,后者除以生成 token 数就是每秒生成速度。如果速度在 5 tokens/s 以上还能接受,低于 2 tokens/s 就建议换更小的模型,或者改到 GPU 机器上跑。
5.3 显存爆掉或者进程被系统直接杀死
现象:跑 7b 模型时,程序运行一段时间后报cuda out of memory,或者整个进程直接消失,终端没有任何报错。
原因:显存不足,或并发请求导致同一模型被加载多份副本。Windows 上还有一种情况是系统检测到内存压力过大,主动杀了进程。
解决:先用nvidia-smi查看显存总量和当前占用。7b 的量化版本大概需要 4 到 6GB 显存,显存不够就换 1.5b。同时检查OLLAMA_NUM_PARALLEL是不是调得过高,把它改回 1 或 2 再试。另外确认OLLAMA_KEEP_ALIVE内存常驻设置不会导致多个模型同时驻留,必要时手动执行ollama stop deepseek-r1:7b释放内存。
5.4 回复里中英文混杂,思考过程乱成一锅粥
现象:用中文提问,模型的思考过程里经常出现英文片段,甚至正式回答也混着英文。
原因:这是 DeepSeek-R1 系列训练特性决定的,不是安装故障。文档里明确提到 R1-Zero 阶段出现过语言混合问题,后续的通用强化学习阶段虽然做了优化,但小尺寸版本里这个现象仍然存在。模型的思考链可能用英文展开更高效,因为训练数据里推理类英文占比更高。
解决:在 prompt 里强调「请全程用中文回答」,能显著改善输出语言一致性。注意不要把这个当 bug 去重装模型,折腾一圈发现模型没问题,只是使用习惯问题。
5.5 命令行找不到 ollama 命令
现象:安装完成后打开新终端,输入ollama提示「不是内部或外部命令」或command not found。
原因:安装程序写入系统 PATH 的操作发生在当前终端会话之前,已经打开的终端窗口没有拿到新的环境变量。Linux 上如果用了 sudo 安装,普通用户的环境里可能也没包含 Ollama 路径。
解决:Windows 上完全关闭并重新打开终端,不要用当前窗口的刷新;Linux 上先执行which ollama确认安装路径,一般会在/usr/local/bin/ollama,如果该目录不在 PATH 中就手动添加。最彻底的办法是注销重新登录一次,让用户级环境变量完整刷新。
6. 验证跑通:从推理速度到思考深度的验收方法
6.1 用 --verbose 量化每一步耗时
配置全部完成后,第一步验证是性能基线。进入对话并开启详细输出模式:
ollama run deepseek-r1:1.5b --verbose正常提问后,模型回答完成时会打印一组耗时数据,重点关注eval rate这一项,单位是 tokens/s,代表生成速度。1.5b 在 CPU 上跑到 8 到 15 tokens/s 说明环境正常,7b 在独显上通常能到 20 以上。如果速度明显低于这个范围,回头看第 5 章的排查思路。
6.2 用推理题验证思考深度
第二项验证更关键:确认 R1 的推理链路真的在工作。DeepSeek-R1 区别于普通对话模型的点在于长链思考,我每次换环境都会用一道需要多步推导的题做标尺,上面第 4 章那道甲乙合作工程题就是典型用例。如果模型回答前出现完整的think块,内部有逐步拆解的痕迹,说明推理功能正常;如果只有简短回答且看不到思考过程,考虑是不是拉错了模型版本或者上下文被截断。顺手验证一个细节:模型用中文回答的连贯性。如果语言混杂明显,说明使用习惯有问题或者可以考虑更大尺寸版本。
6.3 API 与服务的最终检查
走一遍 API 请求确认服务端稳定,可以简单循环十次请求看是否全部成功:
for i in {1..10}; do curl -s http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "请输出数字"'"$i"'", "stream": false }' -o /dev/null -w "请求 $i: %{http_code}\n" done全部返回200即可。最后用ollama ps确认服务常驻状态和内存占用是否符合预期。整套流程从我第一次折腾到现在已经形成了固定习惯:先跑版本命令,再拉最小模型,跑通对话后立刻测 API,最后压一遍耗时数据。从那以后每次换新机器部署,我都强制走一遍这套流程,几分钟就能确认环境到底是「装好了」还是「看着装好了」,这个习惯帮我避掉了不少隐性坑。希望这套部署和排查思路能帮到你。
本文还有配套的精品资源,点击获取