AI服务器MLOps配置:用Docker和MLflow管好训练环境
AI服务器做MLOps配置,核心不是一次性装齐所有平台,而是先把GPU容器运行环境和实验跟踪服务跑通。
本文面向单台或少量GPU服务器,从零完成Docker GPU支持、MLflow服务部署和训练任务接入跟踪,每一步都有命令和验证方式。
如果服务器数量多、需要Kubernetes调度,本文的Compose方案只适合作为起步验证。
先确认GPU和容器环境
在动手配置前,先确认驱动和显卡状态正常,否则后面所有容器步骤都会失败。
nvidia-smi
输出中能看到显卡型号、驱动版本和显存占用,说明驱动正常。
接着检查Docker是否已安装:
docker --version
如果提示命令不存在,先按系统发行版安装Docker。
这里不展开系统安装,默认Docker已可用。
准备条件还包括:至少一张NVIDIA显卡,服务器能访问镜像仓库,磁盘预留20GB以上用于镜像和实验数据。
装好NVIDIA容器运行时
普通Docker容器默认看不到GPU,需要安装NVIDIA Container Toolkit并配置为Docker的运行时。
以Ubuntu系统为例:
sudo apt-get update
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.2.0-base-ubuntu22.04 nvidia-smi
如果容器内能打印出和宿主机一致的显卡信息,
说明运行时配置成功。这一步失败时不要继续往下走,
先检查/etc/docker/daemon.json中是否出现nvidia运行时配置,
以及Docker服务是否重启成功。
用Docker Compose部署MLflow跟踪服务
MLflow是常用的实验跟踪和模型登记工具,适合作为MLOps的第一块拼图。
在服务器上建一个目录存放配置:
mkdir -p /opt/mlops/mlflow && cd /opt/mlops/mlflow
创建docker-compose.yml,用SQLite存储元数据,适合单机起步:
services:
mlflow:
image: ghcr.io/mlflow/mlflow:v2.11.3
container_name: mlflow
restart: unless-stopped
ports:
- "5000:5000"
volumes:
- ./mlruns:/mlruns
command: >
mlflow server
--backend-store-uri sqlite:////mlruns/mlflow.db
--default-artifact-root /mlruns/artifacts
--host 0.0.0.0
--port 5000
启动服务并检查状态:
docker compose up -d
docker compose ps
curl -s http://127.0.0.1:5000/health
health接口返回正常即表示服务可用。
浏览器访问http://服务器IP:5000能看到MLflow界面。注意镜像版本不要随意写成latest,固定版本便于后续复现;
端口5000若被占用,改成其他端口并同步修改训练代码中的跟踪地址。
在训练容器里接入跟踪
MLOps配置的关键是让训练任务自动上报参数、指标和产物。
以Python训练脚本为例,在训练镜像中安装MLflow客户端:
pip install mlflow==2.11.3
训练脚本开头指定跟踪服务地址,并记录一次实验:
import mlflow
mlflow.set_tracking_uri("http://127.0.0.1:5000")
mlflow.set_experiment("gpu-train-demo")
with mlflow.start_run():
mlflow.log_param("lr", 0.001)
mlflow.log_metric("loss", 0.42)
mlflow.log_artifact("model.pt")
如果用Docker运行训练任务,记得带上--gpus all,并把跟踪地址改为宿主机可访问的地址。
运行后在MLflow界面中能看到实验记录,说明接入成功。训练容器内不要写127.0.0.1指向宿主机,容器里的回环地址指向容器自身,应使用宿主机IP或Compose服务名。
常见报错和避坑
- 容器内
nvidia-smi报permission denied:检查是否以--gpus all启动,以及当前用户是否在docker组中。 - MLflow界面打不开:先
docker compose logs mlflow查看启动日志,常见原因是SQLite路径权限或端口冲突。 - 训练脚本连不上跟踪服务:确认训练容器和MLflow服务网络互通,防火墙放行5000端口,跟踪地址不要用容器内部回环地址。
- 实验数据越积越多:SQLite适合单机验证,数据量增长后建议换成MySQL或PostgreSQL作为后端存储,迁移前做好
mlruns目录备份。 - 不要在生产训练容器里直接
pip install后不固定版本,建议把依赖写进镜像构建文件,保证环境可复现。
验证整套配置是否可用
按顺序做三项检查:宿主机nvidia-smi正常;
GPU测试容器能输出显卡信息;
训练脚本运行后在MLflow界面出现对应的实验和指标。
三项都通过,说明AI服务器MLOps的基础链路已经跑通。
后续再考虑加入模型登记、自动化流水线和监控告警,不必一次配全。
如果训练任务需要多台服务器协同,单机Compose方案不够用,应转向Kubernetes加GPU调度器;
如果只是验证流程和记录实验,本文配置足够支撑起步。