Model Registry
Реестр моделей — это версионируемый каталог обученных моделей и их метаданных, в котором указано, какая версия одобрена и какая используется в производственной среде.
Реестр моделей — это версионируемый каталог обученных моделей машинного обучения. Каждая запись содержит артефакт модели, например файл с весами модели, а также метаданные, необходимые для доверия к ней: обучающий запуск, в результате которого она создана, версию данных, метрики оценки, такие как средняя точность (mAP), схемы входных и выходных данных, владельца и статус утверждения. Вместо того чтобы передавать файлы весов друг другу, конвейеры развёртывания и приложения запрашивают из реестра именованную версию или версию с текущей меткой production. Так каждый выпуск и каждый откат ссылаются на конкретную зарегистрированную модель. В операциях машинного обучения (MLOps) реестр находится между отслеживанием экспериментов и развёртыванием моделей. Среди широко используемых реестров — Model Registry от MLflow, Amazon SageMaker Model Registry, Vertex AI Model Registry и реестр Weights & Biases.
Как работает реестр моделей#
Зарегистрированная модель — это имя, например defect-detector, за которым хранится последовательность версий. После регистрации каждая версия неизменна: новые веса всегда становятся новой версией, а версия 7 всегда соответствует одним и тем же байтам. Обычно для версии записывают:
- Происхождение: Идентификатор запуска, коммит кода, версия набора данных и родительская модель, на основе которых она создана.
- Результаты оценки: Метрики проверки, а также задержка и потребление памяти на каждом целевом устройстве.
- Сигнатура: Ожидаемая схема входных и выходных данных, благодаря которой запрос с неверной размерностью сразу завершается ошибкой.
- Карточка модели: Документация о предполагаемом применении, обучающих данных и известных ограничениях.
- Статус: Теги и псевдонимы, обозначающие состояние версии.
Платформа Ultralytics хранит такие сведения для каждого размещённого на ней запуска обучения YOLO: на странице модели указаны родительская модель, закреплённая версия набора данных, коммит Git, версия ultralytics, гиперпараметры, итоговые метрики и воспроизводимая команда yolo train; поле Custom Metadata принимает объект JSON для отслеживания выпусков или управления.
В старых реестрах версия проходила фиксированные этапы, например Staging, Production и Archived. В версии 2.9.0 MLflow отказался от этапов в пользу псевдонимов — изменяемых именованных указателей, например @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, и тот же URI models:/iris-classifier@champion следует за псевдонимом к новой версии без изменений в коде загрузки.
Реестр моделей и связанные инструменты#
- Отслеживание экспериментов: Записывает каждый обучающий запуск, в том числе множество запусков, которые так и не используются. В реестре хранятся лишь перспективные для развёртывания кандидаты, и каждая версия связана с соответствующим запуском.
- Объектное хранилище: В нём хранятся файлы, например в хранилищах Amazon S3. Реестр добавляет версии, метаданные и контроль доступа, а зачастую сохраняет только указатель на файл в хранилище.
- Хранилище признаков: Версионирует и предоставляет входные признаки, которые используют модели; сами модели хранятся в реестре.
- Реестр контейнеров: Хранит образы Docker, в которых работают модели; поэтому при развёртывании обычно указывают один тег образа и одну версию модели.
- Hugging Face Hub: Размещает общедоступные и приватные модели в репозиториях Git с историей коммитов и карточкой модели на главной странице каждого репозитория, выступая реестром моделей с открытыми весами.










