从 cloud-ml 中删除模型及其所有版本

remove a model and all its versions from cloud-ml

显然没有一种简单的方法可以从 cloud-ml 中删除模型,而不是使用 UI 或使用 python API。有人知道从 cloud-ml 中删除模型及其所有版本的快速方法吗?。

我编写了一个 python 函数来从 cloud-ml 及其所有版本中删除一个模型。它很乱,但有效。

from googleapiclient import discovery
from googleapiclient import errors
import time

def remove_model_cloud_ml (model_name:str, gc_project_id:str):

    project_id = 'projects/{}'.format(gc_project_id)
    model_id = '{}/models/{}'.format(project_id, model_name)

    ml = discovery.build('ml','v1')
    request = ml.projects().models().versions().list(parent=model_id)
    response = request.execute()

    # check if model has versions
    if 'versions' in response.keys():    
        versions = response['versions']
        while len(versions) >= 1:
            for version in response['versions']:
                request = ml.projects().models().versions().delete(name = version['name'])
                try:
                    request.execute()
                except errors.HttpError as err:
                    reason = err._get_reason()
                    if 'Cannot delete the default version' in reason:
                        next

            request = ml.projects().models().versions().list(parent=model_id)
            response = request.execute()
            time.sleep(1)
            try:
                versions = response['versions']
            except:
                break

    # remove the model         
    request = ml.projects().models().delete(name=model_id)

    # make the call to remove
    while True:    
        try:
            response = request.execute()
            # Any additional code on success goes here (logging, etc.)
        except errors.HttpError as err:
            # Something went wrong, print out some information.
            print('There was an error deleting the model.' +
                  ' Check the details:')
            reason = err._get_reason()
            print(reason)
            # Wait for 1000 milliseconds.
            if 'A model with versions cannot be deleted' in reason:
                # this probably means that the last delete version call 
                # has not yet completed, so wait and retry 
                time.sleep(1) 
                continue
        break

要删除模型,您需要先删除版本 [1] and then the model [2]。为此,您需要遵循以下步骤:

  1. 从模型中删除所有非默认版本,因此您最终只有一个版本。
  2. 删除最后一个版本(默认版本)。
  3. 删除模型。

您可以使用 UI、命令行或 API 来实现。所有需要的信息和命令都在我提供的链接上。

以上建议的方法是删除模型的正确方法,即首先是版本(非默认,然后是默认),然后是模型本身。我们知道这可能很麻烦,并且正在努力让我们的用户更轻松地使用此界面。一种方法可能是拥有基本上递归删除版本和模型的东西。还有其他更合适的方法吗?

您可以在云中执行一个命令shell:

gcloud ai-platform versions list --model=NAMEOFYOURMODEL|xargs -n 1 gcloud ai-platform versions delete --model=NAMEOFYOURMODEL--quiet