AI服务器上如何用Docker与Ollama搭好LLMOps运行环境
LLMOps 要管的是模型从上线到迭代的整个运行链路,第一步是把推理服务稳定跑在服务器上。
对只有一两台 GPU 服务器的场景,用 Docker 加 Ollama 搭一个可复现的模型运行环境,比直接裸机运行更容易回滚和迁移。
下面按准备、操作、避坑、验证的顺序讲清楚。
先把 GPU 和容器运行时确认好
在装任何模型服务之前,先确认两件事:驱动能识别显卡,Docker 能把 GPU 透传给容器。
登录服务器后执行:
nvidia-smi
输出中能看到显卡型号、驱动版本和显存占用即可。
接着检查 Docker 是否已经配置 NVIDIA 运行时:
docker info | grep -i runtimes
如果列表里没有 nvidia,需要安装 nvidia-container-toolkit 并重启 Docker。
以常见 Debian/Ubuntu 系统为例,先按 NVIDIA 官方文档添加软件源,再执行:
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
完成后用一个小测试镜像验证 GPU 是否真的进了容器:
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
镜像标签按服务器实际 CUDA 版本选择,不必照抄。
能在容器内看到 nvidia-smi 输出,说明运行时链路没问题,再往下走。
启动 Ollama 并让模型服务常驻
Ollama 适合作为 LLMOps 里的模型运行层,它负责拉取模型、加载到显存并提供 HTTP 接口。
用 Docker 启动时把模型目录挂载到宿主机,容器重建后模型不用重新下载:
docker run -d --gpus all --name ollama \
-p 11434:11434 \
-v /data/ollama:/root/.ollama \
--restart unless-stopped \
ollama/ollama:latest
-v 后面的路径按服务器磁盘规划替换,建议放在空间充足的数据盘。
容器起来后拉取一个模型测试:
docker exec -it ollama ollama pull qwen2.5:7b
拉取完成后用接口验证服务是否响应:
curl http://127.0.0.1:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "用一句话说明什么是LLMOps",
"stream": false
}'
返回 JSON 里有 response 字段就说明模型服务已经可用。
生产环境不要直接把 11434 暴露到公网,应放在 Nginx 反向代理或内网网关后面。
日常运维要盯住的几个点
LLMOps 的运行环境不是启动一次就结束,日常需要关注三类信号。
显存占用:用 nvidia-smi 或 watch -n 2 nvidia-smi 观察模型加载后的显存余量,余量过低时新请求容易失败。
容器日志:执行 docker logs -f ollama 查看模型加载和请求报错,重点看显存不足和模型文件损坏两类信息。
模型目录:/data/ollama 会随模型数量增长,定期用 du -sh /data/ollama 检查磁盘,避免拉取新模型时空间不足。
如果后续要接入监控,可以把 Ollama 的接口延迟和 nvidia-smi 指标采集到 Prometheus,但这属于下一步,先把单机服务跑稳。
容易踩的坑和排查顺序
容器里看不到 GPU,先检查 docker info 是否有 nvidia 运行时,再确认启动命令带了 --gpus all。
模型加载报显存不足,先看模型参数量与显卡显存是否匹配,7B 模型通常需要数 GB 显存,具体占用随量化方式变化。
接口返回超时,先确认容器状态 docker ps,再看日志是否在下载模型,首次拉取大模型耗时较长属于正常现象。
模型目录权限问题,挂载宿主机目录时确保容器内用户可写,否则拉取会失败;
可以先在宿主机对目录执行 chmod 并观察日志确认。
验证配置是否真正生效
最后做一次完整复查:nvidia-smi 能看到显存被模型占用,docker ps 中 ollama 容器状态为 Up,curl 请求返回正常文本。
三项都通过,说明这台 AI 服务器的 LLMOps 运行环境已经可以承接后续的模型版本管理和接口网关配置。
如果还需要批量管理多台 GPU 节点,再考虑用 Ansible 固化上述启动命令和目录结构,避免每台机器手工配置。