在 Ubuntu 22.04 最小化安装上部署与调优 Ollama 集群

摘要

本文详细指导如何在 Ubuntu 22.04 最小化安装系统上,从零部署 Ollama 服务,并构建一个高可用、高性能的集群以支撑 2000 人规模的并发使用。内容涵盖系统准备、Ollama 安装、集群架构设计、负载均衡配置、模型管理与分发、性能调优(包括 GPU 加速、内存优化、网络与存储优化)以及监控运维方案,旨在为企业级 AI 应用提供稳定、高效的基础设施。

1. 系统环境准备与最小化安装

Ubuntu 22.04 Server 最小化安装提供了最精简的基础,是构建稳定生产环境的理想起点。

1.1 系统安装与基础配置

  • 安装媒介:从 Ubuntu 官网下载 Ubuntu 22.04.4 LTS Server ISO 镜像。
  • 安装过程 :在安装类型选择界面,务必勾选"Minimal installation"(最小化安装),并取消所有预装软件选项。分区建议:根目录(/)至少 100GB,交换分区(swap)根据物理内存大小设置(例如 64GB 内存可设 8-16GB swap)。
  • 网络配置:配置静态 IP 地址,确保服务器在局域网内拥有固定地址,便于集群节点间通信。

1.2 安装后必备软件包

更新系统并安装必要的工具和依赖:

bash 复制代码
# 更新软件包列表并升级系统
sudo apt update && sudo apt upgrade -y
安装基础工具
sudo apt install -y curl wget git vim htop net-tools ntpdate
安装 Docker 运行时(Ollama 官方推荐使用容器部署)
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER  # 将当前用户加入 docker 组,需重新登录生效
安装 NVIDIA 容器工具包(如果使用 NVIDIA GPU)
请先确保已安装 NVIDIA 驱动和 CUDA Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | 

sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | 

sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

2. Ollama 单节点部署

首先在一台服务器上完成 Ollama 的基础安装和验证。

2.1 安装 Ollama

使用官方一键安装脚本:

bash 复制代码
curl -fsSL https://ollama.com/install.sh | sh

安装完成后,启动 Ollama 服务:

bash 复制代码
sudo systemctl enable --now ollama

2.2 验证安装与拉取模型

检查服务状态并拉取一个测试模型(如 Llama 3.2):

bash 复制代码
# 检查服务状态
systemctl status ollama
拉取模型(首次运行会下载模型文件,耗时较长)
ollama pull llama3.2
运行一个简单的交互测试
ollama run llama3.2 "Hello, world!"

3. 构建 Ollama 集群架构

为支撑 2000 人并发,单节点无法满足性能与可用性要求,需构建集群。

3.1 集群架构设计

建议采用"负载均衡器 + 多个 Ollama 计算节点 + 共享存储/模型仓库"的架构。

  • 负载均衡层:使用 Nginx 或 HAProxy,负责将用户请求分发到后端的多个 Ollama 节点。
  • 计算节点层:多台运行 Ollama 的服务器,每台可配备 GPU 以加速推理。
  • 存储层:使用 NFS、Ceph 或对象存储(如 MinIO)集中存储模型文件,确保所有节点模型一致。
  • 控制节点(可选):一台管理节点,用于集群监控、日志收集和任务调度。

3.2 多节点部署与配置同步

  1. 准备节点:按照第 1、2 节步骤,在所有计算节点上安装 Ubuntu 和 Ollama。
  2. 配置共享存储 :在一台存储服务器上搭建 NFS,将所有计算节点的 /root/.ollama/models 目录挂载到共享存储。
  3. 同步配置:确保所有节点的 Ollama 服务配置(如环境变量、端口)一致。

4. 负载均衡与高可用配置

4.1 使用 Nginx 作为反向代理

在负载均衡器上安装 Nginx,并配置 upstream 指向所有 Ollama 节点(默认端口 11434):

nginx 复制代码
# /etc/nginx/conf.d/ollama_cluster.conf
upstream ollama_backend {
    # 配置所有后端 Ollama 节点,可设置权重
    server 192.168.1.101:11434 weight=3; # 节点1,权重高
    server 192.168.1.102:11434 weight=2; # 节点2
    server 192.168.1.103:11434 weight=2; # 节点3
    # 可配置健康检查
}
server {
listen 80;
server_name ollama.yourcompany.com; # 您的域名
location / {
    proxy_pass http://ollama_backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 设置较长的超时时间,适应模型推理
    proxy_read_timeout 300s;
    proxy_connect_timeout 75s;
}
}

重启 Nginx:sudo systemctl restart nginx

4.2 实现高可用(HA)

  • 负载均衡器高可用:使用 Keepalived + VIP(虚拟 IP)实现 Nginx 主备切换。
  • 节点健康检查 :在 Nginx upstream 配置中结合 max_failsfail_timeout 参数,自动剔除故障节点。

5. 性能调优至最佳状态

针对 2000 人并发,需从多个维度进行深度优化。

5.1 GPU 加速与 CUDA 优化

  • 确认 GPU 识别 :在每台计算节点运行 nvidia-smi 确认 GPU 可用。
  • Ollama 启用 GPU :确保 Ollama 以支持 GPU 的模式运行。使用 Docker 运行时,需在运行容器时添加 --gpus all 参数。对于 systemd 服务,可修改 Ollama 服务文件,在 Environment 中添加 OLLAMA_HOST=0.0.0.0 并确保 NVIDIA 运行时可用。
  • CUDA 版本匹配:确保 Ollama 使用的 CUDA 版本与 NVIDIA 驱动兼容。

