W&B will no longer support W&B Model Registry after 2024. Users are encouraged to instead use W&B Registry for linking and sharing their model artifacts versions. W&B Registry broadens the capabilities of the legacy W&B Model Registry. For more information about W&B Registry, see the Registry docs.
W&B will migrate existing model artifacts linked to the legacy Model Registry to the new W&B Registry in the Fall or early Winter of 2024. See Migrating from legacy Model Registry for information about the migration process.
The W&B Model Registry houses a team’s trained models where ML Practitioners can publish candidates for production to be consumed by downstream teams and stakeholders. It is used to house staged/candidate models and manage workflows associated with staging.
Move model versions through its ML lifecycle; from staging to production.
Track a model’s lineage and audit the history of changes to production models.
How it works
Track and manage your staged models with a few simple steps.
Log a model version: In your training script, add a few lines of code to save the model files as an artifact to W&B.
Compare performance: Check live charts to compare the metrics and sample predictions from model training and validation. Identify which model version performed the best.
Link to registry: Bookmark the best model version by linking it to a registered model, either programmatically in Python or interactively in the W&B UI.
The following code snippet demonstrates how to log and link a model to the Model Registry:
import wandb
import random
# Start a new W&B runrun = wandb.init(project="models_quickstart")
# Simulate logging model metricsrun.log({"acc": random.random()})
# Create a simulated model filewith open("my_model.h5", "w") as f:
f.write("Model: "+ str(random.random()))
# Log and link the model to the Model Registryrun.link_model(path="./my_model.h5", registered_model_name="MNIST")
run.finish()
Connect model transitions to CI/DC workflows: transition candidate models through workflow stages and automate downstream actions with webhooks or jobs.
How to get started
Depending on your use case, explore the following resources to get started with W&B Models:
Use the W&B Model Registry to manage and version your models, track lineage, and promote models through different lifecycle stages
Automate your model management workflows using webhooks.
See how the Model Registry integrates with external ML systems and tools in your model development lifecycle for model evaluation, monitoring, and deployment.
1 - Tutorial: Use W&B for model management
Learn how to use W&B for Model Management
The following walkthrough shows you how to log a model to W&B. By the end of the walkthrough you will:
Create and train a model with the MNIST dataset and the Keras framework.
Log the model that you trained to a W&B project
Mark the dataset used as a dependency to the model you created
Link the model to the W&B Registry.
Evaluate the performance of the model you link to the registry
Mark a model version ready for production.
Copy the code snippets in the order presented in this guide.
Code not unique to the Model Registry are hidden in collapsible cells.
Setting up
Before you get started, import the Python dependencies required for this walkthrough:
import wandb
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from wandb.integration.keras import WandbMetricsLogger
from sklearn.model_selection import train_test_split
Provide your W&B entity to the entity variable:
entity ="<entity>"
Create a dataset artifact
First, create a dataset. The proceeding code snippet creates a function that downloads the MNIST dataset:
Next, upload the dataset to W&B. To do this, create an artifact object and add the dataset to that artifact.
project ="model-registry-dev"model_use_case_id ="mnist"job_type ="build_dataset"# Initialize a W&B runrun = wandb.init(entity=entity, project=project, job_type=job_type)
# Create W&B Table for training datatrain_table = wandb.Table(data=[], columns=[])
train_table.add_column("x_train", x_train)
train_table.add_column("y_train", y_train)
train_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_train"])})
# Create W&B Table for eval dataeval_table = wandb.Table(data=[], columns=[])
eval_table.add_column("x_eval", x_eval)
eval_table.add_column("y_eval", y_eval)
eval_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_eval"])})
# Create an artifact objectartifact_name ="{}_dataset".format(model_use_case_id)
artifact = wandb.Artifact(name=artifact_name, type="dataset")
# Add wandb.WBValue obj to the artifact.artifact.add(train_table, "train_table")
artifact.add(eval_table, "eval_table")
# Persist any changes made to the artifact.artifact.save()
# Tell W&B this run is finished.run.finish()
Storing files (such as datasets) to an artifact is useful in the context of logging models because you lets you track a model’s dependencies.
Train a model
Train a model with the artifact dataset you created in the previous step.
Declare dataset artifact as an input to the run
Declare the dataset artifact you created in a previous step as the input to the W&B run. This is particularly useful in the context of logging models because declaring an artifact as an input to a run lets you track the dataset (and the version of the dataset) used to train a specific model. W&B uses the information collected to create a lineage map.
Use the use_artifact API to both declare the dataset artifact as the input of the run and to retrieve the artifact itself.
job_type ="train_model"config = {
"optimizer": "adam",
"batch_size": 128,
"epochs": 5,
"validation_split": 0.1,
}
# Initialize a W&B runrun = wandb.init(project=project, job_type=job_type, config=config)
# Retrieve the dataset artifactversion ="latest"name ="{}:{}".format("{}_dataset".format(model_use_case_id), version)
artifact = run.use_artifact(artifact_or_name=name)
# Get specific content from the dataframetrain_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")
For more information about tracking the inputs and output of a model, see Create model lineage map.
Define and train model
For this walkthrough, define a 2D Convolutional Neural Network (CNN) with Keras to classify images from the MNIST dataset.
Train CNN on MNIST data
# Store values from our config dictionary into variables for easy accessingnum_classes =10input_shape = (28, 28, 1)
loss ="categorical_crossentropy"optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]
# Create model architecturemodel = keras.Sequential(
[
layers.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
# Generate labels for training datay_train = keras.utils.to_categorical(y_train, num_classes)
# Create training and test setx_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)
W&B creates a registered model for you if the name you specify for registered-model-name does not already exist.
See link_model in the API Reference guide for more information on optional parameters.
Evaluate the performance of a model
It is common practice to evaluate the performance of a one or more models.
First, get the evaluation dataset artifact stored in W&B in a previous step.
job_type ="evaluate_model"# Initialize a runrun = wandb.init(project=project, entity=entity, job_type=job_type)
model_use_case_id ="mnist"version ="latest"# Get dataset artifact, mark it as a dependencyartifact = run.use_artifact(
"{}:{}".format("{}_dataset".format(model_use_case_id), version)
)
# Get desired dataframeeval_table = artifact.get("eval_table")
x_eval = eval_table.get_column("x_eval", convert_to="numpy")
y_eval = eval_table.get_column("y_eval", convert_to="numpy")
Download the model version from W&B that you want to evaluate. Use the use_model API to access and download your model.
alias ="latest"# aliasname ="mnist_model"# name of the model artifact# Access and download model. Returns path to downloaded artifactdownloaded_model_path = run.use_model(name=f"{name}:{alias}")
# # Log metrics, images, tables, or any data useful for evaluation.run.log(data={"loss": (loss, _)})
Promote a model version
Mark a model version ready for the next stage of your machine learning workflow with a model alias. Each registered model can have one or more model aliases. A model alias can only belong to a single model version at a time.
For example, suppose that after evaluating a model’s performance, you are confident that the model is ready for production. To promote that model version, add the production alias to that specific model version.
The production alias is one of the most common aliases used to mark a model as production-ready.
You can add an alias to a model version interactively with the W&B App UI or programmatically with the Python SDK. The following steps show how to add an alias with the W&B Model Registry App:
A model version represents a single model checkpoint. Model versions are a snapshot at a point in time of a model and its files within an experiment.
A model version is an immutable directory of data and metadata that describes a trained model. W&B suggests that you add files to your model version that let you store (and restore) your model architecture and learned parameters at a later date.
A model version belongs to one, and only one, model artifact. A model version can belong to zero or more, registered models. Model versions are stored in a model artifact in the order they are logged to the model artifact. W&B automatically creates a new model version if it detects that a model you log (to the same model artifact) has different contents than a previous model version.
Store files within model versions that are produced from the serialization process provided by your modeling library (for example, PyTorch and Keras).
Model alias
Model aliases are mutable strings that allow you to uniquely identify or reference a model version in your registered model with a semantically related identifier. You can only assign an alias to one version of a registered model. This is because an alias should refer to a unique version when used programmatically. It also allows aliases to be used to capture a model’s state (champion, candidate, production).
It is common practice to use aliases such as "best", "latest", "production", or "staging" to mark model versions with special purposes.
For example, suppose you create a model and assign it a "best" alias. You can refer to that specific model with run.use_model
import wandb
run = wandb.init()
name =f"{entity/project/model_artifact_name}:{alias}"run.use_model(name=name)
Model tags
Model tags are keywords or labels that belong to one or more registered models.
Use model tags to organize registered models into categories and to search over those categories in the Model Registry’s search bar. Model tags appear at the top of the Registered Model Card. You might choose to use them to group your registered models by ML task, owning team, or priority. The same model tag can be added to multiple registered models to allow for grouping.
Model tags, which are labels applied to registered models for grouping and discoverability, are different from model aliases. Model aliases are unique identifiers or nicknames that you use to fetch a model version programatically. To learn more about using tags to organize the tasks in your Model Registry, see Organize models.
Model artifact
A model artifact is a collection of logged model versions. Model versions are stored in a model artifact in the order they are logged to the model artifact.
A model artifact can contain one or more model versions. A model artifact can be empty if no model versions are logged to it.
For example, suppose you create a model artifact. During model training, you periodically save your model during checkpoints. Each checkpoint corresponds to its own model version. All of the model versions created during your model training and checkpoint saving are stored in the same model artifact you created at the beginning of your training script.
The proceeding image shows a model artifact that contains three model versions: v0, v1, and v2.
A registered model is a collection of pointers (links) to model versions. You can think of a registered model as a folder of “bookmarks” of candidate models for the same ML task. Each “bookmark” of a registered model is a pointer to a model version that belongs to a model artifact. You can use model tags to group your registered models.
Registered models often represent candidate models for a single modeling use case or task. For example, you might create registered model for different image classification task based on the model you use: ImageClassifier-ResNet50, ImageClassifier-VGG16, DogBreedClassifier-MobileNetV2 and so on. Model versions are assigned version numbers in the order in which they were linked to the registered model.
Track a model, the model’s dependencies, and other information relevant to that model with the W&B Python SDK.
Track a model, the model’s dependencies, and other information relevant to that model with the W&B Python SDK.
Under the hood, W&B creates a lineage of model artifact that you can view with the W&B App UI or programmatically with the W&B Python SDK. See the Create model lineage map for more information.
How to log a model
Use the run.log_model API to log a model. Provide the path where your model files are saved to the path parameter. The path can be a local file, directory, or reference URI to an external bucket such as s3://bucket/path.
Optionally provide a name for the model artifact for the name parameter. If name is not specified, W&B uses the basename of the input path prepended with the run ID.
Copy and paste the proceeding code snippet. Ensure to replace values enclosed in <> with your own.
import wandb
# Initialize a W&B runrun = wandb.init(project="<project>", entity="<entity>")
# Log the modelrun.log_model(path="<path-to-model>", name="<name>")
Example: Log a Keras model to W&B
The proceeding code example shows how to log a convolutional neural network (CNN) model to W&B.
import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers
config = {"optimizer": "adam", "loss": "categorical_crossentropy"}
# Initialize a W&B runrun = wandb.init(entity="charlie", project="mnist-project", config=config)
# Training algorithmloss = run.config["loss"]
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
num_classes =10input_shape = (28, 28, 1)
model = keras.Sequential(
[
layers.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
# Save modelmodel_filename ="model.h5"local_filepath ="./"full_path = os.path.join(local_filepath, model_filename)
model.save(filepath=full_path)
# Log the model# highlight-next-linerun.log_model(path=full_path, name="MNIST")
# Explicitly tell W&B to end the run.run.finish()
4 - Create a registered model
Create a registered model to hold all the candidate models for your modeling tasks.
Create a registered model to hold all the candidate models for your modeling tasks. You can create a registered model interactively within the Model Registry or programmatically with the Python SDK.
Programmatically create registered a model
Programmatically register a model with the W&B Python SDK. W&B automatically creates a registered model for you if the registered model doesn’t exist.
Ensure to replace other the values enclosed in <> with your own:
import wandb
run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()
The name you provide for registered_model_name is the name that appears in the Model Registry App.
For example, suppose you have a nightly job. It is tedious to manually link a model created each night. Instead, you could create a script that evaluates the model, and if the model improves in performance, link that model to the model registry with the W&B Python SDK.
5 - Link a model version
Link a model version to a registered model with the W&B App or programmatically with the Python SDK.
Link a model version to a registered model with the W&B App or programmatically with the Python SDK.
Programmatically link a model
Use the link_model method to programmatically log model files to a W&B run and link it to the W&B Model Registry.
Ensure to replace other the values enclosed in <> with your own:
import wandb
run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()
W&B creates a registered model for you if the name you specify for the registered-model-name parameter does not already exist.
For example, suppose you have an existing registered model named “Fine-Tuned-Review-Autocompletion”(registered-model-name="Fine-Tuned-Review-Autocompletion") in your Model Registry. And suppose that a few model versions are linked to it: v0, v1, v2. If you programmatically link a new model and use the same registered model name (registered-model-name="Fine-Tuned-Review-Autocompletion"), W&B links this model to the existing registered model and assigns it a model version v3. If no registered model with this name exists, a new one registered model is created and it will have a model version v0.
Hover your mouse next to the name of the registered model you want to link a new model to.
Select the meatball menu icon (three horizontal dots) next to View details.
From the dropdown, select Link new version.
From the Project dropdown, select the name of the project that contains your model.
From the Model Artifact dropdown, select the name of the model artifact.
From the Version dropdown, select the model version you want to link to the registered model.
Navigate to your project’s artifact browser on the W&B App at: https://wandb.ai/<entity>/<project>/artifacts
Select the Artifacts icon on the left sidebar.
Click on the model version you want to link to your registry.
Within the Version overview section, click the Link to registry button.
From the modal that appears on the right of the screen, select a registered model from the Select a register model menu dropdown.
Click Next step.
(Optional) Select an alias from the Aliases dropdown.
Click Link to registry.
View the source of linked models
There are two ways to view the source of linked models: The artifact browser within the project that the model is logged to and the W&B Model Registry.
A pointer connects a specific model version in the model registry to the source model artifact (located within the project the model is logged to). The source model artifact also has a pointer to the model registry.
Select View details next the name of your registered model.
Within the Versions section, select View next to the model version you want to investigate.
Click on the Version tab within the right panel.
Within the Version overview section there is a row that contains a Source Version field. The Source Version field shows both the name of the model and the model’s version.
For example, the following image shows a v0 model version called mnist_model (see Source version field mnist_model:v0), linked to a registered model called MNIST-dev.
Navigate to your project’s artifact browser on the W&B App at: https://wandb.ai/<entity>/<project>/artifacts
Select the Artifacts icon on the left sidebar.
Expand the model dropdown menu from the Artifacts panel.
Select the name and version of the model linked to the model registry.
Click on the Version tab within the right panel.
Within the Version overview section there is a row that contains a Linked To field. The Linked To field shows both the name of the registered model and the version it possesses(registered-model-name:version).
For example, in the following image, there is a registered model called MNIST-dev (see the Linked To field). A model version called mnist_model with a version v0(mnist_model:v0) points to the MNIST-dev registered model.
6 - Organize models
Use model tags to organize registered models into categories and to search over those categories.
Select View details next to the name of the registered model you want to add a model tag to.
Scroll to the Model card section.
Click the plus button (+) next to the Tags field.
Type in the name for your tag or search for a pre-existing model tag.
For example. the following image shows multiple model tags added to a registered model called FineTuned-Review-Autocompletion:
7 - Create model lineage map
A useful feature of logging model artifacts to W&B are lineage graphs. Lineage graphs show artifacts logged by a run as well as artifacts used by specific run.
This means that, when you log a model artifact, you at a minimum have access to view the W&B run that used or produced the model artifact. If you track a dependency, you also see the inputs used by the model artifact.
For example, the proceeding image shows artifacts created and used throughout an ML experiment:
From left to right, the image shows:
The jumping-monkey-1 W&B run created the mnist_dataset:v0 dataset artifact.
The vague-morning-5 W&B run trained a model using the mnist_dataset:v0 dataset artifact. The output of this W&B run was a model artifact called mnist_model:v0.
A run called serene-haze-6 used the model artifact (mnist_model:v0) to evaluate the model.
Track an artifact dependency
Declare an dataset artifact as an input to a W&B run with the use_artifact API to track a dependency.
The proceeding code snippet shows how to use the use_artifact API:
# Initialize a runrun = wandb.init(project=project, entity=entity)
# Get artifact, mark it as a dependencyartifact = run.use_artifact(artifact_or_name="name", aliases="<alias>")
Once you have retrieved your artifact, you can use that artifact to (for example), evaluate the performance of a model.
Example: Train a model and track a dataset as the input of a model
job_type ="train_model"config = {
"optimizer": "adam",
"batch_size": 128,
"epochs": 5,
"validation_split": 0.1,
}
run = wandb.init(project=project, job_type=job_type, config=config)
version ="latest"name ="{}:{}".format("{}_dataset".format(model_use_case_id), version)
# highlight-startartifact = run.use_artifact(name)
# highlight-endtrain_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")
# Store values from our config dictionary into variables for easy accessingnum_classes =10input_shape = (28, 28, 1)
loss ="categorical_crossentropy"optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]
# Create model architecturemodel = keras.Sequential(
[
layers.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
# Generate labels for training datay_train = keras.utils.to_categorical(y_train, num_classes)
# Create training and test setx_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)
# Train the modelmodel.fit(
x=x_t,
y=y_t,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_v, y_v),
callbacks=[WandbCallback(log_weights=True, log_evaluation=True)],
)
# Save model locallypath ="model.h5"model.save(path)
path ="./model.h5"registered_model_name ="MNIST-dev"name ="mnist_model"# highlight-startrun.link_model(path=path, registered_model_name=registered_model_name, name=name)
# highlight-endrun.finish()
8 - Document machine learning model
Add descriptions to model card to document your model
Add a description to the model card of your registered model to document aspects of your machine learning model. Some topics worth documenting include:
Summary: A summary of what the model is. The purpose of the model. The machine learning framework the model uses, and so forth.
Training data: Describe the training data used, processing done on the training data set, where is that data stored and so forth.
Architecture: Information about the model architecture, layers, and any specific design choices.
Deserialize the model: Provide information on how someone on your team can load the model into memory.
Task: The specific type of task or problem that the machine learning model is designed to perform. It’s a categorization of the model’s intended capability.
License: The legal terms and permissions associated with the use of the machine learning model. It helps model users understand the legal framework under which they can utilize the model.
References: Citations or references to relevant research papers, datasets, or external resources.
Deployment: Details on how and where the model is deployed and guidance on how the model is integrated into other enterprise systems, such as a workflow orchestration platforms.
Select View details next to the name of the registered model you want to create a model card for.
Go to the Model card section.
Within the Description field, provide information about your machine learning model. Format text within a model card with Markdown markup language.
For example, the following images shows the model card of a Credit-card Default Prediction registered model.
9 - Download a model version
How to download a model with W&B Python SDK
Use the W&B Python SDK to download a model artifact that you linked to the Model Registry.
You are responsible for providing additional Python functions, API calls to reconstruct, deserialize your model into a form that you can work with.
W&B suggests that you document information on how to load models into memory with model cards. For more information, see the Document machine learning models page.
Replace values within <> with your own:
import wandb
# Initialize a runrun = wandb.init(project="<project>", entity="<entity>")
# Access and download model. Returns path to downloaded artifactdownloaded_model_path = run.use_model(name="<your-model-name>")
Reference a model version with one of following formats listed:
latest - Use latest alias to specify the model version that is most recently linked.
v# - Use v0, v1, v2, and so on to fetch a specific version in the Registered Model
alias - Specify the custom alias that you and your team assigned to your model version
See use_model in the API Reference guide for more information on possible parameters and return type.
Example: Download and use a logged model
For example, in the proceeding code snippet a user called the use_model API. They specified the name of the model artifact they want to fetch and they also provided a version/alias. They then stored the path that returned from the API to the downloaded_model_path variable.
import wandb
entity ="luka"project ="NLP_Experiments"alias ="latest"# semantic nickname or identifier for the model versionmodel_artifact_name ="fine-tuned-model"# Initialize a runrun = wandb.init()
# Access and download model. Returns path to downloaded artifactdownloaded_model_path = run.use_model(name=f"{entity/project/model_artifact_name}:{alias}")
Planned deprecation for W&B Model Registry in 2024
The proceeding tabs demonstrate how to consume model artifacts using the soon to be deprecated Model Registry.
Use the W&B Registry to track, organize and consume model artifacts. For more information see the Registry docs.
Replace values within <> with your own:
import wandb
# Initialize a runrun = wandb.init(project="<project>", entity="<entity>")
# Access and download model. Returns path to downloaded artifactdownloaded_model_path = run.use_model(name="<your-model-name>")
Reference a model version with one of following formats listed:
latest - Use latest alias to specify the model version that is most recently linked.
v# - Use v0, v1, v2, and so on to fetch a specific version in the Registered Model
alias - Specify the custom alias that you and your team assigned to your model version
See use_model in the API Reference guide for more information on possible parameters and return type.
Select the registered model you want to receive notifications from.
Click on the Connect Slack button.
Follow the instructions to enable W&B in your Slack workspace that appear on the OAuth page.
Once you have configured Slack notifications for your team, you can pick and choose registered models to get notifications from.
A toggle that reads New model version linked to… appears instead of a Connect Slack button if you have Slack notifications configured for your team.
The screenshot below shows a FMNIST classifier registered model that has Slack notifications.
A message is automatically posted to the connected Slack channel each time a new model version is linked to the FMNIST classifier registered model.
11 - Manage data governance and access control
Use model registry role based access controls (RBAC) to control who can update protected aliases.
Use protected aliases to represent key stages of your model development pipeline. Only Model Registry Administrators can add, modify, or remove protected aliases. Model registry admins can define and use protected aliases. W&B blocks non admin users from adding or removing protected aliases from model versions.
Only Team admins or current registry admins can manage the list of registry admins.
For example, suppose you set staging and production as protected aliases. Any member of your team can add new model versions. However, only admins can add a staging or production alias.
Set up access control
The following steps describe how to set up access controls for your team’s model registry.