大模型MLOps实践:从环境准备到模型上线的完整流程
大模型MLOps实践的核心目标,是把模型训练、版本管理、部署和监控串成可重复执行的流程,而不是每次靠手工脚本临时拼凑。
如果你刚开始接触,建议先在一台测试服务器上跑通最小闭环:记录一次训练实验、部署一个推理服务、看到监控指标,再逐步扩展。
先确认环境与工具链
开始前需要准备一台 Linux 服务器(建议 Ubuntu 22.04 或同级别系统),安装 Docker 和 Docker Compose,并确保 Python 3.9 以上可用。
大模型场景对磁盘和内存要求较高,测试阶段至少预留 50GB 磁盘空间。
核心工具选型可以先用 MLflow 做实验跟踪和模型注册,用 Docker 打包推理服务,用 Prometheus 加 Grafana 做基础监控。
这套组合不需要复杂集群,适合零基础起步。
检查基础环境:
docker --version
docker compose version
python3 --version
如果 Docker 未安装,按官方文档添加软件源后安装即可,不要直接复制来路不明的安装脚本。
用 MLflow 记录训练实验
MLflow 的作用是记录每次训练的参数、指标和模型文件,避免“这个模型是哪次跑出来的”说不清楚。
启动一个本地 MLflow 服务:
mkdir -p ~/mlops/mlruns
cd ~/mlops
docker run -d --name mlflow \
-p 5000:5000 \
-v $(pwd)/mlruns:/mlruns \
ghcr.io/mlflow/mlflow:latest \
mlflow server --host 0.0.0.0 --backend-store-uri /mlruns
启动后访问 http://服务器IP:5000 应能看到 MLflow 界面。
训练脚本中加几行记录代码:
import mlflow
mlflow.set_tracking_uri("http://服务器IP:5000")
mlflow.set_experiment("llm-finetune-test")
with mlflow.start_run():
mlflow.log_param("learning_rate", 2e-5)
mlflow.log_metric("train_loss", 0.85)
mlflow.log_artifact("./output/model.safetensors")
运行后回到 MLflow 界面,确认实验列表里出现记录,参数和指标可见,这一步就算通过。
把推理服务打包成容器
模型训练完成后,需要以服务形式提供推理接口。
建议用 FastAPI 写一个最小推理服务,再用 Docker 构建镜像。
注意大模型权重文件不要打进镜像,而是通过挂载目录或对象存储加载。
一个最小 Dockerfile 示例:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
构建并运行:
docker build -t llm-inference:v1 .
docker run -d --name llm-inference \
-p 8000:8000 \
-v /data/models:/models \
llm-inference:v1
验证服务是否正常:
curl http://127.0.0.1:8000/health
返回 {"status":"ok"} 说明服务已启动。
再发一条真实推理请求,确认模型能加载并返回结果。
监控与版本回滚
服务上线后至少监控三项:请求成功率、响应延迟、容器资源占用。
可以在推理服务里暴露 /metrics 接口,用 Prometheus 抓取,Grafana 展示。
Docker 层面先做基础检查:
docker stats --no-stream
docker logs --tail 100 llm-inference
如果响应变慢或报错增多,优先检查模型文件是否加载完整、显存是否不足、请求并发是否超过服务承受能力。
每次发布新镜像时使用不同 tag(如 v1、v2),回滚时直接切回上一个 tag 重新运行容器,不要覆盖旧镜像。
常见坑与避坑提醒
- 模型权重文件体积大,放进 Git 或镜像会导致构建极慢,应使用外部存储挂载。
- MLflow 的
backend-store-uri如果指向容器内临时目录,容器重启后实验记录会丢失,务必挂载持久化目录。 - 推理服务不要用
latest标签长期运行,出问题时无法确定对应版本。 - 修改防火墙或安全组开放端口前,先确认只对必要来源开放,避免推理接口暴露在公网被滥用。
跑通以上流程后,你已经完成了一次最小可行的大模型MLOps实践。
后续再按需加入数据版本管理、自动化流水线和告警规则,不要一开始就堆太多组件。