

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Kopieren eines Modells (SDK)
<a name="md-copy-model-sdk"></a>

Sie können die `CopyProjectVersion`-API verwenden, um eine Modellversion von einem Quellprojekt in ein Zielprojekt zu kopieren. Das Zielprojekt kann sich in einem anderen AWS Konto befinden, muss sich aber in derselben AWS Region befinden. Wenn sich das Zielprojekt in einem anderen AWS Konto befindet (oder wenn Sie bestimmte Berechtigungen für eine innerhalb eines AWS Kontos kopierte Modellversion gewähren möchten), müssen Sie dem Quellprojekt eine Projektrichtlinie hinzufügen. Weitere Informationen finden Sie unter [Erstellen eines Richtliniendokuments für das Projekt](md-create-project-policy-document.md). Für die `CopyProjectVersion`-API ist Zugriff auf Ihren Amazon-S3-Bucket erforderlich. 

Das kopierte Modell enthält die Trainingsergebnisse für das Quellmodell, jedoch nicht die Quelldatensätze.

Das AWS Quellkonto ist nicht Eigentümer des Modells, das in ein Zielkonto kopiert wurde, es sei denn, Sie richten die entsprechenden Berechtigungen ein.

**So kopieren Sie ein Modell (SDK)**

1. Falls Sie dies noch nicht getan haben, installieren und konfigurieren Sie das AWS CLI und das AWS SDKs. Weitere Informationen finden Sie unter [Schritt 4: Richten Sie das ein AWS CLI und AWS SDKs](su-awscli-sdk.md).

1. Fügen Sie dem Quellprojekt eine Projektrichtlinie hinzu, indem Sie den Anweisungen unter [Eine Projektrichtlinie (SDK) anhängen](md-attach-project-policy.md) folgen. 

1. Wenn Sie das Modell in ein anderes AWS Konto kopieren, stellen Sie sicher, dass das AWS Zielkonto über ein Projekt verfügt. 

1. Verwenden Sie den folgenden Code, um die Modellversion in ein Zielprojekt zu kopieren.

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

   Ändern Sie die folgenden Werte:
   + `source-project-arn` in den ARN des Quellprojekts mit der Modellversion, die Sie kopieren möchten. 
   + `source-project-version-arn` in den ARN der Modellversion, die Sie kopieren möchten. 
   + `destination-project-arn` in den ARN des Zielprojekts, in das Sie das Modell kopieren möchten. 
   + `version-name` in einen Versionsnamen für das Modell im Zielprojekt. 
   + `bucket` in den S3-Bucket, in den Sie die Trainingsergebnisse für das Quellmodell kopieren möchten. 
   + `folder` in den Ordner in `bucket`, in den Sie die Trainingsergebnisse für das Quellmodell kopieren möchten. 
   + (Optional) `kms-key-id` in den Schlüssel-ID des AWS Key Management Service für das Modell. 
   + (Optional) `key` in einen Tag-Schlüssel Ihrer Wahl. 
   + (Optional) `value` in einen Tag-Wert Ihrer Wahl. 

   ```
   aws rekognition copy-project-version \
     --source-project-arn {{source-project-arn}} \
     --source-project-version-arn {{source-project-version-arn}} \
     --destination-project-arn {{destination-project-arn}} \
     --version-name {{version-name}} \
     --output-config '{"S3Bucket":"{{bucket}}","S3KeyPrefix":"{{folder}}"}' \
     --kms-key-id arn:{{myKey}} \
     --tags '{"{{key}}":"{{key}}"}' \
     --profile custom-labels-access
   ```

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

   Verwenden Sie folgenden Code. Geben Sie die folgenden Befehlszeilenparameter an:
   + `source_project_arn`— der ARN des Quellprojekts im AWS Quellkonto, das die Modellversion enthält, die Sie kopieren möchten. 
   + `source_project_version-arn`— der ARN der Modellversion im AWS Quellkonto, das Sie kopieren möchten. 
   + `destination_project_arn` — der ARN des Zielprojekts, in das Sie das Modell kopieren möchten. 
   + `destination_version_name` — ein Versionsname für das Modell im Zielprojekt. 
   + `training_results` — der S3-Speicherort, an den Sie die Trainingsergebnisse für die Quellmodellversion kopieren möchten. 
   + (Optional) `kms_key_id` in den Schlüssel-ID des AWS Key Management Service für das Modell. 
   + (Optional) `tag_name` in einen Tag-Schlüssel Ihrer Wahl. 
   + (Optional) `tag_value` in einen Tag-Wert Ihrer Wahl. 

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   import argparse
   import logging
   import time
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def copy_model(
       rekognition_client, source_project_arn, source_project_version_arn,
           destination_project_arn, training_results, destination_version_name):
       """
       Copies a version of a Amazon Rekognition Custom Labels model.
   
       :param rekognition_client: A Boto3 Amazon Rekognition Custom Labels client.
       :param source_project_arn: The ARN of the source project that contains the
       model that you want to copy.
       :param source_project_version_arn: The ARN of the model version that you want
       to copy.
       :param destination_project_Arn: The ARN of the project that you want to copy the model
       to.
       :param training_results: The Amazon S3 location where training results for the model
       should be stored.
       return: The model status and version.
       """
       try:
           logger.info("Copying model...%s from %s to %s ", source_project_version_arn,
                       source_project_arn,
                       destination_project_arn)
   
           output_bucket, output_folder = training_results.replace(
               "s3://", "").split("/", 1)
           output_config = {"S3Bucket": output_bucket,
                            "S3KeyPrefix": output_folder}
   
           response = rekognition_client.copy_project_version(
               DestinationProjectArn=destination_project_arn,
               OutputConfig=output_config,
               SourceProjectArn=source_project_arn,
               SourceProjectVersionArn=source_project_version_arn,
               VersionName=destination_version_name
           )
   
           destination_model_arn = response["ProjectVersionArn"]
   
           logger.info("Destination model ARN: %s", destination_model_arn)
   
           # Wait until training completes.
           finished = False
           status = "UNKNOWN"
           while finished is False:
               model_description = rekognition_client.describe_project_versions(ProjectArn=destination_project_arn,
                       VersionNames=[destination_version_name])
               status = model_description["ProjectVersionDescriptions"][0]["Status"]
   
               if status == "COPYING_IN_PROGRESS":
                   logger.info("Model copying in progress...")
                   time.sleep(60)
                   continue
   
               if status == "COPYING_COMPLETED":
                   logger.info("Model was successfully copied.")
   
               if status == "COPYING_FAILED":
                   logger.info(
                       "Model copy failed: %s ",
                       model_description["ProjectVersionDescriptions"][0]["StatusMessage"])
   
               finished = True
       except ClientError:
           logger.exception("Couldn't copy model.")
           raise
       else:
           return destination_model_arn, status
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "source_project_arn",
           help="The ARN of the project that contains the model that you want to copy."
       )
   
       parser.add_argument(
           "source_project_version_arn",
           help="The ARN of the model version that you want to copy."
       )
   
       parser.add_argument(
           "destination_project_arn",
           help="The ARN of the project which receives the copied model."
       )
   
       parser.add_argument(
           "destination_version_name",
           help="The version name for the model in the destination project."
       )
   
       parser.add_argument(
           "training_results",
           help="The S3 location in the destination account that receives the training results for the copied model."
       )
   
   
   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()
   
           print(
               f"Copying model version {args.source_project_version_arn} to project {args.destination_project_arn}")
   
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           # Copy the model.
   
           model_arn, status = copy_model(rekognition_client,
                                          args.source_project_arn,
                                          args.source_project_version_arn,
                                          args.destination_project_arn,
                                          args.training_results,
                                          args.destination_version_name,
                                          )
   
           print(f"Finished copying model: {model_arn}")
           print(f"Status: {status}")
   
       except ClientError as err:
           print(f"Problem copying model: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Verwenden Sie folgenden Code. Geben Sie die folgenden Befehlszeilenparameter an:
   + `source_project_arn`— der ARN des Quellprojekts im AWS Quellkonto, das die Modellversion enthält, die Sie kopieren möchten. 
   + `source_project_version-arn`— der ARN der Modellversion im AWS Quellkonto, das Sie kopieren möchten. 
   + `destination_project_arn` — der ARN des Zielprojekts, in das Sie das Modell kopieren möchten. 
   + `destination_version_name` — ein Versionsname für das Modell im Zielprojekt. 
   + `output_bucket` — der S3-Bucket, in den Sie die Trainingsergebnisse für die Quellmodellversion kopieren möchten. 
   + `output_folder` — der Ordner im S3, in den Sie die Trainingsergebnisse für die Quellmodellversion kopieren möchten. 

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CopyProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.CopyProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.OutputConfig;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CopyModel {
   
       public static final Logger logger = Logger.getLogger(CopyModel.class.getName());
   
       public static ProjectVersionDescription copyMyModel(RekognitionClient rekClient,
               String sourceProjectArn,
               String sourceProjectVersionArn,
               String destinationProjectArn,
               String versionName,
               String outputBucket,
               String outputFolder) throws InterruptedException {
   
           try {
   
               OutputConfig outputConfig = OutputConfig.builder().s3Bucket(outputBucket).s3KeyPrefix(outputFolder).build();
   
               String[] logArguments = new String[] { versionName, sourceProjectArn, destinationProjectArn };
   
               logger.log(Level.INFO, "Copying model {0} for from project {1} to project {2}", logArguments);
   
               CopyProjectVersionRequest copyProjectVersionRequest = CopyProjectVersionRequest.builder()
                       .sourceProjectArn(sourceProjectArn)
                       .sourceProjectVersionArn(sourceProjectVersionArn)
                       .versionName(versionName)
                       .destinationProjectArn(destinationProjectArn)
                       .outputConfig(outputConfig)
                       .build();
   
               CopyProjectVersionResponse response = rekClient.copyProjectVersion(copyProjectVersionRequest);
   
               logger.log(Level.INFO, "Destination model ARN: {0}", response.projectVersionArn());
               logger.log(Level.INFO, "Copying model...");
   
               // wait until copying completes.
   
               boolean finished = false;
   
               ProjectVersionDescription copiedModel = null;
   
               while (Boolean.FALSE.equals(finished)) {
                   DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                           .versionNames(versionName)
                           .projectArn(destinationProjectArn)
                           .build();
   
                   DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                           .describeProjectVersions(describeProjectVersionsRequest);
   
                   for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                           .projectVersionDescriptions()) {
   
                       copiedModel = projectVersionDescription;
   
                       switch (projectVersionDescription.status()) {
   
                           case COPYING_IN_PROGRESS:
                               logger.log(Level.INFO, "Copying model...");
                               Thread.sleep(5000);
                               continue;
   
                           case COPYING_COMPLETED:
                               finished = true;
                               logger.log(Level.INFO, "Copying completed");
                               break;
   
                           case COPYING_FAILED:
                               finished = true;
                               logger.log(Level.INFO, "Copying failed...");
                               break;
   
                           default:
                               finished = true;
                               logger.log(Level.INFO, "Unexpected copy status %s",
                                       projectVersionDescription.statusAsString());
                               break;
   
                       }
   
                   }
   
               }
   
               logger.log(Level.INFO, "Finished copying model {0} for from project {1} to project {2}", logArguments);
   
               return copiedModel;
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not train model: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           String sourceProjectArn = null;
           String sourceProjectVersionArn = null;
           String destinationProjectArn = null;
           String versionName = null;
           String bucket = null;
           String location = null;
   
           final String USAGE = "\n" + "Usage: "
                   + "<source_project_arn> <source_project_version_arn> <destination_project_arn> <version_name> <output_bucket> <output_folder>\n\n"
                   + "Where:\n"
                   + "   source_project_arn - The ARN of the project that contains the model that you want to copy. \n\n"
                   + "   source_project_version_arn - The ARN of the project that contains the model that you want to copy. \n\n"
                   + "   destination_project_arn - The ARN of the destination project that you want to copy the model to. \n\n"
                   + "   version_name - A version name for the copied model.\n\n"
                   + "   output_bucket - The S3 bucket in which to place the training output. \n\n"
                   + "   output_folder - The folder within the bucket that the training output is stored in. \n\n";
   
           if (args.length != 6) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           sourceProjectArn = args[0];
           sourceProjectVersionArn = args[1];
           destinationProjectArn = args[2];
           versionName = args[3];
           bucket = args[4];
           location = args[5];
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
               // Copy the model.
               ProjectVersionDescription copiedModel = copyMyModel(rekClient,
                       sourceProjectArn,
                       sourceProjectVersionArn,
                       destinationProjectArn,
                       versionName,
                       bucket,
                       location);
   
               System.out.println(String.format("Model copied: %s Status: %s",
                       copiedModel.projectVersionArn(),
                       copiedModel.statusMessage()));
   
               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);
           }
   
       }
   
   }
   ```

------