DeepSeek-R1本地部署全攻略:Ollama+Docker+Open WebUI实战
简介面向需要把大型预训练语言模型部署到本地的研究员与开发者这份DeepSeek模型本地安装与运行的实操指南以docx文档形式呈现。文档围绕Ollama的跨平台安装、按硬件条件选择DeepSeek-R1参数版本结合显存给出1.5B、7B/8B、14B、32B、70B的适配建议以及借助Docker与开源工具Open WebUI搭建可视化容器的辅助方案展开最终将命令行启动、浏览器界面登录与首次对话验证串联为完整闭环流程。作者将Windows、macOS、Linux下的安装要点和Docker环境初始化注意事项一并说明并给出Open WebUI的容器运行命令读者可按文档步骤快速复现从而形成一套可复用的本地大模型部署路径。资源包内含1个docx文档共15KB体量轻巧文本说明、命令示例与版本对照集中呈现适合已有一定软硬件基础、希望降低云服务成本并深入理解LLM运行机制的读者。目前已有5228人学习下载。1. 本地跑起 DeepSeek-R1别急着敲命令先想清楚这一步能解决什么过去大半年很多做 AI 推理部署的人都在算一笔账云服务按 Token 计费跑长文本月成本蹭蹭往上走数据还得出网。于是 DeepSeek-R1 本地部署成了绕不开的话题——用 Ollama 把模型拉下来在自己机器上跑私有化推理数据不出内网延迟也可控。这个方案的下限其实很低一台普通 CPU 机器也能把 1.5B 跑起来但上限又很高涉及显存档位、容器网络、模型存储路径这些细节时一个参数写错整个环境就翻车。这篇文章就是完整复现一遍从零到可用的过程装 Ollama、选模型、跑通命令行再补齐 Docker 与 Open WebUI 图形界面最后落到 API 调用与验证。适合想私有化部署语言模型的机器学习工程师也适合正在搭实验环境的研究者。2. 安装 Ollama模型运行时落地的三平台细节与环境变量套路2.1 为什么先装 Ollama 而不是直接下模型很多人第一次接触 LLM 本地部署会先去找模型文件。但 DeepSeek-R1 这种规模的模型直接下 GGUF 文件再自己写推理脚本工作量不小。Ollama 这层运行时把分发、量化管理、显存调度和交互入口全包了——装好它之后模型就是一条ollama run命令的事。技术栈上Ollama 底层基于 llama.cpp 这类 C 推理引擎对外提供 CLI 和一套本地 HTTP API默认端口 11434。模型文件以层layer的方式从官方仓库拉取落到本地磁盘后做统一管理。这种架构的好处是模型权重、命令行工具、Web 界面各层解耦后续想接 Open WebUI 或自研系统都走同一套 API。我一般建议先装运行时再拉模型因为 Ollama 安装完会自动注册系统服务模型拉下来就能直接跑反过来先下模型还得自己处理路径和启动方式容易卡在环境层面。2.2 Windows 安装流程与安装后的三个确认步骤Windows 安装包在 ollama.com 官网下载运行安装程序默认路径在%LOCALAPPDATA%\Programs\Ollama装完系统托盘会出现图标。安装完成先别急着拉模型按下面三步做确认# 1. 确认 CLI 可用注意必须新开一个 cmd/PowerShell 窗口 ollama --version # 2. 确认后台服务已启动返回空列表就表示正常 ollama list # 3. 如果要把模型目录从 C 盘挪走先设置用户级环境变量 OLLAMA_MODELS # 例如 D:\ollama_models然后托盘右键退出 Ollama再重新启动第一条命令翻车概率最高安装时环境变量 PATH 已写入但已经打开的旧窗口不会刷新直接执行会报“不是内部或外部命令”。新开窗口即可不用重装。第二条命令ollama list返回空列表不代表有问题它说明服务正在运行且本地还没有模型。如果提示连接不上去任务管理器确认 Ollama 进程是否存在或手动执行ollama serve看日志。OLLAMA_MODELS 这个环境变量项目里没提但实际部署很关键。默认模型目录放在用户目录下C 盘空间紧张时拉一个 32B 量化模型要占 20GB 左右很容易把系统盘写满。设置路径时注意两点一是用户级变量即可不必动系统级 PATH二是路径别带中文或空格后续 llama.cpp 解析路径时玄学问题少一些。改完环境变量必须彻底退出 Ollama 再启动否则仍走旧路径。2.3 macOS 与 Linux安装差异、权限和自启服务macOS 版和 Windows 逻辑一致官网下载 zip 解压后把 Ollama 拖进 Applications 目录。打开时如果提示“无法打开因为无法验证开发者身份”常见做法是右键应用图标选择“打开”在弹窗里再确认一次不需要关闭系统完整性保护。Linux 下最简单的方式是官方安装脚本一行命令完成curl -fsSL https://ollama.com/install.sh | sh这个脚本会下载二进制、安装到/usr/local并注册 systemd 服务。执行完先看服务状态systemctl status ollama如果服务没起来手动启动并检查日志sudo systemctl start ollama sudo systemctl enable ollama journalctl -u ollama -n 50值得说明的是Linux 下 Ollama 默认以服务方式运行监听 127.0.0.1:11434。后续要让 Docker 容器访问宿主机上的 Ollama需要把监听地址放开这个坑到第 4 章、第 5 章再展开。脚本安装方式的好处是自动解决 systemd 单元和用户权限缺点是如果你在公司内网、没有外网访问权限脚本拉不下来只能离线处理第 5 章会给方案。另外无论是哪个平台装完 Ollama 服务后建议做一次最小验证执行ollama list确认 API 端口活着。curl http://localhost:11434返回内容显示 Ollama is running 之类的信息就说明运行时状态正常可以进入模型选型了。3. 按显存选模型1.5B 到 70B 的选型逻辑与 ollama run 拆解3.1 先搞懂量化否则选型就是盲猜选 DeepSeek-R1 之前得先理解一个关键概念模型参数量与显存占用不是一回事。如果按 FP16 精度加载每个参数占 2 字节32B 模型理论权重就是 64GB普通机器根本带不动。Ollama 官方仓库发布的模型普遍采用 GGUF 格式的 4-bit 量化常见 Q4_K_M权重压缩到约 0.50.6 字节/参数32B 实际落到本地就是 20GB 左右。量化后模型体积变小了但推理时仍有两个占显存的部分一是权重本体二是 KV Cache键值缓存上下文越长KV Cache 占用越大。所以“显存 24GB 能不能跑 32B”这个问题答案往往要留出 24GB 余量给缓存和中间计算。我见过不少人在这一步翻车看着模型文件 20GB觉得 24GB 显存稳了结果跑长上下文时 OOM。建议选型时按“模型文件大小 2GB 保底缓存”去对显存不要卡着上限选。3.2 六档模型选型对照表DeepSeek-R1 官方仓库里从 1.5B 到 70B 有多个参数量档位按实际机器配置对号入座参数量最低显存参考磁盘占用参考适合场景1.5B纯 CPU 可跑约 1GB 出头流程验证、API 调试7B / 8B8GB 显存约 5GB日常对话、普通笔记本14B1216GB 显存约 9GB中等质量生成、代码辅助32B24GB 显存约 20GB长文本、复杂推理70B40GB 以上显存约 40GB 以上接近完整能力高配工作站补充两个容易忽略的点。第一8GB 显存机器跑 7B/8B 档系统内存建议 16GB 以上32B 档建议系统内存 32GB 以上。因为推理框架在显存不足时会自动把部分层落到内存里内存太小直接卡死。第二磁盘一定要留足空间并按第 2 章说的把模型目录放到数据盘别让 C 盘承担几十 GB 的模型文件。3.3 ollama run 命令拆解与首次加载过程选好档位后去官网 Models 页面找到 DeepSeek-R1复制对应命令。常见做法是直接用官方给的完整名称例如ollama run deepseek-r1:32b这条命令实际做了四件事。第一检查本地是否有该模型第二如果没有从仓库拉取 manifest 和全部模型层第三把层解析成 GGUF 权重文件并加载到显存/内存第四进入命令行交互模式输入问题直接对话。首次执行会看到进度条下载时间取决于网络带宽和模型体积。32B 档 20GB 文件常规带宽下载几十分钟很正常不用反复取消重试本地会有断点续传。下载完成后进入交互界面几个常用技能先记下来# 查看本地已有哪些模型 ollama list # 查看当前正在运行的模型及显存占用 ollama ps # 退出交互模式或直接 CtrlD /bye如果命令行跑起来了但生成速度慢先执行ollama ps看 PROCESSOR 列是 GPU 还是 GPU/CPU。出现 CPU 字样说明显存不够、部分层被调度到了内存这不是模型坏了而是选型档位偏高。怎么取舍在第 5 章再细聊。4. 用 Docker 部署 Open WebUI容器命令逐段拆解与首次登录4.1 Docker Desktop 安装要点默认选项、重启与 WSL2 后端Open WebUI 是可选增强不是必装项。它解决的是命令行交互不够直观的问题——浏览器图形界面、多会话管理、历史记录都比终端舒服。项目方推荐的部署方式是 Docker 容器所以这章先把 Docker Desktop 落地。安装 Docker Desktop 时全部默认选项即可Windows 下会要求启用 WSL2 后端装完必须重启系统。重启后第一次启动会弹条款确认还要登录账号——这个步骤可以跳过找一下 Skip 入口登录 Docker Hub 账号不是拉取公开镜像的必需条件。验证 Docker 是否可用打开命令行执行docker version能同时显示 client 和 server 两段信息说明引擎正常。如果只有 client、server 报错多半是 WSL2 没就绪先去 Windows 功能里确认“适用于 Linux 的 Windows 子系统”已勾选再执行wsl --update。这一步是后面所有容器操作的前置条件。4.2 Open WebUI 容器命令逐段拆解并补上关键参数Open WebUI 官方给出的安装命令是一整条 docker run实际粘贴到命令行时经常出错因为网页排版会把参数间的空格和等号弄乱。先把完整命令看清楚再拷贝我习惯手动整理成多行格式docker run -d \ -p 3000:8080 \ --add-hosthost.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434 \ ghcr.io/open-webui/open-webui:main逐段说明。-d表示后台运行容器不占用当前窗口。-p 3000:8080把容器内 8080 端口映射到宿主机 3000 端口浏览器访问 http://localhost:3000。--add-hosthost.docker.internal:host-gateway是关键参数它让容器内能通过特殊域名访问宿主机。-v open-webui:/app/backend/data用数据卷保存界面配置和会话容器删掉重来数据不丢。--name open-webui指定容器名方便 start/stop/logs。--restart always让容器在系统重启或崩溃后自动拉起。最后-e OLLAMA_BASE_URLhttp://host.docker.internal:11434是指定 Open WebUI 内部去连宿主机的 Ollama API这一步显式声明比自动发现稳。需要重点检查的是第一处命令拼接网上复制下来的命令经常出现--add-hosthost.docker.internal:host-gateway中间被拆成--add-host host...的情况docker 会直接报 flag 错误。粘贴前先看等号两边有没有空格有就去掉再执行。镜像本身比较大首次 pull 需要几分钟到十几分钟视网络而定。这段时间可以用docker logs -f open-webui观察启动过程看到监听 8080 的日志就基本成功了。4.3 第一次打开界面注册管理员账号与登录路径容器跑起来后浏览器访问 http://localhost:3000会看到 Open WebUI 的欢迎页。这里有个常见误会项目原文说“填入之前注册的账号和密码进行登录”但实际首次打开页面看到的是“创建账号”入口必须先用邮箱注册一个本地账号。第一阶段这个账号不是普通用户而是 Open WebUI 的管理员。注册后进入系统左侧模型列表默认会拉取 Ollama 中的模型能看到之前用命令行拉取的 deepseek-r1:32b。如果列表为空去右上角设置里检查 Ollama 连接地址是否指向 http://host.docker.internal:11434。之后就是图形界面里的常规对话流程。相比命令行Open WebUI 的优势在于会话管理、参数可视化调节和流式输出体验。建议日常使用走图形界面调试阶段走命令行两者共用同一个模型不冲突。另外提一句Open WebUI 和 Ollama 是两个独立服务Ollama 没启动时界面能打开但对话会报错排查顺序永远是先确认 Ollama再确认容器。5. 本地部署避坑与常见问题排查五个高频翻车现场这章把实际操作中容易踩的坑集中成五个高频现象按“现象 → 原因 → 解决”逐个过一遍。照着这个清单排查能省下大量在论坛翻帖子的时间。5.1 现象一模型下载卡在某个百分比进度条长时间不动拉取 32B 模型时进度走到 45% 就静止等十分钟还在原地。原因有三层。一是网络链路不稳定模型仓库在境外文件又大传输中断是常态二是默认并行下载数较高多个分层同时拉取时容易互相竞争三是磁盘写入慢机械硬盘下载 SSD 大小的文件时进度条会滞后。解决方式先等不要看到不动就 CtrlC。ollama pull 支持断点续传中断后重跑会从断点继续。如果确认完全卡死按 CtrlC 后重新执行同一条 pull 命令。同时检查磁盘剩余空间32B 档位需要约 20GB空间不足时下载会一直卡在最后阶段不报错。另一种常见做法是错峰下载比如避开白天高峰期大文件深夜拉取成功率明显更高。5.2 现象二命令粘贴后报 unknown model 或 flag 解析错误执行ollama run deepseek-r1:32b返回 unknown model或者 docker 命令直接提示 unknown flag。多数情况是模型名写错了。官网展示的模型名全部小写冒号后是 tag比如deepseek-r1:32b手打时最容易把大小写、连字符位置搞错。Docker 命令翻车则多是排版问题从网页复制时--add-hosthost.docker.internal:host-gateway里等号两边被插入了空格shell 会把--add-host识别为独立参数导致解析失败。解决方式先说模型名粘贴命令前先执行ollama list看本地已有名称或者去官网 Models 页面找到 DeepSeek-R1 条目直接点复制按钮不要手动输入。再看 docker 命令粘贴到命令行后肉眼扫一遍等号和短横线凡是--add-host 这种带空格的统一改成--add-host再执行。5.3 现象三模型加载到 100% 后没有响应或生成速度异常慢ollama run显示加载进度到 100%但命令行迟迟不出现正常提示符另一位读者的情况是能对话但输出一个字一个字往外蹦。加载进度到 100% 不等于加载完成。首次运行要做权重解析、缓存预热和显存分配32B 模型在机械硬盘或内存带宽不足的机器上这个过程持续两三分钟都正常。生成速度慢则要分两种模型本身档位偏高部分层被调度到 CPU 执行或者上下文长度设置过大KV Cache 挤占显存导致回退。解决方式分三步走。第一步加载完成后如果长时间没反应直接敲回车看是否出提示符不行就 CtrlC 重来一次不要反复重启。第二步对话过程中另开一个窗口执行ollama ps看 PROCESSOR 列是 GPU 还是 GPU/CPU。出现 CPU 字样说明显存不够换小一档模型是性价比最高的做法。第三步检查是否多个模型同时驻留内存ollama ps能列出所有已加载模型多余的用ollama stop 模型名卸载。5.4 现象四Open WebUI 页面能打开但对话一直转圈连不上 Ollama浏览器访问 3000 端口没问题界面加载正常发消息后一直转圈控制台报 connection refused。核心原因是容器网络与宿主机隔离。容器里的 localhost 指向容器自身不是宿主机Open WebUI 内部默认找 127.0.0.1:11434自然连不上宿主机的 Ollama。另一个隐蔽原因是宿主机 Ollama 默认监听 127.0.0.1即使容器里访问 host.docker.internal宿主机这边收不到跨网段的请求。解决方式先确保 docker 命令里有--add-hosthost.docker.internal:host-gateway参数再在宿主机上给 Ollama 增加环境变量OLLAMA_HOST0.0.0.0然后重启 Ollama让它监听所有网卡。调整完做三层验证宿主机浏览器访问 http://localhost:11434确认 Ollama 活着在容器里 curl http://host.docker.internal:11434确认网络链路通最后回到 Open WebUI 发一条消息。注意 OLLAMA_HOST 改成 0.0.0.0 后局域网内其他设备也能访问你的推理服务内网环境要确认没有访问控制需求。5.5 现象五Docker Desktop 起不来或离线环境拉不动镜像和模型Docker Desktop 打开后一直转圈报 WSL2 installation is incomplete另一种场景是公司内网机器docker pull open-webui 和 ollama pull 都直接超时。Docker 起不来优先检查两处BIOS 里虚拟化是否开启Windows 功能里 WSL 是否启用。这两项没问题就执行wsl --update大概率是旧版 WSL 内核不兼容。离线环境没有外网什么命令都白搭只能走离线搬运方案。模型离线搬运有两个思路。思路一是整目录拷贝在有网机器上把模型 pull 下来模型目录位于用户目录/.ollama/models整个目录打包拷到内网机器相同位置再执行ollama list确认识别。思路二是用 GGUF 文件重建在有网机器下载对应量化格式的 GGUF 文件拷贝到内网机器写一个 Modelfile执行ollama create deepseek-r1:32b -f Modelfile重新生成模型条目。Docker 镜像同理有网机器执行docker save open-webui -o webui.tar拷贝到内网后用docker load -i webui.tar导入。这套流程适合完全隔离的部署环境项目交付时我经常用。6. 把本地模型变成服务API 冒烟、关键参数与 GPU 验证6.1 用 curl 完成一次最小 API 调用Ollama 自带 HTTP API命令行跑通之后直接 curl 就能验证服务是否真正可对外提供服务curl http://localhost:11434/api/chat -d { model: deepseek-r1:32b, messages: [{ role: user, content: 用一句话解释什么是Transformer }], stream: false, options: { temperature: 0.6, top_p: 0.9, num_ctx: 4096, seed: 42 } }几个参数按实际场景调。temperature 控制随机性技术问答我习惯压到 0.6 以下减少发散top_p 是核采样阈值保持 0.9 即可num_ctx 决定上下文长度4096 是日常够用的值每往上翻一倍KV Cache 显存占用也接近翻倍别盲目调大seed 固定后方便复现对比换过模型或参数后可以拿同一问题做回归。6.2 一次两分钟的“真机验证”确认跑在 GPU 上API 能通只说明服务起来了不代表跑得健康。我的固定验证流程是先发起一次对话保持会话进行中另开命令行执行ollama ps重点看 PROCESSOR 列。像100% GPU这种状态就是健康的出现GPU/CPU混合调度说明显存或上下文设置偏紧。再配上nvidia-smi看显存占用能确认权重确实进了显存而不是在内存里硬扛。这套流程两分钟走完比任何玄学调优都可靠。从那以后我每次部署完模型都强制走一遍“ollama ps 确认 GPU curl 带 seed 冒烟一次”的流程确认接口通了才交给业务接入这套习惯帮我挡掉了大半“部署完成但实际不可用”的返工。希望帮到你。本文还有配套的精品资源点击获取