Model Registry Operations with XGBoost#
Register XGBoost models to SageMaker Model Registry, create models from existing registry entries, and manage model approval workflows.
from sagemaker.serve.model_builder import ModelBuilder
from sagemaker.serve.mode.function_pointers import Mode
from sagemaker.core.helper.session_helper import Session, get_execution_role
from sagemaker.core import image_uris
import boto3
sagemaker_session = Session()
role = get_execution_role()
region = sagemaker_session.boto_region_name
image_uri = image_uris.retrieve(
framework="xgboost",
region=region,
version="1.0-1",
py_version="py3",
instance_type="ml.m5.xlarge",
)
s3 = boto3.client('s3')
bucket = sagemaker_session.default_bucket()
# this is pre-trained xgboost model
s3.upload_file('model/model.tar.gz', bucket, 'registry-testing/model.tar.gz')
s3_url = f"s3://{bucket}/registry-testing/model.tar.gz"
Build and register a model from model artifact#
model_builder = ModelBuilder(
s3_model_data_url=s3_url,
image_uri=image_uri,
sagemaker_session=sagemaker_session,
role_arn=role,
)
# Build the model
model_builder.build(model_name="my-model")
# Register the model
model_builder.register(
model_package_group_name="my-model-package-group",
content_types=["application/json"],
response_types=["application/json"],
inference_instances=["ml.m5.xlarge"],
approval_status="Approved"
)
Register from existing SageMaker Model resource#
This assumes that you already have a SageMaker Model resource.
from sagemaker.core.resources import Model
from sagemaker.serve.model_builder import ModelBuilder
# your sagemaker model is called my-model
model = Model.get(model_name="my-model")
# Get image URI and S3 model data URI
image_uri = model.primary_container.image
s3_model_data_uri = model.primary_container.model_data_url
model_builder = ModelBuilder(
image_uri=image_uri,
s3_model_data_url=s3_model_data_uri,
role_arn=role,
)
registered_model_package_arn = model_builder.register(
model_package_group_name="my-model-group-from-existing-model",
content_types=["application/json"],
response_types=["application/json"]
)
Create a SageMaker model from specific registry#
Here we assume you already have a registered model version in model group, and we create a sagemaker model from this version.
# approve the version before creating model
# There is a gap that API response for a versioned model package doesn't include model_package_name
sagemaker_client = boto3.client('sagemaker', region_name=region)
sagemaker_client.update_model_package(
ModelPackageArn=registered_model_package_arn,
ModelApprovalStatus="Approved"
)
from sagemaker.core.resources import ModelPackage
from sagemaker.serve.model_builder import ModelBuilder
# Get the registered ModelPackage using the ARN as model_package_name
model_package = ModelPackage.get(model_package_name=registered_model_package_arn)
s3_model_data_uri = model_package.inference_specification.containers[0].model_data_url
image_uri = model_package.inference_specification.containers[0].image
model_builder = ModelBuilder(
s3_model_data_url=s3_model_data_uri,
image_uri=image_uri,
role_arn=role,
sagemaker_session=sagemaker_session
)
# Build the model
model = model_builder.build(model_name="my-model-from-registry")