

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Rekognition Custom Labels 모델 삭제
<a name="tm-delete-model"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하거나 [DeleteProjectVersion API](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectVersion)를 사용하여 모델을 삭제할 수 있습니다. 실행 중이거나 훈련 중인 모델은 삭제할 수 없습니다. 실행 중인 모델을 중지하려면 [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion) API를 사용하세요. 자세한 내용은 [Amazon Rekognition Custom Labels 모델 중지(SDK)](rm-stop.md#rm-stop-sdk) 단원을 참조하십시오. 모델이 훈련 중이면 완료될 때까지 기다린 후 모델을 삭제하세요.

삭제된 모델은 복구할 수 없습니다.

**Topics**
+ [Amazon Rekognition Custom Labels 모델 삭제(콘솔)](#tm-delete-model-console)
+ [Amazon Rekognition Custom Labels 모델 삭제(SDK)](#tm-delete-model-sdk)

## Amazon Rekognition Custom Labels 모델 삭제(콘솔)
<a name="tm-delete-model-console"></a>

다음 절차는 프로젝트 세부 정보 페이지에서 모델을 삭제하는 방법을 보여줍니다. 모델의 세부 정보 페이지에서도 모델을 삭제할 수 있습니다.

**모델을 삭제하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. 삭제하려는 모델이 들어 있는 프로젝트를 선택합니다. 프로젝트 세부 정보 페이지가 열립니다.

1. **모델** 항목에서 삭제하려는 모델을 선택합니다.
**참고**  
모델을 선택할 수 없으면 모델이 실행 중이거나 훈련 중이라서 삭제할 수 없다는 뜻입니다. **상태** 필드를 확인하고 실행 중인 모델을 중지한 후 다시 시도하거나 훈련이 완료될 때까지 기다리세요.

1. **모델 삭제**를 선택하면 **모델 삭제 대화 상자가 표시됩니다**.

1. **삭제**를 입력하여 삭제를 확인합니다.

1. **삭제**를 선택하여 모델을 삭제합니다. 모델 삭제를 완료하는 데 시간이 걸릴 수 있습니다.
**참고**  
모델 삭제 중에 대화 상자를 **닫아도** 모델은 삭제됩니다.

## Amazon Rekognition Custom Labels 모델 삭제(SDK)
<a name="tm-delete-model-sdk"></a>

[DeleteProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectVersion)을 직접 호출하고 삭제할 모델의 Amazon 리소스 이름(ARN)을 제공하여 Amazon Rekognition Custom Labels 모델을 삭제합니다. Amazon Rekognition Custom Labels 콘솔의 모델 세부 정보 페이지에 있는 **모델 사용** 항목에서 모델 ARN을 가져올 수 있습니다. 또는 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)를 직접 호출하고 다음을 제공하세요.
+ 모델이 연결된 프로젝트(`ProjectArn`)의 ARN
+ 모델의 버전 이름(`VersionNames`) 

모델 ARN은 `DescribeProjectVersions` 응답의 [ProjectVersionDescription](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ProjectVersionDescription) 객체에 있는 `ProjectVersionArn` 필드입니다.

실행 중이거나 훈련 중인 모델은 삭제할 수 없습니다. 모델이 실행 중인지 훈련 중인지 확인하려면 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)를 직접 호출하고 모델의 [ProjectVersionDescription](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ProjectVersionDescription) 객체의 `Status` 필드를 확인하세요. 실행 중인 모델을 중지하려면 [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion) API를 사용하세요. 자세한 내용은 [Amazon Rekognition Custom Labels 모델 중지(SDK)](rm-stop.md#rm-stop-sdk) 단원을 참조하십시오. 모델을 삭제하려면 먼저 훈련이 완료될 때까지 기다려야 합니다.

**모델을 삭제하려면(SDK)**

1. 아직 설치하지 않은 경우 및 AWS SDKs AWS CLI 를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 코드를 사용하여 모델을 삭제하세요.

------
#### [ AWS CLI ]

   `project-version-arn`의 값을 삭제하려는 프로젝트의 이름으로 변경합니다.

   ```
   aws rekognition delete-project-version --project-version-arn {{model_arn}} \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   다음 명령줄 파라미터를 제공하세요.
   + `project_arn`: 삭제하려는 모델이 포함된 프로젝트의 ARN
   + `model_arn`: 삭제하려는 모델 버전의 ARN

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Shows how to delete an existing Amazon Rekognition Custom Labels model.
   """
   
   
   import argparse
   import logging
   import time
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def find_forward_slash(input_string, n):
       """
       Returns the location of '/' after n number of occurences. 
       :param input_string: The string you want to search
       : n: the occurence that you want to find.
       """
       position = input_string.find('/')
       while position >= 0 and n > 1:
           position = input_string.find('/', position + 1)
           n -= 1
       return position
   
   
   def delete_model(rek_client, project_arn, model_arn):
       """
       Deletes an Amazon Rekognition Custom Labels model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param model_arn: The ARN of the model version that you want to delete.
       """
   
       try:
           # Delete the model
           logger.info("Deleting dataset: {%s}", model_arn)
   
           rek_client.delete_project_version(ProjectVersionArn=model_arn)
   
           # Get the model version name
           start = find_forward_slash(model_arn, 3) + 1
           end = find_forward_slash(model_arn, 4)
           version_name = model_arn[start:end]
   
           deleted = False
   
           # model might not be deleted yet, so wait deletion finishes.
           while deleted is False:
               describe_response = rek_client.describe_project_versions(ProjectArn=project_arn,
                                                                        VersionNames=[version_name])
               if len(describe_response['ProjectVersionDescriptions']) == 0:
                   deleted = True
               else:
                   logger.info("Waiting for model deletion %s", model_arn)
                   time.sleep(5)
   
           logger.info("model deleted: %s", model_arn)
   
           return True
   
       except ClientError as err:
           logger.exception("Couldn't delete model - %s: %s",
                            model_arn, err.response['Error']['Message'])
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project that contains the model that you want to delete."
       )
   
       parser.add_argument(
           "model_arn", help="The ARN of the model version that you want to delete."
       )
   
   
   def confirm_model_deletion(model_arn):
       """
       Confirms deletion of the model. Returns True if delete entered.
       :param model_arn: The ARN of the model that you want to delete.
       """
       print(f"Are you sure you wany to delete model {model_arn} ?\n", model_arn)
   
       start = input("Enter delete to delete your model: ")
       if start == "delete":
           return True
       else:
           return False
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           if confirm_model_deletion(args.model_arn) is True:
               print(f"Deleting model: {args.model_arn}")
   
               # Delete the model.
               session = boto3.Session(profile_name='custom-labels-access')
               rekognition_client = session.client("rekognition")
   
               delete_model(rekognition_client,
                            args.project_arn,
                            args.model_arn)
   
               print(f"Finished deleting model: {args.model_arn}")
           else:
               print(f"Not deleting model {args.model_arn}")
   
       except ClientError as err:
           print(f"Problem deleting model: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]
   + `project_arn`: 삭제하려는 모델이 포함된 프로젝트의 ARN
   + `model_arn`: 삭제하려는 모델 버전의 ARN

   ```
   //Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   import java.net.URI;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   
   import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class DeleteModel {
   
       public static final Logger logger = Logger.getLogger(DeleteModel.class.getName());
   
       public static int findForwardSlash(String modelArn, int n) {
   
           int start = modelArn.indexOf('/');
           while (start >= 0 && n > 1) {
               start = modelArn.indexOf('/', start + 1);
               n -= 1;
           }
           return start;
   
       }
   
       public static void deleteMyModel(RekognitionClient rekClient, String projectArn, String modelArn)
               throws InterruptedException {
   
           try {
   
               logger.log(Level.INFO, "Deleting model: {0}", projectArn);
   
               // Delete the model
   
               DeleteProjectVersionRequest deleteProjectVersionRequest = DeleteProjectVersionRequest.builder()
                       .projectVersionArn(modelArn).build();
   
               DeleteProjectVersionResponse response =
                       rekClient.deleteProjectVersion(deleteProjectVersionRequest);
   
               logger.log(Level.INFO, "Status: {0}", response.status());
   
               // Get the model version
   
               int start = findForwardSlash(modelArn, 3) + 1;
               int end = findForwardSlash(modelArn, 4);
   
               String versionName = modelArn.substring(start, end);
   
               Boolean deleted = false;
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                       .projectArn(projectArn).versionNames(versionName).build();
   
               // Wait until model is deleted.
   
               do {
   
                   DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                           .describeProjectVersions(describeProjectVersionsRequest);
   
                   if (describeProjectVersionsResponse.projectVersionDescriptions().size()==0) {
                       logger.log(Level.INFO, "Waiting for model deletion: {0}", modelArn);
                       Thread.sleep(5000);
                   } else {
                       deleted = true;
                       logger.log(Level.INFO, "Model deleted: {0}", modelArn);
                   }
                   
               } while (Boolean.FALSE.equals(deleted));
   
               logger.log(Level.INFO, "Model deleted: {0}", modelArn);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <model_arn>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that contains the model that you want to delete.\n\n"
                   + "   model_version - The ARN of the model that you want to delete.\n\n";
   
           if (args.length != 2) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
           String modelVersion = args[1];
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder().build();
   
               // Delete the model
               deleteMyModel(rekClient, projectArn, modelVersion);
   
               System.out.println(String.format("model deleted: %s", modelVersion));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           catch (InterruptedException intError) {
               logger.log(Level.SEVERE, "Exception while sleeping: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------