生产环境配置

将 Ollama 部署到生产环境需要考虑性能、安全、可靠性等因素。 Ollama 在生产环境中的配置最佳实践,包括性能优化、安全配置等。

硬件规划

服务器配置建议

规模CPU内存GPU存储
小型8核32GBRTX 3060 12GB500GB SSD
中型16核64GBRTX 4090 24GB1TB SSD
大型32核128GBA100 40GB2TB NVMe

模型与硬件匹配

模型规模最小内存推荐内存GPU 显存
7B8GB16GB6GB+
13B16GB32GB12GB+
33B32GB64GB24GB+
70B64GB128GB48GB+

性能优化

GPU 优化

# 设置 GPU 层数
PARAMETER num_gpu 35

# 低显存模式
PARAMETER low_vram true

内存优化

# 使用内存映射
PARAMETER use_mmap true

# 锁定内存(防止交换)
PARAMETER use_mlock true

并发配置

# 最大并行请求数
OLLAMA_NUM_PARALLEL=4

# 最大加载模型数
OLLAMA_MAX_LOADED_MODELS=2

上下文优化

# 根据需求调整上下文长度
PARAMETER num_ctx 4096

安全配置

网络安全

# 限制监听地址
OLLAMA_HOST=127.0.0.1:11434

# 配置防火墙
sudo ufw allow from 10.0.0.0/8 to any port 11434

访问控制

使用反向代理添加认证:

Nginx 配置示例:

server {
    listen 80;
    server_name ollama.example.com;

    location / {
        auth_basic "Ollama API";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

创建密码文件:

sudo htpasswd -c /etc/nginx/.htpasswd admin

API Key 认证

可以使用中间件实现 API Key 认证:

version: '3.8'

services:
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama

  proxy:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - ollama

高可用配置

负载均衡

upstream ollama {
    server 10.0.0.1:11434;
    server 10.0.0.2:11434;
    server 10.0.0.3:11434;
}

server {
    listen 80;
    
    location / {
        proxy_pass http://ollama;
        proxy_set_header Host $host;
    }
}

健康检查

#!/bin/bash
# health-check.sh

response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:11434/api/version)

if [ "$response" != "200" ]; then
    echo "Ollama is unhealthy"
    # 发送告警
    exit 1
fi

echo "Ollama is healthy"
exit 0

自动重启

[Service]
Restart=always
RestartSec=10
StartLimitIntervalSec=60
StartLimitBurst=3

监控配置

Prometheus 指标

Ollama 本身不直接提供 Prometheus 指标,但可以通过日志和 API 获取信息。

日志收集

# docker-compose.yml
services:
  ollama:
    image: ollama/ollama
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"

资源监控

# 监控 GPU
watch -n 1 nvidia-smi

# 监控内存
watch -n 1 free -h

# 监控进程
top -p $(pgrep ollama)

备份策略

模型备份

#!/bin/bash
# backup-models.sh

BACKUP_DIR="/backup/ollama"
DATE=$(date +%Y%m%d)

# 备份模型目录
tar czf "$BACKUP_DIR/models-$DATE.tar.gz" /usr/share/ollama/.ollama/models

# 保留最近 7 天的备份
find "$BACKUP_DIR" -name "models-*.tar.gz" -mtime +7 -delete

定时备份

# 添加到 crontab
0 2 * * * /path/to/backup-models.sh

容量规划

估算公式

所需内存 ≈ 模型大小 × 1.5
所需显存 ≈ 模型大小 × 1.2

示例计算

模型模型大小所需内存所需显存
Llama 3.2 3B2GB3GB2.4GB
Llama 3.1 8B4.7GB7GB5.6GB
Llama 3.1 70B40GB60GB48GB

故障处理

常见故障

故障可能原因解决方法
服务无响应内存不足重启服务,增加内存
GPU 未识别驱动问题更新驱动
模型加载失败文件损坏重新下载模型
响应缓慢资源竞争限制并发数

故障恢复流程

  1. 检查服务状态
  2. 查看日志
  3. 检查资源使用
  4. 重启服务
  5. 必要时回滚

更新策略

测试环境验证

# 在测试环境先验证
docker run -d --name ollama-test -p 11435:11434 ollama/ollama:latest

滚动更新

# 逐个更新节点
docker pull ollama/ollama
docker stop ollama-node1
docker rm ollama-node1
docker run -d --name ollama-node1 ollama/ollama
# 验证后继续下一个节点