Model Registry provides a single pane of glass for ML model developers to index and manage models, versions, and ML artifacts metadata. It fills a gap between model experimentation and production activities. It provides a central interface for all stakeholders in the MLOps lifecycle to collaborate on ML models.
Go to file
Manaswini Das 3bfb7cdef7
fix: remove scrollbars from model cards and sort versions by date (#1498)
Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
2025-08-19 15:41:05 +00:00
.github build(deps): bump actions/checkout from 4 to 5 (#1489) 2025-08-18 21:22:04 +00:00
api/openapi feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
bin Fixes #35, refactor DB schema 2023-09-28 18:52:41 -07:00
catalog Add support for Experiment tracking in Model Registry, fixes #1224 (#1318) 2025-08-12 09:26:11 +00:00
clients fix: remove scrollbars from model cards and sort versions by date (#1498) 2025-08-19 15:41:05 +00:00
cmd feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
devenv feat: move to go 1.24 (#1313) 2025-07-14 19:02:37 +00:00
docs feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
gorm-gen feat: move to go 1.24 (#1313) 2025-07-14 19:02:37 +00:00
internal fix: possible int overflow (#1470) 2025-08-14 10:43:13 +00:00
jobs/async-upload feat: add securityContext to async-upload Job sample (#1472) 2025-08-19 13:24:05 +00:00
manifests/kustomize docs: update RELEASE.md for kustomize catalog image too (#1469) 2025-08-18 10:07:04 +00:00
patches OAS: Fix discriminator field definition for Artifact (#22) 2024-03-01 08:39:04 +00:00
pkg feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
proposals docs: Add information about KEPs (#803) 2025-02-17 07:58:39 +00:00
scripts Add support for Experiment tracking in Model Registry, fixes #1224 (#1318) 2025-08-12 09:26:11 +00:00
templates/go-server feat(catalog): implement the getCatalogModel endpoint (#1249) 2025-06-27 17:39:18 +00:00
test feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
.dockerignore More controlled environment in the build (#52) 2024-04-12 07:38:48 +00:00
.gitattributes fix: force line endings to LF (#1290) 2025-07-10 16:16:53 +00:00
.gitignore Add links to existing READMEs and add README for the model catalog (#1416) 2025-08-06 11:34:54 +00:00
.openapi-generator-ignore Initial Model Catalog API (#1209) 2025-06-24 15:34:15 +00:00
.pre-commit-config.yaml Automate openapi server generation (#308) 2024-02-15 11:17:29 +01:00
.readthedocs.yaml Add readthedocs config (#137) 2024-06-28 14:51:41 +00:00
ADOPTERS.md docs: refine ADOPTERS.md description (#1150) 2025-05-27 09:51:32 +00:00
CONTRIBUTING.md docs: add suggestion to add coreutils (#1156) 2025-05-27 09:53:51 +00:00
Dockerfile chore: update go.work.sum file (#1471) 2025-08-14 12:31:14 +00:00
Dockerfile.odh chore: move to more general purpose tag for go 1.24 (#1355) 2025-07-21 14:37:59 +00:00
LICENSE Initial commit 2023-09-15 12:55:39 -05:00
Makefile feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
OWNERS chore: add myself as reviewer (#1282) 2025-07-08 18:29:51 +00:00
README.md feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
RELEASE.md docs: update RELEASE.md for kustomize catalog image too (#1469) 2025-08-18 10:07:04 +00:00
ROADMAP.md docs: document ROADMAP.md per current process (#1110) 2025-05-16 10:57:23 +00:00
SECURITY.md feat(docs): Guide to report security vulnerabilities (#1301) 2025-07-16 15:22:40 +00:00
docker-compose-local.yaml feat: mlmd removal from codebase (#1267) 2025-08-13 13:31:14 +00:00
docker-compose.yaml fix: add image pull policy always to make sure docker compose up uses the latest image, fixes 1478 (#1479) 2025-08-18 05:44:03 +00:00
go.mod build(deps): bump k8s.io/client-go from 0.33.3 to 0.33.4 (#1481) 2025-08-18 21:18:04 +00:00
go.sum build(deps): bump k8s.io/client-go from 0.33.3 to 0.33.4 (#1481) 2025-08-18 21:18:04 +00:00
go.work Make the openapi client a separate Go module (#1322) 2025-07-21 09:37:57 +00:00
go.work.sum chore: update go.work.sum file (#1471) 2025-08-14 12:31:14 +00:00
main.go kubeflow: fix go module and odh. debranding (#15) 2024-02-22 10:54:22 +00:00
openapitools.json Refactor model registry openapi definition. (#66) 2023-10-18 09:15:17 -07:00
tilt-controller.dockerfile build(deps): bump alpine from 3.21 to 3.22 (#1175) 2025-06-10 08:48:52 +00:00
tilt-ui.dockerfile build(deps): bump alpine from 3.21 to 3.22 (#1175) 2025-06-10 08:48:52 +00:00
tilt.dockerfile build(deps): bump alpine from 3.21 to 3.22 (#1175) 2025-06-10 08:48:52 +00:00

README.md

Model Registry

build checks status codecov FOSSA Status OpenSSF Best Practices

Model registry provides a central repository for model developers to store and manage models, versions, and artifacts metadata.

Red Hat's Pledge

  • Red Hat drives the project's development through Open Source principles, ensuring transparency, sustainability, and community ownership.
  • Red Hat values the Kubeflow community and commits to providing a minimum of 12 months' notice before ending project maintenance after the initial release.

Alpha

This Kubeflow component has alpha status with limited support. See the Kubeflow versioning policies. The Kubeflow team is interested in your feedback about the usability of the feature.

  1. Introduction
  1. Installation
  1. Concepts
  1. Python client
  1. Tutorials
  1. FAQs
  2. Development
  1. UI

Pre-requisites:

OpenAPI Proxy Server

The model registry proxy server implementation follows a contract-first approach, where the contract is identified by model-registry.yaml OpenAPI specification.

You can also easily display the latest OpenAPI contract for model-registry in a Swagger-like editor directly from this repository; for example, here.

Starting the OpenAPI Proxy Server

Run the following command to start the OpenAPI proxy server from source:

make run/proxy

The proxy service implements the OpenAPI defined in model-registry.yaml to create a Model Registry specific REST API.

Model registry logical model

For a high-level documentation of the Model Registry logical model, please check this guide.

Model Registry Core

The model registry core is the layer which implements the core/business logic by interacting with the underlying datastore internal service. It provides a model registry domain-specific api that is in charge to proxy all, appropriately transformed, requests to the datastore internal service.

Model registry library

For more background on Model Registry Go core library and instructions on using it, please check getting started guide.

Development

Database Schema Changes

When making changes to the database schema, you need to regenerate the GORM structs. This is done using the gen/gorm target:

make gen/gorm

This target will:

  1. Start a temporary database
  2. Run migrations
  3. Generate GORM structs based on the schema
  4. Clean up the temporary database

NOTE: The target requires Docker to be running.

Building

Run the following command to build the server binary:

make build

The generated binary uses spf13 cmdline args. More information on using the server can be obtained by running the command:

./model-registry --help

Run the following command to clean the server binary, generated models and etc.:

make clean

Testing

Run the following command to trigger all tests:

make test

or, to see the statement coverage:

make test-cover

Docker Image

Building the docker image

The following command builds a docker image for the server with the tag model-registry:

docker build -t model-registry .

Note that the first build will be longer as it downloads the build tool dependencies. Subsequent builds will re-use the cached tools layer.

Running the proxy server

The following command starts the proxy server:

docker run -d -p <hostname>:<port>:8080 --user <uid>:<gid> --name server model-registry proxy -n 0.0.0.0

Where, <uid>, <gid>, and <host-path> are the same as in the migrate command above. And <hostname> and <port> are the local ip and port to use to expose the container's default 8080 listening port. The server listens on localhost by default, hence the -n 0.0.0.0 option allows the server port to be exposed.

Running model registry

NOTE: Docker compose must be installed in your environment.

There are two docker-compose files that make the startup of both model registry and a MySQL database easier, by simply running:

docker compose -f docker-compose[-local].yaml up

The main difference between the two docker compose files is that -local one build the model registry from source, the other one, instead, download the latest pushed quay.io image.

Testing architecture

The following diagram illustrates testing strategy for the several components in Model Registry project:

Go layers components are tested with Unit Tests written in Go, as well as Integration Tests leveraging Testcontainers. This allows to verify the expected "Core layer" of logical data mapping developed and implemented in Go, matches technical expectations.

Python client is also tested with Unit Tests and Integration Tests written in Python.

End-to-end testing is developed with KinD and Pytest; this higher-lever layer of testing is used to demonstrate User Stories from high level perspective.

Model Catalog Service

Kubernetes Components

  • Controller - Kubernetes controller for model registry CRDs
  • CSI Driver - Container Storage Interface for model artifacts

Client Components

Job Components

Development & Deployment

FAQ

How do I delete metadata resources using the Model Registry API?

MR utilizes a common ARCHIVED status for all types. To delete something, simply update its status.

Tips

Pull image rate limiting

Occasionally you may encounter an 'ImagePullBackOff' error when deploying the Model Registry manifests. See example below for the model-registry-db container.

Failed to pull image “mysql:8.3.0”: rpc error: code = Unknown desc = fetching target platform image selected from image index: reading manifest sha256:f9097d95a4ba5451fff79f4110ea6d750ac17ca08840f1190a73320b84ca4c62 in docker.io/library/mysql: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

This error is triggered by the rate limits from docker.io; in this example specifically about the image mysql:8.3.0 (the expanded reference is docker.io/library/mysql:8.3.0). To mitigate this error you could authenticate using image pull secrets for local development; or replace the image used with alternative mirrored images, for instance with the following example:

manifests/kustomize/overlays/db/model-registry-db-deployment.yaml file.

spec.template.spec.containers.image: public.ecr.aws/docker/library/mysql:8.3.0