DeepSeek-R1 本地化部署
DeepSeek-R1 是 深度求索 推出的高性能模型,尤其擅长数学逻辑与代码生成,性能对标 OpenAI o1 正式版。本地部署推荐选择其蒸馏版量化模型(如1.5B/7B/32B),通过Ollama适配后,显存需求显著降低(8GB显存可运行8B模型)。
本地化部署步骤
1.安装 Ollama
- Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。
- Windows用户:访问 https://ollama.com/download 下载安装包,双击运行并完成初始化
#.配置永久系统变量, 将默认监听从 127.0.0.1:11434 调整为 0.0.0.0:11434
setx OLLAMA_HOST 0.0.0.0:11434 /m
#.配置永久系统变量, 将模型在内存中的存活时间调整为 24h
setx OLLAMA_KEEP_ALIVE 24h /m
#.安装ollama到指定目录
cd /d d:\
wget -c http://oss.sqlfans.cn/ai/ollama/0.5.7/OllamaSetup.exe
OllamaSetup.exe /DIR="D:\tools\ollama"
#.确认端口已监听
netstat -ano | findstr 11434
- Linux用户:通过如下命令行一键安装(若有nvidia设备则会自动安装驱动,安装后 nvidia-smi 可用)
#.安装ollama
curl -fsSL https://ollama.com/install.sh | sh
systemctl start ollama
ollama --version
#.调整ollama服务, 将监听地址调整为 0.0.0.0:11434, 将模型在内存中的存活时间调整为 24h
cat /etc/systemd/system/ollama.service | grep OLLAMA_HOST || sed -i '/RestartSec/a\Environment="OLLAMA_HOST=0.0.0.0:11434"' /etc/systemd/system/ollama.service
cat /etc/systemd/system/ollama.service | grep OLLAMA_KEEP_ALIVE || sed -i '/RestartSec/a\Environment="OLLAMA_KEEP_ALIVE=24h"' /etc/systemd/system/ollama.service
cat /etc/systemd/system/ollama.service | grep -A 8 "\[Service\]"
#.重启ollama服务
systemctl daemon-reload
systemctl restart ollama
#.确认端口已监听
netstat -lnpt | grep 11434
- 成功安装之后,浏览器访问 Ollama 地址:
http://127.0.0.1:11434
2.拉取 DeepSeek 模型
- 访问 https://ollama.com/search 找到 deepseek-r1,关于不同模型的对比可参考下表(B代表Billion,7B即70亿参数):
| ds模型 | 参数量 | 模型大小 | 建议配置 | 备注 |
|---|---|---|---|---|
| deepseek-r1:1.5b | 1.5B | 1.1GB | 4核、8GB、集成显卡(无需独立显存) | 超轻量模型 |
| deepseek-r1:7b | 7B | 4.7GB | 6核、16GB、RTX 3060级(共6GB显存) | 默认版本,性能与OpenAl-01相当 |
| deepseek-r1:8b | 8B | 4.9GB | 8核、24GB、RTX 3070/4060(共8GB显存) | 硬件与性能比 7B 略高 10-20% |
| deepseek-r1:14b | 14B | 9GB | 12核、64GB、2块RTX 4000Ada(共40GB显存) | 中等规模,企业级 |
| deepseek-r1:32b | 32B | 20GB | 24核、128GB、4块RTX 4000Ada(共80GB显存) | 高性能 |
| deepseek-r1:70b | 70B | 43GB | 32核、256GB、4块RTX 5880Ada(共192GB显存) | 超高性能 |
| deepseek-r1:671b | 671B | 404GB | 64核、1TB、8块A100(共640GB显存) | 满血版,性能对标OpenAI-o1正式版 |
- 根据硬件选择合适的模型版本,示例拉取 deepseek-r1:1.5b 模型,大小约 1.1 GB、速度约 489 KB/s
#.若下载速度越来越慢,可按 Ctrl+C 取消并重新下载(支持断点续传,亲测有效)
ollama pull deepseek-r1:1.5b
ollama list
注:模型越大效果越好,但需权衡计算资源。7B模型则在性能和资源需求之间达到了一个较好的平衡,它具备更强的语言理解和生成能力,能够处理更复杂的任务,如内容创作、智能客服等。
3.启动 DeepSeek 模型交互
- 启动 DeepSeek 模型交互,示例启动 deepseek-r1:1.5b 模型
ollama run deepseek-r1:1.5b
- 启动后进入REPL界面,输入问题即可获得回答,输入
/bye退出会话
>>> 中国目前有多少人口
>>> /bye
4.安装 Open WebUI 可视化界面 [选做]
- 安装 docker 24.0.1
curl -sL 'http://iso.sqlfans.cn/docker/install_docker_2401.sh' | bash
docker --version
- 启动 DeepSeek 模型交互(若退出模型交互则无法获取模型),以供容器服务使用
ollama run deepseek-r1:1.5b &
- 以 docker 方式部署 Open WebUI,容器初始化约3分钟
#.windows部署方式1 - 使用 --add-host 允许docker容器访问宿主机服务
mkdir d:\tools\webui
docker pull ghcr.io/open-webui/open-webui:main
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v d:\tools\webui:/app/backend/data --name open_webui ghcr.io/open-webui/open-webui:main
#.windows部署方式2 - 使用 -e OLLAMA_BASE_URL 显式指定 ollama 地址
mkdir d:\tools\webui
docker pull ghcr.io/open-webui/open-webui:main
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://192.168.31.168:11434 -v d:\tools\webui:/app/backend/data --name open_webui ghcr.io/open-webui/open-webui:main
#.linux系统, 不支持 --add-host, 只能使用 -e OLLAMA_BASE_URL 显式指定 ollama 地址
mkdir -p /data/webui
docker pull ghcr.io/open-webui/open-webui:main
docker run --privileged=true -d -p 3000:8080 -e OLLAMA_BASE_URL=http://192.168.31.101:11434 -v /data/webui:/app/backend/data --name open_webui ghcr.io/open-webui/open-webui:main
- 登录 webui控制台
http://localhost:3000,配置管理员账号及密码,待初始化完成之后就可以进行对话了
注:正常情况下,不需要在“设置 - 管理员设置 - 外部连接 与 模型”中绑定 Ollama地址 与 DeepSeek模型
进阶优化与安全
性能调优技巧
- GPU加速:Windows设置环境变量
$env:OLLAMA_GPU="enable",Linux添加OLLAMA_GPU_LAYERS=35 - 量化压缩:通过
ollama create <模型名称> -f modelfile自定义配置量化参数(如 q4_k_m),减少显存占用
安全加固
近日,国家网络安全通报中心通报 CNVD-2025-04094 安全公告,大模型工具ollama存在严重安全风险,ollama默认配置存在未授权访问和模型窃取风险,可能会导致数据泄露、服务中断等风险。对此,可以通过以下几项措施,保障本地化部署的大模型安全。
- 1.保持版本更新:关注官方公告,定期升级 ollama,定期更新补丁库和漏洞库
- 2.强化访问控制:限制端口暴露范围,禁止11434端口对公网开放,仅允许本地或内网访问,或通过防火墙等设备配置IP白名单,阻止非授权IP的访问请求
- 3.部署架构优化:配置反向代理与防护层,使用OpenSSL生成证书并通过Nginx等反向代理配置HTTP Basic认证或OAuth集成进行身份验证和授权,防止未经授权用户访问
- 4.监控与防御:实时行为检测,部署入侵检测系统IDS,分析异常流量和访问模式。定期审计ollama日志,排查可疑操作(如POST /api/pull)
- 5.全面安全检查:通过漏洞扫描、渗透参数等安全检查手段,从内部和外部进行安全检查,不光是检查ollama漏洞,还检查操作系统、网络的安全风险,确保整个大模型环节达到安全基线
- 6.长期安全策略:持续定期安全评估,开展漏洞扫描与渗透测试,持续识别潜在风险。对相关人员进行大模型安全意识培训,制定应急预案,提升安全意识及应急响应能力
- 7.数据隔离:将模型与用户数据分离存储,避免敏感信息泄露
遇到的问题
问题1:ollama pull 下载模型超时
- 症状:由于网络不稳定,导致下载模型超时
- 解决:使用国内镜像源并重新拉取,或者按 Ctrl+C 取消并重新拉取(支持断点续传,亲测有效)
问题2:ollama run 报错内存不足
- 症状:在一台2核2G的机器上执行 ollama run 报错内存不足
- 解决:增加内存或更换机器
[root@localhost ~]# ollama run deepseek-r1:1.5b
Error: model requires more system memory (1.7 GiB) than is available (658.0 MiB)
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1837 921 378 96 537 665
Swap: 0 0 0
问题3:open-webui 容器启动失败
- 症状:启动 open webui 容器之后,端口虽已监听但telnet失败,docker ps 看到该容器状态为 unhealthy,执行 docker logs -f 看到报错 Failed to send telemetry event ClientStartEvent: can't start new thread
- 解决:执行 docker logs 看到该容器报权限问题,解决办法是在 docker run 之后紧跟添加 --privileged=true(顺序有要求) 对容器中的root用户进行提权,使其拥有对宿主机的root操作权限
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c6512c3b49b ghcr.io/open-webui/open-webui:main "bash start.sh" 4 minutes ago Up 2 minutes (unhealthy) 0.0.0.0:3000->8080/tcp open_webui
[root@localhost ~]# docker logs -f 0c6512c3b49b
ERROR [chromadb.telemetry.product.posthog] Failed to send telemetry event ClientStartEvent: can't start new thread
OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 8: Operation not permitted
OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max
OpenBLAS blas_thread_init: ensure that your address space and process count limits are big enough (ulimit -a)
OpenBLAS blas_thread_init: or set a smaller OPENBLAS_NUM_THREADS to fit into what you have available
[root@localhost ~]# ulimit -n
65535
问题4:open-webui 无法获取模型
- 症状:登录open webui管理员面板,点击 模型 - 管理模型 提示 无法获取模型 且右上角报错 Open WebUI: Server Connection Error
- 解决:首先执行 ollama run 启动模型交互(不可退出),然后启动 open-webui 容器添加参数
--add-host=host.docker.internal:host-gateway允许docker容器访问宿主机服务,或者显式指定-e OLLAMA_BASE_URL=http://192.168.31.168:11434(前提是监听了 0.0.0.0:11434 而非 127.0.0.1:11434)
问题5:open-webui 页面白屏
- 症状1:执行 docker run 启动 Open WebUI 容器之后,3000端口虽已监听,但telnet不通
- 解决1:初始化速度比较慢,多等一会吧,预计3分钟+
补充:
http://localhost:3000第一次打开是白屏也是因为初始化未完成,再等一等吧
- 症状2:open-webui 提供web界面,如果机器没有科学上网的话,登录后会长时间的空白,需要等待很久才会出现内容的情况
- 原因2:这个其实是因为默认对接了open-ai的Api,但是没有科学上网的话,会一直等待响应,只需要关闭即可
- 解决2:登录
http://localhost:3000/admin/settings打开 管理员面板 - 外部连接,禁用 OpenAI API
问题6:ollama run 一段时间后模型交互自动停止
- 症状:执行 ollama run xxx & 虽然已将模型交互放到后台,但过段时间执行 ollama ps 看不到这个模型交互已不再
- 解决:修改 ollama.service 设置 OLLAMA_KEEP_ALIVE=24h,调整模型在内存中的存活时间,默认为 5m
#.添加 OLLAMA_KEEP_ALIVE 参数
[root@localhost ~]# cat /etc/systemd/system/ollama.service | grep -A 8 "\[Service\]"
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
#.重启ollama服务
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart ollama
补充:OLLAMA_KEEP_ALIVE 参数主要用于控制与 Ollama 服务端建立的连接在空闲状态下保持打开的时长。当客户端与服务端建立连接后,如果在一段时间内没有新的数据传输,连接可能会因为长时间闲置而被关闭。OLLAMA_KEEP_ALIVE 参数的作用就是设置这个空闲时长,在该时长内连接会保持打开,以避免频繁地重新建立连接,从而提升系统的性能和效率。默认 300秒,这意味着在连接处于空闲状态达 5 分钟之前,连接会一直保持打开;若超过 5 分钟仍无数据传输,连接则可能会被关闭。

