ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

无独显也能跑DeepSeek:Ollama本地部署与量化选型避坑

无独显也能跑DeepSeek:Ollama本地部署与量化选型避坑

简介:这份PDF图解教程面向希望低成本上手大模型本地部署的初学者、技术爱好者与研发人员,围绕DeepSeek的安装运行、LLM与Transformer基础、预训练/监督微调/强化学习流程展开,并重点拆解DeepSeek-R1及R1-Zero的推理模型训练与通用强化学习思路。压缩包仅含1个PDF文件,约2.64MB,以图文步骤和目录化章节组织,便于按本地部署、零基础概念、R1精华图解三部分检索学习。已有2202人学习下载。读者可据此快速完成本地对话环境搭建,理解推理模型从预训练到强化学习的完整脉络,并通过操作界面截图和案例分析掌握排错与验证方法,适合作为入门实操与前沿技术参考资料。

1. 一台没有独立显卡的办公本,把 DeepSeek 跑起来了

上周帮同事在一台 16G 内存的轻薄本上做 DeepSeek 本地部署,机器没有独立显卡,之前他照着某篇教程拉了个大参数模型,磁盘直接下去四十多个 G,风扇狂转,对话还卡成幻灯片。换成deepseek-r1:1.5b之后,从装 ollama 到出第一句回答,前后不到十分钟。这种翻车太常见了:模型本身没有问题,问题出在版本和量化档位没对上。这篇按我实际装机的顺序,把 DeepSeek 大模型本地部署、ollama 安装配置,以及后面强化学习训练流程怎么理解写一遍。适合想在自己机器上跑通推理、又不想被显存和参数绕晕的开发者;熟手可以直接跳到版本取舍和排查那两章。

2. 装前定版本:显存、量化档位与 deepseek-r1 标签怎么选

本地部署最容易犯的错,是拿到一个模型名就直接 pull,完全不看后面的参数规模。大型语言模型的参数量直接决定了推理时的内存占用,选大了跑不动,选小了答非所问,中间那档才是普通机器该用的。这一章先把版本这件事定下来,后面装起来才不返工。

2.1 参数 b 标的是参数量,不是内存占用

deepseek-r1:1.5b里的b是 billion,十亿的意思。1.5b 就是 15 亿参数,7b 是 70 亿,8b 是 80 亿。这里的参数量指的是模型里权重(weight)和偏置(bias)的总数,目前主流大模型都基于 Transformer 架构堆很多层,最后接全连接层,所有参数加起来就是这个数。它和磁盘占用、内存占用不是一回事,但正相关:参数越多,量化后的文件越大,推理时需要装进内存的权重也越多。

下面这张表是我在几台机器上实际拉过的档位,磁盘占用取的是 ollama 模型库页面的常见值,具体以你拉取时显示的为准:

模型标签参数量量化后磁盘占用(约)内存建议适用机器
deepseek-r1:1.5b15 亿1.1 GB4 GB 起轻薄本、办公机
deepseek-r1:7b70 亿4.7 GB8 GB 起16G 内存台式机
deepseek-r1:8b80 亿5 GB 左右8~10 GB有 6G 显存的机器
deepseek-r1:14b140 亿9 GB 左右16 GB12G 显存以上
deepseek-r1:32b320 亿20 GB 左右24 GB 以上24G 显存工作站

选型逻辑不复杂:先看内存,再看显存,最后看你能接受多慢。1.5b 在纯 CPU 上也能跑出可用的速度,适合先跑通链路;7b 和 8b 是质量和资源的平衡点,普通开发机基本能扛;14b 以上没有独立显卡就别勉强了,内存交换一开,回答速度会掉到难以忍受。这里提到的 Scaling Laws 说的是参数越多、数据越多元,模型能力越强,但这条规律对本地部署的指导意义是「在资源允许的范围内选最大」,不是「无脑选最大」。

提示:第一次装建议直接从 1.5b 开始,跑通之后再换大档位。这样即使环境有问题,也能快速判断是配置问题还是模型太重。

2.2 量化后缀怎么读:q4_K_M 与文件体积的关系

ollama 的模型 tag 后面有时会带q4_K_M、q5_K_M、q8_0这类后缀,这是量化格式,不是版本号。q4表示 4bit 量化,q5是 5bit,q8是 8bit;K指 k-quants 系列量化方法,M是 medium 档位。量化位宽越低,文件越小、推理越快,但精度损失越大。对 1.5b 这种小模型,q4 已经够用,再往上压容易把本来就不多的推理能力压没;7b 以上如果内存宽裕,可以选 q5 或 q8,回答的连贯性会好一些。

