简体   繁体   中英

SageMaker Model Package Group cannot be deleted because it still contains Model Packages

I have created a Model Package Group in SageMaker to store different versions in the Model Registry.

import boto3

model_package = 'risk-model'
sagemaker_boto_client = boto3.client('sagemaker')

sagemaker_boto_client.list_model_packages(ModelPackageGroupName=model_package)["ModelPackageSummaryList"]
>>> [
 {'ModelPackageGroupName': 'risk-model',
  'ModelPackageVersion': 3,
  'ModelPackageArn': 'some_arn_3',
  'ModelPackageDescription': 'New Model Version 3',
  'CreationTime': datetime.datetime(2022, 4, 5, 15, 9, 3, 800000, tzinfo=tzlocal()),
  'ModelPackageStatus': 'Completed',
  'ModelApprovalStatus': 'PendingManualApproval'},
 {'ModelPackageGroupName': 'risk-model',
  'ModelPackageVersion': 2,
  'ModelPackageArn': 'some_arn_2',
  'ModelPackageDescription': 'New Model Version 2',
  'CreationTime': datetime.datetime(2022, 4, 5, 14, 48, 5, 150000, tzinfo=tzlocal()),
  'ModelPackageStatus': 'Completed',
  'ModelApprovalStatus': 'PendingManualApproval'},
 {'ModelPackageGroupName': 'risk-model',
  'ModelPackageVersion': 1,
  'ModelPackageArn': 'some_arn_1',
  'ModelPackageDescription': 'New Model Version 1',
  'CreationTime': datetime.datetime(2022, 4, 4, 23, 10, 38, 516000, tzinfo=tzlocal()),
  'ModelPackageStatus': 'Completed',
  'ModelApprovalStatus': 'Approved'}]

When I want to delete the Model Package Group

sagemaker_boto_client.delete_model_package_group(
    ModelPackageGroupName='risk-model'
)

I got the following error

An error occurred (ValidationException) when calling the DeleteModelPackageGroup operation: Model Package Group cannot be deleted because it still contains Model Packages.

You would need to first delete all the Model Packages in the Model Package Group. Please see the delete_model_package() boto3 API.

Based on @Marc K suggestion the following code snippet works to empty and delete a ModelPackageGroup using boto3

import boto3
import time

sagemaker_client = boto3.client('sagemaker')
model_package = 'risk-fraud-model'

empty_and_delete_model_package(sagemaker_client, model_package)

def empty_and_delete_model_package(sagemaker_client, mpg_name):
    mpg = sagemaker_client.list_model_packages(
        ModelPackageGroupName=mpg_name,
    )
    
    # Delete model packages if Group not empty
    model_packages = mpg.get('ModelPackageSummaryList')
    if model_packages:
        for mp in model_packages:
            sagemaker_client.delete_model_package(
                ModelPackageName=mp['ModelPackageArn']
            )
            time.sleep(1)

    # Delete model package group
    sagemaker_client.delete_model_package_group(
        ModelPackageGroupName=mpg_name
    )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM