• Русский
  • Использование Kubeflow Model Registry

    Kubeflow Model Registry — это центральное хранилище для управления моделями машинного обучения, их версиями и связанной метаданной. Оно позволяет дата-сайентистам публиковать модели, отслеживать их происхождение и совместно работать над разработкой моделей.

    Доступ к Model Registry

    1. Откройте Dashboard: Войдите в центральную панель управления Kubeflow.
    2. Model Registry: Нажмите на Model Registry в боковой панели. Это откроет список зарегистрированных моделей в вашем namespace.

      Примечание: Если вы не видите Model Registry, убедитесь, что экземпляр Model Registry был развернут в вашем namespace администратором платформы.

    Регистрация модели

    Вы можете зарегистрировать модели либо через пользовательский интерфейс, либо программно с помощью Python клиента.

    Вариант 1: Использование UI

    1. Создание зарегистрированной модели:

      • Нажмите Register Model.
      • Model Name: Введите уникальное имя (например, fraud-detection).
      • Description: Добавьте описание.
      • Version details: По желанию добавьте информацию о версии, теги и метаданные.
      • Model Location: Укажите S3/URI к артефакту модели (например, s3://my-bucket/models/fraud-detection/v1/).
      • Нажмите Create.
    2. Создание версии:

      • Нажмите на выпадающее меню рядом с Registered Model и выберите Register New Version.
      • Введите имя версии, описание, метаданные и URI артефакта.
      • Нажмите Register new version.

    Вариант 2: Использование Python клиента

    Вы можете регистрировать модели напрямую из Jupyter Notebook с помощью Python клиента model-registry.

    Требования:

    • Установите клиент: python -m pip install model-registry=="0.3.5" kserve=="0.13"
    • Убедитесь, что у вас есть доступ к сервису Model Registry. Если вы работаете внутри Kubeflow Notebook, можно использовать внутренний DNS сервиса (например, http://model-registry-service.<namespace>.svc:8080).

    Пример кода:

    Ниже приведён пример регистрации модели, хранящейся в S3.

    from model_registry import ModelRegistry
    
    # 1. Подключение к Model Registry
    # Замените на адрес вашего сервиса Model Registry
    # Внутри кластера обычно: "http://model-registry-service.<namespace>.svc.cluster.local:8080"
    registry = ModelRegistry(
        server_address="http://model-registry-service.kubeflow.svc.cluster.local",
        port=8080,
        author="your name",
        is_secure=False
    )
    
    # 2. Регистрация новой модели
    rm = registry.register_model(
        "iris",
        "s3://kfserving-examples/models/sklearn/1.0/model",
        model_format_name="sklearn",
        model_format_version="1",
        version="v1",
        description="Iris scikit-learn model",
        metadata={
            "accuracy": 3.14,
            "license": "BSD 3-Clause License",
        }
    )
    
    # 3. Получение информации о модели
    model = registry.get_registered_model("iris")
    print("Registered Model:", model, "with ID", model.id)
    
    version = registry.get_model_version("iris", "v1")
    print("Model Version:", version, "with ID", version.id)
    
    art = registry.get_model_artifact("iris", "v1")
    print("Model Artifact:", art, "with ID", art.id)
    

    Развёртывание зарегистрированной модели

    После регистрации модели вы можете развернуть её как InferenceService с помощью KServe.

    Для развёртывания обычно требуется URI артефакта модели. Его можно получить из UI Registry или через Python API:

    from kubernetes import client
    import kserve
    
    isvc = kserve.V1beta1InferenceService(
        api_version=kserve.constants.KSERVE_GROUP + "/v1beta1",
        kind=kserve.constants.KSERVE_KIND,
        metadata=client.V1ObjectMeta(
            name="iris-model",
            namespace=kserve.utils.get_default_target_namespace(),
            labels={
                "modelregistry/registered-model-id": model.id,
                "modelregistry/model-version-id": version.id,
            },
        ),
        spec=kserve.V1beta1InferenceServiceSpec(
            predictor=kserve.V1beta1PredictorSpec(
                model=kserve.V1beta1ModelSpec(
                    storage_uri=art.uri,
                    model_format=kserve.V1beta1ModelFormat(
                        name=art.model_format_name, version=art.model_format_version
                    ),
                )
            )
        ),
    )
    ks_client = kserve.KServeClient()
    ks_client.create(isvc)

    После развёртывания контроллер KServe загрузит модель с указанного S3 URI и запустит сервер инференса.