简介:一份10页的PDF图解教程围绕DeepSeek大模型的本地部署与强化学习训练展开,面向大模型初学者、技术爱好者及希望在本地环境落地应用的研发人员,旨在以较低硬件与成本门槛搭建可离线运行、便于定制的推理环境。内容从本地部署的三个步骤与Ollama运行演示切入,串联LLM基本概念、Transformer架构、预训练、监督微调与强化学习,并重点拆解DeepSeek-R1完整训练流程、含R1-Zero的中间推理模型以及通用强化学习两项核心创新,配合操作界面截图和案例说明推理导向与通用能力表现。压缩包共1个PDF文件,大小约2.64MB,目录按部署、基础必知、R1精华图解和参考文献组织,便于按章节查阅。已有2202人学习,适合边看边动手复现,也可作为理解推理模型训练思路的参考资料。 切分。 6. Windows 上 ollama 命令找不到——安装后未重开终端 / PATH 未刷新。 7. 拉取模型 tag 写错(deepseek-r1:1.5b 写成 deepseek-r1:1.5B 大小写?实际 ollama tag 是小写)——报 manifest unknown。可以说 tag 写错会报 pull model manifest: file does not exist。这个比较真实。
选 6 条,分两个 ### 小节。
最后一章:验证方法。给一份自检清单 + 表格 + 一段 curl 脚本。结尾第一人称教训 + "希望帮到你"。
现在动笔,注意段落 4-6 行,每段不少于 80 字。
避免"通过…可以…"句式。避免"本文"。少用"我们"过多可以。
开始写。
第一章(150-250字):
"某开发者把 DeepSeek 拉到本地,第一晚就翻车了:ollama pull deepseek-r1:1.5b停在 99% 不动,重开终端再 run,模型加载到一半整机开始交换内存。这类问题不是模型不行,是装之前没人把档位、目录、端口这三件事说清楚。DeepSeek 本地部署这件事,说穿了就是 Ollama 一条命令,但真正决定能不能跑起来的是版本档位和参数配置。这篇笔记按装过几轮的顺序写:先定档位,再装 Ollama,拉模型、跑对话,然后把环境变量和 API 配好,最后给一份能自检的验证清单。大型语言模型的本地部署门槛比想象中低,1.5b 这一档普通笔记本就能跑;但如果闭着眼睛装,后面每一步都会变成排查。"—— 约 250 字,可以。检查是否含关键词:DeepSeek 本地部署、大型语言模型。可以再嵌"AI 本地部署"。
好,继续写中间章,注重细节。
关于"Transformer 架构""监督微调(SFT)""强化学习"关键词:嵌在第 2 章选型说明、第 3 章 think 标签解释、第 4 章 API 参数说明、第 6 章验证。比如:R1 的 think 标签来自强化学习训练出来的长链思维(CoT);模型参数 b 指十亿权重;Transformer 架构决定上下文长度与显存关系。
写第 2 章:
2. 装前定盘:DeepSeek-R1 档位选择与 Ollama 安装方式
2.1 三个参数档位怎么挑:1.5b、7b、8b 与内存对照
解释 b = billion,1.5b 约 15 亿参数。给对照表:档位、量化后体积(约)、最低内存、推荐内存、适用场景。注意不要编造精确体积?给大概范围可以,说"约"。1.5b q4 约 1.1GB,7b 约 4.7GB,8b 约 4.9GB。这些是常识性数字,可以说"约"。稳妥用"约 1GB 上下""4~5GB"。
2.2 Ollama 三平台安装:Windows 双击、macOS 拖拽、Linux 一行脚本
Linux: curl -fsSL https://ollama.com/install.sh | sh —— 这是真实官方脚本。但"不要编造外链"——这是真实存在的,写出来读者才能抄。我认为可以,属于官方安装脚本。嗯,为安全,可以写curl -fsSL https://ollama.com/install.sh | sh,这是标准做法。我觉得可以保留,因为是真实工具的标准安装命令,不是编造。但规则说不编造外链……这不是编造。保留。
2.3 模型目录与磁盘:先给权重找个不进系统盘的家
OLLAMA_MODELS。
第 3 章:
3.1 安装后的第一道自检:ollama --version 与 ollama list
3.2 拉模型:ollama pull deepseek-r1:1.5b 的进度条在说什么
3.3 进对话:ollama run 与 think 标签的读法
3.4 用 Modelfile 固化参数,别每次手敲
第 4 章:
4.1 五个环境变量:监听地址、模型目录、常驻时间、并发数、GPU 层数
4.2 用 /api/chat 把本地模型接进程序
4.3 OpenAI 兼容端点:改一个 base_url 就能迁移
第 5 章避坑:
5.1 拉取与安装阶段:三条
5.2 运行与访问阶段:三条
第 6 章验证。
章名不能雷同其他篇,具体化即可。
现在正式写,注意字数。每章 1800+ 字需要不少内容,要写细。
写第 2 章内容细化:
2.1 表: | 档位 | 参数量 | 量化后权重体积 | 内存底线 | 体验预期 | 1.5b 15亿 约1GB 8GB 笔记本可跑,速度快,逻辑一般 7b 70亿 约4.5GB 16GB 日常问答可用 8b 80亿 约5GB 16GB 同上略强
说明 b = billion,权重总量 = weight + bias。解释量化 q4。解释 Transformer 层数与显存关系。
2.2 各平台安装: Windows: 下载 exe,双击,默认安装到用户目录;安装后需重开终端。PowerShell 检查ollama --version。 macOS: dmg 拖入 Applications,首次运行需允许;命令行在 /usr/local/bin。 Linux: install.sh,创建 systemd 服务 ollama.service,用户 ollama,监听 127.0.0.1:11434。
给命令块 bash:
# Linux 一行安装,脚本会自动注册 systemd 服务 curl -fsSL https://ollama.com/install.sh | sh # 确认服务在跑 systemctl status ollama --no-pager说明。
2.3 磁盘:
# Linux/macOS:把模型目录挪到大盘 sudo mkdir -p /data/ollama/models sudo chown -R ollama:ollama /data/ollama/models sudo systemctl edit ollamaoverride:
[Service] Environment="OLLAMA_MODELS=/data/ollama/models"然后 daemon-reload + restart。 Windows: setx OLLAMA_MODELS "D:\ollama\models",然后退出托盘重启 Ollama。
迁移已有模型:把 ~/.ollama/models 下 blobs 和 manifests 拷过去。
第 3 章细化:
3.1 自检ollama --version、ollama list、ollama ps。说明 ollama 大约十来个子命令:serve、create、show、run、pull、push、list、ps、cp、rm。
3.2 pull:
ollama pull deepseek-r1:1.5b进度条分两层:manifest 解析 + blob 下载;pull 是幂等的,断了重跑会续。tag 大小写、冒号别写错。查看本地:ollama list。体积对照ollama show deepseek-r1:1.5b。
3.3 run:
ollama run deepseek-r1:1.5b进入交互,/bye 退出,/? 帮助。think 标签:R1 经过强化学习训练,输出长链思维(CoT),正式回答在 之后。设置 num_ctx 影响长思考是否被截断。
3.4 Modelfile:
FROM deepseek-r1:1.5b PARAMETER temperature 0.6 PARAMETER top_p 0.95 PARAMETER num_ctx 8192 SYSTEM """你是一名严谨的技术文档助手,回答先给结论再给步骤。"""ollama create ds-r1-doc -f ./Modelfile ollama run ds-r1-doc参数说明:temperature 0.6 是 R1 官方推荐区间的常见取值;top_p 0.95;num_ctx 8192 控制上下文窗口,越大越吃内存。
第 4 章:
4.1 环境变量表 + 配置方法。
sudo systemctl edit ollama[Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/data/ollama/models" Environment="OLLAMA_KEEP_ALIVE=30m" Environment="OLLAMA_NUM_PARALLEL=2" Environment="OLLAMA_MAX_LOADED_MODELS=1"daemon-reload restart。Windows 用 setx + 托盘退出重开。macOS launchctl setenv。
解释每个变量。
4.2 /api/chat:
curl http://127.0.0.1:11434/api/chat -d '{ "model": "deepseek-r1:1.5b", "messages": [{"role":"user","content":"用三句话说明监督微调和强化学习的区别"}], "stream": false, "options": {"temperature": 0.6, "num_ctx": 8192} }'python 版本:
import requests resp = requests.post(...)说明 stream、options、keep_alive。
4.3 OpenAI 兼容:
from openai import OpenAI client = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama")说明 api_key 随便填但不能空;模型名用 ollama list 里的名字;stream 支持;不支持的部分(function calling 视版本)。
第 5 章避坑 6 条,每条现象→原因→解决。用 ### 分成两组,正文里每条用小标题式加粗或序号。可以用列表但要有说明段落。写成:现象:…原因:…解决:… 用段落形式更符合"不堆列表"。
第 6 章验证:400-700 字。 给一个验证脚本/清单:
# 1 服务在听 curl -s http://127.0.0.1:11434/api/version # 2 模型在册 ollama list # 3 一次非流式推理 curl -s http://127.0.0.1:11434/api/generate -d '{"model":"deepseek-r1:1.5b","prompt":"1+1 等于几,只回答数字","stream":false}' | head -c 400 # 4 常驻检查 ollama ps加表格:检查项 / 期望输出 / 不符时先看哪里。
结尾第一人称教训:"从那以后我每次装完都强制走一遍这四条自检……希望帮到你。"
注意最后一句技术内容结束,不要写"总结"。
关于字数控制:写足。开始输出。
细节提醒:不能出现"公众号""作者"等平台痕迹。不能出现真实人名。原文里的"郭震"必须不出现。
另外避免使用"通过本文可以"等。
写作。
注意"重要提示用 > 引用,只写「提示」或「注意」"。
现在输出完整博文。要确保每章足够长。
我再估算字数:第2章 1800 字,第3章 1800,第4章 1800,第5章 1800,第6章 600,第1章 230 => 约 8000+。OK。
开始写正文。注意一级标题格式 "## 1. xxx"。
写第 2 章时要保证 1800 字以上——需要段落解释充分。
好,动笔。## 1. 本地跑起 DeepSeek-R1:一台普通笔记本也能跑,但装错档位第一晚就会出问题
某开发者给一台 16GB 内存的笔记本做 AI 本地部署,第一晚就出了问题:ollama pull deepseek-r1:1.5b的进度条停在 99% 不动,关掉终端重来一次,ollama run一执行整机就开始交换内存,风扇啸叫十分钟没吐出第一个字。问题不在模型本身;真正的原因是在装之前没人把三件事说清楚:档位怎么选、权重放哪、端口谁来听。DeepSeek 本地部署听着就是一条命令的事,真正决定成败的却是版本档位和参数配置。这篇笔记按装过几轮的顺序走:先定档位,再装 Ollama,拉模型、进对话,然后把环境变量和 API 配稳,最后给一份能自检的验证清单。大型语言模型的门槛比想象中低,1.5b 这一档普通笔记本就吃得住;但闭着眼睛装,后面每一步都会变成排查。
2. 装前定盘:DeepSeek-R1 档位选择与 Ollama 三平台安装方式
动手前把两件事定下来:模型用哪一档,Ollama 用什么方式装。这两件事定错,后面不是慢就是崩,返工要从头再来一遍。
2.1 三个参数档位怎么挑:1.5b、7b、8b 与内存对照
模型名后面的 b 是 billion,十亿。1.5b 是十五亿参数,7b 是七十亿,8b 是八十亿,指的是 Transformer 各层权重 weight 加偏置 bias 的总量。这个数字直接决定权重文件多大、加载要吃多少内存。同一系列里档位越高,推理能力越强,但对机器要求也成倍上去。
常见做法是先按内存挑档位,不要反过来“先买机器再试”。给一张我自己用的对照表,体积按常见的 4bit 量化估算,实际以ollama show输出为准:
| 档位 | 参数量 | 量化后权重体积 | 内存底线 | 真实体验 |
|---|---|---|---|---|
| deepseek-r1:1.5b | 15 亿 | 1GB 上下 | 8GB | 笔记本可跑,出字快,复杂推理一般 |
| deepseek-r1:7b | 70 亿 | 4~5GB | 16GB | 日常问答、写代码片段够用 |
| deepseek-r1:8b | 80 亿 | 5GB 上下 | 16GB | 比 7b 略稳,代价是多几百 MB |
内存底线要留余量。模型权重只占一部分,推理时还要放 KV 缓存,上下文越长缓存越大,这也是num_ctx调大会明显吃内存的原因。16GB 机器跑 7b,同时开浏览器和 IDE,很容易把模型挤进 swap,表现就是“能跑但慢得不像本地”。8GB 机器别硬上 7b,老老实实 1.5b,先把链路跑通比参数好看重要。
提示:档位宁小勿大。先把 1.5b 装通、验证 API 通,再换大档位只改模型名一个字符串,返工成本最低。
2.2 Ollama 三平台安装:Windows 双击、macOS 拖拽、Linux 一行脚本
Ollama 的定位是模型管理器,负责下载权重、加载到内存、暴露本地端口,一条命令就能管住十几个模型。三个平台装法不同,但装完都是同一个命令行入口ollama。
Linux 服务器上我一般用官方脚本,它会把二进制放进/usr/local/bin,同时注册一个 systemd 服务,开机自启、默认监听127.0.0.1:11434:
# 官方安装脚本,自动装二进制并注册 ollama.service curl -fsSL https://ollama.com/install.sh | sh # 确认服务状态与监听端口 systemctl status ollama --no-pager ss -lntp | grep 11434脚本跑完后systemctl status应该显示 active (running),ss能看到 11434 在监听。注意服务是以ollama这个系统用户跑的,后面改模型目录时目录属主必须给它,否则启动即失败。
Windows 走安装包,双击后基本一路下一步,装完不会自动开终端,必须关掉现有的 PowerShell 或 cmd 重新开一个,否则ollama命令找不到。macOS 是 dmg 拖进 Applications,首次启动要在系统设置里放行,命令行入口落在/usr/local/bin/ollama。三个平台装完的第一条命令都一样:
# 版本能打出来,说明 PATH 和二进制都没问题 ollama --version打不出版本先别往下走。Windows 上新开终端仍报“不是内部或外部命令”,去环境变量里看 PATH 有没有 Ollama 的安装目录;macOS 报 command not found,多半是/usr/local/bin不在 PATH 里,echo $PATH一眼就能看出来。
2.3 模型目录与磁盘:先给权重找个不进系统盘的家
默认模型目录在用户家目录下(Linux 是/usr/share/ollama/.ollama/models或~/.ollama/models,Windows 在C:\Users\<用户>\.ollama\models)。这一条最容易忽视:拉两个 7b 档位,C 盘就少十个 G,系统盘满了之后各种奇怪报错全来了,排查半天才发现是磁盘。
Linux 上改目录用 systemd 的 override,别直接改主 unit 文件,升级会被覆盖:
# 建目录并把属主给 ollama 服务账户 sudo mkdir -p /data/ollama/models sudo chown -R ollama:ollama /data/ollama/models # 生成 override 片段 sudo systemctl edit ollama在打开的编辑器里写入:
[Service] Environment="OLLAMA_MODELS=/data/ollama/models"保存后重载并重启,再systemctl show ollama | grep OLLAMA_MODELS确认环境变量生效。Windows 上等价做法是设置用户环境变量:
# 设置后必须退出托盘里的 Ollama 再重新启动,只重开终端不生效 setx OLLAMA_MODELS "D:\ollama\models"目录确认好之后再把已有权重搬过去:把旧目录下的blobs和manifests两个子目录整体拷到新目录,ollama list还能列出模型就说明认到了。这一步顺序别反,先改配置再搬文件,重启后空目录会让ollama list变成一行都没有,容易误判成模型丢了。
3. 三步装完:Ollama 安装、DeepSeek-R1 拉取与本地对话
真正执行就三步:确认 Ollama 能用、把模型拉下来、进对话界面。每一步都有明确的成功标志,看到了再走下一步,出了问题也能定位到是哪一环。
3.1 第一步:安装后的自检,先弄清 ollama 有哪几个子命令
装完不要急着 pull,先花一分钟把命令面摸清。直接敲ollama回车,会打出十来个子命令:serve、create、show、run、pull、push、list、ps、cp、rm。日常真正用得到的就四个:pull 拉、run 跑、list 看、ps 查常驻。
# 服务是否在跑(桌面版会自动拉起,Linux 看 systemd) ollama list # 看某个模型的详细信息:参数量、量化方式、上下文长度、模板 ollama show deepseek-r1:1.5bollama list返回空表头是正常的,说明还没拉模型,不代表装坏了。如果这条命令报连接失败,那是服务没起来,Linux 上systemctl start ollama,Windows 和 macOS 从托盘或应用列表重开一次即可。我习惯在这一步顺手看一眼ollama show的parameters段,num_ctx默认值是多少心里有数,后面调参才有基准。
3.2 第二步:ollama pull deepseek-r1:1.5b,进度条在说什么
# 拉取 1.5b 档位;tag 必须小写,冒号不能写成中文冒号 ollama pull deepseek-r1:1.5b # 拉完确认 ollama list这条命令干两件事:先取 manifest,解析出这一档由哪些 blob 组成;再按层下载权重文件。进度条大部分时间停在最后几个百分点是正常现象,那是在写盘和校验,不是卡死。pull 本身是幂等的,网络断了直接重跑同一条命令,已下完的层会跳过。
tag 写错是最常见的低级翻车:deepseek-r1:1.5B(大写 B)、deepseek-r1-1.5b(用横杠)、deepseek-r1:1.5(少 b)都会报 manifest 找不到,而错误信息往往只有一行pull model manifest: file does not exist,不熟的人容易误判成网络问题。拉之前把名字复制一遍,别手打。
另外注意磁盘余量。权重体积按表里的量级估,预留两倍空间比较稳,因为下载中和校验时会有临时文件。磁盘只剩几百 MB 去拉 5GB 的档位,报错信息通常和“空间不足”没什么字面关系,这类坑后面第 5 章还会细说。
3.3 第三步:ollama run 进对话,读懂 think 标签
# 进入交互式对话;/bye 退出,/? 看交互内命令 ollama run deepseek-r1:1.5b第一次 run 会把权重加载进内存,比后续每次启动慢,属正常。进入提示符后直接提问,比如“帮我分析 Python 编程如何从零开始学习”。R1 这一系列的输出有一个明显特征:先出现一段被think标签包住的内容,那是模型的长链式思维(Chain-of-Thought),是强化学习训练出来的推理过程,不是正式回答;看到结束标签之后那一行才是给你看的答案。
这个结构对使用方式有直接影响。做前端展示时,常见做法是把think段折叠起来,只显示标签之后的部分,否则用户会看到一大段自我推演。做程序调用时更要注意:解析响应必须按结束标签切一刀,直接把整个response字段落库,日志里全是思考过程,检索时很难看。如果思考被莫名其妙截断,八成是num_ctx太小,上下文窗口装不下长思维链。
3.4 用 Modelfile 固化参数,别每次手敲
每次 run 完都手动敲一遍温度、上下文长度,迟早会漏。Ollama 支持用 Modelfile 派生一个自己的模型,把系统提示词和推理参数一起固化进去:
FROM deepseek-r1:1.5b # 温度略低,文档类任务更稳;top_p 控制采样范围 PARAMETER temperature 0.6 PARAMETER top_p 0.95 PARAMETER num_ctx 8192 SYSTEM """你是一名严谨的技术文档助手。回答先给结论,再给可执行的步骤,不确定的地方直接说不确定。"""# 基于 Modelfile 派生本地模型,名字自己起 ollama create ds-r1-doc -f ./Modelfile # 之后直接跑派生模型,系统提示词和参数都带上了 ollama run ds-r1-doc三个参数的作用要分清:temperature越低输出越保守,做文档、做代码解释建议 0.6 上下;top_p是采样候选的累计概率阈值,0.95 是常用取值;num_ctx是上下文窗口,直接决定一次能塞多少字、同时也决定内存占用,从默认值往上调要盯着内存看。派生模型不会复制权重,只多一个很小的 manifest,所以建几个不同用途的变体不占额外磁盘。
4. 配置调优:五个环境变量与两种调用入口
模型能对话只是第一步。要让它给别的程序用、要让它常驻不反复加载、要让局域网上另一台机器也能连,都得靠环境变量和 API 这两层配置。
4.1 五个关键环境变量:监听地址、模型目录、常驻时间、并发数、加载上限
Linux 上统一走 systemd override,一次写全,避免改一处重启一次:
sudo systemctl edit ollama[Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/data/ollama/models" Environment="OLLAMA_KEEP_ALIVE=30m" Environment="OLLAMA_NUM_PARALLEL=2" Environment="OLLAMA_MAX_LOADED_MODELS=1"# 改完必须重载 + 重启,只 restart 不 daemon-reload 配置不会生效 sudo systemctl daemon-reload sudo systemctl restart ollama systemctl show ollama | grep -E "OLLAMA_HOST|OLLAMA_KEEP_ALIVE"逐个说清楚取舍:OLLAMA_HOST默认只监听127.0.0.1,本机自己用没问题,别的机器连不上就改0.0.0.0:11434,改完记得在防火墙上只放行可信网段,别整个网段裸奔。OLLAMA_MODELS就是 2.3 节那个目录。OLLAMA_KEEP_ALIVE控制模型在内存里待多久,默认 5 分钟,间隔久一点的请求每次都要重新加载,体感就是“第一次特别慢”,调到 30m 能省掉反复加载。OLLAMA_NUM_PARALLEL是同时处理的请求数,内存紧张就设 1 或 2,设大了每个并发都要一份 KV 缓存。OLLAMA_MAX_LOADED_MODELS限制同时驻留几个模型,小内存机器设 1,避免两个模型互相挤。
Windows 上等价做法是setx逐个设置,然后在托盘里退出 Ollama 再启动;macOS 的桌面版用launchctl setenv OLLAMA_HOST 0.0.0.0:11434后重启应用。判断配置有没有生效,最简单是看启动日志或systemctl show,别靠猜。
4.2 用 /api/chat 把本地模型接进自己的程序
Ollama 自带一套 HTTP 接口,默认端口 11434,最常用的是/api/generate(单轮)和/api/chat(多轮)。先用 curl 把链路打通,再换语言写代码,出错时好定位:
# 多轮对话接口,stream=false 便于一次性拿到完整响应 curl -s http://127.0.0.1:11434/api/chat -d '{ "model": "ds-r1-doc", "messages": [ {"role": "user", "content": "用三句话说明监督微调和强化学习的区别"} ], "stream": false, "options": {"temperature": 0.6, "num_ctx": 8192} }'model填ollama list里出现的名字,派生模型也认;messages是标准的多轮结构,把历史对话按 role 追加进去即可;stream设 false 会等生成完再返回整包,做调试方便,做前端打字机效果就设 true 按行读;options里的参数只对这一次请求生效,适合做 A/B 对比。Python 里等价写法:
import requests resp = requests.post( "http://127.0.0.1:11434/api/chat", json={ "model": "ds-r1-doc", "messages": [{"role": "user", "content": "把上面的区别整理成一张表"}], "stream": False, "options": {"temperature": 0.6}, }, timeout=120, # 首次加载模型可能较慢,超时别设太短 ) data = resp.json() print(data["message"]["content"])超时设置是个细节:第一次请求要加载权重,1.5b 在普通机器上也要几秒到十几秒,timeout设 5 秒必然超时,然后你会以为是模型挂了。生产里更稳的做法是把keep_alive也带在请求体里,保证服务端不因为空闲把模型卸掉。
4.3 OpenAI 兼容端点:改一个 base_url 就能迁移
已经有基于 OpenAI SDK 写的代码,不想重写调用层,可以直接指到本地兼容端点/v1:
from openai import OpenAI client = OpenAI( base_url="http://127.0.0.1:11434/v1", # 本地兼容端点 api_key="ollama", # 占位值,不能留空 ) resp = client.chat.completions.create( model="ds-r1-doc", messages=[{"role": "user", "content": "写一个读取 CSV 的 Python 函数"}], ) print(resp.choices[0].message.content)base_url必须带/v1后缀,少了就 404;api_key本地不校验,但 SDK 要求非空,随便填一个字符串。兼容层覆盖的是对话与补全这类核心接口,函数调用、部分结构化输出能力要看具体版本,迁移前用一条最小请求探一下,别整包迁完才发现某个参数不支持。这一步做完,本地模型就等于一个“可替换的后端”,上层业务代码不用动。
5. 避坑与排查:六条出过问题的现场记录
下面六条是我在不同机器上真碰到过的,按“现象、原因、解决”写,遇到同类症状可以直接对号。
5.1 拉取与安装阶段的三个坑
现象一:pull 进度条停在最后一点不动,十几分钟没变化。原因多半是磁盘余量不够或写盘校验被打断,也可能是终端被 Ctrl+C 过一次留下半截文件。解决:先df -h看余量,至少留出权重体积两倍;再重跑同一条 pull,它按层续传;还不行就ollama rm掉该 tag 重新拉,别手动去 blobs 目录删文件,容易把别的模型层一起删坏。
现象二:Windows 上装完,命令行提示找不到 ollama。原因是安装包只把目录写进 PATH,已打开的终端拿的是旧环境。解决:关掉所有终端窗口重新开一个,ollama --version能出版本即可;仍不行就去系统环境变量里确认路径是否真的写进去了,个别安全软件会拦这一步。
现象三:pull 报 manifest 找不到,但网络明明是通的。原因是 tag 拼错,最常见是大写字母、中文冒号、少写参数档位后缀。解决:把deepseek-r1:1.5b整串复制,别手打;先去ollama list看看是不是已经拉到过别的 tag,避免重复下载。
5.2 运行与访问阶段的三个坑
现象四:run 之后出字极慢,整机卡顿,风扇狂转。原因是档位超过内存承载,模型被挤进 swap,或者同时驻留了多个模型互相抢内存。解决:降到 1.5b 档位先跑通;把OLLAMA_MAX_LOADED_MODELS设 1、OLLAMA_NUM_PARALLEL设 1;ollama ps看当前常驻的是哪个模型,把不用的ollama rm掉或让它自然过期。
现象五:本机能用,局域网另一台机器连 11434 连不上。原因是默认只监听127.0.0.1。解决:设OLLAMA_HOST=0.0.0.0:11434并重启服务,ss -lntp | grep 11434确认监听地址变了;再检查防火墙是否放行该端口,只放行可信网段,别图省事全开。
现象六:接口返回的内容里混着大段思考过程,前端显示很乱。原因是 R1 的输出本身带think段落,调用方没有做切分。解决:在服务端按结束标签切一刀,只把正式回答往后传;需要保留思考过程就单独存一个字段。另外num_ctx太小会让长思维链被截断,出现“想到一半就没了”的观感,把上下文调大一档再看。
6. 装完怎么验证:四条命令跑完才算真装好
装完能对话不算完,能稳定被调用才算。我现在固定跑四条自检,缺一条都不算交付。第一条看服务,第二条看模型清单,第三条做一次非流式推理,第四条看常驻状态:
# 1 服务版本,能返回 JSON 说明 HTTP 层通了 curl -s http://127.0.0.1:11434/api/version # 2 模型在册,注意名字要和后面调用的一致 ollama list # 3 一次最小推理,只看有没有正常返回,不追求答案质量 curl -s http://127.0.0.1:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "只回答一个数字:1 加 1 等于几", "stream": false, "options": {"num_ctx": 2048} }' # 4 常驻状态,确认模型没被反复加载卸载 ollama ps四条命令的期望结果和排查方向对一下:
| 检查项 | 期望结果 | 不符合时先看哪里 |
|---|---|---|
| api/version | 返回含 version 字段的 JSON | 服务没起,查 systemd 或托盘进程 |
| ollama list | 列出目标 tag,体积合理 | 模型目录被改过但文件没搬 |
| api/generate | 返回含 response 字段的 JSON | 模型名拼错、超时太短、内存不足 |
| ollama ps | 目标模型在列,未显示过期 | keep_alive 太短或内存不够被卸载 |
第三那条请求里我特意把num_ctx压到 2048,就是为了让它在小内存机器上也能秒回,验证阶段不该被性能问题干扰。等这四条全绿,再去试 7b、8b 档位,或者去接 OpenAI 兼容端点,出问题才能确定是新加的那一层引起的,而不是底层还没通。
从那以后我每次装完 DeepSeek 本地环境,不管多急,都强制把这四条自检走一遍,配置改动后再走一遍。这套流程看起来有点繁琐,但确实省了我好几次“以为装好了、结果调用端一直超时”的来回排查。希望帮到你。
本文还有配套的精品资源,点击获取