5.2 内存与存储优化

  • 模型量化 :为生产环境拉取量化版本模型(如 llama3.2:7b-q4_K_M),显著减少内存占用和提升推理速度。
  • 共享内存 :在 Docker 运行 Ollama 时,挂载 /dev/shm 并设置足够大小(例如 --shm-size=8g)。
  • SSD 存储:将模型文件存储在 NVMe SSD 上,极大缩短模型加载时间。
  • 系统内存:根据模型大小和并发数,为每个节点配置充足物理内存。一个 7B 参数 q4 量化模型约需 4-5GB 内存,考虑并发需预留更多。

5.3 网络与并发优化

  • 调整 Ollama 并发数 :通过环境变量 OLLAMA_NUM_PARALLEL 控制单个 Ollama 实例的并行请求数。根据 GPU 内存和算力调整,例如设置为 2-4。
  • Linux 内核参数调优:调整系统网络参数以支持高并发。
bash 复制代码
# 编辑 /etc/sysctl.conf,增加或修改以下行
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
使配置生效
sudo sysctl -p
  • 限制模型上下文长度 :对于聊天应用,可通过 Ollama 的 Modelfile 或 API 参数限制 num_ctx(上下文长度),减少单次请求资源消耗。

5.4 配置优化示例

创建自定义的 Ollama 系统服务配置文件,集成优化参数:

bash 复制代码
# /etc/systemd/system/ollama-optimized.service
[Unit]
Description=Ollama Optimized Service
After=network.target docker.service
Requires=docker.service
[Service]
Type=exec
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_NUM_PARALLEL=4"
ExecStart=/usr/bin/ollama serve
Restart=always
RestartSec=3
限制资源(根据实际情况调整)
CPUQuota=400%
MemoryHigh=32G
MemoryMax=36G
[Install]
WantedBy=multi-user.target

重启服务:sudo systemctl daemon-reload && sudo systemctl restart ollama-optimized

6. 监控、日志与运维

6.1 监控指标

  • 节点监控:使用 Prometheus + Grafana 监控各节点 CPU、内存、GPU 利用率、显存、网络 IO、磁盘 IO。
  • Ollama 应用监控 :通过 Ollama 的 API 端点 /api/tags/api/ps 获取模型列表和运行状态,或使用 ollama listollama ps 命令。
  • 业务监控:在负载均衡器(Nginx)日志中分析请求量、响应时间、错误率。

6.2 日志收集

配置统一的日志收集(如 ELK Stack 或 Loki),集中查看所有 Ollama 节点和 Nginx 的日志,便于故障排查。

6.3 自动化运维

  • 模型更新:编写脚本定期检查并拉取模型更新,通过共享存储同步到所有节点。
  • 健康检查与自愈:编写监控脚本,当节点服务异常时自动重启或告警。

7. 安全与访问控制

  • 网络隔离:将 Ollama 集群部署在内网,通过负载均衡器对外暴露,并配置防火墙规则。
  • API 密钥认证:Ollama 本身无内置强认证。可在 Nginx 层配置 HTTP Basic Auth,或通过前置的 API 网关(如 Kong, Tyk)实现 JWT 令牌认证。
  • 传输加密:为 Nginx 配置 SSL/TLS 证书(可使用 Let's Encrypt),启用 HTTPS。

8. 总结与扩展建议

通过以上步骤,您可以在 Ubuntu 22.04 最小化系统上构建一个支撑 2000 人并发的 Ollama 集群。关键成功要素在于:合理的集群架构、充分的硬件资源(GPU、内存、高速存储)、深度的系统与 Ollama 参数调优,以及完善的监控运维体系

扩展建议

  1. 水平扩展:随着用户量增长,可轻松增加计算节点并更新 Nginx upstream 配置。
  2. 多模型支持:可在集群中部署不同模型,通过路由规则将特定请求导向专用模型节点。
  3. 混合部署:将实时推理(高频、低延迟)与批量推理(低频、高吞吐)任务分配到不同的节点组。

开始您的企业级 AI 基础设施之旅吧!

相关推荐
山林竹笋1 小时前
人工智能领域开源TOP20(2026.06.22-2026.06.28)
人工智能·开源·大模型·智能体·技术趋势
深圳佛手1 小时前
梁文锋说,AGI是首要目标。AGI和AI的区别是什么?
人工智能·机器学习
睿智的易哥1 小时前
2026年AI+教育的加速跑:从政策到课桌的变革
人工智能
用户8181870627461 小时前
第9章 编程接口与 RPC 协议
人工智能
互联网江湖1 小时前
一加、realme“分家”,OPPO更宠谁?
人工智能
A15362551 小时前
国内进销存软件排名2026 电商&零售企业选型指南
大数据·人工智能·零售
网易云信2 小时前
AI 提效的"组织悖论"——为什么个人越用越强,组织却看不到效果?
人工智能
魔镜er2 小时前
03-张量
人工智能·pytorch·python
后端小肥肠2 小时前
做个人 IP 不用真人出镜,我做了个一键生成 IP 动画视频的 Skill
人工智能·aigc·agent