使用 Kubeflow Model Registry

Kubeflow Model Registry 是一个用于管理机器学习模型、其版本及相关元数据的中央存储库。它允许数据科学家发布模型、追踪模型血缘,并协作进行模型开发。

访问 Model Registry

  1. 打开监控面板:登录到 Kubeflow 中央监控面板。
  2. Model Registry:点击侧边栏中的 Model Registry。这将带您进入您命名空间中已注册模型的列表。

    注意:如果您未看到 Model Registry,请确保平台管理员已在您的命名空间中部署了 Model Registry 实例。

注册模型

您可以通过用户界面或使用 Python 客户端以编程方式注册模型。

选项 1:使用 UI

  1. 创建已注册模型

    • 点击 Register Model
    • 模型名称:输入唯一名称(例如 fraud-detection)。
    • 描述:添加描述。
    • 版本详情:可选地添加版本信息、标签和元数据。
    • 模型位置:提供模型工件的 S3/URI(例如 s3://my-bucket/models/fraud-detection/v1/)。
    • 点击 Create
  2. 创建版本

    • 点击 Registered Model 旁的下拉菜单,选择 Register New Version
    • 输入版本名称、描述、元数据和工件 URI。
    • 点击 Register new version

选项 2:使用 Python 客户端

您可以使用 model-registry Python 客户端直接从 Jupyter Notebook 注册模型。

前提条件

  • 安装客户端: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)

部署已注册模型

模型注册后,您可以使用 KServe 将其部署为 InferenceService

部署时,通常需要模型工件的 URI。您可以从 Registry UI 或通过 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 拉取模型并启动推理服务器。