

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecución de un modelo de Etiquetas personalizadas de Amazon Rekognition
<a name="running-model"></a>

Si el modelo ya tiene la precisión que busca, puede empezar a utilizarlo. Puede iniciar y detener un modelo mediante la consola o el AWS SDK. La consola también incluye ejemplos de operaciones del SDK que puede utilizar.

**Topics**
+ [Unidades de inferencia](#running-model-inference-units)
+ [Zonas de disponibilidad](#running-model-availability-zones)
+ [Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition](rm-start.md)
+ [Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition](rm-stop.md)
+ [Cómo obtener informes sobre la duración de la ejecución y las unidades de inferencia utilizadas](rm-model-usage.md)

## Unidades de inferencia
<a name="running-model-inference-units"></a>

Al iniciar el modelo, se indica el número de recursos de computación, conocidos como unidades de inferencia, que utiliza el modelo. 

**importante**  
Se le cobrará por el número de horas que el modelo esté en ejecución y por el número de unidades de inferencia que utilice mientras se ejecute, en función de cómo configure la ejecución del modelo. Por ejemplo, si inicia el modelo con dos unidades de inferencia y lo utiliza durante 8 horas, se le cobrarán 16 horas de inferencia (8 horas de tiempo de ejecución x dos unidades de inferencia). Para obtener más información, consulte [Horas de inferencias](https://aws.amazon.com/rekognition/pricing/#Amazon_Rekognition_Custom_Labels_pricing). Si no [detiene el modelo](rm-stop.md) directamente, se le cobrará aunque no se analicen activamente las imágenes con el modelo. 

Las transacciones por segundo (TPS) que engloba una sola unidad de inferencia se ven afectadas por lo siguiente.
+ Un modelo que detecta etiquetas de imagen (clasificación) generalmente tiene un TPS más alto que un modelo que detecta y localiza objetos con cuadros delimitadores (detección de objetos).
+ La complejidad del modelo.
+ Una imagen con mayor resolución exige más tiempo de análisis.
+ El análisis de más objetos en una imagen requiere más tiempo.
+ Las imágenes más pequeñas se analizan más rápido que las imágenes más grandes. 
+ Una imagen transferida como bytes de imagen se analiza más rápido que al cargar primero la imagen en un bucket de Amazon S3 y, a continuación, habilitar un enlace a la imagen cargada. Las imágenes transferidas como bytes de imagen deben ocupar menos de 4 MB. Se recomienda utilizar los bytes de imagen para el procesamiento de imágenes prácticamente en tiempo real y cuando el tamaño de la imagen sea inferior a 4 MB. Por ejemplo, las imágenes capturadas con una cámara de vigilancia.
+ Si se procesan las imágenes almacenadas en un bucket de Amazon S3, el proceso será más rápido que descargarlas, convertirlas en bytes de imagen y luego transferirlas para su análisis.
+ Si se analiza una imagen ya almacenada en un bucket de Amazon S3, probablemente el proceso sea más rápido que analizar la misma imagen transferida como bytes de imagen. Esto es especialmente cierto si el tamaño de la imagen es superior.

Si el número de llamadas a `DetectCustomLabels` supera el TPS máximo admitido por el total de unidades de inferencia que utiliza un modelo, Etiquetas personalizadas de Amazon Rekognition devolverá la excepción `ProvisionedThroughputExceededException`. 

### Gestión del rendimiento con unidades de inferencia
<a name="running-model-manage-throughput"></a>

Puede aumentar o disminuir el rendimiento del modelo en función de las exigencias de su aplicación. Para aumentar el rendimiento, utilice unidades de inferencia adicionales. Cada unidad de inferencia adicional aumenta la velocidad de procesamiento en una unidad de inferencia. Para obtener información sobre cómo calcular el número de unidades de inferencia que necesita, consulte [Calcular unidades de inferencia en los modelos Etiquetas personalizadas de Amazon Rekognition y Amazon Lookout for Vision](https://aws.amazon.com/blogs/machine-learning/calculate-inference-units-for-an-amazon-rekognition-custom-labels-model/). Si desea cambiar el rendimiento permitido para su modelo, tiene dos opciones: 

#### Cómo añadir o eliminar unidades de inferencia manualmente
<a name="running-model-manual-inference-units"></a>

[Detenga](rm-stop.md) el modelo y luego [reinícielo](rm-start.md) con el número correspondiente de unidades de inferencia. La desventaja de este método es que el modelo no puede recibir solicitudes mientras se reinicia y no se puede utilizar para gestionar los picos de demanda. Utilice este método si su modelo tiene un rendimiento constante y en su caso podría tolerar entre 10 y 20 minutos de inactividad. Un ejemplo de ello sería si deseara realizar llamadas por lotes en su modelo utilizando un calendario semanal. 

#### Escalado automático de unidades de inferencia
<a name="running-model-auto-scale-inference-units"></a>

Si su modelo tiene que adaptarse a picos de demanda, Etiquetas personalizadas de Amazon Rekognition ahora puede escalar el número de unidades de inferencia que utiliza el modelo. A medida que aumenta la demanda, Etiquetas personalizadas de Amazon Rekognition agrega unidades de inferencia adicionales al modelo y las elimina cuando la demanda decrece. 

Para permitir que Etiquetas personalizadas de Amazon Rekognition escale automáticamente las unidades de inferencia de un modelo, [inícielo](rm-start.md) y elija el número máximo de unidades de inferencia que puede utilizar mediante el parámetro `MaxInferenceUnits`. Si define un número máximo de unidades de inferencia, podrá administrar los costes de ejecutar el modelo al limitar el número de unidades de inferencia disponibles. Si no indica un número máximo de unidades, Etiquetas personalizadas de Amazon Rekognition no escalará automáticamente el modelo, sino que solo utilizará el número de unidades de inferencia con las que comenzó. Para obtener información sobre el número máximo de unidades de inferencia, consulte [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/rekognition.html#limits_rekognition). 

También puede indicar un número mínimo de unidades de inferencia mediante el parámetro `MinInferenceUnits`. Esto le permite especificar el rendimiento mínimo del modelo, donde una sola unidad de inferencia representa 1 hora de tiempo de procesamiento.

**nota**  
No puede definir el número máximo de unidades de inferencia en la consola de Etiquetas personalizadas de Amazon Rekognition. En su lugar, indique el parámetro de entrada `MaxInferenceUnits` en la operación `StartProjectVersion`.

Amazon Rekognition Custom Labels proporciona las siguientes métricas de CloudWatch Amazon Logs que puede utilizar para determinar el estado actual de escalado automático de un modelo.


| Métrica | Description (Descripción) | 
| --- | --- | 
|  `DesiredInferenceUnits`  |  El número de unidades de inferencia con las que Etiquetas personalizadas de Amazon Rekognition está haciendo la escala más grande o pequeña.   | 
|  `InServiceInferenceUnits`  |  El número de unidades de inferencia que utiliza el modelo.  | 

Si `DesiredInferenceUnits` = `InServiceInferenceUnits`, Etiquetas personalizadas de Amazon Rekognition no estará escalando el número de unidades de inferencia. 

Si `DesiredInferenceUnits` > `InServiceInferenceUnits`, Etiquetas personalizadas de Amazon Rekognition aumentará la escala más grande hasta alcanzar el valor de `DesiredInferenceUnits`. 

Si `DesiredInferenceUnits` > `InServiceInferenceUnits`, Etiquetas personalizadas de Amazon Rekognition reducirá la escala más pequeña hasta alcanzar el valor de `DesiredInferenceUnits`. 

 [Para obtener más información sobre las métricas devueltas por las etiquetas personalizadas de Amazon Rekognition y las dimensiones de filtrado, CloudWatch consulte las métricas de Rekognition.](https://docs.aws.amazon.com/rekognition/latest/dg/cloudwatch-metricsdim.html)

Para saber el número máximo de unidades de inferencia que ha solicitado para un modelo, llame a `DescribeProjectsVersion` y revise el campo `MaxInferenceUnits` en la respuesta. Para ver el código de ejemplo, consulte [Descripción de un modelo (SDK)](md-describing-model-sdk.md). 

## Zonas de disponibilidad
<a name="running-model-availability-zones"></a>

Etiquetas personalizadas de Amazon Rekognition distribuye las unidades de inferencia en varias zonas de disponibilidad de una región de AWS para ofrecer una mayor disponibilidad. Para obtener más información, consulte [Zonas de disponibilidad](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/#Availability_Zones). Para proteger los modelos de producción de las interrupciones en las zonas de disponibilidad y de los errores en las unidades de inferencia, inicie los modelos de producción con al menos dos unidades de inferencia. 

Si se produce una interrupción en la zona de disponibilidad, todas las unidades de inferencia de la zona de disponibilidad no estarán disponibles y la capacidad del modelo se reducirá. Las llamadas a se redistribuyen entre las unidades de [DetectCustomLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectCustomLabels)inferencia restantes. Estas llamadas se realizan correctamente si no superan las transacciones por segundo (TPS) permitidas de las unidades de inferencia restantes. Una vez que AWS repara la zona de disponibilidad, se reinician las unidades de inferencia y se restablece la capacidad total. 

Si una sola unidad de inferencia falla, Etiquetas personalizadas de Amazon Rekognition iniciará automáticamente una nueva unidad de inferencia en la misma zona de disponibilidad. La capacidad del modelo se reduce hasta que se inicie la nueva unidad de inferencia.

# Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition
<a name="rm-start"></a>

Puede empezar a ejecutar un modelo de Amazon Rekognition Custom Labels mediante la consola o mediante la operación. [StartProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartProjectVersion)

**importante**  
Se le cobrará por el número de horas que el modelo esté en ejecución y por el número de unidades de inferencia que utilice mientras se ejecute. Para obtener más información, consulte [Ejecución de un modelo de Etiquetas personalizadas de Amazon Rekognition](running-model.md).

El proceso de inicio de un modelo puede tardar algunos minutos. Para comprobar el estado actual de preparación del modelo, consulte la página de detalles del proyecto o uso. [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)

Una vez iniciado el modelo [DetectCustomLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectCustomLabels), utilice, para analizar las imágenes utilizando el modelo. Para obtener más información, consulte [Análisis de una imagen con un modelo entrenado](detecting-custom-labels.md). La consola también incluye un código de ejemplo para llamar a `DetectCustomLabels`. 

**Topics**
+ [Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition (consola)](#rm-start-console)
+ [Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)](#rm-start-sdk)

## Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition (consola)
<a name="rm-start-console"></a>

Utilice el siguiente procedimiento para empezar a ejecutar un modelo de Etiquetas personalizadas de Amazon Rekognition con la consola. Puede iniciar el modelo directamente desde la consola o utilizar el código del AWS SDK proporcionado por la consola. 

**Cómo iniciar un modelo (consola)**

1. Abra la consola Amazon Rekognition en. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)

1. Elija **Usar etiquetas personalizadas**.

1. Elija **Comenzar**. 

1. En el panel de navegación izquierdo, elija **Proyectos**.

1. En la página **Proyectos**, elija el proyecto que contiene el modelo entrenado que quiera iniciar.

1. En la sección **Modelos**, elija el modelo que desee iniciar. 

1. Seleccione la pestaña **Usar modelo**.

1. Realice una de las siguientes acciones:

------
#### [ Start model using the console ]

   En la sección **Iniciar o detener modelo**, haga lo siguiente:

   1. Seleccione el número de unidades de inferencia que desee utilizar. Para obtener más información, consulte [Ejecución de un modelo de Etiquetas personalizadas de Amazon Rekognition](running-model.md).

   1. Elija **Iniciar**.

   1. En el cuadro de diálogo **Iniciar modelo**, seleccione **Iniciar**. 

------
#### [ Start model using the AWS SDK ]

   En la sección **Usar su modelo**, realice lo siguiente:

   1. Elija **Código de API**.

   1. Elija **AWS CLI** o **Python**.

   1. En **Iniciar modelo**, copie el código de ejemplo.

   1. Utilice el código de ejemplo para iniciar el modelo. Para obtener más información, consulte [Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)](#rm-start-sdk).

------

1. Para volver a la página de información general del proyecto, elija el nombre del proyecto en la parte superior de la página.

1. En la sección **Modelo**, compruebe el estado del modelo. Cuando el estado del modelo esté **EN EJECUCIÓN**, puede utilizar el modelo para analizar imágenes. Para obtener más información, consulte [Análisis de una imagen con un modelo entrenado](detecting-custom-labels.md).

## Inicio de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)
<a name="rm-start-sdk"></a>

Para iniciar un modelo, se llama a la [StartProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartProjectVersion)API y se pasa el nombre de recurso de Amazon (ARN) del modelo en el parámetro de `ProjectVersionArn` entrada. Indique también el número de unidades de inferencia que desee utilizar. Para obtener más información, consulte [Ejecución de un modelo de Etiquetas personalizadas de Amazon Rekognition](running-model.md).

Es posible que un modelo tarde un tiempo en iniciarse. En los ejemplos de Python y Java de este tema, se utilizan esperadores para que se inicie el modelo. Un esperador es un método de utilidad que sondean si se da un determinado estado. Como alternativa, puede comprobar el estado actual llamando [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions). 

**Cómo iniciar un modelo (SDK)**

1. Si aún no lo ha hecho, instale y configure el AWS CLI y el AWS SDKs. Para obtener más información, consulte [Paso 4: Configure y AWS CLI AWS SDKs](su-awscli-sdk.md).

1. Utilice el código de ejemplo para iniciar un modelo.

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

   Cambie el valor de `project-version-arn` por el ARN del modelo que desee iniciar. Cambie el valor de `--min-inference-units` por el número de unidades de inferencia que desee utilizar. Si lo desea, cambie `--max-inference-units` por el número máximo de unidades de inferencia que Etiquetas personalizadas de Amazon Rekognition puede utilizar para escalar automáticamente el modelo.

   ```
   aws rekognition start-project-version  --project-version-arn model_arn \
      --min-inference-units minimum number of units \
      --max-inference-units maximum number of units \
      --profile custom-labels-access
   ```

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

   Indique los siguientes parámetros de línea de comandos:
   + `project_arn`: el ARN del proyecto que incluye el modelo que desea iniciar.
   + `model_arn`: el ARN del modelo que desea iniciar.
   + `min_inference_units`: el número de unidades de inferencia que desea utilizar.
   + (Opcional) `--max_inference_units`: el número máximo de unidades de inferencia que Etiquetas personalizadas de Amazon Rekognition puede utilizar para escalar automáticamente el modelo. 

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Shows how to start running an Amazon Lookout for Vision model.
   """
   
   import argparse
   import logging
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def get_model_status(rek_client, project_arn, model_arn):
       """
       Gets the current status of an Amazon Rekognition Custom Labels model
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_name:  The name of the project that you want to use.
       :param model_arn:  The name of the model that you want the status for.
       :return: The model status
       """
   
       logger.info("Getting status for %s.", model_arn)
   
       # Extract the model version from the model arn.
       version_name = (model_arn.split("version/", 1)[1]).rpartition('/')[0]
   
       models = rek_client.describe_project_versions(ProjectArn=project_arn,
                                                     VersionNames=[version_name])
   
       for model in models['ProjectVersionDescriptions']:
   
           logger.info("Status: %s", model['StatusMessage'])
           return model["Status"]
   
       error_message = f"Model {model_arn} not found."
       logger.exception(error_message)
       raise Exception(error_message)
   
   
   def start_model(rek_client, project_arn, model_arn, min_inference_units, max_inference_units=None):
       """
       Starts the hosting of an Amazon Rekognition Custom Labels model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_name:  The name of the project that contains the
       model that you want to start hosting.
       :param min_inference_units: The number of inference units to use for hosting.
       :param max_inference_units: The number of inference units to use for auto-scaling
       the model. If not supplied, auto-scaling does not happen.
       """
   
       try:
           # Start the model
           logger.info(f"Starting model: {model_arn}. Please wait....")
   
           if max_inference_units is None:
               rek_client.start_project_version(ProjectVersionArn=model_arn,
                                                MinInferenceUnits=int(min_inference_units))
           else:
               rek_client.start_project_version(ProjectVersionArn=model_arn,
                                                MinInferenceUnits=int(
                                                    min_inference_units),
                                                MaxInferenceUnits=int(max_inference_units))
   
           # Wait for the model to be in the running state
           version_name = (model_arn.split("version/", 1)[1]).rpartition('/')[0]
           project_version_running_waiter = rek_client.get_waiter(
               'project_version_running')
           project_version_running_waiter.wait(
               ProjectArn=project_arn, VersionNames=[version_name])
   
           # Get the running status
           return get_model_status(rek_client, project_arn, model_arn)
   
       except ClientError as err:
           logger.exception("Client error: Problem starting model: %s", err)
           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 that the model you want to start."
       )
       parser.add_argument(
           "model_arn", help="The ARN of the model that you want to start."
       )
       parser.add_argument(
           "min_inference_units", help="The minimum number of inference units to use."
       )
       parser.add_argument(
           "--max_inference_units",  help="The maximum number of inference units to use for auto-scaling the model.", required=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()
   
           # Start the model.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
           
           status = start_model(rekognition_client,
                                args.project_arn, args.model_arn,
                                args.min_inference_units,
                                args.max_inference_units)
   
           print(f"Finished starting model: {args.model_arn}")
           print(f"Status: {status}")
   
       except ClientError as err:
           error_message = f"Client error: Problem starting model: {err}"
           logger.exception(error_message)
           print(error_message)
   
       except Exception as err:
           error_message = f"Problem starting model:{err}"
           logger.exception(error_message)
           print(error_message)
   
   
   if __name__ == "__main__":
       main()
   ```

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

   Indique los siguientes parámetros de línea de comandos:
   + `project_arn`: el ARN del proyecto que incluye el modelo que desea iniciar.
   + `model_arn`: el ARN del modelo que desea iniciar.
   + `min_inference_units`: el número de unidades de inferencia que desea utilizar.
   + (Opcional)`max_inference_units`: el número máximo de unidades de inferencia que Etiquetas personalizadas de Amazon Rekognition puede utilizar para escalar automáticamente el modelo. Si no se indica ningún valor, no se aplicará el escalado automático.

   ```
   /*
      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.core.waiters.WaiterResponse;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionStatus;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.StartProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.StartProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.waiters.RekognitionWaiter;
   
   import java.util.Optional;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class StartModel {
   
       public static final Logger logger = Logger.getLogger(StartModel.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 startMyModel(RekognitionClient rekClient, String projectArn, String modelArn,
               Integer minInferenceUnits, Integer maxInferenceUnits
               ) throws Exception, RekognitionException {
   
           try {
               
               logger.log(Level.INFO, "Starting model: {0}", modelArn);
               
               StartProjectVersionRequest startProjectVersionRequest = null;
               
               if (maxInferenceUnits == null) {
                   startProjectVersionRequest = StartProjectVersionRequest.builder()
                       .projectVersionArn(modelArn)
                       .minInferenceUnits(minInferenceUnits)
                       .build();
               }
               else {
                   startProjectVersionRequest = StartProjectVersionRequest.builder()
                           .projectVersionArn(modelArn)
                           .minInferenceUnits(minInferenceUnits)
                           .maxInferenceUnits(maxInferenceUnits)
                           .build();
                   
               }
   
               StartProjectVersionResponse response = rekClient.startProjectVersion(startProjectVersionRequest);
   
               logger.log(Level.INFO, "Status: {0}", response.statusAsString() );
               
               
               // Get the model version
   
               int start = findForwardSlash(modelArn, 3) + 1;
               int end = findForwardSlash(modelArn, 4);
   
               String versionName = modelArn.substring(start, end);
   
   
               // wait until model starts
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                       .versionNames(versionName)
                       .projectArn(projectArn)
                       .build();
   
               RekognitionWaiter waiter = rekClient.waiter();
   
               WaiterResponse<DescribeProjectVersionsResponse> waiterResponse = waiter
                       .waitUntilProjectVersionRunning(describeProjectVersionsRequest);
   
               Optional<DescribeProjectVersionsResponse> optionalResponse = waiterResponse.matched().response();
   
               DescribeProjectVersionsResponse describeProjectVersionsResponse = optionalResponse.get();
   
               for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                       .projectVersionDescriptions()) {
                   if(projectVersionDescription.status() == ProjectVersionStatus.RUNNING) {
                       logger.log(Level.INFO, "Model is running" );
                    
                   }
                   else {
                       String error = "Model training failed: " + projectVersionDescription.statusAsString() + " "
                               + projectVersionDescription.statusMessage() + " " + modelArn;
                       logger.log(Level.SEVERE, error);
                       throw new Exception(error);
                   }
                   
               }
   
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not start model: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           String modelArn = null;
           String projectArn = null;
           Integer minInferenceUnits = null;
           Integer maxInferenceUnits = null;
           
   
   
   
           final String USAGE = "\n" + "Usage: " + "<project_name> <version_name> <min_inference_units> <max_inference_units>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that contains the model that you want to start. \n\n"
                   + "   model_arn - The ARN of the model version that you want to start.\n\n"
                   + "   min_inference_units - The number of inference units to start the model with.\n\n"
                   + "   max_inference_units - The maximum number of inference units that Custom Labels can use to "
                   + "   automatically scale the model. If the value is null, automatic scaling doesn't happen.\n\n";
   
           if (args.length < 3  || args.length >4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           modelArn = args[1];
           minInferenceUnits=Integer.parseInt(args[2]);
           
           if (args.length == 4) {
               maxInferenceUnits = Integer.parseInt(args[3]);
           }
     
           try {
   
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
               // Start the model.
               startMyModel(rekClient, projectArn, modelArn, minInferenceUnits, maxInferenceUnits);
               
   
               System.out.println(String.format("Model started: %s", modelArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (Exception rekError) {
               logger.log(Level.SEVERE, "Error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           
   
       }
   
   }
   ```

------

# Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition
<a name="rm-stop"></a>

Puede dejar de ejecutar un modelo de Amazon Rekognition Custom Labels mediante la consola o mediante la operación. [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion)

**Topics**
+ [Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition (consola)](#rm-stop-console)
+ [Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)](#rm-stop-sdk)

## Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition (consola)
<a name="rm-stop-console"></a>

Utilice el siguiente procedimiento para dejar de ejecutar un modelo de Etiquetas personalizadas de Amazon Rekognition con la consola. Puede detener el modelo directamente desde la consola o utilizar el código del AWS SDK proporcionado por la consola. 

**Cómo detener un modelo (consola)**

1. Abra la consola Amazon Rekognition en. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)

1. Elija **Usar etiquetas personalizadas**.

1. Elija **Comenzar**. 

1. En el panel de navegación izquierdo, elija **Proyectos**.

1. En la página **Proyectos**, elija el proyecto que contiene el modelo entrenado que quiera detener.

1. En la sección **Modelos**, elija el modelo que desee detener. 

1. Seleccione la pestaña **Usar modelo**.

1. 

------
#### [ Stop model using the console ]

   1. En la sección **Iniciar o detener modelo**, seleccione **Detener**.

   1. En el cuadro de diálogo **Detener modelo**, escriba **detener** para confirmar que desea detener el modelo.

   1. Seleccione **Detener** para detener el modelo.

------
#### [ Stop model using the AWS SDK ]

   En la sección **Usar su modelo**, realice lo siguiente:

   1. Elija **Código de API**.

   1. Elija **AWS CLI** o **Python**.

   1. En **Detener modelo**, copie el código de ejemplo.

   1. Utilice el código de ejemplo para detener el modelo. Para obtener más información, consulte [Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)](#rm-stop-sdk).

------

1. Elija el nombre del proyecto en la parte superior de la página para volver a la página de información general del proyecto.

1. En la sección **Modelo**, compruebe el estado del modelo. El modelo se habrá detenido cuando el estado del modelo esté en **DETENIDO**.

## Detención de un modelo de Etiquetas personalizadas de Amazon Rekognition (SDK)
<a name="rm-stop-sdk"></a>

Para detener un modelo, se llama a la [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion)API y se pasa el nombre de recurso de Amazon (ARN) del modelo en el parámetro de `ProjectVersionArn` entrada. 

Es posible que el modelo tarde un tiempo en detenerse. Para comprobar el estado actual, use `DescribeProjectVersions`. 

**Cómo detener un modelo (SDK)**

1. Si aún no lo ha hecho, instale y configure el AWS CLI y el AWS SDKs. Para obtener más información, consulte [Paso 4: Configure y AWS CLI AWS SDKs](su-awscli-sdk.md).

1. Utilice el código de ejemplo para iniciar un modelo.

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

   Cambie el valor de `project-version-arn` por el ARN de la versión del modelo que desee detener.

   ```
   aws rekognition stop-project-version --project-version-arn "model arn" \
     --profile custom-labels-access
   ```

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

   En el siguiente ejemplo se detiene un modelo que ya se está ejecutando.

   Indique los siguientes parámetros de línea de comandos:
   + `project_arn`: el ARN del proyecto que incluye el modelo que desea detener.
   + `model_arn`: el ARN del modelo que desea detener.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Shows how to stop a running Amazon Lookout for Vision model.
   """
   
   import argparse
   import logging
   import time
   import boto3
   
   from botocore.exceptions import ClientError
   
   
   logger = logging.getLogger(__name__)
   
   
   def get_model_status(rek_client, project_arn, model_arn):
       """
       Gets the current status of an Amazon Rekognition Custom Labels model
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_name:  The name of the project that you want to use.
       :param model_arn:  The name of the model that you want the status for.
       """
   
       logger.info ("Getting status for %s.", model_arn)
   
       # Extract the model version from the model arn.
       version_name=(model_arn.split("version/",1)[1]).rpartition('/')[0]
   
       # Get the model status.
       models=rek_client.describe_project_versions(ProjectArn=project_arn,
       VersionNames=[version_name])
   
       for model in models['ProjectVersionDescriptions']: 
           logger.info("Status: %s",model['StatusMessage'])
           return model["Status"]
   
       # No model found.
       logger.exception("Model %s not found.", model_arn)
       raise Exception("Model %s not found.", model_arn)
   
   
   def stop_model(rek_client, project_arn, model_arn):
       """
       Stops a running Amazon Rekognition Custom Labels Model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the project that you want to stop running.
       :param model_arn:  The ARN of the model (ProjectVersion) that you want to stop running.
       """
   
       logger.info("Stopping model: %s", model_arn)
   
       try:
           # Stop the model.
           response=rek_client.stop_project_version(ProjectVersionArn=model_arn)
   
           logger.info("Status: %s", response['Status'])
   
           # stops when hosting has stopped or failure.
           status = ""
           finished = False
   
           while finished is False:
   
               status=get_model_status(rek_client, project_arn, model_arn)
   
               if status == "STOPPING":
                   logger.info("Model stopping in progress...")
                   time.sleep(10)
                   continue
               if status == "STOPPED":
                   logger.info("Model is not running.")
                   finished = True
                   continue
   
               error_message = f"Error stopping model. Unexepected state: {status}"
               logger.exception(error_message)
               raise Exception(error_message)
   
           logger.info("finished. Status %s", status)
           return status
   
       except ClientError as err:
           logger.exception("Couldn't stop 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 stop."
       )
       parser.add_argument(
           "model_arn", help="The ARN of the model that you want to stop."
       )
   
   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()
   
           # Stop the model.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           status=stop_model(rekognition_client, args.project_arn, args.model_arn)
   
           print(f"Finished stopping model: {args.model_arn}")
           print(f"Status: {status}")
   
       except ClientError as err:
           logger.exception("Problem stopping model:%s",err)
           print(f"Failed to stop model: {err}")
       
       except Exception as err:
           logger.exception("Problem stopping model:%s", err)
           print(f"Failed to stop model: {err}")
   
   if __name__ == "__main__":
       main()
   ```

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

   Indique los siguientes parámetros de línea de comandos:
   + `project_arn`: el ARN del proyecto que incluye el modelo que desea detener.
   + `model_arn`: el ARN del modelo que desea detener.

   ```
   /*
      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.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionStatus;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.StopProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.StopProjectVersionResponse;
   
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class StopModel {
   
       public static final Logger logger = Logger.getLogger(StopModel.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 stopMyModel(RekognitionClient rekClient, String projectArn, String modelArn)
               throws Exception, RekognitionException {
   
           try {
   
               logger.log(Level.INFO, "Stopping {0}", modelArn);
   
               StopProjectVersionRequest stopProjectVersionRequest = StopProjectVersionRequest.builder()
                       .projectVersionArn(modelArn).build();
   
               StopProjectVersionResponse response = rekClient.stopProjectVersion(stopProjectVersionRequest);
   
               logger.log(Level.INFO, "Status: {0}", response.statusAsString());
   
               // Get the model version
   
               int start = findForwardSlash(modelArn, 3) + 1;
               int end = findForwardSlash(modelArn, 4);
   
               String versionName = modelArn.substring(start, end);
   
               // wait until model stops
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                       .projectArn(projectArn).versionNames(versionName).build();
   
               boolean stopped = false;
   
               // Wait until create finishes
   
               do {
   
                   DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                           .describeProjectVersions(describeProjectVersionsRequest);
   
                   for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                           .projectVersionDescriptions()) {
   
                       ProjectVersionStatus status = projectVersionDescription.status();
   
                       logger.log(Level.INFO, "stopping model: {0} ", modelArn);
   
                       switch (status) {
   
                       case STOPPED:
                           logger.log(Level.INFO, "Model stopped");
                           stopped = true;
                           break;
   
                       case STOPPING:
                           Thread.sleep(5000);
                           break;
   
                       case FAILED:
                           String error = "Model stopping failed: " + projectVersionDescription.statusAsString() + " "
                                   + projectVersionDescription.statusMessage() + " " + modelArn;
                           logger.log(Level.SEVERE, error);
                           throw new Exception(error);
   
                       default:
                           String unexpectedError = "Unexpected stopping state: "
                                   + projectVersionDescription.statusAsString() + " "
                                   + projectVersionDescription.statusMessage() + " " + modelArn;
                           logger.log(Level.SEVERE, unexpectedError);
                           throw new Exception(unexpectedError);
                       }
                   }
   
               } while (stopped == false);
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not stop model: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           String modelArn = null;
           String projectArn = null;
   
   
           final String USAGE = "\n" + "Usage: " + "<project_name> <version_name>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that contains the model that you want to stop. \n\n"
                   + "   model_arn - The ARN of the model version that you want to stop.\n\n";
   
           if (args.length != 2) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           modelArn = args[1];
   
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
               // Stop model
               stopMyModel(rekClient, projectArn, modelArn);
   
               System.out.println(String.format("Model stopped: %s", modelArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (Exception rekError) {
               logger.log(Level.SEVERE, "Error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# Cómo obtener informes sobre la duración de la ejecución y las unidades de inferencia utilizadas
<a name="rm-model-usage"></a>

Si entrenó e inició su modelo después de agosto de 2022, puede usar la CloudWatch métrica de `InServiceInferenceUnits` Amazon para determinar cuántas horas ha durado un modelo y la cantidad de [unidades de inferencia](running-model.md#running-model-inference-units) utilizadas durante esas horas.

**nota**  
Si solo tiene un modelo en una AWS región, también puede obtener el tiempo de ejecución del modelo haciendo un seguimiento de las llamadas entrantes `StartprojectVersion` y `StopProjectVersion` entrantes que se hayan realizado correctamente. CloudWatch Este enfoque no funciona si se ejecuta más de un modelo en la AWS región, ya que las métricas no incluyen información sobre el modelo.  
Como alternativa, puede utilizarlo AWS CloudTrail para realizar un seguimiento de las llamadas a `StartProjectVersion` y `StopProjectVersion` (que incluye el ARN modelo en el `requestParameters` campo del [historial de eventos](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html?icmpid=docs_console_unmapped)). CloudTrail los eventos están limitados a 90 días, pero puedes almacenar eventos de hasta 7 años en un [CloudTraillago](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html).

Con el siguiente procedimiento se pueden crear gráficas para lo siguiente:
+ El número de horas que ha estado en funcionamiento un modelo.
+ El número de unidades de inferencia que ha utilizado el modelo.

Puede elegir un período de tiempo de hasta 15 meses atrás. Para obtener más información sobre la retención de métricas, consulte [Retención de métricas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#metrics-retention). 

**Cómo determinar la duración del modelo y las unidades de inferencia utilizadas en un modelo**

1. Inicie sesión en Consola de administración de AWS y abra la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación izquierdo, elija **Todas las métricas** en **Métricas**.

1. En el panel de contenido, elija la pestaña **Origen**.

1. Asegúrese de que el botón **Panel** esté seleccionado.

1. En el cuadro de edición, reemplace el JSON existente por el siguiente. Cambie los siguientes valores:
   + `Project_Name`: el proyecto que incluye el modelo del que desea hacer una gráfica.
   + `Version_Name`: la versión del modelo del que desea hacer una gráfica.
   + `AWS_Region`— La AWS región que contiene el modelo. Asegúrese de que la CloudWatch consola esté en la misma AWS región. Para ello, compruebe el selector de regiones de la barra de navegación de la parte superior de la página. Realice los cambios necesarios.

   ```
   {
       "sparkline": true,
       "metrics": [
           [
               {
                   "expression": "SUM(m1)*m1",
                   "label": "Inference units used",
                   "id": "e1"
               }
           ],
           [
               {
                   "expression": "DATAPOINT_COUNT(m1)*m1/m1",
                   "label": "Hours running",
                   "id": "e2"
               }
           ],
           [
               "AWS/Rekognition",
               "InServiceInferenceUnits",
               "ProjectName",
               "Project_Name",
               "VersionName",
               "Version_Name",
               {
                   "id": "m1",
                   "visible": false
               }
           ]
       ],
       "view": "singleValue",
       "stacked": false,
       "region": "AWS_Region",
       "stat": "Average",
       "period": 3600,
       "title": "Hours run and inference units used"
   }
   ```

1. Elija **Actualizar**.

1. En la parte superior de la página, elija una línea de tiempo. Debería ver los números de las unidades de inferencia utilizadas y las horas de funcionamiento a lo largo de la línea de tiempo. Los vacíos en la gráfica indican los momentos en los que el modelo no estaba en ejecución. La siguiente captura de pantalla de la consola muestra las unidades de inferencia utilizadas y las horas acumuladas en períodos de tiempo, con un tiempo personalizado establecido de 2 semanas, con los valores más altos de 214 unidades de inferencia y 209 horas de ejecución.  
![\[Gráfico que muestra las unidades de inferencia.\]](http://docs.aws.amazon.com/es_es/rekognition/latest/customlabels-dg/images/model-duration.png)

1. (Opcional) Para agregar la gráfica a un panel, elija **Acciones** y después **Agregar al panel**.