(三十二)组合训练任务与预测服务
# 项目文件:model_project/compose.yaml
# 先运行训练任务生成模型,再启动读取同一卷的预测服务。
services:
trainer:
build: .
profiles: ["jobs"]
command: ["model-lab", "train", "--version", "v1"]
volumes: ["model-data:/models"]
healthcheck:
disable: true
web:
build: .
volumes: ["model-data:/models:ro"]
ports: ["127.0.0.1:8782:8782"]
restart: unless-stopped
volumes:
model-data:训练容器能写 /models;预测容器将同一个卷挂为只读。模型版本在服务外产生,完整发布后再启动查询它的工作进程。
# 在 model_project 中构建镜像,先完成 v1 的训练发布。
docker compose build
docker compose run --rm trainer
# 然后启动读取模型卷的服务,查看实际加载版本。
docker compose up -d web
curl http://127.0.0.1:8782/model
启动前没有完整版本,服务会因装载失败而退出;查看日志、运行训练任务后再启动。训练命令、模型根目录和服务挂载的目录必须对应同一模型卷。
# 发布 v2,此时旧服务仍保持内存中的 v1。
docker compose run --rm trainer model-lab train --version v2 --seed 8
# 重开工作进程,随后检查 /model 是否显示 v2。
docker compose restart web
# 回退:验证并切回 v1,重开后再核对 /model 与同一条预测。
docker compose run --rm trainer model-lab activate v1
docker compose restart web
复制模型时保存整个根目录:所有完整版本、清单和 current.json。单独复制 weights.pt 会漏掉预处理和特征说明。恢复到新卷后,先执行 verify,再启动服务核对版本与预测值。