判断方法很直接:拉之前看 tag,拉之后看ollama list里的 SIZE 列。同一个参数规模下,SIZE 越小说明量化越狠。我一般会给小模型留 q4,给 7b 以上留 q5,除非磁盘实在紧张,否则不建议碰 q2、q3 这类极低比特量化,那种模型说话会开始重复和断片。

2.3 环境清单:装之前把这五项对一遍

装 ollama 本身不挑环境,但模型跑不跑得动,取决于下面这几项。先把清单对一遍,能省掉后面一半的排查时间:

检查项要求怎么查
操作系统Windows 10 以上、macOS 12 以上、主流 Linux 发行版系统设置里看版本
内存1.5b 至少 4 GB,7b 至少 8 GB任务管理器或free -h
磁盘剩余至少留出模型体积的 2 倍df -h或资源管理器
CPU支持 AVX2 指令集Linux 下lscpu看 Flags
网络能稳定访问模型下载源先 pull 一个小模型试

磁盘这一项要单独说:ollama 默认把模型放在用户目录下,Linux 是~/.ollama/models,Windows 是C:\Users\用户名\.ollama\models。1.5b 才 1G 多,问题不大;7b 以上再加上你反复拉不同 tag,C 盘很快会被吃满。常见做法是在装完之后、拉模型之前,把OLLAMA_MODELS环境变量指到空间大的盘,这个操作放在下一章第一步做。

3. ollama 安装与 DeepSeek-R1 拉取:三条命令的参数取舍

ollama 的好处是把模型下载、加载、对话接口都包在一个命令行里,不需要自己配 Python 环境、装推理框架。整个 AI 本地部署链路可以压到三条命令:装 ollama、pull 模型、run 模型。但每条命令背后都有几个参数值得停一下,尤其是模型目录和 tag 这两处,改错地方后面要重来。

3.1 装 ollama:先把模型目录挪出系统盘

Windows 和 macOS 直接到 ollama 官方站点下载对应系统的安装包,双击后基本一路下一步。Linux 用官方提供的安装脚本,装完先验证命令面:

# Linux 下按官方站点当前给出的安装命令执行,装完验证版本 ollama --version # 看一遍子命令,后面常用的就是 pull、run、list、rm、serve ollama --help

ollama --version输出的是客户端和服务端版本号,两者不一致时以服务端为准重启一下。ollama --help会列出十来个命令,实际高频使用的就五个:pull拉模型、run跑模型、list看本地模型、rm删模型、serve手动起服务。装完先别急着 pull,把模型目录改掉:

# Linux/macOS:把模型存储目录指到大容量磁盘 export OLLAMA_MODELS=/data/ollama/models # 写进 shell 配置,避免每次开终端都要重新 export echo 'export OLLAMA_MODELS=/data/ollama/models' >> ~/.bashrc source ~/.bashrc

这两行做的是同一件事:让 ollama 去/data/ollama/models存模型文件,而不是默认的用户目录。export只对当前终端生效,写进~/.bashrc才是永久的。Windows 用户不用命令,在「系统属性 → 环境变量」里新建OLLAMA_MODELS,值填D:\ollama\models这类路径,然后重启 ollama 服务。改完目录后可以用ollama list确认一下,此时列表应该是空的,说明新目录生效了。

注意:改完环境变量要重启 ollama 服务,Linux 下systemctl restart ollama,Windows 下退出托盘图标再重新启动,否则它还在读旧路径。

3.2 拉模型:ollama pull deepseek-r1:1.5b 的 tag 选择

装好之后就是拉模型。命令本身很短,关键是 tag 要写全:

# 显式指定 1.5b 量化版,适合 4G 内存以上的机器 ollama pull deepseek-r1:1.5b # 拉完确认本地模型列表和体积 ollama list

ollama pull是按层下载的,中途断网重新执行会续传,不会从头开始。tag 不写会默认拉latest,但deepseek-r1的 latest 不一定是你要的档位,可能是更大的参数版本,所以这里建议永远显式写 tag。ollama list输出四列:NAME、ID、SIZE、MODIFIED,SIZE 和你表里预估的体积对得上,就说明拉的是正确的量化档。

拉取过程有几个细节值得知道:模型文件按 blob 存在models/blobs下,manifests里存的是 tag 到 blob 的映射;同一个基础模型的不同 tag 会共享部分层,所以先拉 1.5b 再拉 7b,磁盘增量不一定等于两个体积相加。删模型用ollama rm deepseek-r1:1.5b,只删 manifest 和独占的 blob,共享层会留着,这是正常行为。

3.3 跑起来:ollama run 的交互、think 标签与 API 调用

模型到位后直接跑:

# 进入交互式对话,首次加载会把权重读进内存,等几秒 ollama run deepseek-r1:1.5b

