资讯动态

Win11 本地部署 DeepSeek-R1:Ollama 离线推理与 API 调用实战

发布时间:2026/10/16 9:56:18 来源:尧图企业网站定制
简介这份PDF指南面向希望在Windows 11上本地运行大模型的开发者与AI爱好者聚焦DeepSeek-R1的Ollama部署全流程帮助读者摆脱云端依赖、兼顾数据隐私与响应速度。资源包共1个PDF文件大小约264KB内容涵盖硬件与软件准备、Ollama安装与服务启动、模型拉取与验证、命令行交互、REST API调用及Modelfile参数自定义等模块并附常见问题排查思路。读者可据此对照检查CPU、GPU、内存与磁盘配置掌握ollama serve、pull、list、run等核心命令还能通过Python示例代码将模型接入自有程序调整temperature与top_p等参数优化输出效果。目前已有4338人学习下载适合具备基础命令行操作能力、想快速完成本地部署并体验智能交互的读者参考。1. 为什么我宁愿在 Win11 上本地跑 DeepSeek-R1也不愿再等云端排队上周帮一个做工业质检的朋友调模型他们车间那台 Win11 工作站断网是常态但质检报告又必须用大模型做语义归档。他问我有没有办法把 DeepSeek-R1 塞进本地不依赖任何在线服务我直接把这份《Win11 使用 Ollama 本地部署 DeepSeek-R1 详细指南.pdf》甩给了他半小时后他跑通了第一条推理。这份指南解决的核心问题很具体在 Windows 11 上用 Ollama 把 DeepSeek-R1 完整落到本地从硬件门槛、服务启动、模型拉取到 REST API 调用和 Modelfile 参数定制全流程覆盖。它适合三类人一是数据不能出内网的从业者二是想拿 DeepSeek-R1 做离线批量推理的开发者三是单纯想省掉云端 API 调用成本、把模型当本地工具用的技术人。指南本身是 PDF 文档但里面的命令和代码可以直接抄作业我下面会把每一步拆开讲透包括原文没展开的坑。2. 硬件与软件前置别急着敲命令先对一遍这张清单2.1 硬件门槛的真实含义16GB 内存只是入场券指南里写的硬件要求看起来像常规推荐但实际跑起来每条都有隐藏含义。CPU 建议 i7 或 Ryzen 7 以上多核确实能加速推理但 DeepSeek-R1 的瓶颈通常不在 CPU 核数而在内存带宽和 GPU 显存。如果你只有核显模型会完全跑在 CPU 内存上响应速度大概在每秒几个 token能跑但体验一般。GPU 部分指南提到 NVIDIA RTX 30 系列或更高带 CUDA 支持。这里有个关键点原文没展开Ollama 在 Windows 上对 NVIDIA GPU 的支持依赖 CUDA 驱动驱动版本太老会导致 Ollama 回退到 CPU 模式你甚至不会收到明显报错只是发现推理特别慢。我一般会先跑nvidia-smi确认驱动正常再装 Ollama。内存 16GB 是底线32GB 才舒服。DeepSeek-R1 的 7B 量化版本加载后大概占 5-8GB 内存加上系统和其他进程16GB 机器会频繁触发内存交换硬盘灯狂闪。存储 20GB 以上SSD 是必须的机械硬盘加载模型的时间够你泡杯咖啡。硬件项指南建议实际体验补充CPUi7 / Ryzen 7 及以上核数影响不大单核性能决定首 token 延迟GPURTX 30 系 CUDA驱动版本需 ≥ 某版本否则静默回退 CPU内存16GB 起步32GB 更佳16GB 跑 7B 量化版会吃紧建议关掉浏览器存储20GB SSD模型文件实际占用约 4-8GB但缓存和交换需要余量2.2 软件准备Ollama 安装包选对版本少走两小时弯路从 Ollama 官网下载 Windows 安装包双击按向导走。安装路径默认在 C 盘用户目录下如果你 C 盘空间紧张可以在安装时自定义到其他盘。安装完成后Ollama 会自动注册为系统服务但指南里让你手动执行ollama serve这一步其实有讲究。在 Win11 上Ollama 安装后默认已经后台运行了一个服务实例。如果你再手动ollama serve会报端口 11434 被占用。正确做法是先打开 PowerShell 跑ollama list如果能正常输出哪怕列表为空说明服务已经在跑了不需要再手动 serve。只有当你明确停掉了服务或者想用自定义参数启动时才需要手动执行。# 检查 Ollama 服务是否已在运行 ollama list # 如果输出类似 Error: could not connect to ollama server再手动启动 ollama serve上面这段逻辑说明ollama list是探测服务状态最轻量的方式。参数方面没有额外配置但要注意 PowerShell 和 CMD 的差异——PowerShell 里路径带空格的命令需要引号CMD 不需要。我一般统一用 PowerShell因为后续跑 Python 脚本更方便。提示安装完 Ollama 后先重启一次终端让环境变量生效否则可能遇到ollama命令找不到的情况。3. 拉取与运行 DeepSeek-R1命令背后的参数与验证逻辑3.1 ollama pull 到底拉了什么模型标签与量化版本指南里写的ollama pull deepseek-r1是最简形式但 Ollama 的模型库支持标签tag不同标签对应不同量化精度和文件大小。默认拉取的是最新版通常是 4-bit 量化文件大小在 4-8GB 之间。如果你显存或内存有限可以指定更小的量化版本比如deepseek-r1:7b或deepseek-r1:1.5b。# 拉取默认版本通常是 7B 4-bit 量化 ollama pull deepseek-r1 # 拉取指定参数量的版本适合低配机器 ollama pull deepseek-r1:1.5b # 拉取完成后查看本地模型列表确认标签和大小 ollama list逻辑说明ollama pull会从模型库下载分层文件支持断点续传。如果你中途 CtrlC下次重新执行会接着下不会从头开始。参数方面模型名后面的:tag决定了参数量和量化方式1.5b适合 8GB 内存的机器7b是平衡点更大的版本在 Win11 消费级硬件上基本跑不动。拉取过程中进度条会显示每一层的下载状态。如果卡在某一层不动常见原因是网络波动可以 CtrlC 后重新执行Ollama 会从断点继续。拉完后ollama list会显示模型名称、ID、大小和修改时间确认大小和预期一致再往下走。3.2 运行与交互命令行里的提示词工程ollama run deepseek-r1 你的问题是最直接的交互方式。但这里有个细节如果你不带问题直接ollama run deepseek-r1会进入交互式会话可以连续对话输入/bye退出。带问题参数则是一次性推理输出完就结束。# 一次性提问适合脚本调用 ollama run deepseek-r1 用一句话解释什么是量化 # 进入交互式会话适合调试提示词 ollama run deepseek-r1逻辑说明一次性提问模式下Ollama 会把问题作为 prompt 传给模型生成完回复后进程退出。交互式模式则保持会话上下文适合多轮对话。参数方面你可以在提问时通过--format json让输出结构化但 DeepSeek-R1 本身对 JSON 格式的遵循度一般需要配合提示词约束。实际跑的时候首次加载模型会慢一些因为要把模型文件从磁盘读进内存。后续推理如果服务没停模型会常驻内存响应会快很多。如果你发现每次提问都像第一次那么慢检查一下是不是每次都在重新启动服务。3.3 REST API 调用从命令行到 Python 脚本的跨越指南里给了一段 Python 代码用requests向http://localhost:11434/api/generate发 POST 请求。这段代码能跑但有几个参数值得展开。model字段必须和ollama list里的名称完全一致包括标签。prompt是输入文本。返回的 JSON 里response字段是模型输出但如果你需要流式输出得加stream: true然后逐行解析。import requests import json # 构造请求体 data { model: deepseek-r1, # 必须与 ollama list 中的名称一致 prompt: 介绍一下本地的优势, # 输入提示词 stream: False # False 为一次性返回True 为流式 } # 发送 POST 请求到本地 Ollama 服务 response requests.post( http://localhost:11434/api/generate, jsondata, timeout120 # 超时设长一点首次推理较慢 ) # 解析返回的 JSON提取 response 字段 result response.json() print(result[response])逻辑说明这段代码的核心是requests.post把 JSON 数据发给本地 11434 端口。timeout120是我加的因为首次推理可能超过默认超时。参数方面stream设为True时response会变成逐行 JSON需要循环读取response.iter_lines()并解析每一行的response字段。如果你要批量处理建议把stream设为False代码简单但内存占用略高。注意REST API 默认只监听 localhost外部机器访问不了。如果你需要局域网内其他机器调用得改 Ollama 的监听地址但这会带来安全风险不建议在不可信网络里这么做。4. Modelfile 定制与参数调优把 DeepSeek-R1 调成你的形状4.1 Modelfile 语法FROM、PARAMETER 与模板覆盖指南里给了一个最简单的 Modelfile只有FROM和两个PARAMETER。实际用起来Modelfile 还能覆盖系统提示词、停止符、模板格式。FROM指定基础模型PARAMETER设置推理参数SYSTEM可以注入系统级提示词TEMPLATE则完全自定义输入输出格式。# 基于 deepseek-r1 派生自定义模型 FROM deepseek-r1 # 设置温度控制输出随机性0.7 适合创意类任务 PARAMETER temperature 0.7 # 核采样范围0.8 表示只从概率最高的 80% token 中采样 PARAMETER top_p 0.8 # 系统提示词让模型默认以技术文档风格回答 SYSTEM 你是一个严谨的技术助手回答尽量给出可执行的步骤和参数说明。 # 停止符遇到这些字符串就停止生成 PARAMETER stop ### PARAMETER stop 用户逻辑说明FROM是必须的指定基础模型。PARAMETER可以写多行常用的还有num_ctx上下文窗口大小默认 2048可调到 4096 或更高、num_predict最大生成 token 数、repeat_penalty重复惩罚。SYSTEM会作为系统提示词拼接到每次对话前面影响模型风格。stop参数定义停止符模型生成到这些字符串就截断。构建命令是ollama create my-deepseek-r1-custom -f Modelfile其中my-deepseek-r1-custom是你给新模型起的名字。构建过程很快因为只是复制基础模型并附加配置不会重新下载权重。构建完后ollama run my-deepseek-r1-custom就能用自定义配置了。4.2 温度与 top_p 的配合别让模型变成复读机或疯子temperature和top_p是两个最容易调翻车的参数。温度越高输出越随机温度太低模型会变得保守甚至重复。top_p控制采样范围值越小候选 token 越少输出越确定。两者需要配合调单独调一个往往达不到预期。场景temperaturetop_p效果代码生成0.20.5输出稳定少幻觉技术问答0.50.7平衡准确性与灵活性创意写作0.90.9输出多样但可能跑偏批量分类0.10.3几乎确定性输出我一般会先用默认参数跑几条测试如果发现模型反复说同一句话先把repeat_penalty调到 1.1-1.2再把温度降 0.1。如果发现回答太死板把top_p提到 0.9温度提到 0.8。每次只调一个参数否则你分不清是哪个起了作用。4.3 上下文窗口与显存num_ctx 调大了会怎样num_ctx默认是 2048意味着模型只能记住最近 2048 个 token 的上下文。如果你要处理长文档需要调大比如 4096 或 8192。但调大num_ctx会显著增加显存和内存占用因为注意力机制的计算量随上下文长度平方增长。FROM deepseek-r1 PARAMETER num_ctx 4096 PARAMETER num_predict 512 PARAMETER temperature 0.6逻辑说明num_ctx 4096把上下文窗口翻倍适合长对话或文档摘要。num_predict 512限制单次生成最多 512 个 token防止模型无限输出。这两个参数在低配机器上要谨慎8GB 内存的机器跑 4096 上下文可能会触发内存不足。我一般会先用 2048 跑通再逐步往上加同时用任务管理器盯着内存占用。5. 避坑与排查那些指南没写但一定会遇到的问题5.1 拉取模型时卡在 99% 不动现象ollama pull进度条走到最后一点就不动了等十分钟也没反应。原因通常是模型文件的最后一层校验或写入被安全软件拦截或者磁盘空间不足导致写入失败。解决先检查磁盘剩余空间确保至少 10GB 以上然后临时关闭 Windows Defender 的实时保护重新执行 pull。如果还是卡住删掉模型缓存目录默认在C:\Users\你的用户名\.ollama\models下的临时文件再重试。5.2 ollama run 报错 “model not found” 但 list 里明明有现象ollama list能看到deepseek-r1但ollama run deepseek-r1提示找不到模型。原因通常是你拉取的模型带了标签比如deepseek-r1:7b但运行时只写了deepseek-r1Ollama 会去找默认标签找不到就报错。解决用ollama list确认完整名称运行时带上标签比如ollama run deepseek-r1:7b。或者用ollama cp deepseek-r1:7b deepseek-r1复制一份不带标签的别名。5.3 REST API 返回空 response 或超时现象Python 脚本发请求后response.json()[response]是空字符串或者请求直接超时。原因可能是模型正在加载中首次请求需要等模型从磁盘读进内存时间可能超过 60 秒。另外如果prompt太长超过了num_ctx模型会截断输入导致输出异常。解决把timeout设到 180 秒以上检查prompt长度必要时调大num_ctx在请求前先跑一次ollama run确认模型能正常响应。5.4 GPU 没被用上推理速度跟核显一样现象明明有 NVIDIA 显卡但推理速度很慢任务管理器里 GPU 占用几乎为零。原因通常有两个一是 CUDA 驱动版本太旧Ollama 无法调用二是 Ollama 安装的是 CPU-only 版本。解决先更新 NVIDIA 驱动到最新版然后重新安装 Ollama 的 Windows 版官网默认包已包含 GPU 支持。安装后在 PowerShell 里跑ollama run deepseek-r1并观察任务管理器如果 GPU 显存占用上去了说明调用成功。5.5 端口 11434 被占用导致服务起不来现象执行ollama serve报错 “bind: address already in use”。原因是指南里让你手动 serve但 Ollama 安装后已经自动跑了一个后台服务。解决先跑ollama list如果能正常输出说明服务已经在跑不需要再手动 serve。如果确实需要手动启动先用netstat -ano | findstr :11434找到占用端口的进程 PID在任务管理器里结束它再重新 serve。或者修改 Ollama 的监听端口通过环境变量OLLAMA_HOST指定新端口。6. 把 DeepSeek-R1 接进你的工作流一个批量推理脚本的写法跑通单次对话只是开始真正省时间的是批量处理。我一般会写一个 Python 脚本读取本地文本文件逐条发给 Ollama把结果写回文件。这样可以把质检报告、日志摘要、文档分类这类重复劳动全部自动化。import requests import json import time def batch_infer(input_file, output_file, modeldeepseek-r1): 批量推理读取输入文件逐行发送给 Ollama结果写入输出文件 with open(input_file, r, encodingutf-8) as f: lines [line.strip() for line in f if line.strip()] results [] for i, line in enumerate(lines): data { model: model, prompt: f请用一句话总结以下内容{line}, stream: False } try: resp requests.post( http://localhost:11434/api/generate, jsondata, timeout180 ) answer resp.json().get(response, ).strip() except Exception as e: answer f[推理失败] {e} results.append(answer) print(f已完成 {i1}/{len(lines)}) time.sleep(0.5) # 避免请求过于密集 with open(output_file, w, encodingutf-8) as f: for r in results: f.write(r \n) if __name__ __main__: batch_infer(input.txt, output.txt)逻辑说明这个脚本的核心是循环调用 REST API每次读一行输入拼上提示词模板发给本地模型。time.sleep(0.5)是防止请求过于密集导致 Ollama 队列堆积。参数方面model要和你ollama list里的名称一致timeout设长一点批量任务里单条超时不会影响后续。如果你要处理几百条以上建议加一个失败重试机制把失败的条目单独记录最后统一重跑。验证方法很简单准备一个input.txt里面放三五条测试文本跑完脚本后打开output.txt看每条是否都有对应输出。如果某条输出为空检查那条输入是不是特别长超过了num_ctx限制。我一般会在脚本里加一个长度检查超过 2000 字符的输入先截断或分段。从那以后我每次部署完本地模型都会先跑一遍这个批量脚本做冒烟测试确认服务稳定、参数合理、输出可用再接到正式流程里。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