Model Registry
模型注册表是一个经过版本管理的已训练模型及其元数据目录,用于记录哪个版本已获批准、哪个版本正在生产环境中提供服务。
模型注册表是经过版本管理的已训练机器学习模型目录。每个条目都存储模型制品(例如模型权重文件),以及可用于确认其可信度的元数据:生成模型的训练运行、数据版本、平均精度均值 (mAP)等评估指标、输入和输出架构、负责人以及审批状态。部署流水线和应用会从注册表请求指定版本,或请求当前标记为生产版本的模型,而不是四处传递权重文件,因此每次发布和回滚都对应一个精确记录的模型。在机器学习运维 (MLOps)中,注册表位于实验跟踪和模型部署之间。常用注册表包括MLflow Model Registry、Amazon SageMaker Model Registry、Vertex AI Model Registry 和 Weights & Biases Registry。
模型注册表的工作原理#
已注册模型是一个名称,例如 defect-detector,它包含一系列版本。每个版本注册后都不可变,因此新权重总会成为新版本,版本 7 始终代表相同的字节内容。一个版本通常会记录:
- 溯源信息:生成该模型的运行 ID、代码提交、数据集版本和父模型。
- 评估结果:验证指标,以及在每个目标设备上测得的延迟和内存占用。
- 签名:预期的输入和输出架构,这样调用方传入错误形状时就会立即失败。
- 模型卡:记录预期用途、训练数据和已知局限性的文档。
- 状态:标记版本所处位置的标签和别名。
Ultralytics Platform 会为托管的每次 YOLO 训练运行保存此类记录:模型页面会列出父模型、固定的数据集版本、Git 提交、ultralytics 版本、超参数、最终指标和可复现的 yolo train 命令;自定义元数据字段则接受 JSON 对象,可用于发布跟踪或治理。
较早的注册表会让每个版本依次经过固定阶段,例如 Staging、Production 和 Archived。MLflow 在 2.9.0 版中弃用了阶段,改用别名,也就是类似 @champion 这样的可变命名指针,团队可以在不同版本之间移动该指针。Amazon SageMaker 会为每个版本跟踪 PendingManualApproval、Approved 或 Rejected 审批状态。提升模型意味着移动其别名,回滚则意味着将别名移回:
注册表还会控制谁可以执行哪些更改。数据科学家可以注册版本,指定的审核人员可以移动生产别名,所有更改都会写入审计日志。团队通常会将这些事件接入自动化流程,因此批准某个版本会启动部署流水线,而关于数据漂移的模型监控警报则会启动重新训练,并注册下一个候选版本。
MLflow 注册表只需几行代码便展示了这一模式。此脚本会训练一个小型 scikit-learn 分类器、注册该模型、将 champion 别名指向新版本,并通过该别名加载模型,这正是模型服务代码查找当前生产模型的方式:
import mlflow
from mlflow import MlflowClient
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# Keep runs and registered model versions in a local SQLite file
mlflow.set_tracking_uri("sqlite:///mlflow.db")
X, y = load_iris(return_X_y=True)
# Log a trained model inside a run, then register it as a new version
with mlflow.start_run():
model = LogisticRegression(max_iter=200).fit(X, y)
info = mlflow.sklearn.log_model(model, name="model")
version = mlflow.register_model(info.model_uri, "iris-classifier")
# Point the "champion" alias at this version; applications load the alias
MlflowClient().set_registered_model_alias("iris-classifier", "champion", version.version)
champion = mlflow.pyfunc.load_model("models:/iris-classifier@champion")
print(f"version {version.version}:", champion.predict(X[:3]))在全新的数据库上运行时,脚本会打印 version 1: [0 0 0],即已注册的版本,以及模型对前三种花卉的预测类别。再次运行时,脚本会注册版本 2;相同的 models:/iris-classifier@champion URI 会自动通过别名指向新版本,而加载代码无需任何改动。
模型注册表与相关工具的区别#
- 实验跟踪:记录每次训练运行,包括许多最终不会使用的运行。注册表只保留值得部署的少数候选模型,并将每个版本关联回相应的运行。
- 对象存储:Amazon S3 等存储桶负责保存文件。注册表增加了版本、元数据和访问控制,并且通常只在注册表中保存指向存储桶文件的指针。
- 特征存储:对模型使用的输入特征进行版本管理并提供服务,模型本身则保存在注册表中。
- 容器注册表:存储运行模型的 Docker 镜像,因此部署通常会指定一个镜像标签和一个模型版本。
- Hugging Face Hub:通过 Git 仓库托管公开和私有模型,提供提交历史,并在每个仓库首页展示模型卡,因此它也是开放权重模型的注册表。










