前言
摘要:本文以 DeepSeek-R1 为例,讲解如何基于 Ollama + API 网关 + LobeChat 搭建高可用私有化大模型集群。内容涵盖 Ollama 框架优势与局限、GPU 环境准备与 Docker 容器化安装、DeepSeek-R1 单点部署与定制思考模板,以及多实例负载均衡的集群架构设计,最终实现突破单实例并发限制、多 GPU 并行推理的企业级高可用私有化推理服务。整套方案可平滑迁移至 Qwen、Llama3 等任意开源 LLM。
很多企业落地大模型时,最关心数据安全,因此不会直接调用公有云商业大模型 API,大模型私有化部署成为主流方案。本章以 DeepSeek-R1 为例,使用 Ollama、API 网关、LobeChat 搭建可并行推理的大模型集群,整套方案可以迁移到 Qwen、Llama3 等任意开源 LLM。
核心目标:突破单实例 Ollama 并发限制,多 GPU 多实例负载均衡,对外统一 API 入口,搭配前端可视化对话界面,实现企业级高可用私有化推理服务。
一、Ollama 框架简介
Ollama 是面向本地服务器快速部署 LLM 的开源框架,优势:
- 极简命令行:一行命令即可拉取、运行各类开源模型(DeepSeek、通义千问 Qwen、Llama3 等)。
- 内置权重量化(int8 等):以微小精度损失,大幅降低显存占用。例如 16G 显存 T4 显卡,非量化版本只能跑 7B 模型,量化后可以部署 32B 大模型。
- 内置分块加载、缓存调度、GPU/CPU 资源调度:提升硬件利用率。
- 兼容 OpenAI 统一 API 接口:不同开源模型原生接口各不相同,Ollama 统一封装,切换模型不需要修改业务代码。
局限:单 Ollama 实例默认单线程推理,一个实例一次只能处理一个请求,并发能力弱。高并发场景,需要多实例集群 + 负载均衡网关。
二、GPU 环境准备与 Ollama 安装
环境:云服务器,2 张 NVIDIA T4 显卡,单卡显存 16GB,操作系统 Ubuntu 22.04。
先执行命令校验显卡驱动是否正常识别:
nvidia-smi可以看到两张 T4 卡编号为 0、1,代表驱动、CUDA 环境就绪。
Ollama 两种安装方式
1. 二进制安装:安装简单,但是默认占用 11434 端口,单服务器只能启动一个 Ollama 实例,不适合集群。
curl-fsSLhttps://ollama.com/install.sh|sh2. Docker 容器安装(集群推荐):容器可以做端口映射,不同 Ollama 实例映射宿主机不同端口,一台机器启动多个实例不会端口冲突。
前置校验:检查容器是否支持 nvidia GPU
dockerinfo|grep-invidia无输出则安装 NVIDIA Container Toolkit,执行下面整套命令:
distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listapt-getupdateapt-getinstall-ynvidia-docker2 systemctl restartdocker拉取 Ollama 镜像并启动容器:
# 拉取镜像dockerpull ollama/ollama:0.5.11# 启动容器,映射端口,绑定 GPU 0dockerrun-dp8880:11434--gpusdevice=0--nameDeepSeek-R1-1 ollama/ollama:0.5.11参数说明:
-dp 8880:11434:端口映射,容器内 11434 端口映射宿主机 8880--gpus device=0:指定使用编号 0 的 GPU 卡--name:给容器命名,方便后续管理
启动后用docker ps查看正在运行的 Ollama 容器实例。
三、实战:Ollama 单点部署 DeepSeek-R1
Ollama 官网提供 Model Library 模型仓库,里面包含大量开源模型量化版本,直接通过ollama run拉取部署。
部署方式 1:容器内直接拉取模型
# 进入 ollama 容器dockerexec-it<你的容器名称或者ID>/bin/bash# 拉取并启动 deepseek-r1:32bollama run deepseek-r1:32b执行后自动拉取模型文件,下载完成自动加载进入对话交互模式。
部署方式 2:宿主机预下载模型,挂载进容器(集群推荐)
优势:多容器实例共享同一份模型文件,不用重复下载。使用-v做宿主机目录和容器目录挂载。
# 在宿主机预先下载模型ollama pull deepseek-r1:32b# 启动容器,挂载模型目录dockerrun-dp8880:11434--runtime=nvidia--gpusdevice=0--nameDeepSeek-R1-1\-v/usr/share/models:/root/.ollama/models ollama/ollama:0.5.11挂载路径:宿主机目录:容器内目录
进入容器测试对话:
dockerexec-itDeepSeek-R1-1 /bin/bash ollama run deepseek-r1:32bDeepSeek-R1 特点
原生支持深度思考,输出包含 ````思考标签;默认模板不会强制触发思考,简单问题会直接返回答案。``````思考标签;默认模板不会强制触发思考,简单问题会直接返回答案。
定制模型模板,强制开启 DeepSeek-R1 思考
修改模型对话模板,强制模型输出思考过程。
1. 将原有模板导出保存
ollama show--modelfiledeepseek-r1:32b>Modelfile2. 打开 Modelfile,在 Assistant 输出起始位置,添加\n
3. 基于修改后的文件,创建新模型
ollama create deepseek-r1-think:32b-f./Modelfile执行ollama list,就能看到新建好的模型。再次运行ollama run deepseek-r1-think:32b,模型每次回复都会输出 ````
### 通过 API 访问模型 Ollama 兼容 OpenAI 接口,可使用 curl 直接调用,方便后端程序接入: ```bash curl http://localhost:8880/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1-think:32b", "messages": [ {"role": "user", "content": "hello"} ] }' ``` ## 四、高可用大模型集群架构设计 ### 整体架构图 ```mermaid flowchart LR A["用户"] --> B["LobeChat 前端对话界面"] B --> C["API 网关"] C --> D["负载分发"] D --> E["Ollama 实例 1(GPU 0)"] D --> F["Ollama 实例 2(GPU 1)"] D --> G["Ollama 实例 N(GPU N)"] ``` ### 组件分工 1. **LobeChat**:可视化对话前端,面向用户,提供网页聊天窗口 2. **API 网关**:核心负载均衡层。接收外部 API 请求,将流量分发到后端多个 Ollama 实例,实现并行推理,是集群的核心。 3. **Ollama 实例集群**:多个独立容器,一个实例绑定一张 GPU,每个实例独立加载模型、独立推理。 ### 集群原理 单 Ollama 实例一次只能处理 1 个请求。在网关前置之后:用户请求统一访问网关地址;网关将请求路由分发到空闲的 Ollama 节点。多请求可以并行在多张 GPU 上推理,提升并发吞吐,实现高可用。后端任意一个 Ollama 实例故障,网关可以将流量转发至其他正常实例。 ## 五、小结 1. Ollama 极大简化开源大模型本地私有化部署,内置量化、统一 OpenAI API,上手成本低。 2. 单实例 Ollama 并发弱,生产环境要搭建集群:Docker 多容器 + 多 GPU 隔离 + API 网关负载均衡。 3. 可以自定义 Modelfile 修改 prompt 对话模板,定制模型输出行为,例如强制 DeepSeek-R1 输出思考过程。 4. 上层搭配 LobeChat 等 WebUI,快速给业务人员提供可视化对话入口。 **拓展方向**:这套架构不仅限于 DeepSeek,Qwen、Llama3 等模型,都可以用完全一样的流程完成私有化集群部署。