将 Ollama 部署到生产环境需要考虑性能、安全、可靠性等因素。 Ollama 在生产环境中的配置最佳实践,包括性能优化、安全配置等。
| 规模 | CPU | 内存 | GPU | 存储 |
|---|---|---|---|---|
| 小型 | 8核 | 32GB | RTX 3060 12GB | 500GB SSD |
| 中型 | 16核 | 64GB | RTX 4090 24GB | 1TB SSD |
| 大型 | 32核 | 128GB | A100 40GB | 2TB NVMe |
| 模型规模 | 最小内存 | 推荐内存 | GPU 显存 |
|---|---|---|---|
| 7B | 8GB | 16GB | 6GB+ |
| 13B | 16GB | 32GB | 12GB+ |
| 33B | 32GB | 64GB | 24GB+ |
| 70B | 64GB | 128GB | 48GB+ |
# 设置 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 认证:
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
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 3B | 2GB | 3GB | 2.4GB |
| Llama 3.1 8B | 4.7GB | 7GB | 5.6GB |
| Llama 3.1 70B | 40GB | 60GB | 48GB |
| 故障 | 可能原因 | 解决方法 |
|---|---|---|
| 服务无响应 | 内存不足 | 重启服务,增加内存 |
| GPU 未识别 | 驱动问题 | 更新驱动 |
| 模型加载失败 | 文件损坏 | 重新下载模型 |
| 响应缓慢 | 资源竞争 | 限制并发数 |
# 在测试环境先验证
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
# 验证后继续下一个节点