进入对话界面后直接输入问题,比如「用三句话解释什么是监督微调」。DeepSeek-R1 系列有个明显特征:回答里会先出现think标签,里面是思考过程,等response闭合之后才是正式回复。这个标签不是装饰,它是 R1 训练方式留下来的痕迹,第四章会讲清楚它从哪来。如果你用脚本调用,要按标签把思考段和正式段切开,别把思考过程直接当成答案展示给用户。

除了交互模式,更常用的是 HTTP 接口。ollama 默认在11434端口起服务,用 curl 就能调:

# 非流式调用,一次性拿完整 JSON curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "用三句话解释什么是监督微调", "stream": false }'

三个参数分别管什么:model必须和ollama list里的名字完全一致;prompt是输入文本;stream设成false表示等生成完再返回,设成true会一行一行推流,适合做打字机效果。返回的 JSON 里response字段是正文,done为true表示生成结束。如果要接自己的程序,把stream设true再用 SSE 解析会更顺,但调试阶段建议先用false把链路跑通。

4. 训练流程拆解:从预训练、SFT 到 R1-Zero 的纯强化学习

装完之后很多人会问:为什么 1.5b 和 32b 的回答质量差这么多,为什么 R1 回答问题前要先「想一想」。这两个问题的答案都在训练流程里。这一章不讲论文推导,只把预训练、监督微调、强化学习三个阶段和 R1 的两个核心创新拆开,让你在调参和选模型时知道自己在取舍什么。

4.1 预训练与监督微调:模型为什么会答题

预训练阶段用的是大规模无标注文本,书籍、新闻、网页都算,训练目标是预测下一个词。模型在这个过程中学到的是词语之间的概率分布和句子结构,本质上是把语言规律压缩进 Transformer 的权重里。这个阶段数据量最大、算力消耗最高,产出的是一个「会接话但不太听话」的基础模型。

监督微调(SFT)接在预训练后面,用的是人工标注的问答对,让模型在特定任务上调整参数,更符合人类期望的回答格式。SFT 的数据量比预训练小几个数量级,但质量要求高,一条脏数据可能带偏一类问题的回答风格。本地部署时你拿到的模型基本都是「预训练 + SFT + 后续对齐」的成品,不需要自己从头跑这两步;但如果你要做行业微调,SFT 就是主要动手的环节,准备几百到几千条高质量问答对是常见起点。

4.2 强化学习与 RLHF:奖励模型怎么给分

强化学习阶段解决的是「回答对不对、好不好」的问题。常见做法是 RLHF,分三步:第一步人类标注者给模型的一批回答打分,排出优劣;第二步用这批数据训练一个奖励模型,让它学会模仿人类的评分标准;第三步用强化学习让语言模型去最大化奖励模型的分数。奖励模型在这里扮演裁判,语言模型是运动员,训练过程就是让运动员学会拿高分。

这套流程的难点在奖励模型:裁判的标准一旦有偏,模型就会学会钻空子,输出看起来分数高但实际没用的内容。所以实际训练里会同时挂多个奖励模型,帮助性、安全性、格式各管一摊,最后加权。理解这一点对本地部署的启发是:你如果拿开源模型做二次微调,别只盯着损失函数,准备好一套自己的评估集,否则调完可能只是「评分高了」,回答质量没变。

4.3 R1-Zero:跳过 SFT 的冷启动

DeepSeek-R1 的训练起点是 V3 的基础模型,不是最终的 V3 成品。它有两个核心创新,第一个是 R1-Zero:完全跳过监督微调,直接做推理导向的强化学习。这样训出来的模型推理能力提升很明显,能生成大量长链式思维示例,也就是我们在对话里看到的think段。这些思考数据反过来又可以作为 SFT 的语料,减少人工标注的依赖。

但 R1-Zero 有两个明显问题:回复时中英文混着说,非推理任务的回答质量差。原因也不难理解,纯强化学习只奖励「答对」,没有教它「好好说话」,格式和语言一致性没人管。这就像只按结果打分、不看过程的训练方式,分数上去了,表达却散了。所以 R1-Zero 是一个中间产物,用来产出推理数据,不是最终交付给用户的版本。

4.4 通用强化学习与最终 R1:可读性和安全奖励

第二个创新是通用强化学习。做法是在 SFT checkpoint 上继续做强化学习,但奖励模型不止一个:推理任务用正确性奖励,非推理任务引入帮助性和安全性奖励,让模型在两类场景下都不跑偏。这一步解决的是 R1-Zero 留下的语言混合和通用能力差的问题。

最终 R1 是两条线的合并:R1-Zero 贡献推理能力和思考数据的生成方式,通用强化学习贡献任务适应性和表达规范。落到本地使用上,你能感知到的差异是:R1 系列回答前会先输出思考段,思考段质量随参数量下降而下降,1.5b 的思考经常绕圈子,32b 的思考则明显更有条理。这不是 bug,是参数量对推理链深度的影响,选型时要把这一点算进去。

