1. 项目概述:Docker-Compose部署Ollama GPU加速方案
在本地运行大语言模型时,GPU加速能显著提升推理速度。Ollama作为轻量级LLM运行框架,结合Docker-Compose的容器编排能力,可以快速搭建支持GPU加速的私有模型服务。这个方案特别适合需要在开发环境快速部署测试、又希望充分利用本地显卡资源的场景。
我最近在RTX 3090显卡的Ubuntu工作站上实测,通过Docker-Compose部署Ollama后,7B参数的Llama2模型推理速度比纯CPU模式提升了8-10倍。下面将详细介绍从环境准备到优化配置的全过程,包括NVIDIA驱动兼容性检查、CUDA容器配置技巧以及国内镜像加速等实用方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖检查
2.1 硬件与驱动要求
首先确认你的GPU满足以下最低要求:
- NVIDIA显卡(计算能力≥3.5)
- 驱动版本≥450.80.02
- 显存≥8GB(运行7B模型的最低要求)
通过nvidia-smi命令检查驱动状态,正常情况应显示如下信息:
bash复制+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| 30% 45C P8 25W / 350W | 234MiB / 24576MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
注意:如果遇到"a d3d11-compatible gpu (feature level 11.0, shader model 5.0) is required"错误,说明驱动不兼容,需要更新NVIDIA驱动。
2.2 Docker环境配置
安装Docker和NVIDIA Container Toolkit:
bash复制# Ubuntu安装示例
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu20.04/$(arch) /" | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
验证nvidia-docker是否正常工作:
bash复制docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
3. Docker-Compose配置解析
3.1 基础编排文件
创建docker-compose.yml文件,核心配置如下:
yaml复制version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all
- OLLAMA_HOST=0.0.0.0
volumes:
- ./ollama_data:/root/.ollama
ports:
- "11434:11434"
restart: unless-stopped
关键参数说明:
capabilities: [gpu]:启用容器GPU支持NVIDIA_VISIBLE_DEVICES=all:暴露所有GPU设备- 数据卷映射确保模型持久化存储
3.2 国内镜像加速方案
针对ollama下载慢的问题,可以通过配置国内镜像源解决:
yaml复制environment:
- OLLAMA_REPO=https://ollama.mirrors.ustc.edu.cn/
或者使用预拉取镜像的方式:
bash复制# 先在有加速环境的主机拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/ollama/ollama:latest
# 修改compose文件使用本地镜像
image: registry.cn-hangzhou.aliyuncs.com/ollama/ollama:latest
4. 部署与模型管理
4.1 启动服务
bash复制docker-compose up -d
检查GPU是否被正确识别:
bash复制docker exec ollama ollama list
4.2 模型操作示例
下载Llama2 7B模型(建议使用screen保持会话):
bash复制docker exec -it ollama ollama pull llama2:7b
启动模型推理:
bash复制docker exec ollama ollama run llama2 "Explain GPU acceleration in simple terms"
4.3 性能监控
通过nvtop工具实时监控GPU使用情况:
bash复制docker stats ollama # 查看容器资源占用
watch -n 1 nvidia-smi # GPU使用率监控
5. 常见问题排查
5.1 GPU未被容器识别
症状:模型运行速度与CPU模式无异,日志无GPU相关信息
排查步骤:
- 检查
docker info | grep Runtimes是否包含nvidia - 确认
/etc/docker/daemon.json包含:
json复制{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
- 重启docker服务:
sudo systemctl restart docker
5.2 显存不足错误
当遇到CUDA out of memory错误时,可以尝试:
- 减小批处理大小:
OLLAMA_NUM_GPU=1 - 使用量化模型:
ollama pull llama2:7b-q4_0 - 限制GPU内存:在compose文件中添加:
yaml复制environment:
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
- NVIDIA_REQUIRE_CUDA="cuda>=11.0"
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
5.3 模型下载中断
解决方案:
- 使用wget预先下载模型文件到挂载目录
- 设置重试参数:
bash复制docker exec ollama ollama pull --insecure llama2:7b
6. 高级配置技巧
6.1 多GPU负载均衡
对于多显卡环境,可以通过环境变量指定使用的GPU:
yaml复制environment:
- NVIDIA_VISIBLE_DEVICES=0,1 # 使用前两块GPU
6.2 性能优化参数
在docker-compose.yml中添加以下环境变量可提升性能:
yaml复制environment:
- OLLAMA_KEEP_ALIVE=5m # 保持模型加载状态
- OLLAMA_NUM_PARALLEL=2 # 并行请求数
- OLLAMA_MAX_LOADED_MODELS=3 # 内存中保留的模型数
6.3 安全加固建议
生产环境部署时建议:
- 启用TLS加密:
bash复制docker exec ollama ollama serve --tls --tls-cert=/path/to/cert.pem --tls-key=/path/to/key.pem
- 设置访问密码:
yaml复制environment:
- OLLAMA_AUTH=require
- OLLAMA_USER=admin
- OLLAMA_PASS=yourpassword
我在实际部署中发现,对于消费级显卡(如RTX 3060 Ti),建议使用4-bit量化的模型版本,可以在保持较好精度的同时将显存占用降低40%左右。另外,定期清理/root/.ollama/cache可以释放磁盘空间,这个目录通过数据卷映射到了主机的./ollama_data目录。