5. 避坑与排查:五条踩坑记录

装 ollama 这个链路本身不复杂,但环境差异大,下面五条是我在不同机器上真实遇到过的,按「现象 → 原因 → 解决」记,遇到了直接对号入座。

5.1 拉完模型跑不起来,报内存不足

现象:ollama run之后进度条卡住,或者直接报model requires more system memory than available。原因:模型体积是按量化后的磁盘占用算的,加载时要展开到内存,7b 模型实际占用往往比 4.7G 的磁盘体积大不少。解决:换小一档的 tag,比如从 7b 降到 1.5b;或者关掉其他吃内存的程序再试。Linux 下用free -h看可用内存,Windows 看任务管理器的「可用」而不是「已用」。

5.2 ollama 命令找不到,或者服务没起来

现象:终端输入ollama提示 command not found,或者ollama list报连接拒绝。原因:Linux 下安装脚本装完没把二进制放进 PATH,或者 systemd 服务没启动;Windows 下装完没重新开终端。解决:Linux 先systemctl status ollama看服务状态,没起来就systemctl start ollama;PATH 问题用which ollama确认安装位置,手动加进~/.bashrc。Windows 关掉终端重新开一个,让环境变量刷新。

5.3 C 盘被模型文件吃满

现象:拉了几个模型之后系统盘飘红,其他软件开始报错。原因:默认模型目录在用户目录下,跟着系统盘走。解决:按 3.1 节设OLLAMA_MODELS指到大盘,然后把旧目录下的models文件夹整个挪过去,重启服务。挪之前先ollama list记下已有模型,挪完再ollama list对一遍,确认没丢。已经拉过的模型不用重新下载,blob 文件是完整的。

5.4 回答一直停在 think 标签里不出来

现象:对话时屏幕上一直显示思考内容,迟迟不出现正式回答,或者脚本拿到的response里只有思考段。原因:小参数模型的思考链容易发散,1.5b 在复杂问题上可能绕很久;另外stream模式下思考段和正式段是连续推的,解析逻辑没按标签切分就会误判。解决:换大一点的模型,或者在 prompt 里明确要求「直接给结论,不要展开思考」;脚本侧按think和response做切分,闭合标签出现前的 token 不计入正式回复。

5.5 端口 11434 被占用,API 调不通

现象:curl 调localhost:11434报连接失败,或者提示端口已被占用。原因:本机已有其他服务占了 11434,或者 ollama 服务没起。解决:先ollama list确认服务活着,再用ss -lntp | grep 11434(Linux)或netstat -ano | findstr 11434(Windows)看占用进程。确实冲突的话,用OLLAMA_HOST=0.0.0.0:11435 ollama serve换端口启动,调用方同步改地址。

6. 装完怎么验证跑通:三条命令和一张对照表

验证这件事,我一般分三层:模型在不在、对话通不通、接口能不能被程序调。三层都过,才算这套环境真的可用,而不是「命令没报错」。

第一层看模型清单。执行ollama list,输出里要有你拉的 tag,SIZE 列和你预期的量化体积对得上。如果列表为空,说明OLLAMA_MODELS指到了新目录但模型还在旧目录,或者 pull 根本没成功,回到 3.2 节重拉。

第二层跑一次可验证的对话。别问「介绍一下你自己」这种没有标准答案的问题,问一个能对答案的:

# 用非交互方式跑一次,方便脚本判断 ollama run deepseek-r1:1.5b "1 加 1 等于几?先思考再回答"

预期输出里先出现think段,再出现 ,最后给出「2」。思考段可以绕,但最终答案必须对。这一步过不了,通常是模型加载不完整或者量化档位太低,换 tag 重试。

第三层走 API。用 3.3 节的 curl 命令调一次,检查返回 JSON 里response非空、done为true。如果要在程序里接,再加一个流式调用的用例,确认 token 是逐段推出来的。三层验证的对照表如下:

验证项命令通过标准不通过先看什么
模型在位ollama list有目标 tag,SIZE 合理模型目录、pull 日志
对话可用ollama run提可验证问题思考段闭合,答案正确内存占用、tag 档位
接口可用curl 调/api/generateresponse非空、done为 true端口、服务状态
资源正常top或任务管理器内存不持续飙高模型是否过大

最后说一个习惯。从那以后我每次装完 ollama,都先用 1.5b 跑一遍上面这张表,确认链路通了,再决定要不要上 7b 或 14b。这个冒烟测试只花两分钟,但能把「环境问题」和「模型太重」区分开,省掉大量瞎猜。装大模型这件事,慢就是快,先把小档位跑顺,后面的参数取舍才有参照。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进