

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.

# Implementar modelos para inferencia
<a name="deploy-model"></a>

Con Amazon SageMaker AI, puede empezar a obtener predicciones o *inferencias* a partir de sus modelos de aprendizaje automático entrenados. SageMaker La IA ofrece una amplia selección de opciones de implementación de modelos e infraestructuras de aprendizaje automático para satisfacer todas sus necesidades de inferencia de aprendizaje automático. Con SageMaker AI Inference, puede escalar la implementación de sus modelos, gestionar los modelos de forma más eficaz en producción y reducir la carga operativa. SageMaker La IA le proporciona varias opciones de inferencia, como puntos finales en tiempo real para obtener inferencias de baja latencia, puntos finales sin servidor para una infraestructura totalmente gestionada y autoscalado, y puntos finales asíncronos para lotes de solicitudes. Al utilizar la opción de inferencia adecuada para el caso de uso, puede garantizar una implementación e inferencia eficaces de los modelos.

## Selección de una característica
<a name="deploy-model-choose"></a>

Existen varios casos de uso para implementar modelos de aprendizaje automático con IA. SageMaker En esta sección se describen esos casos de uso, así como la función de SageMaker IA que recomendamos para cada caso de uso. 

### Casos de uso
<a name="deploy-model-use-cases"></a>

Los siguientes son los principales casos de uso para implementar modelos de aprendizaje automático con SageMaker IA.
+ **Caso de uso 1: implementación de un modelo de machine learning en un entorno sin código o con poco código.** Para los principiantes o los principiantes en la SageMaker IA, puede implementar modelos previamente entrenados con Amazon SageMaker JumpStart a través de la interfaz de Amazon SageMaker Studio, sin necesidad de configuraciones complejas.
+ **Caso de uso 2: uso del código para implementar modelos de machine learning con mayor flexibilidad y control.** Los profesionales con experiencia en aprendizaje automático pueden implementar sus propios modelos con configuraciones personalizadas para las necesidades de sus aplicaciones mediante la `ModelBuilder` clase del SDK de Python para SageMaker IA, que proporciona un control detallado de varios ajustes, como los tipos de instancias, el aislamiento de la red y la asignación de recursos.
+ **Caso de uso 3: implementación de modelos de machine learning a escala.** Para los usuarios avanzados y las organizaciones que desean gestionar modelos a escala durante la fase de producción, utilicen la infraestructura como código (IaC) AWS SDK para Python (Boto3) y CloudFormation las CI/CD herramientas que prefieran para aprovisionar recursos y automatizar la administración de recursos.

### Características recomendadas
<a name="deploy-model-recommended"></a>

En la siguiente tabla, se describen las principales consideraciones y desventajas de las funciones de SageMaker IA correspondientes a cada caso de uso.


|  | Caso de uso 1 | Caso de uso 2 | Caso de uso 3 | 
| --- | --- | --- | --- | 
| SageMaker Función de IA | [ JumpStart Utilícela en Studio](jumpstart-foundation-models-use-studio-updated.md) para acelerar la implementación de su modelo fundamental. | Implemente modelos utilizando [el SDK ModelBuilder de SageMaker Python](how-it-works-modelbuilder-creation.md). |  [Implemente y gestione modelos a escala con CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html). | 
| Description (Descripción) | Utilice la interfaz de usuario de Studio para implementar modelos previamente entrenados de un catálogo en puntos de conexión de inferencia preconfigurados. Esta opción es ideal para científicos de datos no especializados o para cualquier persona que desee implementar un modelo sin configurar ajustes complejos. | Utilice la ModelBuilder clase del SDK de Python de Amazon SageMaker AI para implementar su propio modelo y configurar los ajustes de implementación. Esta opción es ideal para científicos de datos con experiencia o para cualquier persona que tenga su propio modelo que implementar y requiera un control pormenorizado. | Utilice CloudFormation la infraestructura como código (IaC) para el control programático y la automatización para implementar y administrar modelos de SageMaker IA. Esta opción es ideal para usuarios avanzados que requieren implementaciones coherentes y repetibles. | 
| Optimizada para | Implementaciones rápidas y optimizadas de modelos populares de código abierto | Implementación de sus propios modelos | Administración continua de los modelos en producción | 
| Consideraciones | Falta de personalización para la configuración de los contenedores y las necesidades específicas de las aplicaciones | Sin interfaz de usuario, requiere que tenga experiencia en el desarrollo y el mantenimiento de código de Python | Requiere recursos organizativos y de gestión de la infraestructura, y también requiere estar familiarizado con las plantillas AWS SDK para Python (Boto3) o con ellas. CloudFormation  | 
| Entorno recomendado | Un dominio de SageMaker IA | Un entorno de desarrollo de Python configurado con sus AWS credenciales y el SDK de SageMaker Python instalado, o un IDE de SageMaker IA como [SageMaker JupyterLab](studio-updated-jl.md) | The AWS CLI, un entorno de desarrollo local e Infrastructure as Code (IaC) y herramientas CI/CD  | 

### Opciones adicionales
<a name="deploy-model-additional"></a>

SageMaker La IA ofrece diferentes opciones para sus casos de uso de inferencias, lo que le permite elegir entre la amplitud y profundidad técnicas de sus despliegues:
+ **Implementación de un modelo en un punto de conexión:** a la hora de implementar el modelo, tenga en cuenta las siguientes opciones:
  + [Inferencia en tiempo real](realtime-endpoints.md): la inferencia en tiempo real es ideal para cargas de trabajo de inferencia con requisitos interactivos y de baja latencia.
  + [Implemente modelos con Amazon SageMaker Serverless Inference](serverless-endpoints.md): utilice Inferencia sin servidor para implementar modelos sin configurar ni administrar ninguna de las infraestructuras subyacentes. Esta opción es ideal para cargas de trabajo con períodos de inactividad entre picos de tráfico y que pueden tolerar arranques en frío.
  + [Inferencia asíncrona](async-inference.md): pone en cola las solicitudes entrantes y las procesa de forma asíncrona. Esta opción es ideal para solicitudes con cargas de gran tamaño (hasta 1 GB), tiempos de procesamiento prolongados (hasta una hora) y requisitos de latencia cercanos al tiempo real.
+ **Optimización de costos:** para optimizar los costos de inferencia, tenga en cuenta las siguientes opciones:
  + [Optimización del rendimiento de los modelos con SageMaker Neo](neo.md). Utilice SageMaker Neo para optimizar y ejecutar sus modelos de aprendizaje automático con un mejor rendimiento y eficiencia, lo que le ayudará a minimizar los costes de procesamiento al optimizar automáticamente los modelos para que se ejecuten en entornos como los chips AWS Inferentia.
  + [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md): utilice el escalado automático para ajustar dinámicamente los recursos de computación de los puntos de conexión en función de los patrones de tráfico entrante, lo que le ayuda a optimizar los costos al pagar solo por los recursos que utilice en un momento determinado.

# Opciones de implementación de modelos en Amazon SageMaker AI
<a name="how-it-works-deployment"></a>

Después de entrenar el modelo de machine learning, puede implementarlo con Amazon SageMaker AI para obtener predicciones. Amazon SageMaker AI admite las siguientes maneras de implementar un modelo, en función de su caso de uso:
+ Para los puntos de conexión persistentes y en tiempo real que realizan una predicción a la vez, utilice los servicios de alojamiento en tiempo real de SageMaker AI. Consulte [Inferencia en tiempo real](realtime-endpoints.md).
+ Utilice Inferencia sin servidor para las cargas de trabajo que tienen períodos de inactividad entre picos de tráfico y que pueden tolerar los arranques en frío. Consulte [Implemente modelos con Amazon SageMaker Serverless Inference](serverless-endpoints.md).
+ Las solicitudes con cargas útiles grandes de hasta 1 GB, los tiempos de procesamiento prolongados y los requisitos de latencia prácticamente en tiempo real utilizan la inferencia asíncrona de Amazon SageMaker. Consulte [Inferencia asíncrona](async-inference.md).
+ Para obtener predicciones para todo un conjunto de datos completo, use transformaciones por lotes de SageMaker AI. Consulte [Transformación por lotes para inferencias con Amazon AI SageMaker](batch-transform.md).

SageMaker AI proporciona características que permiten administrar recursos y optimizar el rendimiento de las inferencias a la hora de implementar modelos de machine learning:
+ Para administrar los modelos en dispositivos periféricos de forma que pueda optimizar, proteger, supervisar y mantener los modelos de machine learning en flotas de dispositivos periféricos, consulte [Modele la implementación en la periferia con Edge Manager SageMaker](edge.md). Esto se aplica a dispositivos periféricos, como cámaras inteligentes, robots, ordenadores personales y dispositivos móviles.
+ Para optimizar Gluon, Keras, MXNet, PyTorch, TensorFlow, TensorFlow-Lite y ONNX para la inferencia en máquinas Android, Linux y Windows basadas en procesadores de Ambarella, ARM, Intel, Nvidia, NXP, Qualcomm, Texas Instruments y Xilinx, consulte [Optimización del rendimiento de los modelos con SageMaker Neo](neo.md).

Para obtener más información acerca de todas las opciones de implementación, consulte [Implementar modelos para inferencia](deploy-model.md).

# Conozca las opciones para implementar modelos y obtener inferencias en Amazon AI SageMaker
<a name="deploy-model-get-started"></a>

Para ayudarle a empezar con la inferencia de SageMaker IA, consulte las siguientes secciones, en las que se explican las opciones para implementar su modelo en la SageMaker IA y obtener inferencias. La sección [Opciones de inferencia en Amazon AI SageMaker](deploy-model-options.md) puede ayudarle a determinar qué característica se adapta mejor a su caso de uso para la inferencia.

Puedes consultar [Recursos](inference-resources.md) esta sección para obtener más información sobre resolución de problemas e información de referencia, blogs y ejemplos que te ayudarán a empezar, además de información general. FAQs

**Topics**
+ [Antes de empezar](#deploy-model-prereqs)
+ [Pasos para la implementación de modelos](#deploy-model-steps)
+ [Opciones de inferencia en Amazon AI SageMaker](deploy-model-options.md)
+ [Opciones de punto final avanzadas para realizar inferencias con Amazon AI SageMaker](deploy-model-advanced.md)
+ [Próximos pasos para realizar inferencias con Amazon AI SageMaker](deploy-model-next-steps.md)

## Antes de empezar
<a name="deploy-model-prereqs"></a>

En estos temas se presupone que ha creado y entrenado modelos de machine learning y que está listo para implementarlos. No necesitas entrenar tu modelo en SageMaker IA para implementarlo en SageMaker IA y obtener inferencias. Si no tienes tu propio modelo, también puedes usar los [algoritmos integrados de la SageMaker IA o los modelos previamente entrenados](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html).

Si eres nuevo en el mundo de la SageMaker IA y aún no has elegido un modelo para implementarlo, sigue los pasos del tutorial [Get Started with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html). Utilice el tutorial para familiarizarse con la forma en que la SageMaker IA gestiona el proceso de ciencia de datos y cómo gestiona la implementación de modelos. Para obtener más información acerca de entrenamiento de modelos, consulte [Entrenamiento de modelos](https://docs.aws.amazon.com/sagemaker/latest/dg/train-model.html).

Para obtener más información, referencias y ejemplos, consulte [Recursos](inference-resources.md).

## Pasos para la implementación de modelos
<a name="deploy-model-steps"></a>

Para los punto de conexión de inferencia, el flujo de trabajo general consiste en lo siguiente:
+ Cree un modelo en SageMaker AI Inference apuntando a los artefactos del modelo almacenados en Amazon S3 y a una imagen de contenedor.
+ Seleccione una opción de inferencia. Para obtener más información, consulte [Opciones de inferencia en Amazon AI SageMaker](deploy-model-options.md).
+ Cree una configuración de punto final de inferencia de SageMaker IA eligiendo el tipo de instancia y la cantidad de instancias que necesita detrás del punto final. Puede utilizar [Amazon SageMaker Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html) para obtener recomendaciones para los tipos de instancias. Para la inferencia sin servidor, solo necesita proporcionar la configuración de memoria que necesita en función del tamaño del modelo. 
+ Cree un punto final de inferencia de SageMaker IA.
+ Invoque su punto de conexión para recibir una inferencia como respuesta.

El siguiente diagrama muestra el flujo de trabajo anterior.

![\[El flujo de trabajo descrito en el párrafo anterior muestra cómo obtener inferencias a partir de SageMaker la IA.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference-workflow-flowchart.png)


Puede realizar estas acciones mediante la AWS consola AWS SDKs, el SDK de SageMaker Python CloudFormation o el AWS CLI.

Para realizar inferencias por lotes con transformación por lotes, señale los artefactos del modelo y los datos de entrada y cree un trabajo de inferencia por lotes. En lugar de alojar un punto final para realizar inferencias, la SageMaker IA envía sus inferencias a la ubicación de Amazon S3 que elija.

# Opciones de inferencia en Amazon AI SageMaker
<a name="deploy-model-options"></a>

SageMaker La IA ofrece varias opciones de inferencia para que pueda elegir la que mejor se adapte a su carga de trabajo:
+ [Inferencia en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html): la *inferencia en tiempo real* es ideal para inferencias en línea que tienen requisitos de baja latencia o alto rendimiento. Utilice la inferencia en tiempo real para obtener un punto de conexión persistente y totalmente gestionado (API de REST) que pueda gestionar un tráfico continuo, con el respaldo del tipo de instancia que elija. La inferencia en tiempo real puede admitir tamaños de carga útil de hasta 25 MB y tiempos de procesamiento de 60 segundos para las respuestas regulares y 8 minutos para las respuestas de transmisión.
+ [Inferencia sin servidor: la inferencia](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html) *sin servidor es ideal cuando hay patrones* de tráfico intermitentes o impredecibles. SageMaker La IA gestiona toda la infraestructura subyacente, por lo que no es necesario gestionar las instancias ni las políticas de escalado. Solo pagará por lo que utilice y no por el tiempo de inactividad. Puede admitir cargas útiles de hasta 4 MB y tiempos de procesamiento de hasta 60 segundos.
+ [Transformación por lotes](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html): la *Transformación por lotes* es adecuada para el procesamiento fuera de línea cuando existen grandes cantidades de datos disponibles por adelantado y no se necesita un punto de conexión persistente. También puede utilizar la transformación por lotes para preprocesar conjuntos de datos. Puede admitir conjuntos de datos de gran tamaño y tiempos de procesamiento de varios días. GBs 
+ [Inferencia asíncrona](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html): la *Inferencia asíncrona* es ideal cuando se quiere poner en cola las solicitudes y disponer de grandes cargas útiles con tiempos de procesamiento prolongados. La inferencia asíncrona admite cargas útiles de hasta 1 GB y tiempos de procesamiento prolongados de hasta una hora. También puede reducir verticalmente el punto de conexión a 0 cuando no haya solicitudes que procesar.

# Opciones de punto final avanzadas para realizar inferencias con Amazon AI SageMaker
<a name="deploy-model-advanced"></a>

Con la inferencia en tiempo real, puede optimizar aún más el rendimiento y los costos con las siguientes opciones de inferencia avanzadas:
+ [Puntos de conexión multimodelo](multi-model-endpoints.md): utilice esta opción si tiene varios modelos que utilizan el mismo marco y pueden compartir un contenedor. Esta opción le ayuda a optimizar los costos al mejorar la utilización de los puntos de conexión y reducir la sobrecarga de implementación.
+ [Puntos de conexión con varios contenedores](multi-container-endpoints.md): utilice esta opción si tiene varios modelos que utilizan distintos marcos y requieren sus propios contenedores. Obtiene muchas de las ventajas de los puntos de conexión multimodelo y puede implementar una variedad de marcos y modelos.
+ [Canalizaciones de inferencia en serie](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html): utilice esta opción si desea alojar modelos con lógica de preprocesamiento y posprocesamiento detrás de un punto de conexión. La SageMaker IA gestiona completamente las canalizaciones de inferencia y ofrecen una latencia más baja, ya que todos los contenedores están alojados en las mismas instancias de Amazon EC2.

# Próximos pasos para realizar inferencias con Amazon AI SageMaker
<a name="deploy-model-next-steps"></a>

Una vez que tenga un punto final y comprenda el flujo de trabajo de inferencia general, puede utilizar las siguientes funciones de la SageMaker IA para mejorar su flujo de trabajo de inferencia.

## Supervisión
<a name="deploy-model-next-steps-monitoring"></a>

Para realizar un seguimiento del modelo a lo largo del tiempo mediante métricas como la precisión y la desviación del modelo, puede utilizar el monitor de modelos. Con el monitor de modelos, puede configurar alertas que le notifiquen cuando haya desviaciones en la calidad de su modelo. Para obtener más información, consulte la [documentación del monitor de modelos](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html). 

Para obtener más información sobre las herramientas que se pueden utilizar para supervisar las implementaciones de modelos y los eventos que cambian su punto de conexión, consulte [Supervisar Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-overview.html). Por ejemplo, puedes monitorizar el estado de tu punto final mediante métricas como los errores de invocación y la latencia del modelo mediante CloudWatch las métricas de Amazon. Las [métricas de invocación de puntos finales de SageMaker IA](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation) pueden proporcionarle información valiosa sobre el rendimiento de su punto final.

## CI/CD para la implementación de modelos
<a name="deploy-model-next-steps-cicd"></a>

Para crear soluciones de aprendizaje automático en SageMaker IA, puede utilizar la [SageMaker IA MLOps](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects.html). Puede utilizar esta característica para automatizar los pasos de su flujo de trabajo de machine learning y practicar CI/CD. Puedes usar [plantillas de MLOps proyectos](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-templates.html) para ayudarte a configurar e implementar MLOps proyectos de SageMaker IA. SageMaker La IA también admite el uso de su propio [repositorio de Git de terceros](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-walkthrough-3rdgit.html) para crear un CI/CD sistema.

Para sus canalizaciones de ML, utilice [Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html) para gestionar las versiones de sus modelos y la implementación y automatización de los mismos.

## Barreras de protección de implementación
<a name="deploy-model-next-steps-guardrails"></a>

Si desea actualizar el modelo mientras está en producción sin que ello afecte a la producción, puede utilizar las barreras de protección de implementación. Las barandillas de despliegue son un conjunto de opciones de despliegue de modelos en SageMaker AI Inference para actualizar los modelos de aprendizaje automático en producción. Con las opciones de implementación totalmente gestionadas, puede controlar el cambio del modelo actual en producción a uno nuevo. Los modos de cambio de tráfico le permiten controlar minuciosamente el proceso de cambio de tráfico, y las medidas de seguridad integradas, como las reversiones automáticas, le ayudan a detectar los problemas desde el principio. 

Para obtener más información sobre barreras de protección de implementación, consulte la documentación sobre [barreras de protección de implementación](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails.html).

## Inferentia
<a name="deploy-model-next-steps-inferentia"></a>

Si necesita ejecutar aplicaciones de machine learning y aprendizaje profundo a gran escala, puede utilizar una instancia de `Inf1` con un punto de conexión en tiempo real. Este tipo de instancia es adecuado para casos de uso como reconocimiento de imágenes o voz, procesamiento de lenguaje natural (NLP), personalización, previsión o detección de fraudes.

`Inf1`las instancias están diseñadas para ser compatibles con las aplicaciones de inferencia de aprendizaje automático y cuentan con los chips Inferentia. AWS `Inf1`las instancias ofrecen un mayor rendimiento y un menor coste por inferencia que las instancias basadas en GPU.

Para implementar un modelo en `Inf1` instancias, compile su modelo con SageMaker Neo y elija una `Inf1` instancia para su opción de implementación. Para obtener más información, consulte [Optimizar el rendimiento de los modelos con SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html).

## Optimizar el rendimiento de modelos
<a name="deploy-model-next-steps-optimize"></a>

SageMaker La IA proporciona funciones para gestionar los recursos y optimizar el rendimiento de las inferencias al implementar modelos de aprendizaje automático. Puede utilizar los [algoritmos integrados y los modelos prediseñados](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) de la SageMaker IA, así como las [imágenes de Docker prediseñadas](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-prebuilt.html), desarrolladas para el aprendizaje automático.

Para entrenar los modelos y optimizarlos para su despliegue, consulte las [imágenes prediseñadas de Docker](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-prebuilt.html). [Optimice](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) el rendimiento de los modelos con Neo. SageMaker Con SageMaker Neo, puede entrenar Apache TensorFlow MXNet PyTorch, ONNX y modelos. XGBoost A continuación, puede optimizarlos e implementarlos en procesadores ARM, Intel y Nvidia.

## Escalado automático
<a name="deploy-model-next-steps-autoscaling"></a>

Si sus puntos de conexión reciben cantidades variables de tráfico, puede probar el escalado automático. Por ejemplo, durante las horas punta, es posible que necesite más instancias para procesar solicitudes. Sin embargo, en los períodos de poco tráfico es posible que desee reducir el uso de recursos de computación. Para ajustar de forma dinámica el número de instancias que se aprovisionan como respuesta a los cambios de su carga de trabajo, consulte [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md).

Si tiene patrones de tráfico impredecibles o no quiere configurar políticas de escalado, también puede utilizar Inferencia sin servidor como punto de conexión. Luego, la SageMaker IA gestiona el escalado automático por ti. Durante los períodos de poco tráfico, la SageMaker IA reduce el tamaño de su terminal y, si el tráfico aumenta, la SageMaker IA amplía su punto final. Para obtener más información, consulte la documentación de [Implemente modelos con Amazon SageMaker Serverless Inference](serverless-endpoints.md).

# Cree un modelo en Amazon SageMaker AI con ModelBuilder
<a name="how-it-works-modelbuilder-creation"></a>

La preparación del modelo para su implementación en un punto final de SageMaker IA requiere varios pasos, como elegir una imagen del modelo, configurar la configuración del punto final, codificar las funciones de serialización y deserialización para transferir datos hacia y desde el servidor y el cliente, identificar las dependencias del modelo y cargarlos en Amazon S3. `ModelBuilder`puede reducir la complejidad de la configuración y el despliegue iniciales para ayudarle a crear un modelo desplegable en un solo paso.

`ModelBuilder` lleva a cabo las tareas siguientes por usted: 
+ Convierte los modelos de aprendizaje automático entrenados con varios marcos, como XGBoost o PyTorch en modelos desplegables, en un solo paso.
+ Realiza una selección automática de contenedores en función del marco del modelo, por lo que no es necesario especificar el contenedor manualmente. Puede seguir usando su propio contenedor pasando su propio URI a `ModelBuilder`.
+ Se encarga de la serialización de los datos en el cliente antes de enviarlos al servidor para la inferencia y la deserialización de los resultados devueltos por el servidor. Los datos se formatean correctamente sin procesamiento manual.
+ Habilita la captura automática de las dependencias y empaqueta el modelo según las expectativas del servidor de modelos. La captura automática de `ModelBuilder` de las dependencias es el enfoque del mejor esfuerzo para cargar las dependencias de manera dinámica. (Le recomendamos que pruebe la captura automática de manera local y actualice las dependencias para satisfacer sus necesidades).
+ Para los casos de uso de modelos de lenguaje (LLM) de gran tamaño, opcionalmente realiza un ajuste local de los parámetros de las propiedades de servidor que se pueden implementar para mejorar el rendimiento cuando se alojan en un terminal de SageMaker IA.
+ Es compatible con la mayoría de los modelos de servidores y contenedores más populares TorchServe, como Triton DJLServing y TGI Container.

## Cree su modelo con ModelBuilder
<a name="how-it-works-modelbuilder-creation-mb"></a>

`ModelBuilder`es una clase de Python que toma un modelo de marco, como XGBoost o PyTorch, o una especificación de inferencia especificada por el usuario y lo convierte en un modelo desplegable. `ModelBuilder`proporciona una función de creación que genera los artefactos para su despliegue. El artefacto de modelo generado es específico del servidor de modelos, que también puede especificar como una de las entradas. Para obtener más información sobre la `ModelBuilder` clase, consulte [ModelBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.model_builder.ModelBuilder).

En el siguiente diagrama se muestra el flujo de trabajo general de creación de modelos al usar `ModelBuilder`. `ModelBuilder` acepta un modelo o una especificación de inferencia junto con su esquema para crear un modelo implementable que pueda probarse localmente antes de la implementación.

![\[Flujo de creación e implementación de modelos con ModelBuilder\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-builder-flow.png)


`ModelBuilder` puede gestionar cualquier personalización que desee aplicar. Sin embargo, para implementar un modelo de marco, el generador de modelos espera como mínimo un modelo, una entrada y salida de ejemplo, y el rol. En el siguiente ejemplo de código, se llama a `ModelBuilder` con un modelo de marco y una instancia de `SchemaBuilder` con argumentos mínimos (para inferir las funciones correspondientes para serializar y deserializar la entrada y la salida del punto de conexión). No se especifica ningún contenedor ni se transfiere ningún paquete de dependencias: la SageMaker IA deduce automáticamente estos recursos cuando se crea el modelo. 

```
from sagemaker.serve.builder.model_builder import ModelBuilder
from sagemaker.serve.builder.schema_builder import SchemaBuilder

model_builder = ModelBuilder(
    model=model,
    schema_builder=SchemaBuilder(input, output),
    role_arn="execution-role",
)
```

En el siguiente ejemplo de código, se invoca `ModelBuilder` con una especificación de inferencia (como una instancia `InferenceSpec`) en lugar de un modelo, con una personalización adicional. En este caso, la llamada al generador de modelos incluye una ruta para almacenar los artefactos del modelo y también activa la captura automática de todas las dependencias disponibles. Para obtener más información sobre `InferenceSpec`, consulte [Personalización de la carga del modelo y la gestión de las solicitudes](#how-it-works-modelbuilder-creation-is).

```
model_builder = ModelBuilder(
    mode=Mode.LOCAL_CONTAINER,
    model_path=model-artifact-directory,
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(input, output),
    role_arn=execution-role,
    dependencies={"auto": True}
)
```

## Definición de los métodos de serialización y deserialización
<a name="how-it-works-modelbuilder-creation-sb"></a>

Al invocar un punto final de SageMaker IA, los datos se envían a través de cargas HTTP con diferentes tipos de MIME. Por ejemplo, una imagen enviada al punto de conexión para su inferencia debe convertirse en bytes en el cliente y enviarse a través de una carga útil HTTP al punto de conexión. Cuando el punto de conexión recibe la carga útil, debe deserializar la cadena de bytes para devolverla al tipo de datos que el modelo espera (también conocida como deserialización del servidor). Una vez que el modelo finalice la predicción, los resultados también deben serializarse en bytes que se pueden devolver al usuario o al cliente a través de la carga útil HTTP. Una vez que el cliente recibe los datos de bytes de respuesta, debe realizar una deserialización del cliente para volver a convertir los datos de bytes al formato de datos esperado, como JSON. Como mínimo, tiene que convertir los datos para las siguientes tareas:

1. Serialización de la solicitud de inferencias (gestionada por usted)

1. Deserialización de la solicitud de inferencias (gestionada por el servidor o el algoritmo)

1. Invocación del modelo contra la carga útil y devolución de la carga útil de respuesta

1. Serialización de la respuesta de inferencias (gestionada por el servidor o el algoritmo)

1. Deserialización de la respuesta de inferencias (gestionada por el cliente)

En el siguiente diagrama se muestra los procesos de serialización y deserialización que se producen al invocar el punto de conexión.

![\[Diagrama de serialización y deserialización de datos del cliente al servidor\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-builder-serialization.png)


Al proporcionar entrada y salida de ejemplo a `SchemaBuilder`, el generador de esquemas genera las funciones de clasificación correspondientes para serializar y deserializar la entrada y la salida. Puede personalizar aún más sus funciones de serialización con `CustomPayloadTranslator`. Pero, en la mayoría de los casos, funcionaría un serializador sencillo como el siguiente:

```
input = "How is the demo going?"
output = "Comment la démo va-t-elle?"
schema = SchemaBuilder(input, output)
```

Para obtener más información al respecto, consulte`SchemaBuilder`. [SchemaBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.schema_builder.SchemaBuilder)

En el siguiente fragmento de código se describe un ejemplo en el que se desea personalizar las funciones de serialización y deserialización en el cliente y el servidor. Puede definir sus propios traductores de solicitudes y respuestas con `CustomPayloadTranslator` y pasar estos traductores a `SchemaBuilder`.

Al incluir las entradas y salidas con los traductores, el generador de modelos puede extraer el formato de datos que el modelo espera. Por ejemplo, supongamos que la entrada de ejemplo es una imagen sin procesar y sus traductores personalizados recortan la imagen y la envían al servidor como tensor. `ModelBuilder` necesita tanto la entrada sin procesar como cualquier código personalizado de preprocesamiento o posprocesamiento para obtener un método que convierta los datos tanto en el cliente como en el servidor.

```
from sagemaker.serve import CustomPayloadTranslator

# request translator
class MyRequestTranslator(CustomPayloadTranslator):
    # This function converts the payload to bytes - happens on client side
    def serialize_payload_to_bytes(self, payload: object) -> bytes:
        # converts the input payload to bytes
        ... ...
        return  //return object as bytes

    # This function converts the bytes to payload - happens on server side
    def deserialize_payload_from_stream(self, stream) -> object:
        # convert bytes to in-memory object
        ... ...
        return //return in-memory object

# response translator
class MyResponseTranslator(CustomPayloadTranslator):
    # This function converts the payload to bytes - happens on server side
    def serialize_payload_to_bytes(self, payload: object) -> bytes:
        # converts the response payload to bytes
        ... ...
        return //return object as bytes

    # This function converts the bytes to payload - happens on client side
    def deserialize_payload_from_stream(self, stream) -> object:
        # convert bytes to in-memory object
        ... ...
        return //return in-memory object
```

Al crear el objeto `SchemaBuilder`, pasa la entrada y salida de ejemplo junto con los traductores personalizados previamente definidos, como se muestra en el siguiente ejemplo:

```
my_schema = SchemaBuilder(
    sample_input=image,
    sample_output=output,
    input_translator=MyRequestTranslator(),
    output_translator=MyResponseTranslator()
)
```

A continuación, pasa al objeto `SchemaBuilder` la entrada y salida de ejemplo, junto con los traductores personalizados definidos anteriormente. 

```
my_schema = SchemaBuilder(
    sample_input=image,
    sample_output=output,
    input_translator=MyRequestTranslator(),
    output_translator=MyResponseTranslator()
)
```

En las siguientes secciones se explica en detalle cómo crear el modelo con `ModelBuilder` y usar sus clases auxiliares para personalizar la experiencia según su caso de uso.

**Topics**
+ [Cree su modelo con ModelBuilder](#how-it-works-modelbuilder-creation-mb)
+ [Definición de los métodos de serialización y deserialización](#how-it-works-modelbuilder-creation-sb)
+ [Personalización de la carga del modelo y la gestión de las solicitudes](#how-it-works-modelbuilder-creation-is)
+ [Creación del modelo e implementación](#how-it-works-modelbuilder-creation-deploy)
+ [Utilice su propio contenedor (BYOC)](#how-it-works-modelbuilder-creation-mb-byoc)
+ [ModelBuilder Utilizándolo en modo local](#how-it-works-modelbuilder-creation-local)
+ [ModelBuilder ejemplos](#how-it-works-modelbuilder-creation-example)

## Personalización de la carga del modelo y la gestión de las solicitudes
<a name="how-it-works-modelbuilder-creation-is"></a>

Al proporcionar su propio código de inferencia a través de `InferenceSpec`, se ofrece una capa adicional de personalización. Con `InferenceSpec`, puede personalizar la manera en que se carga el modelo y la forma en que gestiona las solicitudes de inferencia entrantes, al omitir sus mecanismos predeterminados de gestión de inferencias y carga. Esta flexibilidad es especialmente beneficiosa al trabajar con modelos no estándar o canalizaciones de inferencia personalizadas. Puede personalizar el método `invoke` para controlar la manera en que el modelo preprocesa y posprocesa las solicitudes entrantes. El método `invoke` garantiza que el modelo gestione las solicitudes de inferencia correctamente. El siguiente ejemplo se utiliza `InferenceSpec` para generar un modelo con la HuggingFace canalización. Para obtener más información al respecto`InferenceSpec`, consulte la [InferenceSpec](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.spec.inference_spec.InferenceSpec).

```
from sagemaker.serve.spec.inference_spec import InferenceSpec
from transformers import pipeline

class MyInferenceSpec(InferenceSpec):
    def load(self, model_dir: str):
        return pipeline("translation_en_to_fr", model="t5-small")

    def invoke(self, input, model):
        return model(input)

inf_spec = MyInferenceSpec()

model_builder = ModelBuilder(
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(X_test, y_pred)
)
```

En el siguiente ejemplo, se muestra una variante más personalizada de un ejemplo anterior. Un modelo se define con una especificación de inferencia que tiene dependencias. En este caso, el código de la especificación de inferencia depende del paquete *lang-segment*. El argumento para `dependencies` contiene una instrucción que indica al generador que instale *lang-segment* mediante Git. Dado que el usuario indica al generador de modelos que instale una dependencia de manera personalizada, la clave `auto` es `False` para desactivar la captura automática de las dependencias.

```
model_builder = ModelBuilder(
    mode=Mode.LOCAL_CONTAINER,
    model_path=model-artifact-directory,
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(input, output),
    role_arn=execution-role,
    dependencies={"auto": False, "custom": ["-e git+https://github.com/luca-medeiros/lang-segment-anything.git#egg=lang-sam"],}
)
```

## Creación del modelo e implementación
<a name="how-it-works-modelbuilder-creation-deploy"></a>

Llame a la función `build` para crear su modelo implementable. En este paso, se crean códigos de inferencia (como `inference.py`) en el directorio de trabajo con el código necesario para crear el esquema, ejecutar la serialización y deserialización de las entradas y salidas, y ejecutar otras lógicas personalizadas especificadas por el usuario.

Como control de integridad, SageMaker AI empaqueta y selecciona los archivos necesarios para la implementación como parte de la función de `ModelBuilder` compilación. Durante este proceso, la SageMaker IA también crea una firma HMAC para el archivo pickle y añade la clave secreta a la [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API como variable de entorno durante `deploy` (o). `create` Al iniciar el punto de conexión, se utiliza la variable de entorno para validar la integridad del archivo pickle.

```
# Build the model according to the model server specification and save it as files in the working directory
model = model_builder.build()
```

Implemente su modelo con el método `deploy` existente del modelo. En este paso, la SageMaker IA configura un punto final para alojar el modelo a medida que comienza a hacer predicciones sobre las solicitudes entrantes. Aunque `ModelBuilder` infiere los recursos de punto de conexión necesarios para implementar el modelo, puede anular esas estimaciones con los valores de sus propios parámetros. En el siguiente ejemplo, se indica a SageMaker AI que implemente el modelo en una sola `ml.c6i.xlarge` instancia. Un modelo construido a partir de `ModelBuilder` habilita el registro en directo durante la implementación como característica adicional.

```
predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.c6i.xlarge"
)
```

Si desea tener un control más preciso sobre los recursos de punto de conexión asignados a su modelo, puede utilizar un objeto `ResourceRequirements`. Con el `ResourceRequirements` objeto, puede solicitar un número mínimo de CPUs aceleradores y copias de los modelos que desee implementar. También puede solicitar un límite de memoria mínimo y máximo (en MB). Para utilizar esta característica, debe especificar el tipo de punto de conexión como `EndpointType.INFERENCE_COMPONENT_BASED`. En el siguiente ejemplo, se solicitan cuatro aceleradores, un tamaño de memoria mínimo de 1024 MB y una copia del modelo que se implementará en un punto de conexión del tipo `EndpointType.INFERENCE_COMPONENT_BASED`.

```
resource_requirements = ResourceRequirements(
    requests={
        "num_accelerators": 4,
        "memory": 1024,
        "copies": 1,
    },
    limits={},
)
predictor = model.deploy(
    mode=Mode.SAGEMAKER_ENDPOINT,
    endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED,
    resources=resource_requirements,
    role="role"
)
```

## Utilice su propio contenedor (BYOC)
<a name="how-it-works-modelbuilder-creation-mb-byoc"></a>

Si quieres traer tu propio contenedor (derivado de un contenedor de SageMaker IA), también puedes especificar el URI de la imagen, tal y como se muestra en el siguiente ejemplo. También debe identificar el servidor de modelos que corresponde a la imagen para que `ModelBuilder` genere artefactos específicos del servidor de modelos.

```
model_builder = ModelBuilder(
    model=model,
    model_server=ModelServer.TORCHSERVE,
    schema_builder=SchemaBuilder(X_test, y_pred),
    image_uri="123123123123.dkr.ecr.ap-southeast-2.amazonaws.com/byoc-image:xgb-1.7-1")
)
```

## ModelBuilder Utilizándolo en modo local
<a name="how-it-works-modelbuilder-creation-local"></a>

Puede implementar su modelo localmente mediante el argumento `mode` para pasar de las pruebas locales a la implementación en un punto de conexión. Debe almacenar los artefactos del modelo en el directorio de trabajo, tal y como se muestra en el siguiente fragmento de código:

```
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")
```

Pase el objeto de modelo, una instancia `SchemaBuilder` y establezca el modo en `Mode.LOCAL_CONTAINER`. Al llamar a la función `build`, `ModelBuilder` identifica automáticamente el contenedor del marco admitido y busca las dependencias. El siguiente ejemplo muestra la creación de un modelo con un XGBoost modelo en modo local.

```
model_builder_local = ModelBuilder(
    model=model,
    schema_builder=SchemaBuilder(X_test, y_pred),
    role_arn=execution-role,
    mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()
```

Llame a la función `deploy` para implementarla localmente, tal y como se muestra en el siguiente fragmento de código. Si especifica parámetros para el tipo o recuento de instancias, se ignoran estos argumentos.

```
predictor_local = xgb_local_builder.deploy()
```

### Solución de problemas en modo local
<a name="how-it-works-modelbuilder-creation-troubleshoot"></a>

En función de su configuración local individual, es posible que tenga dificultades para ejecutar `ModelBuilder` sin problemas en su entorno. Consulte la lista siguiente para ver algunos problemas a los que se puede enfrentar y cómo resolverlos.
+ **Ya está en uso**: es posible que se produzca un error `Address already in use`. En este caso, es posible que un contenedor de Docker se esté ejecutando en ese puerto o que otro proceso lo esté utilizando. Puede seguir el enfoque descrito en la [documentación de Linux](https://www.cyberciti.biz/faq/what-process-has-open-linux-port/) para identificar el proceso y redirigir sin problemas el proceso local del puerto 8080 a otro puerto o limpiar la instancia de Docker.
+ **Problema de permiso de IAM**: es posible que se produzca un problema de permiso al intentar extraer una imagen de Amazon ECR o acceder a Amazon S3. En este caso, diríjase al rol de ejecución del bloc de notas o de la instancia de Studio Classic para comprobar la política para `SageMakerFullAccess` o los permisos de API respectivos.
+ **Problema de capacidad de volumen de EBS**: si implementa un modelo de lenguaje grande (LLM), es posible que se quede sin espacio al ejecutar Docker en modo local o que tenga limitaciones de espacio en la caché de Docker. En este caso, puede intentar mover el volumen de Docker a un sistema de archivos que tenga espacio suficiente. Para mover el volumen de Docker, complete los siguientes pasos:

  1. Abra un terminal y ejecute `df` para mostrar el uso del disco, como se muestra en la siguiente salida:

     ```
     (python3) sh-4.2$ df
     Filesystem     1K-blocks      Used Available Use% Mounted on
     devtmpfs       195928700         0 195928700   0% /dev
     tmpfs          195939296         0 195939296   0% /dev/shm
     tmpfs          195939296      1048 195938248   1% /run
     tmpfs          195939296         0 195939296   0% /sys/fs/cgroup
     /dev/nvme0n1p1 141545452 135242112   6303340  96% /
     tmpfs           39187860         0  39187860   0% /run/user/0
     /dev/nvme2n1   264055236  76594068 176644712  31% /home/ec2-user/SageMaker
     tmpfs           39187860         0  39187860   0% /run/user/1002
     tmpfs           39187860         0  39187860   0% /run/user/1001
     tmpfs           39187860         0  39187860   0% /run/user/1000
     ```

  1. Mueva el directorio Docker predeterminado de `/dev/nvme0n1p1` a para `/dev/nvme2n1` poder utilizar al máximo el volumen SageMaker AI de 256 GB. Para obtener más información, consulte la documentación sobre cómo [mover el directorio de Docker](https://www.guguweb.com/2019/02/07/how-to-move-docker-data-directory-to-another-location-on-ubuntu/).

  1. Detenga Docker con el siguiente comando:

     ```
     sudo service docker stop
     ```

  1. Agregue `daemon.json` a `/etc/docker` o anexe el siguiente blob de JSON al existente.

     ```
     {
         "data-root": "/home/ec2-user/SageMaker/{created_docker_folder}"
     }
     ```

  1. Mueva el directorio de Docker de `/var/lib/docker` a `/home/ec2-user/SageMaker AI` con el siguiente comando:

     ```
     sudo rsync -aP /var/lib/docker/ /home/ec2-user/SageMaker/{created_docker_folder}
     ```

  1. Inicie el agente con el comando siguiente.

     ```
     sudo service docker start
     ```

  1. Limpie la papelera con el siguiente comando:

     ```
     cd /home/ec2-user/SageMaker/.Trash-1000/files/*
     sudo rm -r *
     ```

  1. Si utilizas una instancia de SageMaker notebook, puedes seguir los pasos del [archivo de preparación de Docker](https://github.com/melanie531/amazon-sagemaker-pytorch-lightning-distributed-training/blob/main/prepare-docker.sh) para preparar Docker para el modo local.

## ModelBuilder ejemplos
<a name="how-it-works-modelbuilder-creation-example"></a>

Para ver más ejemplos de uso `ModelBuilder` para crear modelos, consulta los [ModelBuilderejemplos de libretas](https://github.com/aws-samples/sagemaker-hosting/blob/main/SageMaker-Model-Builder).

# Optimización de inferencias para modelos con Amazon SageMaker AI
<a name="model-optimize"></a>

Con Amazon SageMaker AI, puede mejorar el rendimiento de los modelos de IA generativa mediante la aplicación de técnicas de optimización de inferencias. Al optimizar los modelos, puede lograr una mejor relación costo-rendimiento para el caso de uso. Al optimizar un modelo, puede elegir las técnicas de optimización compatibles se van a aplicar, incluidas la cuantización, la decodificación especulativa y la compilación. Una vez optimizado el modelo, puede realizar una evaluación para ver las métricas de rendimiento en cuanto a latencia, rendimiento y precio.

Para muchos modelos, SageMaker AI también ofrece varias versiones preoptimizadas, cada una de las cuales se adapta a las diferentes necesidades de las aplicaciones en cuanto a latencia y rendimiento. Para estos modelos, puede implementar una de las versiones optimizadas sin tener que primero optimizar el modelo.

## Técnicas de optimización
<a name="optimization-techniques"></a>

Amazon SageMaker AI admite las siguientes técnicas de optimización.

### Compilación
<a name="compilation"></a>

La *compilación* optimiza el modelo para obtener el mejor rendimiento disponible en el tipo de hardware elegido sin que se pierda la exactitud. Puede aplicar la compilación de modelos para optimizar los LLM para hardware acelerado, como instancias de GPU, instancias de AWS Trainium o instancias de AWS Inferentia.

Al optimizar un modelo mediante la compilación, sacará partido de la compilación anticipada. Podrá reducir el tiempo de implementación del modelo y la latencia del escalado automático, ya que las ponderaciones del modelo no requieren una compilación justo a tiempo cuando el modelo se implementa en una nueva instancia.

Si decide compilar el modelo para una instancia de GPU, SageMaker AI utiliza la biblioteca TensorRT-LLM para ejecutar la compilación. Si decide compilar el modelo para una instancia de AWS Trainium o de AWS Inferentia, SageMaker AI utiliza el AWS Neuron SDK para ejecutar la compilación.

### Cuantización
<a name="quantization"></a>

La *cuantización* es una técnica para reducir los requisitos de hardware de un modelo mediante el uso de un tipo de datos menos preciso para los ponderaciones y las activaciones. Después de optimizar un modelo con la cuantización, puede alojarlo en GPU menos costosas y con mayor disponibilidad. Sin embargo, es posible que el modelo cuantizado sea menos preciso que el modelo de origen que ha optimizado. 

Los formatos de datos que SageMaker AI admite para la cuantificación varían de un modelo a otro. Se admiten siguientes formatos:
+ INT4-AWQ: formato de datos de 4 bits. La cuantización de ponderaciones con reconocimiento de activaciones (AWQ) es una técnica de cuantización para LLM que es eficaz, precisa, con pocos bits y solo para ponderaciones.
+ FP8: la coma flotante de 8 bits (FP8) es un formato de baja precisión para números de coma flotante. Equilibra la eficiencia de la memoria y la precisión del modelo al representar valores con menos bits que el formato de coma flotante estándar FP16.
+ INT8-SmoothQuant: un formato de datos de 8 bits. SmoothQuant es un método de cuantificación de precisión mixta que escala las activaciones y las ponderaciones de forma conjunta al equilibrar sus rangos dinámicos.

### Decodificación especulativa
<a name="speculative-decoding"></a>

La *decodificación especulativa* es una técnica que se utiliza para acelerar el proceso de decodificación de grandes LLM. Optimiza la latencia de los modelos sin que se vea afectada la calidad del texto generado.

Esta técnica utiliza un modelo menor pero más rápido denominado modelo de *borrador*. El modelo de borrador genera tokens candidatos, que valida el modelo de *destino*, que es mayor pero más lento. En cada iteración, el modelo de borrador genera varios tokens candidatos. El modelo de destino verifica los tokens y, si detecta que un token en concreto no es aceptable, lo rechaza y lo vuelve a genera. Por lo tanto, el modelo de destino verifica los tokens y genera una pequeño número de ellos.

El modelo de borrador es bastante más rápido que el modelo de destino. Genera todos los tokens rápidamente y, a continuación, envía lotes de ellos al modelo de destino para su verificación. El modelo de destino los evalúa en paralelo, lo que acelera la respuesta final.

SageMaker AI ofrece un modelo de borrador prediseñado que puede utilizar, por lo que no tiene que crear el suyo propio. Si prefiere usar su propio modelo de borrador personalizado, SageMaker AI también admite esta opción.

### Carga rápida de modelos
<a name="fast-model-loading"></a>

La técnica de *carga rápida de modelos* prepara un LLM para que SageMaker AI pueda cargarlo en una instancia de ML con mayor rapidez.

Para preparar el modelo, SageMaker AI lo particiona por adelantado dividiéndolo en partes, cada una de las cuales puede residir en una GPU independiente para una inferencia distribuida. Además, SageMaker AI almacena los pesos del modelo en fragmentos del mismo tamaño que SageMaker AI puede cargar en la instancia de forma simultánea.

Cuando SageMaker AI carga el modelo optimizado en la instancia, transmite los pesos del modelo directamente desde Amazon S3 a las GPU de la instancia. Al transmitir los pesos, SageMaker AI omite varios pasos que normalmente son necesarios y que consumen mucho tiempo. Estos pasos incluyen descargar los artefactos del modelo de Amazon S3 al disco, cargar los artefactos del modelo en la memoria del host y particionar el modelo en el host antes de cargar finalmente las particiones en las GPU.

Tras optimizar el modelo para una carga más rápida, puede implementarlo más rápidamente en un punto de conexión de SageMaker AI. Además, si configura el punto de conexión para que utilice el escalado automático, se escala horizontalmente para adaptarse a los aumentos de tráfico.

# Implementación de un modelo preoptimizado
<a name="model-optimize-preoptimized"></a>

SageMaker AI optimiza previamente algunos modelos de JumpStart, lo que significa que puede implementar versiones optimizadas de estos modelos sin necesidad de crear primero un trabajo de optimización de inferencias. 

Para ver la lista de modelos con opciones preoptimizadas, consulte [Modelos preoptimizados de JumpStart](#pre-optimized-js).

## Amazon SageMaker Studio
<a name="preoptimized-studio"></a>

Utilice el siguiente procedimiento para implementar un modelo preoptimizado de JumpStart mediante Amazon SageMaker Studio.

**Implementación de un modelo preoptimizado**

1. En Studio, en el menú de navegación de la izquierda, elija **JumpStart**.

1. En la página **Todos los modelos públicos**, elija uno de los modelos que se han optimizado previamente.

1. En la página de detalles del modelo, elija **Implementar**.

1. En la página de implementación, algunos modelos de JumpStart requieren que firme un acuerdo de licencia de usuario final (EULA) antes de continuar. Si se solicita, revise los términos de la licencia en la sección **Acuerdo de licencia**. Si los términos son aceptables para el caso de uso, seleccione la casilla de verificación **Acepto el EULA, y he leído los términos y las condiciones**.

   Para obtener más información, consulte [Contratos de licencia para usuarios finales](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula).

1. En **Nombre del punto de conexión** y **Recuento inicial de instancias**, acepte los valores predeterminados o establezca valores personalizados.

1. En **Tipo de instancia**, mantenga el valor predeterminado. De lo contrario, no podrá implementar una configuración preoptimizada.

1. En **Modelos**, amplíe la configuración del modelo. Studio muestra una tabla con las configuraciones preoptimizadas entre las que puede elegir. Cada opción tiene métricas de latencia y rendimiento. Elija la opción que mejor se adapte a las necesidades de la aplicación.

1. Elija **Implementar**.

## SageMaker AI Python SDK
<a name="preoptimized-sdk"></a>

Puede implementar un modelo preoptimizado mediante el SageMaker AI Python SDK en su proyecto. En primer lugar, defina una instancia `Model` mediante la clase `ModelBuilder`. A continuación, utilice el método `set_deployment_config()` para establecer la configuración preoptimizada que desea implementar. A continuación, utilice el método `build()` para crear el modelo. Por último, utilice el método `deploy()` para implementarlo en un punto de conexión de inferencia.

Para obtener más información sobre las clases y los métodos utilizados en los siguientes ejemplos, consulte [APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html) en la documentación del SageMaker AI Python SDK.

**Configuración de un proyecto**

1. En el código de la aplicación, importe las bibliotecas necesarias. En el ejemplo siguiente se importa el SDK para Python (Boto3). También se importan los módulos del SageMaker AI Python SDK que se utilizan para definir los modelos y trabajar con ellos:

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   ```

1. Inicialice una sesión de SageMaker AI. En este ejemplo se usa la clase `Session()`:

   ```
   sagemaker_session = Session()
   ```

**Definición de un modelo**

1. Cree una instancia de `SchemaBuilder` y proporcione ejemplos de entrada y salida. Al definir un modelo, debe proporcionar esta instancia a la clase `ModelBuilder`. Con ella, SageMaker AI genera automáticamente las funciones de clasificación para serializar y deserializar la entrada y la salida.

   Para obtener más información sobre el uso de las clases `SchemaBuilder` y `ModelBuilder`, consulte [Cree un modelo en Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

   En el ejemplo siguiente se proporcionan ejemplos de cadenas de entrada y salida para la clase `SchemaBuilder`:

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1. Defina el modelo en SageMaker AI. En el ejemplo siguiente se definen los parámetros para inicializar una instancia de `ModelBuilder`:

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   En este ejemplo se utiliza un modelo de JumpStart. Sustituya el `jumpstart-model-id` por el ID de un modelo de JumpStart, como, por ejemplo, `meta-textgeneration-llama-3-70b`.

**Recuperación de métricas de referencia**

1. Para determinar la configuración preoptimizada que desea implementar, consulte las opciones que ofrece SageMaker AI. En el ejemplo siguiente se muestran:

   ```
   model_builder.display_benchmark_metrics()
   ```

   Este método de `display_benchmark_metrics()` imprime una tabla como la siguiente:

   ```
   | Instance Type   | Config Name   |   Concurrent Users |   Latency, TTFT (P50 in sec) |   Throughput (P50 in tokens/sec/user) |
   |:----------------|:--------------|-------------------:|-----------------------------:|--------------------------------------:|
   | ml.g5.48xlarge  | lmi-optimized |                  1 |                         2.25 |                                 49.70 |
   | ml.g5.48xlarge  | lmi-optimized |                  2 |                         2.28 |                                 21.10 |
   | ml.g5.48xlarge  | lmi-optimized |                  4 |                         2.37 |                                 14.10 |
   . . .
   | ml.p4d.24xlarge | lmi-optimized |                  1 |                         0.10 |                                137.40 |
   | ml.p4d.24xlarge | lmi-optimized |                  2 |                         0.11 |                                109.20 |
   | ml.p4d.24xlarge | lmi-optimized |                  4 |                         0.13 |                                 85.00 |
   . . .
   ```

   En la primera columna, la tabla muestra los posibles tipos de instancias que puede utilizar para alojar el modelo de JumpStart que elija. Para cada tipo de instancia, en `Config Name`, se muestran los nombres de las configuraciones preoptimizadas. Las configuraciones que proporciona SageMaker AI se denominan `lmi-optimized`. Para cada tipo y configuración de instancia, la tabla proporciona métricas de referencia. Estas métricas indican el rendimiento y la latencia que el modelo admitirá para diferentes números de usuarios simultáneos.

1. En función de las métricas de referencia, elija el tipo de instancia y el nombre de la configuración que mejor se adapten a las necesidades de rendimiento. Utilizará estos valores cuando cree una configuración de implementación.

**Implementación de un modelo preoptimizado**

1. Cree una configuración de implementación. En el ejemplo siguiente se utiliza una instancia de `ModelBuilder`. Se transmite un tipo de instancia y un nombre de configuración al método `set_deployment_config()`:

   ```
   model_builder.set_deployment_config(
       config_name="config-name", 
       instance_type="instance-type",
   )
   ```

   Sustituya *`config-name`* por un nombre de configuración de la tabla, como, por ejemplo, `lmi-optimized`. Sustituya `instance-type` por un tipo de instancia de la tabla, como, por ejemplo, `ml.p4d.24xlarge`.

1. Cree el modelo. En el ejemplo siguiente se utiliza el método `.build()` de la instancia de `ModelBuilder`:

   ```
   optimized_model = model_builder.build()
   ```

   El método `.build()` devuelve una instancia de `Model` implementable.

1. Implemente el modelo en un punto de conexión de inferencia. En el ejemplo siguiente se utiliza el método `.deploy()` de la instancia de `Model`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   El método `deploy()` devuelve una instancia de `Predictor`, que puede utilizar para enviar solicitudes de inferencia al modelo.

**Prueba del modelo con una solicitud de inferencia**
+ Después de implementar el modelo en un punto de conexión de inferencia, pruebe las predicciones del modelo. En el siguiente ejemplo se envía una solicitud de inferencia mediante la instancia de `Predictor`:

  ```
  predictor.predict(sample_input)
  ```

  El modelo devuelve el texto que genera con una respuesta como la siguiente:

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## Modelos preoptimizados de JumpStart
<a name="pre-optimized-js"></a>

A continuación se indican los modelos de JumpStart con configuraciones preoptimizadas.

**Meta**
+ Llama 3.1 70B Instruct
+ Llama 3.1 70B
+ Llama 3.1 405B Instruct FP8
+ Llama 3.1 405B FP8
+ Llama 3 8B Instruct
+ Llama 3 8B
+ Llama 3 70B Instruct
+ Llama 3 70B
+ Llama 2 70B Chat
+ Llama 2 7B Chat
+ Llama 2 13B Chat

**HuggingFace**
+ Mixtral 8x7B Instruct
+ Mixtral 8x7B
+ Mistral 7B Instruct
+ Mistral 7B

### Modelos precompilados de JumpStart
<a name="pre-compiled"></a>

Para algunos modelos y configuraciones, SageMaker AI proporciona modelos precompilados para instancias específicas de AWS Inferentia y AWS Trainium. Para ello, si crea un trabajo de optimización de la compilación y elige ml.inf2.48xlarge o ml.trn1.32xlarge como tipo de instancia de implementación, SageMaker AI obtiene los artefactos compilados. Dado que el trabajo utiliza un modelo que ya está compilado, se completa rápidamente sin ejecutar la compilación desde cero.

A continuación se indican los modelos de JumpStart para los que SageMaker AI tiene modelos precompilados:

**Meta**
+ Llama3 8B
+ Llama3 70B
+ Llama2 7B
+ Llama2 70B
+ Llama2 13B
+ Code Llama 7B
+ Code Llama 70B

**HuggingFace**
+ Mistral 7B

# Creación de un trabajo de optimización de inferencias
<a name="model-optimize-create-job"></a>

Puede crear un trabajo de optimización de inferencias mediante Studio o el SDK de Python para SageMaker IA. El trabajo optimiza su modelo mediante la aplicación de las técnicas que elija. Para obtener más información, consulte [Técnicas de optimización](model-optimize.md#optimization-techniques).

**Precios de instancias para trabajos de optimización de inferencias**  
Al crear un trabajo de optimización de inferencias que aplica la cuantificación o la compilación, la SageMaker IA elige qué tipo de instancia usar para ejecutar el trabajo. Se le cobrará en función de la instancia utilizada.  
Para ver los posibles tipos de instancias y los detalles de sus precios, consulta la información sobre precios de optimización por inferencia en la página de [ SageMaker precios de Amazon](https://aws.amazon.com/sagemaker/pricing/).  
No se aplicarán costos adicionales en los trabajos en los que se aplique la decodificación especulativa.

Para conocer los modelos compatibles que puede optimizar, consulte [Referencia de modelos compatibles](optimization-supported-models.md).

## Amazon SageMaker Studio
<a name="optimize-create-studio"></a>

Complete los siguientes pasos para crear un trabajo de optimización de inferencias en Studio.

**Cómo empezar a crear un trabajo de optimización**

1. En SageMaker AI Studio, cree un trabajo de optimización mediante cualquiera de las siguientes rutas:
   + Para crear un trabajo para un JumpStart modelo, haga lo siguiente:

     1. En el menú de navegación, elija **JumpStart**.

     1. En la página **Todos los modelos públicos**, elija un proveedor de modelos y, a continuación, seleccione uno de los modelos que admitan la optimización.

     1. En la página de detalles del modelo, elija **Optimizar**. Este botón solo está habilitado para los modelos que admiten la optimización.

     1. En la página **Crear un trabajo de optimización de inferencias**, algunos JumpStart modelos requieren que firme un acuerdo de licencia de usuario final (EULA) antes de poder continuar. Si se solicita, revise los términos de la licencia en la sección **Acuerdo de licencia**. Si los términos son aceptables para el caso de uso, seleccione la casilla de verificación **Acepto el EULA, y he leído los términos y las condiciones**.
   + Para crear un trabajo para un JumpStart modelo ajustado, haga lo siguiente:

     1. En el panel de navegación, en **Trabajos**, elija **Entrenamiento**.

     1. En la página **Trabajos de formación**, elija el nombre de un trabajo que utilizó para ajustar un JumpStart modelo. Estos trabajos tienen el tipo **JumpStartFormación** en la columna **Tipo de trabajo**.

     1. En la página de detalles del trabajo de entrenamiento, elija **Optimizar**.
   + Para crear un trabajo para un modelo personalizado, haga lo siguiente:

     1. En el menú de navegación, en **Trabajos**, elija **Optimización de inferencias**.

     1. Elija **Crear nuevo tarea**.

     1. En la página **Crear trabajo de optimización de inferencias**, elija **Agregar modelo**.

     1. En la ventana **Agregar modelo**, elija **Modelo personalizado**.

     1. Elija una de las siguientes opciones:

        **Usa tu modelo actual**: selecciona esta opción para optimizar un modelo que ya hayas creado en SageMaker IA.

        **Nombre del modelo existente**: introduzca el nombre de su modelo de SageMaker IA.

        **Desde S3**: seleccione esta opción para proporcionar artefactos modelo de Amazon S3. En **URI de S3**, introduzca el URI de la ubicación de Amazon S3 en la que ha almacenado los artefactos del modelo.

     1. (Opcional) En el ****nombre del modelo de salida****, puede introducir un nombre personalizado para el modelo optimizado que crea el trabajo. Si no proporciona un nombre, Studio generará uno automáticamente en función de su selección.

1. En la página **Crear trabajo de optimización de inferencias**, en **Nombre del trabajo**, puede aceptar el nombre predeterminado que la SageMaker IA asigna. O bien, para introducir un nombre de trabajo personalizado, seleccione el campo **Nombre del trabajo** y elija **Introducir nombre del trabajo**.

**Establecimiento de las configuraciones de optimización**

1. En **Tipo de instancia de implementación**, elija el tipo de instancia para el que desee optimizar el modelo.

   El tipo de instancia afecta a las técnicas de optimización que puede elegir. Para la mayoría de los tipos que utilizan hardware de GPU, las técnicas admitidas son **Cuantización** y **Decodificación especulativa**. Si eliges una instancia que usa silicio personalizado, como la instancia de AWS Inferentia ml.inf2.8xlarge, la técnica admitida es la **compilación**, que puedes usar para compilar el modelo para ese tipo de hardware específico.

1. Seleccione una o varias de las técnicas de optimización que Studio proporciona:
   + Si selecciona **Cuantización**, elija un tipo de datos para la opción **Tipo de datos de precisión**. 
   + Si selecciona **Decodificación especulativa**, elija una de las siguientes opciones:
     + **Utilice un modelo de borrador de SageMaker IA: elija usar el modelo** de borrador que proporciona la IA. SageMaker 
**nota**  
Si opta por utilizar el modelo de borrador de SageMaker IA, también debe habilitar el aislamiento de la red. Studio ofrece esta opción en **Seguridad**.
     + **Elegir JumpStart borrador del modelo**: elija seleccionar un modelo del JumpStart catálogo para usarlo como borrador del modelo.
     + **Elegir su propio modelo de borrador**: elija su propio modelo de borrador y proporcione el URI de S3 en el que se encuentra.
   + Si selecciona **Carga rápida del modelo**, Studio muestra la variable de entorno `OPTION_TENSOR_PARALLEL_DEGREE`. Utilice el campo **Valor** para establecer el grado de paralelismo de tensores. El valor debe dividir GPUs en partes iguales el número de instancias que haya elegido como **tipo de instancia de despliegue**. Por ejemplo, para fragmentar el modelo mientras usas una instancia con 8 GPUs, usa los valores 2, 4 u 8.
   + Si estableces el **tipo de instancia de despliegue** en una instancia de AWS Inferentia o AWS Trainium, Studio podría mostrar que la **compilación** es la única opción admitida. En tal caso, Studio selecciona esta opción automáticamente.

1. En **Salida**, introduzca el URI de una ubicación de Amazon S3. Allí, la SageMaker IA almacena los artefactos del modelo optimizado que crea tu trabajo.

1. (Opcional) Amplíe **Opciones avanzadas** para obtener un control más pormenorizado de la configuración, como, por ejemplo, el rol de IAM, la VPC y las variables de entorno. Para obtener más información, consulte a continuación *Opciones avanzadas*.

1. Cuando haya terminado de configurar el trabajo, seleccione **Crear trabajo**.

   Studio muestra la página de detalles del trabajo, que muestra el estado del trabajo y todos sus ajustes.

### Opciones avanzadas
<a name="set-advanced-optimization-options"></a>

Puede definir las siguientes opciones avanzadas al crear un trabajo de optimización de inferencias.

En **Configuraciones**, puede configurar las siguientes opciones:

**Grado de tensor paralelo **  
Un valor para el grado de *paralelismo de tensores*. El paralelismo de tensores es un tipo de paralelismo de modelos en el que las ponderaciones, gradientes y estados del optimizador específicos del modelo se dividen entre los dispositivos. El valor debe dividir en partes iguales el número GPUs de del clúster.

**Longitud máxima del token**  
El límite de la cantidad de tokens que generará el modelo. Tenga en cuenta que es posible que el modelo no siempre genere la cantidad máxima de tokens.

**Concurrency (Simultaneidad)**  
La capacidad de ejecutar varias instancias de un modelo en el mismo hardware subyacente. Utilice la simultaneidad para ofrecer predicciones a varios usuarios y sacar el máximo partido de la utilización del hardware.

**Tamaño de lote**  
Si el modelo realiza *inferencias por lotes*, utilice esta opción para controlar el tamaño de los lotes que procesa el modelo.  
La inferencia por lotes genera predicciones de modelos a partir de un lote de observaciones. Es una buena opción para conjuntos de datos grandes o si no necesita una respuesta inmediata a una solicitud de inferencia. 

En **Seguridad**, puede configurar las siguientes opciones:

**Rol de IAM**  
Una función de IAM que permite a la SageMaker IA realizar tareas en tu nombre. Durante la optimización del modelo, la SageMaker IA necesita su permiso para:  
+ Leer los datos de entrada de un bucket de S3
+ Escribir artefactos de modelos en un bucket de S3
+ Escribir registros en Amazon CloudWatch Logs
+ Publica métricas en Amazon CloudWatch
Conceda permisos para todas estas tareas a un rol de IAM.  
Para obtener más información, consulte [Cómo utilizar las funciones de ejecución de la SageMaker IA](sagemaker-roles.md).

**Clave de cifrado de KMS**  
Una clave en AWS Key Management Service (AWS KMS). SageMaker La IA utiliza la clave para cifrar los artefactos del modelo optimizado cuando la SageMaker IA carga el modelo en Amazon S3.

**VPC**  
SageMaker La IA utiliza esta información para crear interfaces de red y conectarlas a los contenedores de sus modelos. Las interfaces de red proporcionan a sus contenedores de modelos una conexión de red en su VPC que no está conectada a Internet. También permiten al modelo conectarse a recursos en su VPC privada.  
Para obtener más información, consulte [Ofrezca a los puntos de conexión alojados en SageMaker IA acceso a los recursos de su Amazon VPC](host-vpc.md).

**Habilitación del aislamiento de la red**  
Active esta opción si desea restringir el acceso a Internet por parte del contenedor. Los contenedores que funcionan con el aislamiento de la red no pueden realizar llamadas de red salientes.  
Debe activar esta opción cuando optimice con decodificación especulativa y utilice el modelo de borrador de SageMaker IA.  
Para obtener más información acerca del aislamiento de la red, consulte [Aislamiento de red](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

En **Definición avanzada de contenedores**, puede configurar las siguientes opciones:

**Condición de parada**  
Especifica el límite de tiempo durante el que se puede ejecutar un trabajo. Cuando el trabajo alcanza el límite de tiempo, la SageMaker IA finaliza el trabajo. Utilice esta opción para limitar los costos.

**Tags**  
Pares clave-valor asociadas al trabajo de optimización.  
Para obtener más información sobre las etiquetas, consulte [Tagging AWS resources](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html) en la *Referencia general de AWS*.

**Variables de entorno**  
Pares clave-valor que definen las variables de entorno que se han de establecer en el contenedor del modelo.

## SageMaker SDK de Python para IA
<a name="optimize-create-pysdk"></a>

Puede crear un trabajo de optimización de inferencias utilizando el SDK de Python para SageMaker IA en su proyecto. En primer lugar, defina una instancia `Model` mediante la clase `ModelBuilder`. A continuación, utilice el método `optimize()` para ejecutar un trabajo que optimice el modelo con la cuantización, la decodificación especulativa o la compilación. Cuando se complete el trabajo, implemente el modelo en un punto de conexión de inferencia mediante el método `deploy()`.

Para obtener más información sobre las clases y los métodos utilizados en los siguientes ejemplos, consulta [APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html)la documentación del SDK de Python para SageMaker IA.

**Configuración de un proyecto**

1. En el código de la aplicación, importe las bibliotecas necesarias. En el ejemplo siguiente se importa el SDK para Python (Boto3). También importa las clases del SDK de Python para SageMaker IA que se utilizan para definir los modelos y trabajar con ellos:

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   from pathlib import Path
   ```

1. Inicializa una sesión de SageMaker IA. En este ejemplo se usa la clase `Session()`:

   ```
   sagemaker_session = Session()
   ```

**Definición de un modelo**

1. Cree una instancia de `SchemaBuilder` y proporcione ejemplos de entrada y salida. Al definir un modelo, debe proporcionar esta instancia a la clase `ModelBuilder`. Con él, la SageMaker IA genera automáticamente las funciones de clasificación para serializar y deserializar la entrada y la salida.

   Para obtener más información sobre el uso de las clases `SchemaBuilder` y `ModelBuilder`, consulte [Cree un modelo en Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

   En el ejemplo siguiente se proporcionan ejemplos de cadenas de entrada y salida para la clase `SchemaBuilder`:

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1. Defina su modelo según la IA. SageMaker En el ejemplo siguiente se definen los parámetros para inicializar una instancia de `ModelBuilder`:

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   En este ejemplo se utiliza un JumpStart modelo. `jumpstart-model-id`Sustitúyalo por el identificador de un JumpStart modelo, por ejemplo`meta-textgeneration-llama-3-70b`.
**nota**  
Si quiere optimizar con una decodificación especulativa y quiere utilizar el borrador de SageMaker IA, debe habilitar el aislamiento de la red. Para habilitarlo, incluya el siguiente argumento al inicializar una instancia `ModelBuilder`:  

   ```
   enable_network_isolation=True,
   ```
Para obtener más información acerca del aislamiento de la red, consulte [Aislamiento de red](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

**Optimización con la cuantización**

1. Para ejecutar un trabajo de cuantización, utilice el método `optimize()` y establezca el argumento `quantization_config`. En el siguiente ejemplo se establece `OPTION_QUANTIZE` como una variable de entorno en el contenedor de optimización:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       quantization_config={
           "OverrideEnvironment": {
               "OPTION_QUANTIZE": "awq",
           },
       },
       output_path="s3://output-path",
   )
   ```

   En este ejemplo, sustituya *`instance-type`* por una instancia de ML, como `ml.p4d.24xlarge`. Sustituya *`s3://output-path`* por la ruta a la ubicación de S3 en la que se almacena el modelo optimizado que crea el trabajo.

   El método `optimize()` devuelve un objeto `Model`, que puede utilizar para implementar el modelo en un punto de conexión.

1. Cuando se complete el trabajo, implemente el modelo. En el siguiente ejemplo se utiliza el método `deploy()`:

   ```
   predictor = optimized_model.deploy(
       instance_type="instance-type", 
       accept_eula=True,
   )
   ```

   En este ejemplo, sustituya *`instance-type`* por una instancia de ML, como `ml.p4d.24xlarge`. 

   El método `deploy()` devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto de conexión que aloja el modelo.

**Para optimizar con la decodificación especulativa, utilice el borrador del modelo SageMaker AI**

Cuando optimizas tu modelo con decodificación especulativa, puedes optar por usar un borrador de modelo proporcionado por la SageMaker IA o puedes usar el tuyo propio. En los ejemplos siguientes se utiliza el modelo preliminar de SageMaker IA.
**Requisito previo**  
Para optimizar con la decodificación especulativa y el modelo preliminar de SageMaker IA, debe habilitar el aislamiento de la red al definir el modelo.

1. Para ejecutar un trabajo de decodificación especulativa, utilice el método `optimize()` y establezca el argumento `speculative_decoding_config`. El siguiente ejemplo establece la `ModelProvider` clave `SAGEMAKER` para utilizar el borrador del modelo que proporciona la SageMaker IA.

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelProvider": "SAGEMAKER",
       },
   )
   ```

   En este ejemplo, sustituya *`instance-type`* por una instancia de ML, como `ml.p4d.24xlarge`.

   El método `optimize()` devuelve un objeto `Model`, que puede utilizar para implementar el modelo en un punto de conexión.

1. Cuando se complete el trabajo, implemente el modelo. En el siguiente ejemplo se utiliza el método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   El método `deploy()` devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto de conexión que aloja el modelo.

**Optimización con la decodificación especulativa mediante un modelo de borrador personalizado**

Antes de poder proporcionar su borrador de modelo personalizado a SageMaker AI, primero debe cargar los artefactos del modelo en Amazon S3.

En los siguientes ejemplos se muestra una forma posible de proporcionar un modelo de borrador personalizado. En los ejemplos se descarga el modelo de borrador del Hugging Face Hub, se carga en Amazon S3 y se proporciona el URI de S3 al argumento `speculative_decoding_config`.

1. Si quiere descargar un modelo del Hugging Face Hub, añada la biblioteca `huggingface_hub` a su proyecto y descargue un modelo con el método `snapshot_download()`. En el siguiente ejemplo se descarga un modelo en un directorio local:

   ```
   import huggingface_hub
   
   huggingface_hub.snapshot_download(
       repo_id="model-id",
       revision="main",
       local_dir=download-dir,
       token=hf-access-token,
   )
   ```

   En este ejemplo, sustituya *`model-id`* por el ID de un modelo, el Hugging Face Hub, como `meta-llama/Meta-Llama-3-8B`. Sustituya *`download-dir`* por un directorio local. Sustituya *`hf-access-token`* por su token de acceso de usuario. Para obtener información sobre cómo obtener su token de acceso, consulte [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) en la documentación de Hugging Face.

   Para obtener más información sobre la biblioteca `huggingface_hub`, consulte [Hub client library](https://huggingface.co/docs/huggingface_hub/en/index) en la documentación de Hugging Face.

1. Para que el modelo descargado esté disponible para SageMaker AI, cárguelo en Amazon S3. En el siguiente ejemplo se carga el modelo con el objeto `sagemaker_session`:

   ```
   custom_draft_model_uri = sagemaker_session.upload_data(
       path=hf_local_download_dir.as_posix(),
       bucket=sagemaker_session.default_bucket(),
       key_prefix="prefix",
   )
   ```

   En este ejemplo, sustituya *`prefix`* por un calificador que le ayude a distinguir el modelo de borrador en S3, como `spec-dec-custom-draft-model`.

   El método `upload_data()` devuelve el URI de S3 de los artefactos del modelo.

1. Para ejecutar un trabajo de decodificación especulativa, utilice el método `optimize()` y establezca el argumento `speculative_decoding_config`. En el siguiente ejemplo se establece la clave `ModelSource` del URI de S3 del modelo de borrador personalizado:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelSource": custom_draft_model_uri + "/",
       },
   )
   ```

   En este ejemplo, sustituya *`instance-type`* por una instancia de ML, como `ml.p4d.24xlarge`.

   El método `optimize()` devuelve un objeto `Model`, que puede utilizar para implementar el modelo en un punto de conexión.

1. Cuando se complete el trabajo, implemente el modelo. En el siguiente ejemplo se utiliza el método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   El método `deploy()` devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto de conexión que aloja el modelo.

**Optimización con la compilación**

1. Para ejecutar un trabajo de compilación, utilice el método `optimize()` y establezca el argumento `compilation_config`. En el siguiente ejemplo se utiliza la clave `OverrideEnvironment` para establecer las variables de entorno necesarias en el contenedor de optimización:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       compilation_config={
           "OverrideEnvironment": {
               "OPTION_TENSOR_PARALLEL_DEGREE": "24",
               "OPTION_N_POSITIONS": "8192",
               "OPTION_DTYPE": "fp16",
               "OPTION_ROLLING_BATCH": "auto",
               "OPTION_MAX_ROLLING_BATCH_SIZE": "4",
               "OPTION_NEURON_OPTIMIZE_LEVEL": "2",
           }
       },
       output_path="s3://output-path",
   )
   ```

   En este ejemplo, establezca *`instance-type`* en un tipo de instancia de ML con hardware acelerado. Por ejemplo, para AWS una inferencia acelerada con Inferentia, puede establecer el tipo en una instancia de Inf2, como. `ml.inf2.48xlarge` Sustituya *`s3://output-path`* por la ruta a la ubicación de S3 en la que se almacena el modelo optimizado que crea el trabajo.

1. Cuando se complete el trabajo, implemente el modelo. En el siguiente ejemplo se utiliza el método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   El método `deploy()` devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto de conexión que aloja el modelo.

**Prueba del modelo con una solicitud de inferencia**
+ Para enviar una solicitud de inferencia de prueba al modelo implementado, utilice el método `predict()` de un objeto predictor. En el siguiente ejemplo se pasa la variable `sample_input` que también se pasó a la clase `SchemaBuilder` en los ejemplos para definir el modelo:

  ```
  predictor.predict(sample_input)
  ```

  La entrada de muestra tiene la petición, `"What is the largest planet in the solar system?"`. El método `predict()` devuelve la respuesta que generó el modelo, como se muestra en el siguiente ejemplo:

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## AWS SDK para Python (Boto3)
<a name="optimize-create-pysdk-boto"></a>

Puede utilizar el AWS SDK para Python (Boto3) para crear y gestionar tareas de optimización de inferencias mediante programación. En esta sección se proporcionan ejemplos de diferentes técnicas de optimización.

**Requisitos previos**

Antes de crear un trabajo de optimización con Boto3, asegúrese de tener:
+  AWS Credenciales configuradas: configure sus AWS credenciales con los permisos adecuados
+ Creó un modelo de SageMaker IA (si utiliza un modelo existente)
+ Preparé los datos de entrenamiento en S3 (para la optimización de la decodificación especulativa, se admitía una longitud de contexto de hasta 4096)
+ Función de IAM con los permisos necesarios: su función de ejecución debe tener permisos para acceder a S3 y crear recursos SageMaker 

**Ejemplo: Crear un trabajo de optimización con la decodificación especulativa EAGLE (Llama 3.3 70B)**

En este ejemplo se muestra la creación de un trabajo de optimización para un modelo de lenguaje grande mediante la técnica de decodificación especulativa EAGLE:

```
import boto3

# Initialize SageMaker client
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Step 1: Create a SageMaker model (if not already created)
model_response = sagemaker_client.create_model(
    ModelName='meta-llama-3-3-70b-instruct',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/Llama-3.3-70B-Instruct/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'SAGEMAKER_ENV': '1',
            'SAGEMAKER_MODEL_SERVER_TIMEOUT': '3600'
        }
    }
)

# Step 2: Create optimization job with speculative decoding
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'meta-llama-3-3-70b-instruct'
        }
    },
    DeploymentInstanceType='ml.p4d.24xlarge',
    # MaxInstanceCount specifies the maximum number of instances for distributed training
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_8k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/llama-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Ejemplo: Crear un trabajo de optimización a partir de artefactos del modelo S3 (Qwen3 32B)**

En este ejemplo se muestra cómo crear un trabajo de optimización utilizando artefactos de modelo directamente desde S3:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Create model from S3 artifacts
model_response = sagemaker_client.create_model(
    ModelName='qwen3-32b',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'Mode': 'SingleModel',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/qwen3-32b/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'AWS_REGION': 'us-west-2'
        }
    }
)

# Create optimization job with smaller training dataset
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='qwen3-optim-job-eagle',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'qwen3-32b'
        }
    },
    DeploymentInstanceType='ml.g6.48xlarge',
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_1k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/qwen3-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Ejemplo: supervisar y gestionar los trabajos de optimización**

Tras crear un trabajo de optimización, puede supervisar su progreso y gestionarlo mediante estos comandos:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Describe optimization job to check status
describe_response = sagemaker_client.describe_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
)

print(f"Job Status: {describe_response['OptimizationJobStatus']}")

# List all optimization jobs (with pagination)
list_response = sagemaker_client.list_optimization_jobs(
    MaxResults=10,
    SortBy='CreationTime',
    SortOrder='Descending'
)

print("\nRecent optimization jobs:")
for job in list_response['OptimizationJobSummaries']:
    print(f"- {job['OptimizationJobName']}: {job['OptimizationJobStatus']}")

# Stop a running optimization job if needed
# sagemaker_client.stop_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )

# Delete a completed or failed optimization job
# sagemaker_client.delete_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )
```

La decodificación especulativa con Eagle Heads lleva a cabo cuatro tareas de formación secuenciales. Cada trabajo produce un resultado que se convierte en la entrada del siguiente. Solo el resultado del trabajo final se envía a su bucket de S3. Los resultados intermedios se cifran y almacenan en un depósito de servicios de SageMaker IA interno durante un máximo de 20 días. SageMaker AI no tiene permisos para descifrarlos. Si desea que los datos intermedios se eliminen antes de ese período, asegúrese de que su trabajo se haya completado o se haya detenido y, a continuación, abra un caso de soporte [[https://docs.aws.amazon.com/awssupport/latest/user/case-management.html\$1 creating-a-support-case](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)] para que se eliminen estos datos. Incluya en la solicitud su ID de AWS cuenta y el ARN del trabajo de optimización.

## Limitaciones del borrador del SageMaker modelo de IA
<a name="sm-draft-model-limitations"></a>

Para cualquier modelo que optimice con el modelo preliminar de SageMaker IA, tenga en cuenta los requisitos, las restricciones y las variables de entorno compatibles.

**Requisitos**

Debe hacer lo siguiente:
+ Utilice un modelo proporcionado por SageMaker JumpStart.
+ Habilitar el aislamiento de la red para la implementación del modelo.
+ Si implementa el modelo en un contenedor de inferencia de modelos grandes (LMI), utilice un DJLServing contenedor de la versión 0.28.0 o superior.

  Para ver los contenedores disponibles, consulte Contenedores de [inferencia de modelos grandes](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) en el GitHub repositorio de Deep Learning Containers.
+ Si ajusta el JumpStart modelo con precisión, utilice el formato safetensors para los pesos del modelo.

  Para obtener más información, consulte [Safetensors](https://huggingface.co/docs/safetensors/en/index) en la documentación de Hugging Face.

**Restricciones**

No puede hacer lo siguiente:
+ Utilizar el modelo en entornos de prueba locales que cree con el modo local. 

  Para obtener más información sobre el modo local, consulta [Modo local](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode) en la documentación del SDK de Python para SageMaker IA.
+ Acceda al contenedor del modelo a través del AWS Systems Manager agente (agente SSM). El agente SSM proporciona acceso a nivel de shell a su contenedor modelo para que pueda depurar procesos y registrar comandos con Amazon. CloudWatch 

  Para obtener más información acerca de esta característica, consulte [Acceso a contenedores a través de SSM](ssm-access.md).
+ Configurar el contenedor de modelos para un volcado de núcleo que se produce si el proceso se bloquea. 

  Para obtener más información sobre los volcados principales de los contenedores modelo, consulte. [ProductionVariantCoreDumpConfig](sagemaker/latest/APIReference/API_ProductionVariantCoreDumpConfig.html)
+ Implementar el modelo en puntos de conexión multimodelo, puntos de conexión multicontenedor o puntos de conexión que alojan componentes de inferencia. 

  Para obtener más información acerca de estos tipos de puntos de conexión, consulte [Puntos de conexión multimodelo](multi-model-endpoints.md), [Puntos de conexión con varios contenedores](multi-container-endpoints.md) y [Componentes de inferencias](realtime-endpoints-deploy-models.md#inference-components).
+ Crear un paquete de modelos para el modelo. Los paquetes de modelos se utilizan para crear modelos desplegables en los que se publican. AWS Marketplace

  Para obtener más información acerca de esta característica, consulte [Cree un recurso de paquete de modelos](sagemaker-mkt-create-model-package.md).
+ Usar su propio código de inferencia en el contenedor de modelos.
+ Utilizar un archivo `requirements.txt` en el contenedor de modelos. Este tipo de archivo muestra las dependencias de los paquetes.
+ Habilitar el parámetro `trust_remote_code` de Hugging Face.

**Variables de entorno admitidas**

Puede configurar el contenedor únicamente con las siguientes variables de entorno:
+ Variables de entorno comunes para contenedores de inferencia de modelos grandes (LMI). 

  Para obtener más información sobre estas variables, consulte [Environment Variable Configurations](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#environment-variable-configurations) en la documentación del contenedor de LMI.
+ Variables de entorno comunes para los paquetes que Hugging Face Hub proporciona en sus repositorios de Git. 

  Para los repositorios, consulta [Hugging](https://github.com/huggingface) Face on. GitHub
+ Variables de PyTorch entorno comunes y CUDA. 

  Para obtener más información sobre estas variables, consulte las [variables de entorno de Torch](https://pytorch.org/docs/stable/torch_environment_variables.html) en la PyTorch documentación.

# Visualización de los resultados del trabajo de optimización
<a name="model-optimize-view-results"></a>

Una vez que haya creado uno o varios trabajos de optimización, puede usar Studio para ver una tabla de resumen de todos los trabajos, donde podrá ver los detalles de cada trabajo.

## Amazon SageMaker Studio
<a name="optimization-results-studio"></a>

**Visualización de la tabla de resumen de los trabajos de optimización**
+ En el menú de navegación de Studio, en **Trabajos**, elija **Optimización de inferencias**.

  En la página **Optimización de inferencias** se muestra una tabla con los trabajos que ha creado. En cada trabajo se muestran las configuraciones de optimización que ha aplicado y el estado del trabajo.

**Visualización de los detalles de un trabajo**
+ En la página **Optimización de inferencias**, en la tabla de resumen, elija el nombre del trabajo.

  Studio muestra la página de detalles del trabajo, que indica el estado del trabajo y todos los ajustes que ha aplicado al crear el trabajo. Si el trabajo se ha completado correctamente, SageMaker AI ha almacenado los artefactos del modelo optimizado en la ubicación de Amazon S3 en el **URI de S3 de modelos optimizados**.

# Evaluación del rendimiento de modelos optimizados
<a name="model-optimize-evaluate"></a>

Después de utilizar un trabajo de optimización para crear un modelo optimizado, puede realizar una evaluación del rendimiento del modelo. Esta evaluación proporciona métricas en cuanto a latencia, rendimiento y precio. Utilice estas métricas para determinar si el modelo optimizado cumple con las necesidades del caso de uso o si requiere una mayor optimización.

Solo puede realizar evaluaciones de rendimiento con Studio. Esta función no se proporciona a través de la API de Amazon SageMaker AI ni del SDK de Python.

## Antes de empezar
<a name="eval-prereqs"></a>

Antes de crear una evaluación del rendimiento, primero debe optimizar un modelo mediante la creación de un trabajo de optimización de inferencias. En Studio, solo puede evaluar los modelos que cree con estos trabajos.

## Creación de la evaluación del rendimiento
<a name="create-perf-eval"></a>

Complete los siguientes pasos en Studio para crear una evaluación del rendimiento de un modelo optimizado.

1. En el menú de navegación de Studio, en **Trabajos**, elija **Optimización de inferencias**.

1. Elija el nombre del trabajo que ha creado el modelo optimizado que desea evaluar.

1. En la página de detalles del trabajo, elija **Evaluar rendimiento**.

1. En la página de **evaluación del rendimiento**, algunos JumpStart modelos requieren que firme un acuerdo de licencia de usuario final (EULA) antes de poder continuar. Si se solicita, revise los términos de la licencia en la sección **Acuerdo de licencia**. Si los términos son aceptables para el caso de uso, seleccione la casilla de verificación **Acepto el EULA, y he leído los términos y las condiciones**.

1. En **Seleccionar un modelo para el tokenizador**, acepte el modelo predeterminado o elija un modelo específico que sirva de tokenizador para la evaluación.

1. En **Conjuntos de datos de entrada**, elija si desea: 
   + Utilice los conjuntos de datos de muestra predeterminados de AI. SageMaker 
   + Proporcionar un URI de S3 que apunte a sus propios conjuntos de datos de ejemplo.

1. En **URI de S3 para resultados de rendimiento**, proporcione un URI que apunte a la ubicación de Amazon S3 en la que desea almacenar los resultados de la evaluación.

1. Elija **Evaluar**.

   Studio muestra la página **Evaluaciones de rendimiento**, donde se muestra el trabajo de evaluación en la tabla. En la columna **Estado** se muestra el estado de la evaluación.

1. Cuando el estado sea **Completado**, elija el nombre del trabajo para ver los resultados de la evaluación.

En la página de detalles de la evaluación se muestran tablas que proporcionan las métricas de rendimiento en cuanto a latencia, rendimiento y precio. Para obtener más información sobre cada métrica, consulte [Referencia de métricas para las evaluaciones del rendimiento de inferencias](#performance-eval-metrics-reference).

## Referencia de métricas para las evaluaciones del rendimiento de inferencias
<a name="performance-eval-metrics-reference"></a>

Tras evaluar correctamente el rendimiento de un modelo optimizado, la página de detalles de la evaluación de Studio muestra las siguientes métricas.

### Métricas de latencia
<a name="latency-metrics"></a>

En la sección **Latencia** se muestran las siguientes métricas.

**Concurrency (Simultaneidad)**  
El número de usuarios simultáneos que la evaluación ha simulado para invocar el punto de conexión de forma simultánea.

**Tiempo transcurrido hasta el primer token (ms)**  
El tiempo transcurrido entre el envío de la solicitud y el momento en que se recibe el primer token de una respuesta de transmisión.

**Latencia entre tokens (ms)**  
El tiempo necesario para generar un token de salida para cada solicitud.

**Latencia del cliente (ms)**  
La latencia de la solicitud desde el momento en que se envía la solicitud hasta el momento en que se recibe la respuesta completa.

**Entrada tokens/sec (recuento)**  
El número total de tokens de entrada generados, en todas las solicitudes, dividido por la duración total en segundos de la simultaneidad.

**Salida tokens/sec (recuento)**  
El número total de tokens de salida generados, en todas las solicitudes, dividido por la duración total en segundos de la simultaneidad.

**Invocaciones de clientes (recuento)**  
El número total de solicitudes de inferencia enviadas al punto de conexión entre todos los usuarios de forma simultánea.

**Errores de invocación de clientes (recuento)**  
El número total de solicitudes de inferencia enviadas al punto de conexión entre todos los usuarios en una simultaneidad determinada que ha provocado un error de invocación.

**Error en el tokenizador (recuento)**  
El número total de solicitudes de inferencia en las que el tokenizador no ha podido analizar la solicitud o la respuesta.

**Respuesta de inferencia vacía (recuento)**  
El número total de solicitudes de inferencia que no han generado ningún token de salida o que el tokenizador no ha podido analizar la respuesta.

### Métricas de rendimiento
<a name="throughput-metrics"></a>

En la sección **Rendimiento** se muestran las siguientes métricas.

**Concurrency (Simultaneidad)**  
El número de usuarios simultáneos que la evaluación ha simulado para invocar el punto de conexión de forma simultánea.

**Entrada tokens/sec/req (recuento)**  
El número total de tokens de entrada generadas por segundo y por solicitud.

**Salida tokens/sec/req (recuento)**  
El número total de tokens de salida generadas por segundo y por solicitud.

**Tokens de entrada (recuento)**  
El número total de tokens de entrada generadas por solicitud.

**Tokens de salida (recuento)**  
El número total de tokens de salida generados por solicitud.

### Métricas de precios
<a name="price-metrics"></a>

En la sección **Precio** se muestran las siguientes métricas.

**Concurrency (Simultaneidad)**  
El número de usuarios simultáneos que la evaluación ha simulado para invocar el punto de conexión de forma simultánea.

**Precio por millón de tokens de entrada**  
Costo de procesamiento de un millón de tokens de entrada

**Precio por millón de tokens de salida**  
Costo de generación de un millón de tokens de salida

# Referencia de modelos compatibles
<a name="optimization-supported-models"></a>

En las tablas siguientes se muestran los modelos en los que la SageMaker IA admite la optimización de inferencias y las técnicas de optimización compatibles.


**Modelos Llama compatibles**  

| Nombre del modelo | Formatos de datos admitidos para la cuantización | Admite decodificación especulativa | Admite carga rápida de modelos | Bibliotecas utilizadas para compilación | 
| --- | --- | --- | --- | --- | 
| Meta Llama 2 13B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 2 13B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 2 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 2 70B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 2 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 2 7B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 3 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 3 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 3 8B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Llama 3 8B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Meta Code Llama 13B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 13B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 13B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 34B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 34B Instruct  |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 34B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 70B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Code Llama 7B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Meta Llama 2 13B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 2 13B Chat Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 2 70B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 2 70B Chat Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 2 7B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 2 7B Chat Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3 70B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3 70B Instruct Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3 8B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3 8B Instruct Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Code Llama 70B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Code Llama 7B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Code Llama 7B Python Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3.1 405B FP8 | Ninguno | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 405B Instruct FP8 | Ninguno | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 70B |  INT4-AWQ FP8  | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 70B Instruct |  INT4-AWQ FP8  | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 8B |  INT4-AWQ FP8  | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 8B Instruct |  INT4-AWQ FP8  | Sí | Sí |  Ninguno  | 
| Meta Llama 3.1 70B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3.1 70B Instruct Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3 1 8B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Meta Llama 3.1 8B Instruct Neuron | Ninguno | No | No |  AWSNeurona  | 


**Modelos Mistral compatibles**  

| Nombre del modelo | Formatos de datos admitidos para la cuantización | Admite decodificación especulativa | Admite carga rápida de modelos | Bibliotecas utilizadas para compilación | 
| --- | --- | --- | --- | --- | 
| Mistral 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Mistral 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  AWSNeurona TensorRT-LLM  | 
| Mistral 7B Neuron | Ninguno | No | No |  AWSNeurona  | 
| Mistral 7B Instruct Neuron | Ninguno | No | No |  AWSNeurona  | 


**Modelos Mixtral compatibles**  

| Nombre del modelo | Formatos de datos admitidos para la cuantización | Admite decodificación especulativa | Admite carga rápida de modelos | Bibliotecas utilizadas para compilación | 
| --- | --- | --- | --- | --- | 
| Mixtral-8x22B-Instruct-v0.1 |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Mixtral-8x22B V1 |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Mixtral 8x7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 
| Mixtral 8x7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sí | Sí |  TensorRT-LLM  | 


**Arquitecturas de modelos compatibles y tipo EAGLE**  

|  Nombre de la arquitectura del modelo  |  Tipo EAGLE  | 
| --- | --- | 
|  LlamaForCausalLM  |  ÁGUILA 3  | 
|  Qwen 3 KM ForCausal  |  ÁGUILA 3  | 
|  Qwen 3 KM NextForCausal  |  ÁGUILA 2  | 
|  Qwen 3 KM MoeForCausal   |  ÁGUILA 3  | 
|  Qwen2 LM ForCausal  |  ÁGUILA 3  | 
|  GptOssForCausalLM  |  ÁGUILA 3  | 

# Opciones para evaluar su modelo de aprendizaje automático en Amazon SageMaker AI
<a name="how-it-works-model-validation"></a>

Una vez realizada la entrenamiento de un modelo, evalúelo para determinar si su desempeño y precisión le permiten conseguir sus objetivos empresariales. Puede generar varios modelos mediante distintos métodos y evaluar cada uno de ellos. Por ejemplo, podría aplicar diferentes reglas empresariales para cada modelo y, a continuación, aplicar varias medias para determinar la sostenibilidad de cada modelo. Podría considerar si su modelo necesita ser más sensible que específico (o viceversa). 

Puede evaluar el modelo mediante los datos históricos (sin conexión) o datos activos:
+ **Prueba sin conexión**: utilice los datos históricos, no activos, para enviar solicitudes al modelo para las inferencias. 

  Implemente el modelo de capacitación en un punto de enlace alfa y use los datos históricos para enviar solicitudes de inferencia a él. Para enviar las solicitudes, usa un cuaderno de Jupyter en tu instancia de bloc de notas de Amazon SageMaker AI y la AWS SDK para Python (Boto) biblioteca de Python de alto nivel proporcionada por SageMaker AI.
+ **Pruebas en línea con datos en tiempo real**: la SageMaker IA permite A/B probar modelos en producción mediante variantes de producción. Las variantes de producción son modelos que utilizan el mismo código de inferencia y se implementan en el mismo punto final de SageMaker IA. Configure las variantes de producción de manera que una parte pequeña del tráfico activo se dirija al modelo que desea validar. Por ejemplo, puede elegir enviar el 10% del tráfico a una variante de modelo para la evaluación. Una vez que esté satisfecho con el rendimiento del modelo, puede dirigir el 100% del tráfico al modelo actualizado. Para ver un ejemplo de pruebas de modelos en producción, consulte [Prueba de modelos con variantes de producción](model-ab-testing.md).

Para obtener más información, consulte artículos y libros acerca de cómo evaluar modelos; por ejemplo, [Evaluating Machine Learning Models](http://www.oreilly.com/data/free/evaluating-machine-learning-models.csp). 

Las opciones para la evaluación del modelo sin conexión incluyen las siguientes opciones:
+ **Validación mediante un "conjunto de excepciones"**: los usuarios del machine learning normalmente separan una parte de los datos como un "conjunto de excepciones". No utilice estos datos para una capacitación de modelos.

  Con este método, se evalúa hasta qué punto el modelo proporciona correctamente inferencias en el conjunto de excepciones. Después evalúa la eficacia con la que el modelo generaliza lo que ha aprendido en la entrenamiento inicial, en lugar de usar la "memoria" del modelo. Este enfoque para la validación ofrece una idea de la frecuencia con la que el modelo puede inferir la respuesta correcta. 

   

  De alguna forma, este enfoque es similar al de la enseñanza de los estudiantes de primaria. Primero, proporcióneles un conjunto de ejemplos que aprender y, a continuación, realice una prueba de su capacidad de generalización a partir de su aprendizaje. Con los deberes y los exámenes, plantea los problemas no incluidos en el aprendizaje inicial y determina si se pueden generalizar de forma efectiva. Los estudiantes con una memoria perfecta podrían memorizar los problemas en lugar de aprender las reglas.

   

  Normalmente, el conjunto de datos de exclusiones es del 20-30% de los datos de capacitación.

   
+ **Validación de k interacciones**: en este enfoque de validación, divide el conjunto de datos de ejemplo en *k* partes. Trate cada una de estas partes como un conjunto de excepciones para las ejecuciones de capacitación* k* y utilice las otras partes *k*-1 como el conjunto de capacitación para esa ejecución. Genere modelos* k* mediante un proceso similar y agregue los modelos para generar su modelo final. El valor *k* se encuentra normalmente en el intervalo de 5 a 10.

# Recomendador de SageMaker inferencias de Amazon
<a name="inference-recommender"></a>

Amazon SageMaker Inference Recommender es una capacidad de Amazon SageMaker AI. Reduce el tiempo necesario para poner en producción los modelos de aprendizaje automático (ML) al automatizar las pruebas de carga y el ajuste de los modelos en todas las instancias de aprendizaje automático con SageMaker IA. Puede utilizar Recomendador de inferencias para implementar su modelo en un punto de conexión de inferencia en tiempo real o sin servidor que ofrezca el mejor rendimiento al menor coste. El Recomendador de inferencias le ayuda a seleccionar el mejor tipo de instancia y configuración para sus cargas de trabajo y modelos de ML. Considera factores como el número de instancias, los parámetros del contenedor, las optimizaciones de modelo, la simultaneidad máxima y el tamaño de la memoria.

Amazon SageMaker Inference Recommender solo le cobra por las instancias utilizadas durante la ejecución de sus trabajos.

## Funcionamiento
<a name="inference-recommender-how-it-works"></a>

Para utilizar Amazon SageMaker Inference Recommender, puede [crear un modelo de SageMaker IA o registrar un modelo](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) en el registro de SageMaker modelos con sus artefactos del modelo. Utilice la consola de IA AWS SDK para Python (Boto3) o la consola de SageMaker IA para ejecutar trabajos de evaluación comparativa para diferentes configuraciones de puntos finales de SageMaker IA. Los trabajos de Recomendación de inferencias le ayudan a recopilar y visualizar métricas sobre el rendimiento y la utilización de los recursos para ayudarle a decidir qué tipo y configuración de punto de conexión elegir.

## Cómo empezar
<a name="inference-recommender-get-started"></a>

Si es la primera vez que utiliza Amazon SageMaker Inference Recommender, le recomendamos que haga lo siguiente:

1. Lee esta [Requisitos previos para usar Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md) sección para asegurarte de que cumples los requisitos para usar Amazon SageMaker Inference Recommender.

1. Lea la sección [Trabajos de recomendación con Amazon SageMaker Inference Recommender](inference-recommender-recommendation-jobs.md) para lanzar sus primeros trabajos de recomendación del Recomendador de inferencias.

1. Explore el ejemplo introductorio del SageMaker cuaderno [Jupyter de Amazon Inference Recommender o revise los cuadernos](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-inference-recommender/inference-recommender.ipynb) de ejemplo en la siguiente sección.

## Cuadernos de ejemplo
<a name="inference-recommender-notebooks"></a>

Los siguientes ejemplos de cuadernos de Jupyter pueden ayudarle con los flujos de trabajo para varios casos de uso en Recomendador de inferencias:
+ [Si desea un cuaderno introductorio que compare un TensorFlow modelo, consulte el cuaderno Inference Recommender. SageMaker TensorFlow](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/inference-recommender.ipynb)
+ Si desea comparar un HuggingFace modelo, consulte el [Recomendador de SageMaker inferencias](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/huggingface-inference-recommender/huggingface-inference-recommender.ipynb) para cuadernos. HuggingFace
+ Si desea comparar un XGBoost modelo, consulte el cuaderno de recomendaciones de [SageMaker inferencias. XGBoost](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/xgboost/xgboost-inference-recommender.ipynb)
+ Si desea revisar CloudWatch las métricas de sus trabajos de recomendación de inferencias, consulte el cuaderno de métricas de recomendaciones de [SageMaker inferencias](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/tensorflow-cloudwatch/tf-cloudwatch-inference-recommender.ipynb). CloudWatch 

# Requisitos previos para usar Amazon SageMaker Inference Recommender
<a name="inference-recommender-prerequisites"></a>

Antes de poder utilizar Amazon SageMaker Inference Recommender, debe completar los pasos previos. A modo de ejemplo, mostramos cómo utilizar un modelo PyTorch (v1.7.1) ResNet -18 previamente entrenado para ambos tipos de trabajos de recomendación de Amazon SageMaker Inference Recommender. Los ejemplos que se muestran utilizan el AWS SDK para Python (Boto3).

**nota**  
Los siguientes ejemplos de código utilizan Python. Elimine el carácter de prefijo `!` si ejecuta alguno de los siguientes ejemplos de código en su terminal o AWS CLI.
Puede ejecutar los siguientes ejemplos con el núcleo de Python 3 (TensorFlow 2.6 Python 3.8 optimizado para CPU) en un bloc de notas de Amazon SageMaker Studio. Para obtener más información sobre Studio, consulte [Amazon SageMaker Studio](studio-updated.md).

1. **Cree un rol de IAM para Amazon SageMaker AI.**

   Cree un rol de IAM para Amazon SageMaker AI que tenga la política gestionada de `AmazonSageMakerFullAccess` IAM adjunta.

1. **Configure el entorno.**

   Importe las dependencias y cree variables para usted Región de AWS, su función de IAM de SageMaker IA (desde el paso 1) y el cliente de IA. SageMaker 

   ```
   !pip install --upgrade pip awscli botocore boto3  --quiet
   from sagemaker import get_execution_role, Session, image_uris
   import boto3
   
   region = boto3.Session().region_name
   role = get_execution_role()
   sagemaker_client = boto3.client("sagemaker", region_name=region)
   sagemaker_session = Session()
   ```

1. **(Opcional) Revise los modelos existentes comparados con Recomendador de inferencias.**

   Recomendador de inferencias compara modelos de referencia con Model Zoos. Recomendador de inferencias es compatible con su modelo incluso si aún no se ha comparado con él.

   Utilice `ListModelMetaData` para obtener un objeto de respuesta que indique el dominio, el marco, la tarea y el nombre de los modelos de machine learning que se encuentran en los Model Zoos comunes.

   En los siguientes pasos, debe utilizar el dominio, el marco, la versión del marco, la tarea y el nombre del modelo para seleccionar una imagen de Docker de inferencia y registrar el modelo en Model Registry. SageMaker A continuación, se muestra cómo enumerar los metadatos del modelo con SDK para Python (Boto3): 

   ```
   list_model_metadata_response=sagemaker_client.list_model_metadata()
   ```

   La salida incluye resúmenes de modelo (`ModelMetadataSummaries`) y metadatos de respuesta (`ResponseMetadata`) similares al siguiente ejemplo:

   ```
   {
       'ModelMetadataSummaries': [{
               'Domain': 'NATURAL_LANGUAGE_PROCESSING',
               'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-cased',
                'Task': 'FILL_MASK'
                },
               {
                'Domain': 'NATURAL_LANGUAGE_PROCESSING',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-uncased',
                'Task': 'FILL_MASK'
                },
               {
               'Domain': 'COMPUTER_VISION',
                'Framework': 'MXNET:1.8.0',
                'Model': 'resnet18v2-gluon',
                'Task': 'IMAGE_CLASSIFICATION'
                },
                {
                'Domain': 'COMPUTER_VISION',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'resnet152',
                'Task': 'IMAGE_CLASSIFICATION'
                }],
       'ResponseMetadata': {
                               'HTTPHeaders': {
                               'content-length': '2345',
                               'content-type': 'application/x-amz-json-1.1',
                               'date': 'Tue, 19 Oct 2021 20:52:03 GMT',
                               'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
                             },
       'HTTPStatusCode': 200,
       'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
       'RetryAttempts': 0
       }
   }
   ```

   Para esta demostración, utilizamos un modelo PyTorch (v1.7.1) ResNet -18 para realizar la clasificación de imágenes. El siguiente ejemplo de código de Python almacena el marco, la versión del marco, el dominio y la tarea en variables para su uso posterior:

   ```
   # ML framework details
   framework = 'pytorch'
   framework_version = '1.7.1'
   
   # ML model details
   ml_domain = 'COMPUTER_VISION'
   ml_task = 'IMAGE_CLASSIFICATION'
   ```

1. **Cargue su modelo de machine learning en Amazon S3.**

   Utilice este modelo PyTorch (v1.7.1) ResNet -18 si no tiene un modelo de aprendizaje automático previamente entrenado:

   ```
   # Optional: Download a sample PyTorch model
   import torch
   from torchvision import models, transforms, datasets
   
   # Create an example input for tracing
   image = torch.zeros([1, 3, 256, 256], dtype=torch.float32)
   
   # Load a pretrained resnet18 model from TorchHub
   model = models.resnet18(pretrained=True)
   
   # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation.
   model.eval()
   model_trace = torch.jit.trace(model, image)
   
   # Save your traced model
   model_trace.save('model.pth')
   ```

   Descargue un ejemplo de script de inferencia `inference.py`. Cree un directorio `code` y mueva el script de inferencia al directorio `code`.

   ```
   # Download the inference script
   !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py
   
   # move it into a code/ directory
   !mkdir code
   !mv inference.py code/
   ```

   Amazon SageMaker AI requiere que los modelos de aprendizaje automático previamente entrenados se empaqueten como un archivo TAR comprimido (`*.tar.gz`). Comprima el modelo y el script de inferencia para satisfacer este requisito:

   ```
   !tar -czf test.tar.gz model.pth code/inference.py
   ```

   Cuando se aprovisiona el punto de conexión, los archivos del archivo se extraen en `/opt/ml/model/` en el punto de conexión.

   Tras comprimir el modelo y los artefactos del modelo en un archivo `.tar.gz`, cárguelos en su bucket de Amazon S3. En el siguiente ejemplo, se muestra cómo cargar su modelo en Amazon S3 mediante la AWS CLI:

   ```
   !aws s3 cp test.tar.gz s3://{your-bucket}/models/
   ```

1. **Seleccionar una imagen de inferencia de Docker prediseñada o crear su propia imagen de Docker de inferencia.**

   SageMaker La IA proporciona contenedores para sus algoritmos integrados e imágenes de Docker prediseñadas para algunos de los marcos de aprendizaje automático más comunes, como Apache, MXNet TensorFlow PyTorch, y Chainer. Para ver una lista completa de las imágenes de SageMaker IA disponibles, consulte Imágenes de [Deep Learning Containers disponibles](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

   Si ninguno de los contenedores de SageMaker IA existentes satisface tus necesidades y no tienes uno propio, crea una nueva imagen de Docker. Consulte [Contenedores con código de inferencia personalizado](your-algorithms-inference-main.md) para obtener información acerca de cómo crear una imagen de Docker.

   A continuación, se muestra cómo recuperar una imagen de inferencia de la PyTorch versión 1.7.1 mediante el SDK de SageMaker Python:

   ```
   from sagemaker import image_uris
   
   ## Uncomment and replace with your own values if you did not define  
   ## these variables a previous step.
   #framework = 'pytorch'
   #framework_version = '1.7.1'
   
   # Note: you can use any CPU-based instance here, 
   # this is just to set the arch as CPU for the Docker image
   instance_type = 'ml.m5.2xlarge' 
   
   image_uri = image_uris.retrieve(framework, 
                                   region, 
                                   version=framework_version, 
                                   py_version='py3', 
                                   instance_type=instance_type, 
                                   image_scope='inference')
   ```

   Para ver una lista de las instancias de SageMaker IA disponibles, consulta los [precios de Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/).

1. **Cree un archivo de carga útil de ejemplo.**

   Cree un archivo que contenga archivos individuales que la herramienta de pruebas de carga pueda enviar a sus puntos finales de SageMaker IA. El código de inferencia debe poder leer los formatos de archivo de la carga útil de muestra.

   A continuación, se descarga una imagen en formato.jpg que en este ejemplo se utiliza en un paso posterior para el modelo ResNet -18.

   ```
   !wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
   ```

   Comprima la carga útil de muestra como un archivo tar:

   ```
   !tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
   ```

   Cargue la carga útil de muestra en Amazon S3 y anote el URI de Amazon S3:

   ```
   !aws s3 cp payload.tar.gz s3://{bucket}/models/
   ```

   Necesitará la URI de Amazon S3 en un paso posterior, así que guárdela en una variable:

   ```
   bucket_prefix='models'
   bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
   payload_s3_key = f"{bucket_prefix}/payload.tar.gz"
   sample_payload_url= f"s3://{bucket}/{payload_s3_key}"
   ```

1. **Preparar la entrada del modelo para el trabajo de recomendaciones**

   Para el último requisito previo, tiene dos opciones para preparar la entrada del modelo. Puede registrar su modelo en Model Registry, que puede utilizar para catalogar modelos para su producción, o puede crear un modelo de SageMaker IA y especificarlo en el `ContainerConfig` campo al crear un trabajo de recomendaciones. SageMaker La primera opción es la mejor si quiere aprovechar las funciones que ofrece el [registro de modelos](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html), como la gestión de las versiones de los modelos y la automatización de la implementación de los modelos. La segunda opción es ideal si desea comenzar rápidamente. Para la primera opción, vaya al paso 7. Para la segunda opción, omita el paso 7 y vaya al paso 8.

1. **Opción 1: Registrar el modelo en el registro de modelos**

   Con SageMaker Model Registry, puede catalogar modelos para su producción, administrar las versiones de los modelos, asociar metadatos (como las métricas de entrenamiento) a un modelo, administrar el estado de aprobación de un modelo, implementar modelos en producción y automatizar el despliegue del modelo con CI/CD.

   Cuando usa SageMaker Model Registry para rastrear y administrar sus modelos, se representan como un paquete de modelos versionado dentro de los grupos de paquetes de modelos. Los paquetes de modelos sin control de versiones no forman parte de un grupo de modelos. Los grupos de paquetes de modelos contienen múltiples versiones o iteraciones de un modelo. Si bien no es necesario crearlos para todos los modelos del registro, ayudan a organizar varios modelos que tienen el mismo propósito y proporcionan un control de versiones automático.

   Para utilizar Amazon SageMaker Inference Recommender, debe tener un paquete de modelos versionado. Puede crear un paquete de modelos versionados mediante programación con o AWS SDK para Python (Boto3) con Amazon SageMaker Studio Classic. Para crear un paquete de modelos versionados mediante programación, primero cree un grupo de paquetes de modelos con la API `CreateModelPackageGroup`. A continuación, cree un paquete de modelos mediante la API `CreateModelPackage`. Al llamar a este método, se crea un paquete de modelos versionado.

   Consulte [Cree un grupo de modelos](model-registry-model-group.md) y [Registro de una versión del modelo](model-registry-version.md) para obtener instrucciones detalladas sobre cómo crear de forma programática e interactiva un grupo de paquetes modelo y cómo crear un paquete modelo versionado, respectivamente, con Amazon Studio Classic y AWS SDK para Python (Boto3) Amazon Studio. SageMaker 

   En el siguiente ejemplo de código se muestra cómo crear un paquete de modelos versionados mediante el AWS SDK para Python (Boto3).
**nota**  
No es necesario aprobar el paquete de modelos para crear un trabajo de recomendación de inferencias.

   1. **Crear un grupo de paquetes de modelos**

      Cree un grupo de paquetes de modelos con la API `CreateModelPackageGroup`. Asigne un nombre al grupo de paquetes de modelos para el `ModelPackageGroupName` y, si lo desea, proporcione una descripción del paquete de modelos en el campo `ModelPackageGroupDescription`.

      ```
      model_package_group_name = '<INSERT>'
      model_package_group_description = '<INSERT>' 
      
      model_package_group_input_dict = {
       "ModelPackageGroupName" : model_package_group_name,
       "ModelPackageGroupDescription" : model_package_group_description,
      }
      
      model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)
      ```

      Consulta la [Guía de referencia de las SageMaker API de Amazon](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) para obtener una lista completa de los argumentos opcionales y obligatorios a los que puedes pasárselos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html).

      Cree un paquete de modelos especificando una imagen de Docker que ejecute el código de inferencia y la ubicación en Amazon S3 de los artefactos del modelo y proporcione valores para `InferenceSpecification`. `InferenceSpecification` debe contener información sobre los trabajos de inferencia que se pueden ejecutar con modelos basados en este paquete de modelos, incluida la siguiente:
      + Las rutas de imágenes de Amazon ECR que ejecutan el código de inferencia.
      + (Opcional) Los tipos de instancia que admite el paquete de modelos para los trabajos de transformación y los puntos de conexión en tiempo real que se utilizan para la inferencia.
      + Los formatos de contenido de entrada y salida que el paquete de modelos admite para la inferencia.

      Además, debe especificar los siguientes parámetros al crear un paquete de modelos:
      + [Dominio](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Domain): el dominio de machine learning del paquete de modelos y sus componentes. Los dominios comunes de machine learning incluyen la visión artificial y el procesamiento del lenguaje natural.
      + [Tarea](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task)\$1 la tarea de machine learning que realiza el paquete de modelos. Las tareas comunes de machine learning incluyen la detección de objetos y la clasificación de imágenes. Especifique “OTHER” (OTRAS) si ninguna de las tareas enumeradas en la [Guía de referencia de API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) satisface su caso de uso. Consulte las descripciones de los campos de la API de [tareas](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task) para obtener una lista de las tareas de machine learning compatibles.
      + [SamplePayloadUrl](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-SamplePayloadUrl): La ruta del Amazon Simple Storage Service (Amazon S3) donde se almacena la carga útil de muestra. Esta ruta debe apuntar a un único archivo TAR comprimido con GZIP (sufijo .tar.gz).
      + [Framework](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-Framework): el marco de machine learning de la imagen de contenedor del paquete modelo.
      + [FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-FrameworkVersion): La versión marco de la imagen del contenedor del paquete modelo.

      Si proporciona una lista de tipos de instancias permitidos para generar inferencias en tiempo real [SupportedRealtimeInferenceInstanceTypes](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InferenceSpecification.html#sagemaker-Type-InferenceSpecification-SupportedRealtimeInferenceInstanceTypes), Inference Recommender limita el espacio de búsqueda para los tipos de instancias durante un trabajo. `Default` Use este parámetro si tiene limitaciones presupuestarias o si sabe que hay un conjunto específico de tipos de instancias compatibles con su imagen de modelo y contenedor.

      En un paso anterior, descargamos un modelo ResNet 18 previamente entrenado y lo almacenamos en un bucket de Amazon S3 en un directorio llamado`models`. Recuperamos una imagen de inferencia de Deep Learning Container PyTorch (versión 1.7.1) y almacenamos el URI en una variable llamada. `image_uri` Use esas variables en el siguiente ejemplo de código para definir un diccionario que se usa como entrada a la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html).

      ```
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      # Similar open source model to the packaged model
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input.
      input_content_type='image/jpeg'
      
      
      # Optional - provide a description of your model.
      model_package_description = '<INSERT>'
      
      ## Uncomment if you did not store the domain and task in an earlier
      ## step 
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version
      ## in a previous step.
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating a model pacakge group
      model_package_input_dict = {
              "ModelPackageGroupName" : model_package_group_name,
              "ModelPackageDescription" : model_package_description,
              "Domain": ml_domain,
              "Task": ml_task,
              "SamplePayloadUrl": sample_payload_url,
              "InferenceSpecification": {
                      "Containers": [
                          {
                              "Image": image_uri,
                              "ModelDataUrl": model_url,
                              "Framework": framework.upper(), 
                              "FrameworkVersion": framework_version,
                              "NearestModelName": nearest_model_name,
                              "ModelInput": {"DataInputConfig": data_input_configuration}
                          }
                          ],
                      "SupportedContentTypes": [input_content_type]
              }
          }
      ```

   1. **Creación de un paquete de modelos**

      Utilice la API `CreateModelPackage` para crear un paquete de modelos. Pase el diccionario de entrada definido en el paso anterior:

      ```
      model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
      ```

      Necesita el ARN del paquete modelo para utilizar Amazon SageMaker Inference Recommender. Tenga en cuenta el ARN del paquete del modelo o almacénelo en una variable:

      ```
      model_package_arn = model_package_response["ModelPackageArn"]
      
      print('ModelPackage Version ARN : {}'.format(model_package_arn))
      ```

1. **Opción 2: Crear un modelo y configurar el campo `ContainerConfig`**

   Utilice esta opción si desea iniciar un trabajo de recomendaciones de inferencia y no necesita registrar su modelo en el registro de modelos. En los siguientes pasos, creará un modelo en SageMaker IA y configurará el `ContainerConfig` campo como entrada para el trabajo de recomendaciones.

   1. **Crear un modelo**

      Cree un modelo con la API `CreateModel`. Para ver un ejemplo en el que se utiliza este método al implementar un modelo en SageMaker AI Hosting, consulte [Create a Model (AWS SDK para Python (Boto3))](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html#realtime-endpoints-deployment-create-model).

      En un paso anterior, descargamos un modelo ResNet 18 previamente entrenado y lo almacenamos en un bucket de Amazon S3 en un directorio llamado`models`. Recuperamos una imagen de inferencia de Deep Learning Container PyTorch (versión 1.7.1) y almacenamos el URI en una variable llamada. `image_uri` Usamos esas variables en el siguiente ejemplo de código, donde definimos un diccionario que se usa como entrada a la API `[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ModelName)`.

      ```
      model_name = '<name_of_the_model>'
      # Role to give SageMaker permission to access AWS services.
      sagemaker_role= "arn:aws:iam::<region>:<account>:role/*"
      
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      #Create model
      create_model_response = sagemaker_client.create_model(
          ModelName = model_name,
          ExecutionRoleArn = sagemaker_role, 
          PrimaryContainer = {
              'Image': image_uri,
              'ModelDataUrl': model_url,
          })
      ```

   1. **Configure el campo `ContainerConfig`**

      A continuación, debe configurar el [ContainerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobInputConfig.html#sagemaker-Type-RecommendationJobInputConfig-ContainerConfig)campo con el modelo que acaba de crear y especificar en él los siguientes parámetros:
      + `Domain`: el dominio de machine learning del modelo y sus componentes, como la visión artificial o el procesamiento del lenguaje natural.
      + `Task`: la tarea de machine learning que realiza el modelo, como la clasificación de imágenes o la detección de objetos.
      + `PayloadConfig`: la configuración de la carga útil de un trabajo recomendado. Para obtener más información acerca de los campos, consulte `[RecommendationJobPayloadConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobPayloadConfig.html#sagemaker-Type-RecommendationJobPayloadConfig-SamplePayloadUrl)`.
      + `Framework`: El marco de aprendizaje automático de la imagen del contenedor, como PyTorch.
      + `FrameworkVersion`: la versión del marco de la imagen del contenedor.
      + (Opcional) `SupportedInstanceTypes`: una lista de los tipos de instancias que se utilizan para generar inferencias en tiempo real.

      Si utiliza el parámetro `SupportedInstanceTypes`, el Recomendador de inferencias limita el espacio de búsqueda para los tipos de instancias durante un trabajo `Default`. Use este parámetro si tiene limitaciones presupuestarias o si sabe que hay un conjunto específico de tipos de instancias compatibles con su imagen de modelo y contenedor.

      En el siguiente ejemplo de código, utilizamos los parámetros previamente definidos junto con `NearestModelName`, para definir un diccionario que se utiliza como entrada en la API `[CreateInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html)`.

      ```
      ## Uncomment if you did not store the domain and task in a previous step
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version in a previous step
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input
      input_content_type='image/jpeg'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating an inference recommendation job
      container_config = {
              "Domain": ml_domain,
              "Framework": framework.upper(), 
              "FrameworkVersion": framework_version,
              "NearestModelName": nearest_model_name,
              "PayloadConfig": { 
                  "SamplePayloadUrl": sample_payload_url,
                  "SupportedContentTypes": [ input_content_type ]
               },
              "DataInputConfig": data_input_configuration
              "Task": ml_task,
              }
      ```

# Trabajos de recomendación con Amazon SageMaker Inference Recommender
<a name="inference-recommender-recommendation-jobs"></a>

Amazon SageMaker Inference Recommender puede realizar dos tipos de recomendaciones:

1. Las recomendaciones de inferencia (tipo de trabajo `Default`) ejecutan un conjunto de pruebas de carga en los tipos de instancias recomendados. También puede realizar una prueba de carga para un punto de conexión sin servidor. Solo necesita proporcionar un paquete modelo de nombre de recurso de Amazon (ARN) para lanzar este tipo de trabajo de recomendación. Los trabajos de recomendación de inferencia se completan en 45 minutos.

1. Las recomendaciones de puntos de conexión (tipo de trabajo `Advanced`) se basan en una prueba de carga personalizada en la que se seleccionan las instancias de ML deseadas o un punto de conexión sin servidor, se proporciona un patrón de tráfico personalizado y se especifican los requisitos de latencia y rendimiento en función de los requisitos de producción. Este trabajo tarda una media de 2 horas en completarse, en función de la duración del trabajo establecida y del número total de configuraciones de inferencia probadas.

Ambos tipos de recomendaciones utilizan lo mismo APIs para crear, describir y detener trabajos. El resultado es una lista de recomendaciones de configuración de instancias con variables de entorno, costes, rendimiento y métricas de latencia asociadas. Los trabajos de recomendación también proporcionan un número inicial de instancias, que puede usar para configurar una política de escalado automático. Para diferenciar entre los dos tipos de trabajos, cuando cree un trabajo a través de la consola de IA o la consola de SageMaker IA APIs, especifique si desea `Default` crear recomendaciones preliminares de puntos finales y `Advanced` realizar pruebas de carga y recomendaciones de puntos finales personalizadas.

**nota**  
No necesita realizar ambos tipos de trabajos de recomendación en su propio flujo de trabajo. Puede hacer cualquiera de las dos cosas de forma independiente.

El Recomendador de inferencias también puede proporcionarle una lista de posibles instancias o los cinco tipos de instancias principales optimizados en términos de costes, rendimiento y latencia para la implementación del modelo, junto con una puntuación de confianza. Puede elegir estas instancias al implementar su modelo. El Recomendador de inferencias realiza automáticamente una evaluación comparativa con su modelo para que usted pueda proporcionar las posibles instancias. Como se trata de recomendaciones preliminares, le recomendamos que ejecute más trabajos de recomendación de instancias para obtener resultados más precisos. Para ver los posibles casos, visita la página de detalles de tu modelo de SageMaker IA. Para obtener más información, consulte [Obtener posibles instancias instantáneas](inference-recommender-prospective.md).

**Topics**
+ [Obtener posibles instancias instantáneas](inference-recommender-prospective.md)
+ [Recomendaciones de inferencia](inference-recommender-instance-recommendation.md)
+ [Obtener una recomendación de inferencia para un punto de conexión existente](inference-recommender-existing-endpoint.md)
+ [Detener la recomendación de inferencia](instance-recommendation-stop.md)
+ [Recomendaciones compiladas con Neo](inference-recommender-neo-compilation.md)
+ [Resultados de recomendaciones](inference-recommender-interpret-results.md)
+ [Obtener recomendaciones de políticas de escalado automático](inference-recommender-autoscaling.md)
+ [Ejecutar una prueba de carga personalizada](inference-recommender-load-test.md)
+ [Detener la prueba de carga](load-test-stop.md)
+ [Solucionar los errores del Recomendador de inferencias](inference-recommender-troubleshooting.md)

# Obtener posibles instancias instantáneas
<a name="inference-recommender-prospective"></a>

Inference Recommender también puede proporcionarle una lista de *posibles instancias, o tipos de instancias* que podrían ser adecuados para su modelo, en la página de detalles de su modelo de SageMaker IA. El Recomendador de inferencias realiza automáticamente una evaluación comparativa preliminar con su modelo para proporcionarle las cinco instancias más probables. Como se trata de recomendaciones preliminares, le recomendamos que ejecute más trabajos de recomendación de instancias para obtener resultados más precisos.

Puede ver una lista de posibles instancias para su modelo mediante programación mediante la [DescribeModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeModel.html)API, el SDK de SageMaker Python o la consola de SageMaker IA.

**nota**  
No obtendrás instancias prospectivas para los modelos que creaste en SageMaker IA antes de que esta función estuviera disponible.

Para ver las posibles instancias del modelo a través de la consola, haga lo siguiente:

1. Ve a la SageMaker consola en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación, elija **Inferencia** y a continuación elija **Modelos**.

1. En la lista de modelos, elija su modelo.

En la página de detalles de su modelo, vaya a la sección **Instancias prospectivas para implementar el modelo**. En la siguiente captura de pantalla se muestra esta sección.

![\[Captura de pantalla de la lista de instancias prospectivas en la página de detalles del modelo.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inf-rec-prospective.png)


En esta sección, puede ver las posibles instancias optimizadas en cuanto a coste, rendimiento y latencia para la implementación del modelo, junto con información adicional para cada tipo de instancia, como el tamaño de la memoria, el número de CPU y GPU y el coste por hora.

Si decide comparar una carga útil de muestra y ejecutar un trabajo de recomendación de inferencia completo para su modelo, puede iniciar un trabajo de recomendación de inferencia predeterminado desde esta página. Para iniciar un trabajo predeterminado a través de la consola, haga lo siguiente:

1. En la página de detalles del modelo, en la **sección Prospective instances to deploy model (Instancias prospectivas para implementar el modelo)**, elija **Run Inference recommender job (Ejecutar el trabajo de recomendación de inferencias)**.

1. En el cuadro de diálogo que aparece, para **bucket S3 para la carga útil de evaluación comparativa**, introduzca la ubicación de Amazon S3 en la que ha almacenado una carga útil de muestra para su modelo.

1. Para **Payload content type (Tipo de contenido de carga útil)**, introduzca los tipos MIME de los datos de carga útil.

1. (Opcional) En la sección **Compilación de modelos con SageMaker Neo**, para la **configuración de entrada de datos**, introduzca una forma de datos en formato de diccionario.

1. Elija **Ejecutar trabajo**.

El Recomendador de Inferencias inicia el trabajo y puede ver el trabajo y sus resultados en la página de lista de **recomendadores de inferencias** de la consola de IA. SageMaker 

Si desea ejecutar un trabajo avanzado y realizar pruebas de carga personalizadas, o si desea configurar ajustes y parámetros adicionales para su trabajo, consulte [Ejecutar una prueba de carga personalizada](inference-recommender-load-test.md).

# Recomendaciones de inferencia
<a name="inference-recommender-instance-recommendation"></a>

Los trabajos de recomendación de inferencias ejecutan un conjunto de pruebas de carga en los tipos de instancias recomendados o en un punto de conexión sin servidor. Los trabajos de recomendación de inferencia utilizan métricas de rendimiento que se basan en pruebas de carga que utilizan los datos de muestra que proporcionaste durante el registro de la versión del modelo.

**nota**  
Antes de crear un trabajo de recomendación de Recomendador de inferencias, asegúrese de haber cumplido con los [Requisitos previos para usar Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md).

A continuación, se muestra cómo utilizar Amazon SageMaker Inference Recommender para crear una recomendación de inferencia basada en el tipo de modelo mediante AWS SDK para Python (Boto3),, Amazon SageMaker Studio Classic AWS CLI y la consola AI. SageMaker 

**Topics**
+ [Crear una recomendación de inferencia](instance-recommendation-create.md)
+ [Obtener resultados de trabajo de recomendación de inferencia](instance-recommendation-results.md)

# Crear una recomendación de inferencia
<a name="instance-recommendation-create"></a>

Cree una recomendación de inferencia mediante programación mediante la consola AWS SDK para Python (Boto3) o la consola AI AWS CLI, o de forma interactiva con Studio Classic o la consola de IA. SageMaker **Especifique un nombre de trabajo para su recomendación de inferencia, un ARN de rol de AWS IAM, una configuración de entrada y un ARN del paquete de modelos cuando registró el modelo en el registro del modelo, o el nombre del modelo y un `ContainerConfig` diccionario de cuando creó el modelo en la sección Requisitos previos.**

------
#### [ AWS SDK para Python (Boto3) ]

Utilice la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) para iniciar un trabajo de recomendación de inferencias. Defina el campo `JobType` como `'Default'` para los trabajos de recomendación de inferencias. Además, facilite lo siguiente:
+ Nombre de recurso de Amazon (ARN) de un rol de IAM que habilita el Recomendador de inferencias para realizar tareas en su nombre. Defina esto para el campo `RoleArn`.
+ Un RN de paquete de modelos o nombre de modelo. El Recomendador de inferencias admite un ARN de paquetes de modelos o un nombre de modelo como entrada. Especifique uno de los siguientes valores:
  + El ARN del paquete de modelos versionados que creó al registrar su modelo en el registro de modelos SageMaker AI. Defina esto para `ModelPackageVersionArn` en el campo `InputConfig`.
  + El nombre del modelo que creó. Defina esto para `ModelName` en el campo `InputConfig`. Además, proporcione el diccionario `ContainerConfig`, que incluye los campos obligatorios que deben proporcionarse con el nombre del modelo. Defina esto para `ContainerConfig` en el campo `InputConfig`. En `ContainerConfig`, también puede especificar opcionalmente el campo `SupportedEndpointType` como `RealTime` o`Serverless`. Si especifica este campo, el Recomendador de inferencias devolverá recomendaciones únicamente para ese tipo de punto de conexión. Si no especifica este campo, el Recomendador de inferencias devuelve recomendaciones para ambos tipos de puntos de conexión.
+ Un nombre para su trabajo de recomendación del Recomendador de inferencias para el campo `JobName`. El nombre del puesto de Recomendador de Inferencias debe ser único en la AWS región y en su cuenta. AWS 

Importe el AWS SDK para Python (Boto3) paquete y cree un objeto de cliente de SageMaker IA utilizando la clase de cliente. Si ha seguido los pasos de la sección **Requisitos previos**, especifique solo uno de los siguientes:
+ Opción 1: si desea crear un trabajo de recomendaciones de inferencia con un ARN de paquete de modelos, almacene el ARN del grupo de paquetes de modelos en una variable denominada `model_package_arn`.
+ Opción 2: si desea crear un trabajo de recomendaciones de inferencia con un nombre de modelo y `ContainerConfig`, almacene el nombre del modelo en una variable denominada `model_name` y el `ContainerConfig` diccionario en una variable denominada `container_config`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<INSERT>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide only one of model package ARN or model name, not both.
# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<INSERT>'
## Uncomment if you would like to create an inference recommendations job with a
## model name instead of a model package ARN, and comment out model_package_arn above
## Provide your model name
# model_name = '<INSERT>'
## Provide your container config 
# container_config = '<INSERT>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<INSERT>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = 'arn:aws:iam::<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    # Provide only one of model package ARN or model name, not both. 
    # If you would like to create an inference recommendations job with a model name,
    # uncomment ModelName and ContainerConfig, and comment out ModelPackageVersionArn.
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn
        # 'ModelName': model_name,
        # 'ContainerConfig': container_config
    }
)
```

Consulta la [Guía de referencia de las SageMaker API de Amazon](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) para obtener una lista completa de los argumentos opcionales y obligatorios a los que puedes pasárselos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html).

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

Utilice la API `create-inference-recommendations-job` para iniciar un trabajo de recomendación de inferencias. Defina el campo `job-type` como `'Default'` para los trabajos de recomendación de inferencias. Además, facilite lo siguiente:
+ El nombre de recurso de Amazon (ARN) de un rol de IAM que permite a Amazon SageMaker Inference Recommender realizar tareas en su nombre. Defina esto para el campo `role-arn`.
+ Un RN de paquete de modelos o nombre de modelo. El Recomendador de inferencias admite un ARN de paquetes de modelos o un nombre de modelo como entrada. Especifique uno de los siguientes valores:
  + El ARN del paquete de modelos versionados que creó al registrar su modelo en el registro de modelos. Defina esto para `ModelPackageVersionArn` en el campo `input-config`.
  + El nombre del modelo que creó. Defina esto para `ModelName` en el campo `input-config`. Además, proporcione el diccionario `ContainerConfig` que incluye los campos obligatorios que deben proporcionarse con el nombre del modelo. Defina esto para `ContainerConfig` en el campo `input-config`. En `ContainerConfig`, también puede especificar opcionalmente el campo `SupportedEndpointType` como `RealTime` o`Serverless`. Si especifica este campo, el Recomendador de inferencias devolverá recomendaciones únicamente para ese tipo de punto de conexión. Si no especifica este campo, el Recomendador de inferencias devuelve recomendaciones para ambos tipos de puntos de conexión.
+ Un nombre para su trabajo de recomendación del Recomendador de inferencias para el campo `job-name`. El nombre del puesto de Recomendador de Inferencias debe ser único en la AWS región y en su cuenta. AWS 

Para crear trabajos de recomendación de inferencia con un ARN de paquete de modelos, utilice el siguiente ejemplo:

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        }"
```

Para crear un trabajo de recomendación de inferencia con un nombre de modelo y `ContainerConfig`, utilice el siguiente ejemplo. El ejemplo usa el campo `SupportedEndpointType` para especificar que solo queremos devolver recomendaciones de inferencia en tiempo real:

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelName\": \"model-name\",
        \"ContainerConfig\" : {
                \"Domain\": \"COMPUTER_VISION\",
                \"Framework\": \"PYTORCH\",
                \"FrameworkVersion\": \"1.7.1\",
                \"NearestModelName\": \"resnet18\",
                \"PayloadConfig\": 
                    {
                        \"SamplePayloadUrl\": \"s3://{bucket}/{payload_s3_key}\", 
                        \"SupportedContentTypes\": [\"image/jpeg\"]
                    },
                \"SupportedEndpointType\": \"RealTime\",
                \"DataInputConfig\": \"[[1,3,256,256]]\",
                \"Task\": \"IMAGE_CLASSIFICATION\",
            },
        }"
```

------
#### [ Amazon SageMaker Studio Classic ]

Cree un trabajo de recomendación de inferencias en Studio Classic.

1. En la aplicación de Studio Classic, elija el icono de inicio (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/studio/icons/house.png)).

1. En la barra lateral izquierda de Studio Classic, elija **Modelos**.

1. Seleccione **Model Registry (Registro de modelos)** en la lista desplegable para ver los modelos que ha registrado en el registro de modelos.

   El panel izquierdo muestra una lista de grupos de modelos. La lista incluye todos los grupos de modelos registrados en el registro de modelos de su cuenta, incluidos los modelos registrados fuera de Studio Classic.

1. Seleccione el nombre del grupo de modelos. Al seleccionar el grupo de modelos, el panel derecho de Studio Classic muestra los encabezados de las columnas, como **Versiones** y **Configuración**.

   Si tiene uno o más paquetes de modelos en su grupo de modelos, verá una lista de esos paquetes de modelos en la columna **Versiones**.

1. Elija la columna **Recomendador de inferencias**.

1. Elija un rol de IAM que conceda permiso al Recomendador de Inferencias para acceder a los servicios. AWS Para ello, puede crear un rol y asociar la política administrada por IAM de `AmazonSageMakerFullAccess` para lograrlo. O bien, puede dejar que Studio Classic cree un rol por usted.

1. Elija **Obtener recomendaciones**.

   La recomendación de inferencia puede tardar hasta 45 minutos.
**aviso**  
No cierre esta pestaña. Si cierra esta pestaña, se cancela el trabajo de recomendación de instancias.

------
#### [ SageMaker AI console ]

Cree un trabajo de recomendación de instancias a través de la consola de SageMaker IA de la siguiente manera:

1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, elija **Crear trabajo**.

1. Para **Step 1: Model configuration (Paso 1: Configuración del modelo)**, haga lo siguiente:

   1. En **Job Type (Tipo de trabajo)**, seleccione **Default recommender job (Trabajo de recomendador predeterminado)**.

   1. Si utilizas un modelo registrado en el registro de modelos de SageMaker IA, activa la **opción Elegir un modelo del registro** de modelos y haz lo siguiente:

      1. En la lista desplegable **Grupo de modelos**, selecciona el grupo de modelos en el registro de modelos de SageMaker IA en el que se encuentra tu modelo.

      1. En la lista desplegable de **Model version (versión del modelo)**, elija la versión que desee del modelo.

   1. Si utilizas un modelo que has creado en SageMaker IA, desactiva la **opción Elegir un modelo del registro de modelos y haz** lo siguiente:

      1. En el campo **Nombre del modelo**, introduce el nombre de tu modelo de SageMaker IA.

   1. En la lista desplegable de **funciones de IAM**, puede seleccionar una función de AWS IAM existente que tenga los permisos necesarios para crear un trabajo de recomendación de instancias. Como alternativa, si no tienes un rol existente, puedes elegir **Crear un nuevo rol** para abrir la ventana emergente de creación del rol y SageMaker AI añadirá los permisos necesarios al nuevo rol que crees.

   1. Para **Bucket S3 para la evaluación comparativa de la carga útil**, introduzca la ruta de Amazon S3 al archivo de carga útil de muestra, que debe contener los archivos de carga útil de muestra que el Recomendador de inferencias utiliza para comparar su modelo en diferentes tipos de instancias.

   1. Para **Payload content type (Tipo de contenido de carga útil)**, introduzca los tipos MIME de los datos de carga útil de muestra.

   1. (Opcional) Si has desactivado la **opción Elegir un modelo del registro de modelos y has** especificado un modelo de SageMaker IA, en la **configuración del contenedor**, haz lo siguiente:

      1. En la lista desplegable **Domain (Dominio)**, seleccione el dominio de machine learning del modelo, como visión artificial, procesamiento del lenguaje natural o machine learning.

      1. En la lista desplegable **Framework**, selecciona el framework de tu contenedor, por ejemplo, o. TensorFlow XGBoost

      1. Para **Framework version (Versión de marco)**, introduzca la versión de marco de la image de contenedor.

      1. En la lista desplegable **Nearest model name (Nombre del modelo más cercano)**, seleccione el modelo previamente entrenado que más se parezca al suyo.

      1. En la lista desplegable **Task (Tarea)**, seleccione la tarea de machine learning que realiza el modelo, como la clasificación de imágenes o la regresión.

   1. (Opcional) Para la **compilación de modelos con SageMaker Neo**, puede configurar el trabajo de recomendación para un modelo que haya compilado con SageMaker Neo. Para **Data input configuration (Configuración de la entrada de datos)**, introduzca la forma de datos de entrada correcta para el modelo en un formato similar a `{'input':[1,1024,1024,3]}`.

   1. Elija **Siguiente**.

1. Para **Step 2: Instances and environment parameters (Paso 2: Instancias y parámetros del entorno)**, haga lo siguiente:

   1. (Opcional) Para **Select instances for benchmarking (Seleccionar instancias para la evaluación comparativa)**, puede seleccionar hasta 8 tipos de instancias que desee comparar. Si no selecciona ninguna instancia, el Recomendador de inferencias considerará todos los tipos de instancias.

   1. Elija **Siguiente**.

1. En **Step 3: Job parameters (Paso 3: Parámetros de trabajo)**, haga lo siguiente:

   1. (Opcional) Pâra el campo **Job name (Nombre del trabajo)**, introduzca un nombre para su trabajo de recomendación de instancia. Al crear el trabajo, SageMaker AI añade una marca de tiempo al final de este nombre.

   1. (Opcional) âra el campo **Job description (Descripción de trabajo)**, introduzca una descripción para el trabajo.

   1. (Opcional) En la lista desplegable de **claves de cifrado**, elija una AWS KMS clave por su nombre o introduzca su ARN para cifrar los datos.

   1. (Opcional) Para **Max test duration (s) (Duración máxima (s) de prueba)**, introduzca el número máximo de segundos durante los que quiere que se realice cada prueba.

   1. (Opcional) Para **Max invocations per minute (Máximo de invocaciones por minuto)**, introduzva el número máximo de solicitudes por minuto al que puede llegar el punto de conexión antes de detener el trabajo de recomendación. Una vez alcanzado este límite, la SageMaker IA finaliza el trabajo.

   1. (Opcional) Para **P99 Model latency threshold (ms) (Umbral de latencia del modelo P99 (ms))**, introduzca el percentil de latencia del modelo en milisegundos.

   1. Elija **Siguiente**.

1. **Para **Step 4: Review job (Paso 4: Revisar trabajo)**, revise las configuraciones y, a continuación, seleccione Submit (Enviar)**.

------

# Obtener resultados de trabajo de recomendación de inferencia
<a name="instance-recommendation-results"></a>

Recopile los resultados de su trabajo de recomendación de inferencias mediante programación con AWS SDK para Python (Boto3) Studio Classic o la AWS CLI SageMaker consola de IA.

------
#### [ AWS SDK para Python (Boto3) ]

Una vez completada la recomendación de inferencia, puede utilizar `DescribeInferenceRecommendationsJob` para obtener los detalles y las recomendaciones del trabajo. Proporcione el nombre del trabajo que utilizó al crear el trabajo de recomendación de inferencia.

```
job_name='<INSERT>'
response = sagemaker_client.describe_inference_recommendations_job(
                    JobName=job_name)
```

Imprima el objeto de respuesta. En el ejemplo de código anterior, se almacenaba la respuesta en una variable llamada `response`.

```
print(response['Status'])
```

Este ejemplo devuelve una respuesta de JSON similar a la siguiente: Tenga en cuenta que este ejemplo muestra los tipos de instancias recomendados para la inferencia en tiempo real (para ver un ejemplo que muestra recomendaciones de inferencia sin servidor, consulte el ejemplo siguiente).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

Las primeras líneas proporcionan información sobre el trabajo de recomendación de inferencia en sí. Esto incluye el nombre del trabajo, el ARN del rol y los tiempos de creación y eliminación. 

El diccionario `InferenceRecommendations` contiene una lista de recomendaciones de inferencias del Recomendador de Inferencias.

El diccionario `EndpointConfiguration` anidado contiene la recomendación del tipo de instancia (`InstanceType`) junto con el punto final y el nombre de la variante (un modelo de aprendizaje AWS automático implementado) que se utilizó durante el trabajo de recomendación. Puedes usar el punto de enlace y el nombre de la variante para monitorizar en Amazon CloudWatch Events. Para obtener más información, consulte [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md).

El diccionario `Metrics` anidado contiene información sobre el coste estimado por hora (`CostPerHour`) de su terminal en tiempo real en dólares estadounidenses, el coste estimado por inferencia (`CostPerInference`) en dólares estadounidenses para su punto final en tiempo real, el número máximo previsto de `InvokeEndpoint` solicitudes por minuto enviadas al punto final (`MaxInvocations`) y la latencia del modelo (`ModelLatency`), que es el intervalo de tiempo (en microsegundos) que tarda su modelo en responder a la IA. SageMaker La latencia del modelo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor de un modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

El siguiente ejemplo muestra la parte `InferenceRecommendations` de la respuesta de un trabajo de recomendaciones de inferencia configurado para devolver recomendaciones de inferencia sin servidor:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

Puede interpretar las recomendaciones para la inferencia sin servidor de forma similar a los resultados para la inferencia en tiempo real, con la excepción de `ServerlessConfig`, que indica las métricas devueltas para un punto de conexión sin servidor, con `MemorySizeInMB` proporcionado y cuando `MaxConcurrency = 1`. Para aumentar el rendimiento posible en el punto de conexión, aumente el valor de `MaxConcurrency` linealmente. Por ejemplo, si la recomendación de inferencia muestra `MaxInvocations` como `1000`, aumentar `MaxConcurrency` a `2` admitiría 2000 `MaxInvocations`. Tenga en cuenta que esto solo es cierto hasta cierto punto, que puede variar según el modelo y el código. Las recomendaciones sin servidor también miden la métrica `ModelSetupTime`, que mide (en microsegundos) el tiempo que se tarda en lanzar los recursos informáticos en un punto de conexión sin servidor. Para obtener más información sobre la configuración de los puntos de conexión sin servidor, consulte la documentación de Inferencia [sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

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

Una vez completada la recomendación de inferencia, puede utilizar `describe-inference-recommendations-job` para obtener los detalles del trabajo y los tipos de instancias recomendados. Proporcione el nombre del trabajo que utilizó al crear el trabajo de recomendación de inferencia.

```
aws sagemaker describe-inference-recommendations-job\
    --job-name <job-name>\
    --region <aws-region>
```

La respuesta de JSON debe ser similar a la del siguiente ejemplo: Tenga en cuenta que este ejemplo muestra los tipos de instancias recomendados para la inferencia en tiempo real (para ver un ejemplo que muestra recomendaciones de inferencia sin servidor, consulte el ejemplo siguiente).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

Las primeras líneas proporcionan información sobre el trabajo de recomendación de inferencia en sí. Esto incluye el nombre del trabajo, el ARN del rol y la hora de creación y eliminación. 

El diccionario `InferenceRecommendations` contiene una lista de recomendaciones de inferencias del Recomendador de Inferencias.

El diccionario `EndpointConfiguration` anidado contiene la recomendación de tipo de instancia (`InstanceType`) junto con el punto final y el nombre de la variante (un modelo de aprendizaje AWS automático implementado) utilizado durante el trabajo de recomendación. Puedes usar el punto de enlace y el nombre de la variante para monitorizar en Amazon CloudWatch Events. Para obtener más información, consulte [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md).

El diccionario `Metrics` anidado contiene información sobre el coste estimado por hora (`CostPerHour`) de su terminal en tiempo real en dólares estadounidenses, el coste estimado por inferencia (`CostPerInference`) en dólares estadounidenses para su punto final en tiempo real, el número máximo esperado de `InvokeEndpoint` solicitudes por minuto enviadas al punto final (`MaxInvocations`) y la latencia del modelo (`ModelLatency`), que es el intervalo de tiempo (en milisegundos) que el modelo tardó en responder a SageMaker la IA. La latencia del modelo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor de un modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

El siguiente ejemplo muestra la parte `InferenceRecommendations` de la respuesta de un trabajo de recomendaciones de inferencia configurado para devolver recomendaciones de inferencia sin servidor:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

Puede interpretar las recomendaciones para la inferencia sin servidor de forma similar a los resultados para la inferencia en tiempo real, con la excepción de `ServerlessConfig`, que indica las métricas devueltas para un punto de conexión sin servidor, con `MemorySizeInMB` proporcionado y cuando `MaxConcurrency = 1`. Para aumentar el rendimiento posible en el punto de conexión, aumente el valor de `MaxConcurrency` linealmente. Por ejemplo, si la recomendación de inferencia muestra `MaxInvocations` como `1000`, aumentar `MaxConcurrency` a `2` admitiría 2000 `MaxInvocations`. Tenga en cuenta que esto solo es cierto hasta cierto punto, que puede variar según el modelo y el código. Las recomendaciones sin servidor también miden la métrica `ModelSetupTime`, que mide (en microsegundos) el tiempo que se tarda en lanzar los recursos informáticos en un punto de conexión sin servidor. Para obtener más información sobre la configuración de los puntos de conexión sin servidor, consulte la documentación de Inferencia [sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ Amazon SageMaker Studio Classic ]

Las recomendaciones de inferencia aparecen en una nueva pestaña **Recomendaciones de inferencia** en Studio Classic. Los resultados pueden tardar hasta 45 minutos en aparecer. Esta pestaña contiene los encabezados de las columnas **Results (Resultados)** y **Details (Detalles)**.

La columna **Details (Detalles)** proporciona información sobre el trabajo de recomendación de inferencia, como el nombre de la recomendación de inferencia, cuándo se creó el trabajo (**Creation time (Hora de creación)**) y más. También proporciona información sobre **Settings (Configuración)**, como el número máximo de invocaciones que se produjeron por minuto e información sobre los nombres de los recursos de Amazon utilizados.

La columna **Resultados** proporciona una ventana de **objetivos de despliegue** y **recomendaciones de SageMaker IA** en la que puede ajustar el orden en que se muestran los resultados en función de la importancia del despliegue. Hay tres menús desplegables que puede utilizar para indicar el nivel de importancia: **Cost (Coste)**, **Latency (Latencia)** y **Throughput (Rendimiento)** para su caso de uso. Para cada objetivo (coste, latencia y rendimiento), puede establecer el nivel de importancia: **Lowest Importance (Importancia mínima)**, **Low Importance (Importancia baja)**, **Moderate importance (Importancia moderada)**, **High importance (Importancia alta)** o **Highest importance (Importancia máxima)**. 

En función de las selecciones de importancia para cada objetivo, Inference Recommender muestra su recomendación principal en el campo de **SageMakerrecomendaciones** de la derecha del panel, junto con el coste estimado por hora y la solicitud de inferencia. También proporciona información sobre la latencia esperada del modelo, el número máximo de invocaciones y el número de instancias. Para obtener recomendaciones sin servidor, puede ver los valores ideales para la simultaneidad máxima y el tamaño de memoria de los puntos de conexión.

Además de la recomendación principal que se muestra, también puede ver la misma información para todas las instancias que el Recomendador de inferencias probó en la sección **Todas las ejecuciones**.

------
#### [ SageMaker AI console ]

Puedes ver tus trabajos de recomendación de instancias en la consola de SageMaker IA de la siguiente manera:

1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, elija el nombre de su trabajo de recomendación de inferencias.

En la página de detalles de tu trabajo, puedes ver las **recomendaciones de inferencia**, que son los tipos de instancias que la SageMaker IA recomienda para tu modelo, como se muestra en la siguiente captura de pantalla.

![\[Captura de pantalla de la lista de recomendaciones de inferencia que aparece en la página de detalles del trabajo de la consola de SageMaker IA.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


En esta sección, puede comparar los tipos de instancias en función de varios factores, como la **latencia del modelo**, el **coste por hora**, el **coste por inferencia** y las **invocaciones por minuto**.

En esta página, también puede ver las configuraciones que especificó para su trabajo. En la sección **Supervisar**, puedes ver las CloudWatch métricas de Amazon que se registraron para cada tipo de instancia. Para obtener más información sobre la interpretación de estas métricas, consulte [Interpretar los resultados](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html).

------

Para obtener más información acerca de la interpretación de los resultados del trabajo de recomendación, consulte [Resultados de recomendaciones](inference-recommender-interpret-results.md).

# Obtener una recomendación de inferencia para un punto de conexión existente
<a name="inference-recommender-existing-endpoint"></a>

Los trabajos de recomendación de inferencias ejecutan un conjunto de pruebas de carga en los tipos de instancias recomendados y en un punto de conexión existente. Los trabajos de recomendación de inferencia utilizan métricas de rendimiento que se basan en pruebas de carga que utilizan los datos de muestra que proporcionaste durante el registro de la versión del modelo.

Puede comparar y obtener recomendaciones de inferencia para un punto final de inferencia de SageMaker IA existente para ayudarlo a mejorar el rendimiento de su punto final. El procedimiento para obtener recomendaciones para un punto final de inferencia de SageMaker IA existente es similar al procedimiento para [obtener recomendaciones de inferencia](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) sin un punto final. Hay varias exclusiones de características que hay que tener en cuenta a la hora de realizar una evaluación comparativa de un punto de conexión existente:
+ Solo puede utilizar un punto de conexión existente por cada trabajo de recomendación de inferencias.
+ Solo puede tener una variante en su punto de conexión.
+ No puede usar un punto de conexión que habilite el escalado automático.
+ Esta funcionalidad solo es compatible con la [inferencia en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html).
+ Esta funcionalidad no admite [puntos de conexión multimodelo en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html).

**aviso**  
Se recomienda no ejecutar un trabajo de recomendación de inferencia en un punto de conexión de producción que gestione el tráfico en directo. La carga sintética durante la evaluación comparativa puede afectar al punto de conexión de producción y provocar una limitación o proporcionar resultados de referencia inexactos. Le recomendamos que utilice un punto de conexión que no sea de producción o de desarrollador para fines de comparación. 

En las siguientes secciones se muestra cómo utilizar Amazon SageMaker Inference Recommender para crear una recomendación de inferencia para un punto final existente en función del tipo de modelo mediante el AWS SDK para Python (Boto3) y el. AWS CLI

**nota**  
Antes de crear un trabajo de recomendación de Recomendador de inferencias, asegúrese de haber cumplido con los [Requisitos previos para usar Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md).

## Requisitos previos
<a name="inference-recommender-existing-endpoint-prerequisites"></a>

[Si aún no tiene un punto final de inferencia de SageMaker IA, puede [obtener una recomendación de inferencia sin un](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) punto final o puede crear un punto final de inferencia en tiempo real siguiendo las instrucciones de Cree su punto final e implemente su modelo.](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html)

## Crear un trabajo de recomendación de inferencia para un punto de conexión existente
<a name="inference-recommender-existing-endpoint-create"></a>

Cree una recomendación de inferencia mediante programación utilizando, o el. AWS SDK para Python (Boto3) AWS CLI Especifique un nombre de trabajo para su recomendación de inferencia, el nombre de un punto final de inferencia de SageMaker IA existente, un ARN de AWS rol de IAM, una configuración de entrada y el ARN de su paquete de modelos desde el momento en que registró su modelo en el registro de modelos.

------
#### [ AWS SDK para Python (Boto3) ]

Utilice la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) para obtener una recomendación de inferencia. Defina el campo `JobType` como `'Default'` para los trabajos de recomendación de inferencias. Además, facilite lo siguiente:
+ Proporcione un nombre para su trabajo del Recomendador de inferencias para el campo `JobName`. El nombre del puesto de Recomendador de Inferencias debe ser único en la región y en su cuenta. AWS AWS 
+ Nombre de recurso de Amazon (ARN) de un rol de IAM que habilita el Recomendador de inferencias para realizar tareas en su nombre. Defina esto para el campo `RoleArn`.
+ El ARN del paquete de modelos versionados que creó al registrar su modelo en el registro de modelos. Defina esto para `ModelPackageVersionArn` en el campo `InputConfig`.
+ Indique el nombre de un punto final de inferencia de SageMaker IA existente que desee comparar en el Recomendador de inferencias sobre el terreno. `Endpoints` `InputConfig`

Importa el AWS SDK para Python (Boto3) paquete y crea un objeto de cliente de SageMaker IA utilizando la clase de cliente. Si siguió los pasos de la sección **Requisitos previos**, el ARN del grupo de paquetes de modelos se almacenó en una variable denominada `model_package_arn`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<model-package-arn>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<job-name>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = '<arn:aws:iam::<account>:role/*>'
                                    
# Provide endpoint name for your endpoint that want to benchmark in Inference Recommender
endpoint_name = '<existing-endpoint-name>'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn,
        'Endpoints': [{'EndpointName': endpoint_name}]
    }
)
```

Consulta la [Guía de referencia de las SageMaker API de Amazon](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) para obtener una lista completa de los argumentos opcionales y obligatorios a los que puedes pasárselos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html).

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

Utilice la API `create-inference-recommendations-job` para obtener una recomendación de punto de conexión de instancia. Defina el campo `job-type` en `'Default'` para trabajos de recomendación de puntos de conexión de instancia. Además, facilite lo siguiente:
+ Proporcione un nombre para su trabajo del Recomendador de inferencias para el campo `job-name`. El nombre del puesto de Recomendador de Inferencias debe ser único en la AWS región y en su AWS cuenta.
+ El nombre de recurso de Amazon (ARN) de un rol de IAM que permite a Amazon SageMaker Inference Recommender realizar tareas en su nombre. Defina esto para el campo `role-arn`.
+ El ARN del paquete de modelos versionados que creó al registrar su modelo en el registro de modelos. Defina esto para `ModelPackageVersionArn` en el campo `input-config`.
+ Indique el nombre de un punto final de inferencia de SageMaker IA existente que desee comparar en el Recomendador de inferencias sobre el terreno. `Endpoints` `input-config`

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        \"Endpoints\": [{\"EndpointName\": <endpoint_name>}]
        }"
```

------

## Obtener resultados de trabajo de recomendación de inferencia
<a name="inference-recommender-existing-endpoint-results"></a>

Puede recopilar los resultados de su trabajo de recomendación de inferencia mediante programación con el mismo procedimiento que para los trabajos de recomendación de inferencia estándar. Para obtener más información, consulte [Obtener resultados de trabajo de recomendación de inferencia](instance-recommendation-results.md).

Cuando obtenga los resultados de un trabajo de recomendación de inferencia para un punto de conexión existente, debería recibir una respuesta en JSON similar a la siguiente:

```
{
    "JobName": "job-name",
    "JobType": "Default",
    "JobArn": "arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id",
    "RoleArn": "iam-role-arn",
    "Status": "COMPLETED",
    "CreationTime": 1664922919.2,
    "LastModifiedTime": 1664924208.291,
    "InputConfig": {
        "ModelPackageVersionArn": "arn:aws:sagemaker:region:account-id:model-package/resource-id",
        "Endpoints": [
            {
                "EndpointName": "endpoint-name"
            }
        ]
    },
    "InferenceRecommendations": [
        {
            "Metrics": {
                "CostPerHour": 0.7360000014305115,
                "CostPerInference": 7.456940238625975e-06,
                "MaxInvocations": 1645,
                "ModelLatency": 171
            },
            "EndpointConfiguration": {
                "EndpointName": "sm-endpoint-name",
                "VariantName": "variant-name",
                "InstanceType": "ml.g4dn.xlarge",
                "InitialInstanceCount": 1
            },
            "ModelConfiguration": {
                "EnvironmentParameters": [
                    {
                        "Key": "TS_DEFAULT_WORKERS_PER_MODEL",
                        "ValueType": "string",
                        "Value": "4"
                    }
                ]
            }
        }
    ],
    "EndpointPerformances": [
        {
            "Metrics": {
                "MaxInvocations": 184,
                "ModelLatency": 1312
            },
            "EndpointConfiguration": {
                "EndpointName": "endpoint-name"
            }
        }
    ]
}
```

Las primeras líneas proporcionan información sobre el trabajo de recomendación de inferencia en sí. Esto incluye el nombre del trabajo, el ARN del rol y las horas de creación y última modificación.

El diccionario `InferenceRecommendations` contiene una lista de recomendaciones de inferencias del Recomendador de Inferencias.

El diccionario `EndpointConfiguration` anidado contiene la recomendación del tipo de instancia (`InstanceType`) junto con el punto final y el nombre de la variante (un modelo de aprendizaje AWS automático implementado) que se utilizó durante el trabajo de recomendación.

El diccionario `Metrics` anidado contiene información sobre el costo estimado por hora (`CostPerHour`) para su punto final en dólares estadounidenses, el costo estimado por inferencia (`CostPerInference`) en dólares estadounidenses para su punto final en tiempo real, el número máximo esperado de `InvokeEndpoint` solicitudes por minuto enviadas al punto final (`MaxInvocations`) y la latencia del modelo (`ModelLatency`), que es el intervalo de tiempo (en milisegundos) que el modelo tardó en responder a la SageMaker IA. La latencia del modelo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor de un modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

El diccionario anidado `EndpointPerformances` contiene el nombre del punto de conexión actual en el que se ejecutó el trabajo de recomendación (`EndpointName`) y las métricas de rendimiento del punto de conexión (`MaxInvocations` y `ModelLatency`).

# Detener la recomendación de inferencia
<a name="instance-recommendation-stop"></a>

Es posible que desee detener un trabajo que se está ejecutando actualmente si lo inició por error o si ya no necesita ejecutarlo. Detenga las tareas de recomendación de inferencias del Recomendador de inferencias mediante programación con la API `StopInferenceRecommendationsJob` o con Studio.

------
#### [ AWS SDK para Python (Boto3) ]

Especifique el nombre del trabajo de recomendación de inferencia para el campo `JobName`:

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

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

Especifique el nombre del trabajo de recomendación de inferencia para el indicador `job-name`:

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

Cierre la pestaña en la que inició la recomendación de inferencia para detener la recomendación de inferencia del Recomendador de inferencias.

------
#### [ SageMaker AI console ]

Para detener el trabajo de recomendación de instancias a través de la consola de SageMaker IA, haga lo siguiente:



1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, seleccione el trabajo de recomendación de la instancia.

1. Elija **Stop run (Parar trabajo)**.

1. En el cuadro de diálogo que aparece, elija **Confirm (Confirmar)**.

**Tras detener el trabajo, **Status (Estado)** del trabajo debería cambiar a Stopping (Parando).**

------

# Recomendaciones compiladas con Neo
<a name="inference-recommender-neo-compilation"></a>

En el Recomendador de inferencias, puede compilar su modelo con Neo y obtener recomendaciones de puntos de conexión para su modelo compilado. [SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) es un servicio que puede optimizar su modelo para una plataforma de hardware de destino (es decir, un tipo de instancia o un entorno específicos). La optimización de un modelo con Neo podría mejorar el rendimiento del modelo alojado.

En el caso de los marcos y contenedores compatibles con Neo, el Recomendador de inferencias sugiere automáticamente recomendaciones optimizadas para Neo. Para poder participar en la compilación de Neo, su entrada debe cumplir los siguientes requisitos previos:
+ Estás utilizando un [DLC](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) o un XGBoost contenedor propiedad de SageMaker AI.
+ Está utilizando una versión de marco compatible con Neo. Para ver las versiones de framework compatibles con Neo, consulta [Instancias en la nube](neo-supported-cloud.md#neo-supported-cloud-instances) la documentación de SageMaker Neo.
+ Neo requiere que proporcione una forma de datos de entrada correcta para su modelo. Puede especificar esta forma de datos como `[DataInputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelInput.html#sagemaker-Type-ModelInput-DataInputConfig)` en `[InferenceSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-InferenceSpecification)` al crear un paquete de modelos. Para obtener información sobre las formas de datos correctas para cada marco, consulte [Preparar el modelo para su compilación](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html) en la documentación de SageMaker Neo.

   En el siguiente ejemplo se muestra cómo especificar el campo `DataInputConfig` en `InferenceSpecification`, donde `data_input_configuration` es una variable que contiene la forma de datos en formato de diccionario (por ejemplo,`{'input':[1,1024,1024,3]}`).

  ```
  "InferenceSpecification": {
          "Containers": [
              {
                  "Image": dlc_uri,
                  "Framework": framework.upper(),
                  "FrameworkVersion": framework_version,
                  "NearestModelName": model_name,
                  "ModelInput": {"DataInputConfig": data_input_configuration},
              }
          ],
          "SupportedContentTypes": input_mime_types,  # required, must be non-null
          "SupportedResponseMIMETypes": [],
          "SupportedRealtimeInferenceInstanceTypes": supported_realtime_inference_types,  # optional
      }
  ```

Si se cumplen estas condiciones en su solicitud, el Recomendador de inferencias ejecutará escenarios para las versiones compiladas y no compiladas del modelo, lo que le proporcionará varias combinaciones de recomendaciones entre las que elegir. Puede comparar las configuraciones de las versiones compiladas y no compiladas de la misma recomendación de inferencia y determinar cuál se adapta mejor a su caso de uso. Las recomendaciones se clasifican según el coste por inferencia.

Para obtener las recomendaciones de compilación de Neo, no tiene que realizar ninguna configuración adicional además de asegurarse de que la entrada cumpla con los requisitos anteriores. El Recomendador de inferencias ejecuta automáticamente la compilación de Neo en su modelo si la entrada cumple los requisitos, y recibirá una respuesta que incluye las recomendaciones de Neo.

Si se producen errores durante la compilación de Neo, consulte [Solución de errores de compilación de Neo](neo-troubleshooting-compilation.md).

La siguiente tabla es un ejemplo de una respuesta que puede obtener de un trabajo de recomendación de inferencias que incluya recomendaciones para modelos compilados. Si el campo `InferenceSpecificationName` es `None`, la recomendación es un modelo sin compilar. La última fila, en la que se encuentra el valor del **InferenceSpecificationName**campo`neo-00011122-2333-4445-5566-677788899900`, corresponde a un modelo compilado con Neo. El valor del campo es el nombre del trabajo de Neo utilizado para compilar y optimizar el modelo.


| EndpointName | InstanceType | InitialInstanceCount | EnvironmentParameters | CostPerHour | CostPerInference | MaxInvocations | ModelLatency | InferenceSpecificationName | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| sm-epc-example-000111222 | ml.c5.9xlarge | 1 | [] | 1,836 | 9,15E-07 | 33456 | 7 | Ninguno | 
| sm-epc-example-111222333 | ml.c5.2xlarge | 1 | [] | 0,408 | 2,11E-07 | 32211 | 21 | Ninguno | 
| sm-epc-example-222333444 | ml.c5.xlarge | 1 | [] | 0,204 | 1,86E-07 | 18276 | 92 | Ninguno | 
| sm-epc-example-333444555 | ml.c5.xlarge | 1 | [] | 0,204 | 1,60E-07 | 21286 | 42 | neo-00011122-2333-4445-5566-677788899900 | 

## Introducción
<a name="inference-recommender-neo-compilation-get-started"></a>

Los pasos generales para crear un trabajo de recomendación de inferencias que incluya recomendaciones optimizadas para NEO son los siguientes:
+ Prepare su modelo de ML para la compilación. Para obtener más información, consulte [Preparar modelo para la compilación](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html) en la documentación de Neo.
+ Empaquete su modelo en un archivo de modelos (archivo `.tar.gz`).
+ Cree un archivo de carga útil de ejemplo.
+ Registre su modelo en el Registro de SageMaker Modelos.
+ Cree un trabajo de recomendación de inferencias.
+ Vea los resultados del trabajo de recomendación de inferencias y elija una configuración.
+ Depure los errores de compilación, si los hubiera. Para obtener más información, consulte [Solución de errores de compilación de Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html).

Para ver un ejemplo que muestre el flujo de trabajo anterior y cómo obtener recomendaciones optimizadas para Neo XGBoost, consulte el siguiente [cuaderno de ejemplo](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/xgboost/xgboost-inference-recommender.ipynb). Para ver un ejemplo que muestra cómo utilizar recomendaciones optimizadas para Neo TensorFlow, consulta el siguiente cuaderno de [ejemplo](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/inference-recommender.ipynb).

# Resultados de recomendaciones
<a name="inference-recommender-interpret-results"></a>

El resultado de cada trabajo del Recomendador de inferencias incluye `InstanceType``InitialInstanceCount`, y `EnvironmentParameters`, que son parámetros variables de entorno ajustados para su contenedor a fin de mejorar su latencia y rendimiento. Los resultados también incluyen métricas de rendimiento y costes, como `MaxInvocations`, `ModelLatency`, `CostPerHour`, `CostPerInference`, `CpuUtilization` y `MemoryUtilization`.

En la siguiente tabla, ofrecemos una descripción de estas métricas. Estas métricas pueden ayudarle a reducir la búsqueda de la mejor configuración de punto de conexión que se adapte a su caso de uso. Por ejemplo, si su motivación es la relación precio-rendimiento general con un énfasis en el rendimiento, entonces debería centrarse en `CostPerInference`. 


| Métrica | Description (Descripción) | Caso de uso | 
| --- | --- | --- | 
|  `ModelLatency`  |  El intervalo de tiempo que tarda un modelo en responder visto desde la SageMaker IA. Este intervalo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor de un modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor. Unidades: milisegundos  | Cargas de trabajo sensibles a la latencia, como la publicación de anuncios y el diagnóstico médico | 
|  `MaximumInvocations`  |  El número máximo de solicitudes `InvokeEndpoint` enviadas a un punto de conexión del modelo en un minuto. Unidades: ninguna  | Cargas de trabajo centradas en el rendimiento, como el procesamiento de vídeo o la inferencia por lotes | 
|  `CostPerHour`  |  El coste estimado por hora del punto de conexión en tiempo real. Unidades: dólares estadounidenses  | Cargas de trabajo sensibles a los costes sin plazos de latencia | 
|  `CostPerInference`  |  El coste estimado por llamada de inferencia para el punto de conexión en tiempo real. Unidades: dólares estadounidenses  | Maximizar el rendimiento general de los precios centrándose en el rendimiento | 
|  `CpuUtilization`  |  El uso esperado de la CPU con un máximo de invocaciones por minuto para la instancia de punto de conexión. Unidad: porcentaje  | Entender el estado de la instancia durante la evaluación comparativa al tener visibilidad del uso de la CPU principal de la instancia | 
|  `MemoryUtilization`  |  El uso de memoria esperado con un máximo de invocaciones por minuto para la instancia de punto de conexión. Unidad: porcentaje  | Entender el estado de la instancia durante la evaluación comparativa al tener visibilidad del uso de la memoria principal de la instancia | 

En algunos casos, es posible que desees explorar otras [métricas de SageMaker IA Endpoint Invocation](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation), como `CPUUtilization` El resultado de cada trabajo del Recomendador de inferencias incluye los nombres de los puntos de conexión generados durante la prueba de carga. Puedes utilizarlos CloudWatch para revisar los registros de estos puntos finales incluso después de haberlos eliminado.

La siguiente imagen es un ejemplo de CloudWatch métricas y gráficos que puede revisar para un único punto final a partir del resultado de su recomendación. El resultado de esta recomendación proviene de un trabajo predeterminado. La forma de interpretar los valores escalares a partir de los resultados de la recomendación es basarlos en el momento en que el gráfico de invocaciones comienza a estabilizarse por primera vez. Por ejemplo, el valor `ModelLatency` registrado se encuentra al principio de la estabilización alrededor de `03:00:31`.

![\[Gráficos para CloudWatch métricas.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference-recommender-cw-metrics.png)


Para obtener una descripción completa de las CloudWatch métricas utilizadas en los gráficos anteriores, consulte las [métricas de SageMaker AI Endpoint Invocation](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation).

También puede ver métricas de rendimiento, como `ClientInvocations` y `NumberOfUsers` publicadas por el Recomendador de inferencias en el espacio de nombres `/aws/sagemaker/InferenceRecommendationsJobs`. Para obtener una lista completa de las métricas y descripciones publicadas por el Recomendador de inferencias, consulte [SageMaker Métricas de trabajos de Inference Recommender](monitoring-cloudwatch.md#cloudwatch-metrics-inference-recommender).

Consulte el cuaderno [Amazon SageMaker Inference Recommender: CloudWatch Metrics](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/tensorflow-cloudwatch/tf-cloudwatch-inference-recommender.ipynb) Jupyter en el repositorio de [amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples)Github para ver un ejemplo de cómo usar el AWS SDK para Python (Boto3) para explorar las métricas de sus puntos de conexión CloudWatch .

# Obtener recomendaciones de políticas de escalado automático
<a name="inference-recommender-autoscaling"></a>

Con Amazon SageMaker Inference Recommender, puede obtener recomendaciones para políticas de escalado automático para su punto final de SageMaker IA en función del patrón de tráfico previsto. Si ya ha realizado un trabajo de recomendación de inferencias, puede proporcionar los detalles del trabajo para obtener una recomendación sobre una política de escalado automático que pueda aplicar a su punto de conexión.

El Recomendador de inferencias compara diferentes valores para cada métrica a fin de determinar la configuración de escalado automático ideal para su punto de conexión. La recomendación de escalado automático devuelve una política de escalado automático recomendada para cada métrica definida en el trabajo de recomendación de inferencias. Puede guardar las políticas y aplicarlas a su punto final con la API. [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)

Para empezar, revise los requisitos previos siguientes.

## Requisitos previos
<a name="inference-recommender-autoscaling-prereqs"></a>

Antes de comenzar, debe haber completado correctamente un trabajo de recomendación de inferencia. En la siguiente sección, puede proporcionar un ID de recomendación de inferencia o el nombre de un punto final de SageMaker IA que se comparó durante un trabajo de recomendación de inferencia.

Para recuperar el identificador de tu trabajo de recomendación o el nombre del punto de conexión, puedes ver los detalles de tu trabajo de recomendación de inferencia en la consola de SageMaker IA o utilizar `EndpointName` los campos `RecommendationId` o campos devueltos por la API. [DescribeInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceRecommendationsJob.html)

## Crear una recomendación de configuración de escalado automático
<a name="inference-recommender-autoscaling-create"></a>

Para crear una política de recomendaciones de escalado automático, puede utilizar la AWS SDK para Python (Boto3).

En el siguiente ejemplo, se muestran los campos de la [ GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html)API. Utilice los siguientes campos cuando llame a la API:
+ `InferenceRecommendationsJobName`: introduzca el nombre de su trabajo de recomendación de inferencias.
+ `RecommendationId`: introduzca el ID de una recomendación de inferencia de un trabajo de recomendación. Esto es opcional si ha especificado el campo `EndpointName`.
+ `EndpointName`: introduzca el nombre de un punto de conexión que se haya comparado durante un trabajo de recomendación de inferencia. Esto es opcional si ha especificado el campo `RecommendationId`.
+ `TargetCpuUtilizationPerCore`: (Opcional) Introduce un valor porcentual del uso que quiere que utilice una instancia de su punto de conexión antes de realizar el ajuste de escala automático. Si no especifica este campo, el valor predeterminado es 50 %.
+ `ScalingPolicyObjective`: (Opcional) un objeto en el que se especifica el patrón de tráfico previsto.
  + `MinInvocationsPerMinute`: (Opcional) el número mínimo de solicitudes esperadas a su punto de conexión por minuto.
  + `MaxInvocationsPerMinute`: (Opcional) el número máximo de solicitudes esperadas para su punto de conexión por minuto.

```
{
    "InferenceRecommendationsJobName": "string", // Required
    "RecommendationId": "string", // Optional, provide one of RecommendationId or EndpointName
    "EndpointName": "string", // Optional, provide one of RecommendationId or EndpointName
    "TargetCpuUtilizationPerCore": number, // Optional
    "ScalingPolicyObjective": { // Optional
        "MinInvocationsPerMinute": number,
        "MaxInvocationsPerMinute": number
    }
}
```

Tras enviar la solicitud, recibirá una respuesta con las políticas de escalado automático definidas para cada métrica. Para obtener información sobre cada integración, consulte las secciones siguientes.

## Revise los resultados de tus recomendaciones de configuración de escalado automático
<a name="inference-recommender-autoscaling-review"></a>

El siguiente ejemplo muestra la respuesta de la [ GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html)API:

```
{
    "InferenceRecommendationsJobName": "string", 
    "RecommendationId": "string", // One of RecommendationId or EndpointName is shown
    "EndpointName": "string", 
    "TargetUtilizationPercentage": Integer,
    "ScalingPolicyObjective": { 
        "MinInvocationsPerMinute": Integer, 
        "MaxInvocationsPerMinute": Integer
    },
    "Metric": {
        "ModelLatency": Integer,
        "InvocationsPerInstance": Integer
    },
    "DynamicScalingConfiguration": {
        "MinCapacity": number,
        "MaxCapacity": number, 
        "ScaleInCooldown": number,
        "ScaleOutCooldown": number,
        "ScalingPolicies": [
            {
                "TargetTracking": {
                    "MetricSpecification": {
                        "Predefined" {
                            "PredefinedMetricType": "string"
                         },
                        "Customized": {
                            "MetricName": "string",
                            "Namespace": "string",
                            "Statistic": "string"
                         }
                    },
                    "TargetValue": Double
                } 
            }
        ]
    }
}
```

Los campos de objeto `InferenceRecommendationsJobName`, `RecommendationID` o `EndpointName`, `TargetCpuUtilizationPerCore` y `ScalingPolicyObjective` se copian de la solicitud inicial.

El objeto `Metric` muestra las métricas que se compararon en su trabajo de recomendación de inferencias, junto con un cálculo de los valores de cada métrica cuando la utilización de la instancia sería igual al valor `TargetCpuUtilizationPerCore`. Esto resulta útil para anticipar las métricas de rendimiento de su punto de conexión cuando se amplía y reduce con la política de escalado automático recomendada. Por ejemplo, considere si su uso de instancias fue del 50 % en su trabajo de recomendación de inferencias y su valor `InvocationsPerInstance` original era originalmente `4`. Si especifica que el valor `TargetCpuUtilizationPerCore` sea del 100 % en su solicitud de recomendación de escalado automático, el valor métrico `InvocationsPerInstance` que se muestra en la respuesta es `2` porque preveía asignar el doble de utilización de instancias.

El `DynamicScalingConfiguration` objeto devuelve los valores que debes especificar [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html#autoscaling-PutScalingPolicy-request-TargetTrackingScalingPolicyConfiguration)cuando llames a la [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)API. Esto incluye los valores de capacidad mínima y máxima recomendados, los tiempos de enfriamiento para reducir horizontalmente y escalar horizontalmente recomendados y el objeto `ScalingPolicies`, que contiene el `TargetValue` recomendado que debe especificar para cada métrica.

# Ejecutar una prueba de carga personalizada
<a name="inference-recommender-load-test"></a>

Las pruebas de carga de Amazon SageMaker Inference Recommender realizan exhaustivos análisis basados en los requisitos de producción en cuanto a latencia y rendimiento, patrones de tráfico personalizados y puntos de enlace sin servidor o instancias en tiempo real (hasta 10) que seleccione.

En las siguientes secciones se muestra cómo crear, describir y detener una prueba de carga mediante programación mediante AWS SDK para Python (Boto3) y la consola Amazon SageMaker Studio Classic o AI AWS CLI, o de forma interactiva. SageMaker 

## Crear un trabajo de prueba de carga
<a name="load-test-create"></a>

Cree una prueba de carga mediante programación con Studio Classic o la AWS SDK para Python (Boto3) consola de AWS CLI IA, o de forma interactiva. SageMaker Al igual que con las recomendaciones de inferencia de Inference Recommender, especifique un nombre de trabajo para la prueba de carga, un ARN de rol de AWS IAM, una configuración de entrada y el ARN del paquete de modelos desde el momento en que registró su modelo en el registro de modelos. Las pruebas de carga requieren también que especifique un patrón de tráfico y las condiciones de parada.

------
#### [ AWS SDK para Python (Boto3) ]

Use la API `CreateInferenceRecommendationsJob` para crear una prueba de carga del Recomendador de inferencias. Especifique `Advanced` para el campo `JobType` y proporcione: 
+ Un nombre de trabajo para la prueba de carga (`JobName`). El nombre del trabajo debe ser único en su región y en su cuenta. AWS AWS 
+ Nombre de recurso de Amazon (ARN) de un rol de IAM que habilita el Recomendador de inferencias para realizar tareas en su nombre. Defina esto para el campo `RoleArn`.
+ Un diccionario de configuración de punto de conexión (`InputConfig`) en el que especifique lo siguiente:
  + Para `TrafficPattern`, especifique las fases o el patrón de tráfico de escaleras. Con el patrón de tráfico por fases, aparecen nuevos usuarios cada minuto a la velocidad que especifique. Con el patrón de tráfico de la escaleras, los nuevos usuarios aparecen a intervalos cronometrados (o *escalones*) al ritmo que especifique. Seleccione una de las siguientes opciones:
    + En `TrafficType`, especifique `PHASES`. A continuación, para la matriz `Phases`, especifique `InitialNumberOfUsers` (con cuántos usuarios simultáneos empezar, con un mínimo de 1 y un máximo de 3), `SpawnRate` (el número de usuarios que se generarán en un minuto para una fase específica de la prueba de carga, con un mínimo de 0 y un máximo de 3) y `DurationInSeconds` (la duración de la fase de tráfico, con un mínimo de 120 y un máximo de 3600).
    + En `TrafficType`, especifique `STAIRS`. Luego, para la matriz `Stairs`, especifique la `DurationInSeconds` (cuánto debe durar la fase de tráfico, con un mínimo de 120 y un máximo de 3600), `NumberOfSteps` (cuántos intervalos se utilizan durante la fase) y `UsersPerStep` (cuántos usuarios se agregan durante cada intervalo). Tenga en cuenta que la longitud de cada escalón es el valor de `DurationInSeconds / NumberOfSteps`. Por ejemplo, si `DurationInSeconds` es `600` y especifica `5` escalones, cada escalón durará 120 segundos.
**nota**  
Un usuario se define como un actor generado por el sistema que se ejecuta en bucle e invoca solicitudes a un punto de conexión como parte del Recomendador de inferencias. Para un XGBoost contenedor típico que se ejecuta en una `ml.c5.large` instancia, los puntos finales pueden alcanzar las 30 000 invocaciones por minuto (500 tps) con solo 15 a 20 usuarios.
  + Para `ResourceLimit`, especifique `MaxNumberOfTests` (el número máximo de pruebas de carga de evaluación comparativa para un trabajo de recomendación de inferencias, con un mínimo de 1 y un máximo de 10) y `MaxParallelOfTests` (el número máximo de pruebas de carga de evaluación comparativa paralelas para un trabajo de recomendación de inferencias, con un mínimo de 1 y un máximo de 10).
  + Para `EndpointConfigurations`, puede especificar uno de los siguientes:
    + El campo `InstanceType` en el que se especifica el tipo de instancia en el que se van a ejecutar las pruebas de carga.
    + La `ServerlessConfig`, en la que se especifican los valores ideales para `MaxConcurrency` y `MemorySizeInMB` para un punto de conexión sin servidor. Para obtener más información, consulte [Documentación de inferencias sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).
+ Un diccionario de condiciones de parada (`StoppingConditions`), en el que, si se cumple alguna de las condiciones, se detiene el trabajo del Recomendador de Inferencias. Para este ejemplo, especifique los siguientes campos en el diccionario:
  + Para `MaxInvocations`, especifique el número máximo de solicitudes por minuto esperado para el punto de conexión, con un mínimo de 1 y un máximo de 30 000.
  + Para `ModelLatencyThresholds`, especifique `Percentile` (el umbral del percentil de latencia del modelo) y `ValueInMilliseconds` (el valor del percentil de latencia del modelo en milisegundos).
  + (Opcional) Para `FlatInvocations`, puede especificar si desea continuar con la prueba de carga cuando la velocidad de TPS (invocaciones por minuto) se estabilice. Una tasa de TPS plana normalmente significa que el punto de conexión ha alcanzado su capacidad máxima. Sin embargo, es posible que desee continuar supervisando el punto de conexión en condiciones de plena capacidad. Para continuar con la prueba de carga cuando esto ocurra, especifique este valor como `Continue`. De lo contrario, el valor predeterminado es `Stop`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region=<INSERT>
sagemaker_client=boto3.client('sagemaker', region=aws_region) 
                
# Provide a name to your recommendation based on load testing
load_test_job_name="<INSERT>"

# Provide the name of the sagemaker instance type
instance_type="<INSERT>"

# Provide the IAM Role that gives SageMaker permission to access AWS services 
role_arn='arn:aws:iam::<account>:role/*'

# Provide your model package ARN that was created when you registered your 
# model with Model Registry
model_package_arn='arn:aws:sagemaker:<region>:<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
                        JobName=load_test_job_name,
                        JobType="Advanced",
                        RoleArn=role_arn,
                        InputConfig={
                            'ModelPackageVersionArn': model_package_arn,
                            "JobDurationInSeconds": 7200,
                            'TrafficPattern' : {
                                # Replace PHASES with STAIRS to use the stairs traffic pattern
                                'TrafficType': 'PHASES',
                                'Phases': [
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    },
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    }
                                ]
                                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                                # 'Stairs' : {
                                #   'DurationInSeconds': 240,
                                #   'NumberOfSteps': 2,
                                #   'UsersPerStep': 2
                                # }
                            },
                            'ResourceLimit': {
                                        'MaxNumberOfTests': 10,
                                        'MaxParallelOfTests': 3
                                },
                            "EndpointConfigurations" : [{
                                        'InstanceType': 'ml.c5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.m5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.r5.xlarge'
                                    }]
                                    # Uncomment the ServerlessConfig and comment out the InstanceType field if you want recommendations for a serverless endpoint
                                    # "ServerlessConfig": {
                                    #     "MaxConcurrency": value, 
                                    #     "MemorySizeInMB": value 
                                    # }
                        },
                        StoppingConditions={
                            'MaxInvocations': 1000,
                            'ModelLatencyThresholds':[{
                                'Percentile': 'P95', 
                                'ValueInMilliseconds': 100
                            }],
                            # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
                            'FlatInvocations': 'Stop'
                        }
                )
```

Consulta la [Guía de referencia de las SageMaker API de Amazon](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) para obtener una lista completa de los argumentos opcionales y obligatorios a los que puedes pasárselos`CreateInferenceRecommendationsJob`.

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

Use la API `create-inference-recommendations-job` para crear una prueba de carga del Recomendador de inferencias. Especifique `Advanced` para el campo `JobType` y proporcione: 
+ Un nombre de trabajo para la prueba de carga (`job-name`). El nombre del trabajo debe ser único en su AWS región y en su AWS cuenta.
+ Nombre de recurso de Amazon (ARN) de un rol de IAM que habilita el Recomendador de inferencias para realizar tareas en su nombre. Defina esto para el campo `role-arn`.
+ Un diccionario de configuración de punto de conexión (`input-config`) en el que especifique lo siguiente:
  + Para `TrafficPattern`, especifique las fases o el patrón de tráfico de escaleras. Con el patrón de tráfico por fases, aparecen nuevos usuarios cada minuto a la velocidad que especifique. Con el patrón de tráfico de la escaleras, los nuevos usuarios aparecen a intervalos cronometrados (o *escalones*) al ritmo que especifique. Seleccione una de las siguientes opciones:
    + En `TrafficType`, especifique `PHASES`. A continuación, para la matriz `Phases`, especifique `InitialNumberOfUsers` (con cuántos usuarios simultáneos empezar, con un mínimo de 1 y un máximo de 3), `SpawnRate` (el número de usuarios que se generarán en un minuto para una fase específica de la prueba de carga, con un mínimo de 0 y un máximo de 3) y `DurationInSeconds` (la duración de la fase de tráfico, con un mínimo de 120 y un máximo de 3600).
    + En `TrafficType`, especifique `STAIRS`. Luego, para la matriz `Stairs`, especifique la `DurationInSeconds` (cuánto debe durar la fase de tráfico, con un mínimo de 120 y un máximo de 3600), `NumberOfSteps` (cuántos intervalos se utilizan durante la fase) y `UsersPerStep` (cuántos usuarios se agregan durante cada intervalo). Tenga en cuenta que la longitud de cada escalón es el valor de `DurationInSeconds / NumberOfSteps`. Por ejemplo, si `DurationInSeconds` es `600` y especifica `5` escalones, cada escalón durará 120 segundos.
**nota**  
Un usuario se define como un actor generado por el sistema que se ejecuta en bucle e invoca solicitudes a un punto de conexión como parte del Recomendador de inferencias. Para un XGBoost contenedor típico que se ejecuta en una `ml.c5.large` instancia, los puntos finales pueden alcanzar las 30 000 invocaciones por minuto (500 tps) con solo 15 a 20 usuarios.
  + Para `ResourceLimit`, especifique `MaxNumberOfTests` (el número máximo de pruebas de carga de evaluación comparativa para un trabajo de recomendación de inferencias, con un mínimo de 1 y un máximo de 10) y `MaxParallelOfTests` (el número máximo de pruebas de carga de evaluación comparativa paralelas para un trabajo de recomendación de inferencias, con un mínimo de 1 y un máximo de 10).
  + Para `EndpointConfigurations`, puede especificar uno de los siguientes:
    + El campo `InstanceType` en el que se especifica el tipo de instancia en el que se van a ejecutar las pruebas de carga.
    + La `ServerlessConfig`, en la que se especifican los valores ideales para `MaxConcurrency` y `MemorySizeInMB` para un punto de conexión sin servidor.
+ Un diccionario de condiciones de parada (`stopping-conditions`), en el que, si se cumple alguna de las condiciones, se detiene el trabajo del Recomendador de Inferencias. Para este ejemplo, especifique los siguientes campos en el diccionario:
  + Para `MaxInvocations`, especifique el número máximo de solicitudes por minuto esperado para el punto de conexión, con un mínimo de 1 y un máximo de 30 000.
  + Para `ModelLatencyThresholds`, especifique `Percentile` (el umbral del percentil de latencia del modelo) y `ValueInMilliseconds` (el valor del percentil de latencia del modelo en milisegundos).
  + (Opcional) Para `FlatInvocations`, puede especificar si desea continuar con la prueba de carga cuando la velocidad de TPS (invocaciones por minuto) se estabilice. Una tasa de TPS plana normalmente significa que el punto de conexión ha alcanzado su capacidad máxima. Sin embargo, es posible que desee continuar supervisando el punto de conexión en condiciones de plena capacidad. Para continuar con la prueba de carga cuando esto ocurra, especifique este valor como `Continue`. De lo contrario, el valor predeterminado es `Stop`.

```
aws sagemaker create-inference-recommendations-job\
    --region <region>\
    --job-name <job-name>\
    --job-type ADVANCED\
    --role-arn arn:aws:iam::<account>:role/*\
    --input-config \"{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region>:<account>:role/*\",
        \"JobDurationInSeconds\": 7200,                                
        \"TrafficPattern\" : {
                # Replace PHASES with STAIRS to use the stairs traffic pattern
                \"TrafficType\": \"PHASES\",
                \"Phases\": [
                    {
                        \"InitialNumberOfUsers\": 1,
                        \"SpawnRate\": 60,
                        \"DurationInSeconds\": 300
                    }
                ]
                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                # 'Stairs' : {
                #   'DurationInSeconds': 240,
                #   'NumberOfSteps': 2,
                #   'UsersPerStep': 2
                # }
            },
            \"ResourceLimit\": {
                \"MaxNumberOfTests\": 10,
                \"MaxParallelOfTests\": 3
            },
            \"EndpointConfigurations\" : [
                {
                    \"InstanceType\": \"ml.c5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.m5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.r5.xlarge\"
                }
                # Use the ServerlessConfig and leave out the InstanceType fields if you want recommendations for a serverless endpoint
                # \"ServerlessConfig\": {
                #     \"MaxConcurrency\": value, 
                #     \"MemorySizeInMB\": value 
                # }
            ]
        }\"
    --stopping-conditions \"{
        \"MaxInvocations\": 1000,
        \"ModelLatencyThresholds\":[
                {
                    \"Percentile\": \"P95\", 
                    \"ValueInMilliseconds\": 100
                }
        ],
        # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
        \"FlatInvocations\": \"Stop\"
    }\"
```

------
#### [ Amazon SageMaker Studio Classic ]

Cree una prueba de carga con Studio Classic.

1. En la aplicación de Studio Classic, elija el icono de inicio (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/studio/icons/house.png)).

1. En la barra lateral izquierda de Studio Classic, elija **Implementaciones**.

1. Elija **Recomendador de inferencias** en la lista desplegable.

1. Elija **Create inference recommender job (Crear trabajo de recomendación de inferencias)**. Se abre una nueva pestaña titulada **Create inference recommender job (Crear trabajo de recomendación de inferencias)**.

1. Seleccione el nombre de su grupo de modelos en el campo desplegable **Model group (Grupo de modelos)**. La lista incluye todos los grupos de modelos registrados en el registro de modelos de su cuenta, incluidos los modelos registrados fuera de Studio Classic.

1. Seleccione una versión del modelo en el campo desplegable **Model version (Versión del modelo)**.

1. Elija **Continuar**.

1. Proporcione un nombre para el trabajo en el campo **Name (Nombre)**.

1. (Opcional) Proporcione una descripción de su trabajo en el campo **Description (Descripción)**.

1. Elija un rol de IAM que conceda permiso al Recomendador de Inferencias para acceder a los servicios. AWS Para ello, puede crear un rol y asociar la política administrada por IAM de `AmazonSageMakerFullAccess`, o bien puede dejar que Studio Classic cree un rol por usted.

1. Seleccione **Stopping Conditions (Condiciones de parada)** para ampliar los campos de entrada disponibles. Proporcione un conjunto de condiciones para detener una recomendación de implementación. 

   1. Especifique el número máximo de solicitudes por minuto esperado para el punto de conexión en el campo **Max Invocations Per Minute (Invocaciones máximas por minuto)**.

   1. Especifique el umbral de latencia del modelo en microsegundos en el campo **Model Latency Threshold (Umbral de latencia del modelo)**. El **umbral de latencia del modelo** representa el intervalo de tiempo que tarda un modelo en responder según lo visto en el Recomendador de inferencias. El intervalo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor del modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

1. Seleccione **Traffic Pattern (Patrón de tráfico)** para ampliar los campos de entrada disponibles.

   1. Establezca el número inicial de usuarios virtuales especificando un número entero en el campo **Initial Number of Users (Número inicial de usuarios)**.

   1. Proporcione un número entero para el campo **Spawn Rate (Velocidad de generación)**. La velocidad de generación establece el número de usuarios creados por segundo.

   1. Establezca la duración de la fase en segundos especificando un número entero en el campo **Duration (Duración)**.

   1. (Opcional) Añada patrones de tráfico adicionales. Para ello, elija **Add (Añadir)**.

1. Elija el ajuste **Additional (Adicional)** para mostrar el campo **Max test duration (Duración máxima de la prueba)**. Especifique, en segundos, el tiempo máximo que puede durar una prueba durante un trabajo. Los nuevos trabajos no se programan después de la duración definida. Esto ayuda a garantizar que los trabajos en curso no se detengan y que solo se vean los trabajos finalizados.

1. Elija **Continuar**.

1. Elija **Select Instances (Seleccionar instancias)**.

1. En el campo **Instances for benchmarking (Instancias para la evaluación comparativa)**, seleccione **Add instances to test (Añadir instancias a prueba**. Seleccione hasta 10 instancias para que el Recomendador de inferencias las utilice en las pruebas de carga.

1. Elija **Additional settings (Configuración adicional)**.

   1. Proporcione un número entero que establezca un límite superior en la cantidad de pruebas que puede realizar un trabajo para el campo **Max number of tests field (Número máximo de pruebas)**. Tenga en cuenta que cada configuración de punto de conexión da como resultado una nueva prueba de carga.

   1. Proporcione un número entero para el campo de prueba **Max parallel (Máx. en paralelo)**. Esta configuración define un límite superior en el número de pruebas de carga que se pueden ejecutar en paralelo.

1. Seleccione **Enviar**.

   La prueba de carga puede tardar hasta dos horas.
**aviso**  
No cierre esta pestaña. Si cierra esta pestaña, cancela el trabajo de prueba de carga del Recomendador de inferencias.

------
#### [ SageMaker AI console ]

Cree una prueba de carga personalizada a través de la consola de SageMaker IA de la siguiente manera:

1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, elija **Crear trabajo**.

1. Para **Step 1: Model configuration (Paso 1: Configuración del modelo)**, haga lo siguiente:

   1. Para **Job type (Tipo de trabajo)**, seleccione **Advanced recommender job (Trabajo de recomendador avanzado)**.

   1. Si utilizas un modelo registrado en el registro de modelos de SageMaker IA, activa la **opción Elegir un modelo del registro** de modelos y haz lo siguiente:

      1. En la lista desplegable de grupos de **modelos, selecciona el grupo** de modelos en el registro de modelos de SageMaker IA en el que se encuentra tu modelo.

      1. En la lista desplegable **Model version (Versión del modelo)**, elija la versión que desee del modelo.

   1. Si utilizas un modelo que has creado en SageMaker IA, desactiva la **opción Elegir un modelo del registro de** modelos y haz lo siguiente:

      1. En el campo **Nombre del modelo**, introduce el nombre de tu modelo de SageMaker IA.

   1. Para el **rol de IAM**, puede seleccionar un rol de AWS IAM existente que tenga los permisos necesarios para crear un trabajo de recomendación de instancias. Como alternativa, si no tienes un rol existente, puedes elegir **Crear un nuevo rol** para abrir la ventana emergente de creación del rol y SageMaker AI añadirá los permisos necesarios al nuevo rol que crees.

   1. Para **Bucket S3 para la evaluación comparativa de la carga útil**, introduzca la ruta de Amazon S3 al archivo de carga útil de muestra, que debe contener los archivos de carga útil de muestra que el Recomendador de inferencias utiliza para comparar su modelo en diferentes tipos de instancias.

   1. Para **Payload content type (Tipo de contenido de carga útil)**, introduzca los tipos MIME de los datos de carga útil de muestra.

   1. Para **Traffic pattern (Patrón de tráfico)**, configure las fases de la prueba de carga de la siguiente manera:

      1. En **Initial number of users (Número inicial de usuarios)**, especifique con cuántos usuarios simultáneos quiere empezar (con un mínimo de 1 y un máximo de 3).

      1. Para **Spawn rate (Velocidad de generación)**, especifique la cantidad de usuarios que se generarán en un minuto durante la fase (con un mínimo de 0 y un máximo de 3).

      1. En **Duration (seconds) (Duración (segundos))**, especifique lo baja que debe ser la fase de tráfico en segundos (con un mínimo de 120 y un máximo de 3600).

   1. (Opcional) Si has desactivado la **opción Elegir un modelo del registro de modelos y has** especificado un modelo de SageMaker IA, en la **configuración del contenedor**, haz lo siguiente:

      1. En la lista desplegable **Domain (Dominio)**, seleccione el dominio de machine learning del modelo, como visión artificial, procesamiento del lenguaje natural o machine learning.

      1. En la lista desplegable **Framework**, selecciona el framework de tu contenedor, por ejemplo, o. TensorFlow XGBoost

      1. Para **Framework version (Versión de marco)**, introduzca la versión de marco de la image de contenedor.

      1. En la lista desplegable **Nearest model name (Nombre del modelo más cercano)**, seleccione el modelo previamente entrenado que más se parezca al suyo.

      1. En la lista desplegable **Task (Tarea)**, seleccione la tarea de machine learning que realiza el modelo, como la clasificación de imágenes o la regresión.

   1. (Opcional) Para la **compilación de modelos con SageMaker Neo**, puede configurar el trabajo de recomendación para un modelo que haya compilado con SageMaker Neo. Para **Data input configuration (Configuración de la entrada de datos)**, introduzca la forma de datos de entrada correcta para el modelo en un formato similar a `{'input':[1,1024,1024,3]}`.

   1. Elija **Siguiente**.

1. Para **Step 2: Instances and environment parameters (Paso 2: Instancias y parámetros del entorno)**, haga lo siguiente:

   1. En **Select instances for benchmarking (Seleccionar instancias para evaluación comparativa)**, seleccione hasta 8 tipos de instancias con los que desee compararlas.

   1. (Opcional) Para **Environment parameter ranges (Rangos de parámetros del entorno)**, puede especificar los parámetros del entorno que ayuden a optimizar el modelo. Especifique los parámetros como pares de **clave** y **valor**.

   1. Elija **Siguiente**.

1. En **Step 3: Job parameters (Paso 3: Parámetros de trabajo)**, haga lo siguiente:

   1. (Opcional) Pâra el campo **Job name (Nombre del trabajo)**, introduzca un nombre para su trabajo de recomendación de instancia. Al crear el trabajo, SageMaker AI añade una marca de tiempo al final de este nombre.

   1. (Opcional) âra el campo **Job description (Descripción de trabajo)**, introduzca una descripción para el trabajo.

   1. (Opcional) En la lista desplegable de **claves de cifrado**, elija una AWS KMS clave por su nombre o introduzca su ARN para cifrar los datos.

   1. (Opcional) Para **Max number of tests (Número máximo de pruebas)**, introduzca el número de pruebas que desea ejecutar durante el trabajo de recomendación.

   1. (Opcional) Para **Max parallel tests (Máx. de p`ruebas en paralelo)**, introduzca el número máximo de pruebas en paralelo que desea ejecutar durante el trabajo de recomendación.

   1. Para **Max test duration (s) (Duración máxima de prueb (s))**, introduzca el número máximo de segundos durante el que desea que se ejecute cada prueba.

   1. Para **Max invocations per minute (Máx. invocaciones por minuto)**, introduzca el número máximo de solicitudes por minuto al que puede acceder el punto de conexión antes de detener el trabajo de recomendación. Una vez alcanzado este límite, la SageMaker IA finaliza el trabajo.

   1. Para **P99 Model latency threshold (ms) (Umbral de latencia del modelo P99 (ms))**, introduzca el percentil de latencia del modelo en milisegundos.

   1. Elija **Siguiente**.

1. **Para **Step 4: Review job (Paso 4: Revisar trabajo)**, revise las configuraciones y, a continuación, seleccione Submit (Enviar)**.

------

## Obtener los resultados de la prueba de carga
<a name="load-test-describe"></a>

Puedes recopilar las métricas de todas las pruebas de carga mediante programación una vez finalizadas las pruebas de carga con AWS SDK para Python (Boto3) la AWS CLI consola Studio Classic o la de SageMaker IA.

------
#### [ AWS SDK para Python (Boto3) ]

Recopile métricas con la API `DescribeInferenceRecommendationsJob`. Especifique el nombre del trabajo de la prueba de carga para el campo `JobName`:

```
load_test_response = sagemaker_client.describe_inference_recommendations_job(
                                                        JobName=load_test_job_name
                                                        )
```

Imprima el objeto de respuesta.

```
load_test_response['Status']
```

Este ejemplo devuelve una respuesta de JSON similar a la siguiente: Tenga en cuenta que este ejemplo muestra los tipos de instancias recomendados para la inferencia en tiempo real (para ver un ejemplo que muestra recomendaciones de inferencia sin servidor, consulte el ejemplo siguiente).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100}
            ]}, 
    'InferenceRecommendations': [{
        'Metrics': {
            'CostPerHour': 0.6899999976158142, 
            'CostPerInference': 1.0332434612791985e-05, 
            'MaximumInvocations': 1113, 
            'ModelLatency': 100000
            }, 
    'EndpointConfiguration': {
        'EndpointName': 'endpoint-name', 
        'VariantName': 'variant-name', 
        'InstanceType': 'ml.c5d.xlarge', 
        'InitialInstanceCount': 3
        }, 
    'ModelConfiguration': {
        'Compiled': False, 
        'EnvironmentParameters': []
        }
    }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0}
    }
```

Las primeras líneas proporcionan información sobre el trabajo de prueba de carga en sí. Esto incluye el nombre del trabajo, el ARN del rol y la hora de creación y eliminación. 

El diccionario `InferenceRecommendations` contiene una lista de recomendaciones de inferencias del Recomendador de Inferencias.

El diccionario `EndpointConfiguration` anidado contiene la recomendación del tipo de instancia (`InstanceType`) junto con el punto final y el nombre de la variante (un modelo de aprendizaje AWS automático implementado) utilizados durante el trabajo de recomendación. Puedes usar el punto de enlace y el nombre de la variante para monitorizar en Amazon CloudWatch Events. Para obtener más información, consulte [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md).

El diccionario anidado `EndpointConfiguration` también contiene la recomendación del número de instancias (`InitialInstanceCount`). Este es el número de instancias que debes aprovisionar en el punto de conexión para cumplir con las `MaxInvocations` especificadas en las `StoppingConditions`. Por ejemplo, si el `InstanceType` es `ml.m5.large` y el `InitialInstanceCount` es `2`, debe aprovisionar 2 instancias `ml.m5.large` para su punto de conexión de modo que pueda gestionar el TPS especificado en la condición de parada `MaxInvocations`.

El diccionario `Metrics` anidado contiene información sobre el coste estimado por hora (`CostPerHour`) del punto final en tiempo real en dólares estadounidenses, el coste estimado por inferencia (`CostPerInference`) del punto final en tiempo real, el número máximo de `InvokeEndpoint` solicitudes enviadas al punto final y la latencia del modelo (`ModelLatency`), que es el intervalo de tiempo (en microsegundos) que el modelo tardó en responder a la IA. SageMaker La latencia del modelo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor del modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

En el siguiente ejemplo se muestra la parte `InferenceRecommendations` de la respuesta de un trabajo de prueba de carga que se configuró para devolver recomendaciones de inferencia sin servidor:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

Puede interpretar las recomendaciones para la inferencia sin servidor de forma similar a los resultados para la inferencia en tiempo real, con la excepción de la `ServerlessConfig`, que indica los valores especcificados para `MaxConcurrency` y `MemorySizeInMB` al configurar la prueba de carga. Las recomendaciones sin servidor también miden la métrica `ModelSetupTime`, que mide (en microsegundos) el tiempo que se tarda en lanzar los recursos de computación en un punto de conexión sin servidor. Para obtener más información sobre la configuración de los puntos de conexión sin servidor, consulte la documentación de Inferencia [sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

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

Recopile métricas con la API `describe-inference-recommendations-job`. Especifique el nombre del trabajo de la prueba de carga para el indicador `job-name`:

```
aws sagemaker describe-inference-recommendations-job --job-name <job-name>
```

En este ejemplo, se devuelve una respuesta de JSON similar a la siguiente: Tenga en cuenta que este ejemplo muestra los tipos de instancias recomendados para la inferencia en tiempo real (para ver un ejemplo que muestra recomendaciones de Inferencia sin servidor, consulte el ejemplo siguiente).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100
            }]
        }, 
    'InferenceRecommendations': [{
        'Metrics': {
        'CostPerHour': 0.6899999976158142, 
        'CostPerInference': 1.0332434612791985e-05, 
        'MaximumInvocations': 1113, 
        'ModelLatency': 100000
        }, 
        'EndpointConfiguration': {
            'EndpointName': 'endpoint-name', 
            'VariantName': 'variant-name', 
            'InstanceType': 'ml.c5d.xlarge', 
            'InitialInstanceCount': 3
            }, 
        'ModelConfiguration': {
            'Compiled': False, 
            'EnvironmentParameters': []
            }
        }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0
        }
    }
```

Las primeras líneas proporcionan información sobre el trabajo de prueba de carga en sí. Esto incluye el nombre del trabajo, el ARN del rol y la hora de creación y eliminación. 

El diccionario `InferenceRecommendations` contiene una lista de recomendaciones de inferencias del Recomendador de Inferencias.

El diccionario `EndpointConfiguration` anidado contiene la recomendación de tipo de instancia (`InstanceType`) junto con el punto final y el nombre de la variante (un modelo de aprendizaje AWS automático implementado) utilizado durante el trabajo de recomendación. Puedes usar el punto de enlace y el nombre de la variante para monitorizar en Amazon CloudWatch Events. Para obtener más información, consulte [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md).

El diccionario `Metrics` anidado contiene información sobre el coste estimado por hora (`CostPerHour`) del punto final en tiempo real en dólares estadounidenses, el coste estimado por inferencia (`CostPerInference`) del punto final en tiempo real, el número máximo de `InvokeEndpoint` solicitudes enviadas al punto final y la latencia del modelo (`ModelLatency`), que es el intervalo de tiempo (en microsegundos) que el modelo tardó en responder a la IA. SageMaker La latencia del modelo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor del modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor.

En el siguiente ejemplo se muestra la parte `InferenceRecommendations` de la respuesta de un trabajo de prueba de carga que se configuró para devolver recomendaciones de inferencia sin servidor:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

Puede interpretar las recomendaciones para la inferencia sin servidor de forma similar a los resultados para la inferencia en tiempo real, con la excepción de la `ServerlessConfig`, que indica los valores especcificados para `MaxConcurrency` y `MemorySizeInMB` al configurar la prueba de carga. Las recomendaciones sin servidor también miden la métrica `ModelSetupTime`, que mide (en microsegundos) el tiempo que se tarda en lanzar los recursos informáticos en un punto de conexión sin servidor. Para obtener más información sobre la configuración de los puntos de conexión sin servidor, consulte la documentación de Inferencia [sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ Amazon SageMaker Studio Classic ]

Las recomendaciones aparecen en una nueva pestaña llamada **Recomendaciones de inferencias** en Studio Classic. Los resultados pueden tardar hasta dos horas en aparecer. Esta pestaña contiene las columnas **Results (Resultados)** y **Details (Detalles)**.

La columna **Details (Detalles)** proporciona información sobre el trabajo de prueba de carga, como el nombre que se le ha dado al trabajo de prueba de carga, cuándo se creó el trabajo (**hora de creación**) y más. También contiene información sobre la **configuración**, como el número máximo de invocaciones que se produjeron por minuto e información sobre los nombres de los recursos de Amazon utilizados.

La columna **Resultados** proporciona ventanas de **objetivos de implementación** y **recomendaciones de SageMaker IA** en las que puede ajustar el orden en que se muestran los resultados en función de la importancia de la implementación. Hay tres menús desplegables en los que puede indicar el nivel de importancia de **Cost (Coste)**, **Latency (Latencia)** y **Throughput (Rendimiento)** para su caso de uso. Para cada objetivo (coste, latencia y rendimiento), puede establecer el nivel de importancia: **Lowest Importance (Importancia mínima)**, **Low Importance (Importancia baja)**, **Moderate importance (Importancia moderada)**, **High importance (Importancia alta)** o **Highest importance (Importancia máxima)**. 

En función de las selecciones de importancia para cada objetivo, Inference Recommender muestra su recomendación principal en el campo de **SageMakerrecomendaciones** de la derecha del panel, junto con el coste estimado por hora y la solicitud de inferencia. También proporciona información sobre la latencia esperada del modelo, el número máximo de invocaciones y el número de instancias.

Además de la recomendación principal que se muestra, también puede ver la misma información para todas las instancias que el Recomendador de inferencias probó en la sección **Todas las ejecuciones**.

------
#### [ SageMaker AI console ]

Puedes ver los resultados de tus pruebas de carga personalizadas en la consola de SageMaker IA de la siguiente manera:

1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, elija el nombre de su trabajo de recomendación de inferencias.

En la página de detalles de tu trabajo, puedes ver las **recomendaciones de inferencia**, que son los tipos de instancias que la SageMaker IA recomienda para tu modelo, como se muestra en la siguiente captura de pantalla.

![\[Captura de pantalla de la lista de recomendaciones de inferencia que aparece en la página de detalles del trabajo de la consola de SageMaker IA.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


En esta sección, puede comparar los tipos de instancias en función de varios factores, como la **latencia del modelo**, el **coste por hora**, el **coste por inferencia** y las **invocaciones por minuto**.

En esta página, también puede ver las configuraciones que especificó para su trabajo. En la sección **Supervisar**, puedes ver las CloudWatch métricas de Amazon que se registraron para cada tipo de instancia. Para obtener más información sobre la interpretación de estas métricas, consulte [Interpretar los resultados](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html).

------

# Detener la prueba de carga
<a name="load-test-stop"></a>

Es posible que desee detener un trabajo que se está ejecutando actualmente si lo inició por error o si ya no necesita ejecutarlo. Detenga los trabajos de prueba de carga mediante programación con la `StopInferenceRecommendationsJob` API o mediante Studio Classic o la consola de SageMaker IA.

------
#### [ AWS SDK para Python (Boto3) ]

Especifique el nombre del trabajo de la prueba de carga para el campo `JobName`:

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

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

Especifique el nombre del trabajo de la prueba de carga para el indicador `job-name`:

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

Cierre la pestaña en la que inició el trabajo de carga personalizado para detener la prueba de carga del Recomendador de inferencias.

------
#### [ SageMaker AI console ]

Para detener el trabajo de prueba de carga a través de la consola de SageMaker IA, haz lo siguiente:

1. Ve a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inference (Interferencia)** y, a continuación, elija **Interference recommender (Reomendador de inferencia**.

1. En la página **Trabajos de recomendador de inferencias**, seleccione su trabajo de prueba de carga.

1. Elija **Stop run (Parar trabajo)**.

1. En el cuadro de diálogo que aparece, elija **Confirm (Confirmar)**.

**Tras detener el trabajo, **Status (Estado)** del trabajo debería cambiar a Stopping (Parando).**

------

# Solucionar los errores del Recomendador de inferencias
<a name="inference-recommender-troubleshooting"></a>

Esta sección contiene información sobre cómo comprender y evitar errores habituales, los mensajes de error que generan y orientación sobre cómo solucionar estos errores.

## Cómo solucionar problemas
<a name="inference-recommender-troubleshooting-how-to"></a>

Puede intentar resolver el error siguiendo los siguientes pasos:
+ Compruebe si has cumplido todos los requisitos previos para utilizar el Recomendador de inferencias. Consulte [Rrequisitos previos del Recomendador de inferencias](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-prerequisites.html).
+ Compruebe que puede implementar su modelo desde el registro de modelos en un punto de conexión y que este puede procesar sus cargas útiles sin errores. Consulte [Implementar un modelo desde el registro](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-deploy.html).
+ Al iniciar un trabajo de recomendación de inferencias, deberías ver cómo se están creando los puntos finales en la consola y podrás revisar los registros. CloudWatch 

## Errores comunes
<a name="inference-recommender-troubleshooting-common"></a>

Consulte la siguiente tabla para ver los errores más comunes del Recomendador de inferencias y sus soluciones.


| Error | Solución | 
| --- | --- | 
|  Especifique `Domain` en el paquete de modelo versión 1. `Domain` es un parámetro obligatorio para el trabajo.  |  Asegúrese de proporcionar el dominio ML o `OTHER` si no se conoce.  | 
|  No se puede asumir el ARN del rol proporcionado y se ha producido un error `AWSSecurityTokenServiceException`.  |  Asegúrese de que el rol de ejecución proporcionado tenga los permisos necesarios especificados en los requisitos previos.  | 
|  Especifique `Framework` en el paquete del modelo versión 1. `Framework` es un parámetro obligatorio para el trabajo.  |  Asegúrese de proporcionar el marco de ML o `OTHER` si no se conoce.  | 
|  Los usuarios al final de la fase anterior son 0, mientras que los usuarios iniciales de la fase actual son 1.  |  Los usuarios aquí se refieren a los usuarios o hilos virtuales que se utilizan para enviar solicitudes. Cada fase comienza con los usuarios A y termina con los usuarios B, de modo que B > A. Entre las fases secuenciales, x\$11 y x\$12, necesitamos que abs (x\$12.a - x\$11.b) <= 3 y >= 0.  | 
|  La duración total del tráfico (transversal) no debe ser superior a la duración del trabajo.  |  La duración total de todas sus fases no puede superar la duración del trabajo.  | 
|  No se permite el tipo de instancia con ráfagas ml.t2.medium.  |  El Recomendador de inferencias no admite las pruebas de carga en la familia de instancias t2 porque las instancias con ráfagas no ofrecen un rendimiento uniforme.  | 
|  ResourceLimitExceeded al llamar a la operación CreateEndpoint  |  Has superado el límite de recursos de SageMaker IA. Por ejemplo, es posible que el Recomendador de inferencias no pueda aprovisionar puntos de enlace para realizar evaluaciones comparativas si la cuenta ha alcanzado la cuota de puntos de conexión. Para obtener más información sobre los límites y las cuotas de SageMaker IA, consulta los [puntos de enlace y las cuotas de Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html).  | 
|  ModelError al llamar a InvokeEndpoint la operación  |  Se puede producir un error de modelo por una de las siguientes razones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 
|  PayloadError al llamar a InvokeEndpoint la operación  |  Se puede producir un error de carga útil por una de las siguientes razones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 

## Compruebe CloudWatch
<a name="inference-recommender-troubleshooting-check-cw"></a>

Al iniciar un trabajo de recomendación de inferencias, debería ver cómo se crean los puntos de conexión en la consola. Seleccione uno de los puntos finales y consulte los CloudWatch registros para detectar cualquier error 4xx/5xx. Si ha realizado correctamente un trabajo de recomendación de inferencias, podrá ver los nombres de los puntos de conexión como parte de los resultados. Incluso si su trabajo de recomendación de inferencias no tiene éxito, puede comprobar los CloudWatch registros para ver los puntos finales eliminados siguiendo los pasos que se indican a continuación:

1. Abre la CloudWatch consola de Amazon en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Seleccione la región en la que creó el trabajo del Recomendador de inferencias en la lista desplegable **Región** situada en la parte superior derecha.

1. En el panel de navegación de CloudWatch, selecciona **Registros** y, a continuación, selecciona **Grupos de registros**.

1. Busque el grupo de registro denominado `/aws/sagemaker/Endpoints/sm-epc-*`. Seleccione el grupo de registro en función de su trabajo de recomendación de inferencias más reciente.

También puede solucionar los problemas de su trabajo consultando los registros del Recomendador de Inferencias. CloudWatch Los registros del Recommender de inferencias, que se publican en el grupo de `/aws/sagemaker/InferenceRecommendationsJobs` CloudWatch registros, ofrecen una visión general del progreso del trabajo en el flujo de registros. `<jobName>/execution` Puede encontrar información detallada sobre cada una de las configuraciones de punto de conexión que se están probando en el flujo de registro `<jobName>/Endpoint/<endpointName>`.

**Descripción general de los flujos de registro del Recomendador de Inferencias**
+ `<jobName>/execution` contiene información general sobre el trabajo, como las configuraciones de los puntos de conexión programados para la evaluación comparativa, el motivo por el que se omite el trabajo de compilación y el motivo del error de validación.
+ `<jobName>/Endpoint/<endpointName>` contiene información como el progreso de la creación de los recursos, la configuración de las pruebas, el motivo de la interrupción de la prueba de carga y el estado de limpieza de los recursos.
+ `<jobName>/CompilationJob/<compilationJobName>` contiene información sobre los trabajos de compilación creados por el Recomendador de inferencias, como la configuración del trabajo de compilación y el estado del trabajo de compilación.

**Crear una alarma para los mensajes de error del Recomendador de inferencias**

El Recomendador de inferencias genera declaraciones de registro para detectar errores que pueden ser útiles a la hora de solucionar problemas. Con un grupo de CloudWatch registros y un filtro de métricas, puede buscar términos y patrones en estos datos de registro a medida que se envían los datos. CloudWatch A continuación, puede crear una CloudWatch alarma basada en el filtro métrico de grupos de registros. Para obtener más información, consulte [Crear una CloudWatch alarma basada en un filtro métrico de grupo de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_alarm_log_group_metric_filter.html).

## Comprobar puntos de referencia
<a name="inference-recommender-troubleshooting-check-benchmarks"></a>

Al iniciar un trabajo de recomendación de inferencias, el Recomendador de inferencias crea varios puntos de referencia para evaluar el rendimiento del modelo en distintos tipos de instancias. Puede usar la [ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API para ver los detalles de todos los puntos de referencia. Si tiene un punto de referencia erróneo, puede ver los motivos del error como parte de los resultados.

Para usar la [ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API, proporciona los siguientes valores:
+ Para `JobName`, indique el nombre del trabajo del Recomendador de inferencias.
+ Para `StepType`, utilice `BENCHMARK` para devolver detalles sobre los puntos de referencia del trabajo.
+ Para `Status`, utilice `FAILED` para devolver detalles solo sobre los puntos de referencia no aprobados. Para ver una lista de los demás tipos de estado, consulta el `Status` campo de la [ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide the job name for the SageMaker Inference Recommender job
job_name = '<job-name>'

# Filter for benchmarks
step_type = 'BENCHMARK' 

# Filter for benchmarks that have a FAILED status
status = 'FAILED'

response = sagemaker_client.list_inference_recommendations_job_steps(
    JobName = job_name,
    StepType = step_type,
    Status = status
)
```

Puede imprimir el objeto de respuesta para ver los resultados. El ejemplo de código anterior almacenó la respuesta en una variable llamada`response`:

```
print(response)
```

# Inferencia en tiempo real
<a name="realtime-endpoints"></a>

 La inferencia en tiempo real es idónea para cargas de trabajo de inferencia con requisitos en tiempo real, interactivos y de baja latencia. Puede implementar su modelo en los servicios de alojamiento de SageMaker IA y obtener un punto final que pueda usarse como inferencia. Estos puntos de conexión están totalmente gestionados y admiten autoescalado (consulte [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md)). 

**Topics**
+ [Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md)
+ [Invocación de modelos para realizar inferencias en tiempo real](realtime-endpoints-test-endpoints.md)
+ [puntos de conexión](realtime-endpoints-manage.md)
+ [Opciones de alojamiento](realtime-endpoints-options.md)
+ [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md)
+ [Volúmenes de almacén de instancias](host-instance-storage.md)
+ [Validación de modelos en producción](model-validation.md)
+ [Explicabilidad en línea con Clarify SageMaker](clarify-online-explainability.md)
+ [Refinamiento de modelos con componentes de inferencia del adaptador](realtime-endpoints-adapt.md)

# Implementación de modelos para inferencia en tiempo real
<a name="realtime-endpoints-deploy-models"></a>

**importante**  
Las políticas de IAM personalizadas que permiten a Amazon SageMaker Studio o Amazon SageMaker Studio Classic crear SageMaker recursos de Amazon también deben conceder permisos para añadir etiquetas a esos recursos. El permiso para añadir etiquetas a los recursos es necesario porque Studio y Studio Classic etiquetan automáticamente todos los recursos que crean. Si una política de IAM permite a Studio y Studio Classic crear recursos, pero no permite el etiquetado, se pueden producir errores de tipo AccessDenied «» al intentar crear recursos. Para obtener más información, consulte [Proporcione permisos para etiquetar los recursos de SageMaker IA](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS políticas gestionadas para Amazon SageMaker AI](security-iam-awsmanpol.md)que otorgan permisos para crear SageMaker recursos ya incluyen permisos para añadir etiquetas al crear esos recursos.

Existen varias opciones para implementar un modelo mediante servicios de alojamiento de SageMaker IA. Puede implementar un modelo de forma interactiva con SageMaker Studio. O bien, puede implementar un modelo mediante programación mediante un AWS SDK, como el SDK de SageMaker Python o el SDK para Python (Boto3). También puede implementarlo mediante. AWS CLI

## Antes de empezar
<a name="deploy-prereqs"></a>

Antes de implementar un modelo de SageMaker IA, localice y tome nota de lo siguiente:
+ El Región de AWS lugar donde se encuentra su bucket de Amazon S3
+ La ruta de URI de Amazon S3 donde se almacenan los artefactos del modelo
+ La función de IAM para la IA SageMaker 
+ La ruta de registro de URI de Amazon ECR de Docker para la imagen personalizada que contiene el código de inferencia, o el marco y la versión de una imagen de Docker integrada que es compatible y por AWS

 Para obtener una lista de las Servicios de AWS disponibles en cada una de ellas Región de AWS, consulte [Region Maps](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) y Edge Networks. Consulte [Creación de roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) para obtener información sobre cómo crear roles de IAM.

**importante**  
El bucket de Amazon S3 donde se almacenan los artefactos del modelo debe almacenarse en la misma Región de AWS que la del modelo que está creando.

## Utilización de recursos compartidos con varios modelos
<a name="deployed-shared-utilization"></a>

Puede implementar uno o más modelos en un punto final con Amazon SageMaker AI. Cuando varios modelos comparten un punto final, utilizan conjuntamente los recursos que están alojados allí, como las instancias de procesamiento de aprendizaje automático y los aceleradores. CPUs La forma más flexible de implementar varios modelos en un punto de conexión es definir cada modelo como un *componente de inferencia*.

### Componentes de inferencias
<a name="inference-components"></a>

Un componente de inferencia es un objeto de alojamiento de SageMaker IA que se puede utilizar para implementar un modelo en un punto final. En la configuración del componente de inferencia, especifique el modelo, el punto de conexión y la forma en que el modelo utiliza los recursos que aloja el punto de conexión. Para especificar el modelo, puede especificar un objeto del modelo de SageMaker IA o puede especificar directamente los artefactos y la imagen del modelo.

En la configuración, puede optimizar la utilización de los recursos adaptando la forma en que se asignan al modelo los aceleradores, la memoria y los núcleos de CPU necesarios. Puede implementar varios componentes de inferencia en un punto de conexión, donde cada componente de inferencia incluya un modelo y las necesidades de utilización de recursos de dicho modelo. 

Tras implementar un componente de inferencia, puedes invocar directamente el modelo asociado cuando utilices la InvokeEndpoint acción en la SageMaker API.

Los componentes de inferencia proporcionan las siguientes ventajas:

**Flexibilidad**  
El componente de inferencia desacopla los detalles del alojamiento del modelo del propio punto de conexión. Esto proporciona más flexibilidad y control sobre cómo se alojan y dan servicio los modelos con un punto de conexión. Puede alojar varios modelos en la misma infraestructura y puede añadir o eliminar modelos de un punto de conexión según sea necesario. Puede actualizar cada modelo de forma independiente.

**Escalabilidad**  
Puede especificar el número de copias de cada modelo que desee alojar y puede establecer un número mínimo de copias para garantizar que el modelo se cargue en la cantidad necesaria para dar servicio a las solicitudes. Puede reducir verticalmente a cero cualquier copia de un componente de inferencia, lo que deja espacio para que otra copia se escale verticalmente. 

SageMaker La IA empaqueta sus modelos como componentes de inferencia cuando los implementa mediante:
+ SageMaker Studio Classic.
+ El SDK de SageMaker Python para implementar un objeto modelo (en el que se establece el tipo de punto final`EndpointType.INFERENCE_COMPONENT_BASED`).
+ El AWS SDK para Python (Boto3) para definir `InferenceComponent` los objetos que se implementan en un punto final.

## Implemente modelos con SageMaker Studio
<a name="deploy-models-studio"></a>

Complete los siguientes pasos para crear e implementar su modelo de forma interactiva a través de SageMaker Studio. Para obtener más información sobre Studio, consulte la documentación de [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html). Para obtener más información sobre varios escenarios de implementación, consulte el blog [Package and deploy modelos de ML clásicos y LLMs fácilmente con Amazon SageMaker AI — Part 2](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-2-interactive-user-experiences-in-sagemaker-studio/).

### Preparación de los artefactos y los permisos
<a name="studio-prereqs"></a>

Complete esta sección antes de crear un modelo en SageMaker Studio.

Tiene dos opciones para traer los artefactos y crear un modelo en Studio:

1. Puede traer un archivo `tar.gz` preempaquetado, que debería incluir los artefactos del modelo, los códigos de inferencia personalizados y todas las dependencias enumeradas en un archivo `requirements.txt`.

1. SageMaker La IA puede empaquetar tus artefactos por ti. Solo tienes que incluir los artefactos del modelo sin procesar y cualquier dependencia en un `requirements.txt` archivo, y la SageMaker IA puede proporcionarte el código de inferencia predeterminado (o puedes anular el código predeterminado por tu propio código de inferencia personalizado). SageMaker La IA admite esta opción para los siguientes marcos:,. PyTorch XGBoost

Además de incorporar tu modelo, tu función AWS Identity and Access Management (de IAM) y un contenedor de Docker (o el marco y la versión deseados para los que SageMaker AI tiene un contenedor prediseñado), también debes conceder permisos para crear e implementar modelos a través SageMaker de AI Studio.

Debes tener la [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)política asociada a tu función de IAM para poder acceder a la SageMaker IA y a otros servicios relevantes. Para ver los precios de los tipos de instancias en Studio, también debes adjuntar la [AWS PriceListServiceFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSPriceListServiceFullAccess.html)política (o, si no quieres adjuntar la política completa, más específicamente, la `pricing:GetProducts` acción).

Si decide cargar los artefactos del modelo al crear un modelo (o cargar un archivo de carga útil de muestra para obtener recomendaciones de inferencia), debe crear un bucket de Amazon S3. El nombre del bucket debe ir precedido de la palabra `SageMaker AI`. También se aceptan capitalizaciones alternativas de SageMaker IA: `Sagemaker` o. `sagemaker`

Recomendamos utilizar la convención de nomenclatura de los buckets `sagemaker-{Region}-{accountID}`. Este bucket se utiliza para almacenar los artefactos que cargue.

Tras crear el bucket, asocie la siguiente política de CORS (uso compartido de recursos entre orígenes) al bucket:

```
[
    {
        "AllowedHeaders": ["*"],
        "ExposeHeaders": ["Etag"],
        "AllowedMethods": ["PUT", "POST"],
        "AllowedOrigins": ['https://*.sagemaker.aws'],
    }
]
```

Puede asociar una política de CORS a un bucket de Amazon S3 mediante cualquiera de los siguientes métodos:
+ A través de la página [Edit cross-origin resource sharing (CORS)](https://s3.console.aws.amazon.com/s3/bucket/bucket-name/property/cors/edit) de la consola de Amazon S3
+ Uso de la API de Amazon S3 [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html)
+ Mediante el put-bucket-cors AWS CLI comando:

  ```
  aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
  ```

### Creación de un modelo implementable
<a name="studio-create-model"></a>

En este paso, debe crear una versión desplegable de su modelo en SageMaker IA proporcionando sus artefactos junto con las especificaciones adicionales, como el contenedor y el marco que desee, cualquier código de inferencia personalizado y la configuración de red.

Cree un modelo desplegable en SageMaker Studio de la siguiente manera:

1. Abre la aplicación SageMaker Studio.

1. En el panel de navegación izquierdo, elija **Models (Modelos)**.

1. Seleccione la pestaña **Modelos implementables**.

1. En la página **Modelos implementables**, elija **Crear**.

1. En la página **Crear modelo implementable**, en el campo **Nombre del modelo**, introduzca un nombre para el modelo.

Hay varias secciones más que puede completar en la página **Crear modelo implementable**.

La sección **Definición de contenedor** tiene un aspecto similar al de la captura de pantalla siguiente:

![\[Captura de pantalla de la sección Definición de contenedor para crear un modelo en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-container-definition.png)


**En la sección **Definición de contenedor**, haga lo siguiente:**

1. En **Tipo de contenedor**, selecciona **Contenedor prediseñado** si quieres usar un contenedor gestionado por SageMaker IA, o selecciona **Traiga su propio contenedor** si tiene su propio contenedor.

1. Si ha seleccionado **Contenedor prediseñado**, seleccione las opciones **Marco del contenedor**, **Versión del marco** y **Tipo de hardware** que desee utilizar.

1. Si ha seleccionado **Traiga su propio contenedor**, introduzca una ruta de Amazon ECR como **Ruta de ECR a la imagen del contenedor**.

A continuación, complete la sección **Artefactos**, que tiene un aspecto similar al de la captura de pantalla siguiente:

![\[Captura de pantalla de la sección Artefactos para crear un modelo en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-artifacts-section.png)


**En la sección **Artefactos**, haga lo siguiente:**

1. Si utilizas uno de los marcos compatibles con la SageMaker IA para empaquetar artefactos modelo (PyTorch o XGBoost), para **Artifacts**, puedes elegir la opción **Cargar artefactos**. Con esta opción, solo tiene que especificar los artefactos del modelo sin procesar, cualquier código de inferencia personalizado que tenga y su archivo requirements.txt, y SageMaker AI se encargará de empaquetar el archivo por usted. Haga lo siguiente:

   1. En **Artefactos**, seleccione **Cargar artefactos** para seguir proporcionando los archivos. De lo contrario, si ya tiene un archivo `tar.gz` que incluye los archivos del modelo, el código de inferencia y el archivo `requirements.txt`, seleccione **Introducir el URI de S3 para los artefactos preempaquetados**.

   1. Si has decidido cargar tus artefactos, para el depósito de **S3**, introduce la ruta de Amazon S3 hasta un depósito en el que quieras que la SageMaker IA almacene tus artefactos después de empaquetarlos por ti. A continuación, complete los pasos siguientes.

   1. En **Cargar artefactos de modelos**, cargue los archivos del modelo.

   1. En **Código de inferencia**, selecciona **Usar código de inferencia predeterminado** si quieres usar el código predeterminado que proporciona la SageMaker IA para realizar inferencias. De lo contrario, seleccione **Cargar código de inferencia personalizado** para utilizar su propio código de inferencia.

   1. En **Cargar requirements.txt**, cargue un archivo de texto que enumere las dependencias que desee instalar en el tiempo de ejecución.

1. Si no utilizas un marco compatible con la SageMaker IA para empaquetar artefactos modelo, Studio te mostrará la opción de **artefactos preempaquetados** y tendrás que proporcionar todos los artefactos ya empaquetados como un archivo. `tar.gz` Haga lo siguiente:

   1. En **Artefactos preempaquetados**, seleccione **Introducir el URI de S3 para los artefactos del modelo preempaquetados** si ya ha cargado el archivo `tar.gz` en Amazon S3. Selecciona **Cargar artefactos modelo preempaquetados** si quieres cargar tu archivo directamente a SageMaker AI.

   1. Si ha seleccionado **Introducir el URI de S3 para los artefactos del modelo preempaquetados**, introduzca la ruta de Amazon S3 al archivo para **URI de S3**. De lo contrario, seleccione y cargue el archivo desde la máquina local.

La siguiente sección es **Seguridad**, que tiene un aspecto similar al de la captura de pantalla siguiente:

![\[Captura de pantalla de la sección Seguridad para crear un modelo en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-security-section.png)


**En la sección **Seguridad**, realice lo siguiente:**

1. En **Rol de IAM**, escriba el ARN de un rol de IAM.

1. (Opcional) En **Nube privada virtual (VPC)**, puede seleccionar una Amazon VPC para almacenar la configuración y los artefactos del modelo.

1. (Opcional) Active el conmutador de **Aislamiento de red** si desea restringir el acceso a Internet por parte del contenedor.

Por último, si lo desea, puede completar la sección **Opciones avanzadas**, que tiene un aspecto similar al de la captura de pantalla siguiente:

![\[Captura de pantalla de la sección Opciones avanzadas para crear un modelo en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-advanced-options.png)


**(Opcional) En la sección **Opciones avanzadas**, realice lo siguiente:**

1. Activa la opción **Recomendaciones de instancias personalizadas** si quieres ejecutar un trabajo de Amazon SageMaker Inference Recommender en tu modelo después de su creación. El Recomendador de inferencias es una característica que le proporciona los tipos de instancias recomendados para optimizar el rendimiento y el costo de las inferencias. Puede ver estas recomendaciones de instancias al prepararse para implementar el modelo.

1. En **Añadir variables de entorno**, introduzca una variable de entorno para el contenedor como pares clave-valor.

1. En **Etiquetas**, introduzca cualquier etiqueta como pares clave-valor.

1. Una vez finalizada la configuración del modelo y del contenedor, elija **Crear modelo implementable**.

Ahora debería tener un modelo en SageMaker Studio listo para su implementación.

### Implementación del modelo
<a name="studio-deploy"></a>

Por último, implemente el modelo que ha configurado en el paso anterior en un punto de conexión HTTPS. Puede implementar un solo modelo o varios modelos en el punto de conexión.

**Compatibilidad con modelos y puntos de conexión**  
Antes de implementar un modelo en un punto de conexión, el modelo y el punto de conexión deben ser compatibles y tener los mismos valores para los siguientes ajustes:  
El rol de IAM
La Amazon VPC, incluidos sus grupos de seguridad y subredes
El aislamiento de red (habilitado o deshabilitado)
Studio impide implementar modelos en puntos de conexión no compatibles de las siguientes maneras:  
Si intentas implementar un modelo en un nuevo punto final, la SageMaker IA configura el punto final con una configuración inicial que sea compatible. Si crea incompatibilidad al cambiar estos ajustes, Studio mostrará una alerta e impedirá la implementación.
Si intenta realizar la implementación en un dispositivo de punto de conexión existente y ese punto de conexión no es compatible, Studio mostrará una alerta e impedirá la implementación. 
Si intenta añadir varios modelos a una implementación, Studio le impedirá implementar modelos que no sean compatibles entre sí.
Si Studio muestra la alerta sobre la incompatibilidad entre el modelo y el punto de conexión, puede seleccionar **Ver detalles** en la alerta para ver los ajustes que no son compatibles.

Una forma de implementar un modelo es hacer lo siguiente en Studio:

1. Abra la aplicación SageMaker Studio.

1. En el panel de navegación izquierdo, elija **Models (Modelos)**.

1. En la página de **modelos**, seleccione uno o más modelos de la lista de modelos de SageMaker IA.

1. Elija **Implementar**.

1. En **Nombre de punto de conexión**, abra el menú desplegable. Puede seleccionar un punto de conexión existente o puede crear un nuevo punto de conexión en el que implementar el modelo.

1. En **Tipo de instancia**, seleccione el tipo de instancia que desea utilizar para el punto de conexión. Si anteriormente ha realizado un trabajo de Recomendador de inferencias para el modelo, los tipos de instancias recomendados aparecerán en la lista en el título **Recomendado**. De lo contrario, se mostrarán algunas **Instancias potenciales** que podrían ser adecuadas para el modelo.
**Compatibilidad de tipos de instancia para JumpStart**  
Si vas a implementar un JumpStart modelo, Studio solo muestra los tipos de instancias compatibles con el modelo.

1. En **Recuento inicial de instancias**, introduzca el número inicial de instancias que le gustaría aprovisionar para el punto de conexión.

1. En **Recuento máximo de instancias**, especifique el número máximo de instancias que el punto de conexión puede aprovisionar cuando se escale verticalmente para adaptarse a un aumento del tráfico.

1. Si el modelo que vas a implementar es uno de los más utilizados en el centro JumpStart LLMs de modelos, la opción **Configuraciones alternativas** aparece después de los campos tipo de instancia y recuento de instancias.

   Para las más populares JumpStart LLMs, AWS tiene tipos de instancias previamente evaluados para optimizar el costo o el rendimiento. Estos datos pueden ayudarle a decidir el tipo de instancia que desea usar para implementar el LLM. Elija **Configuraciones alternativas** para abrir un cuadro de diálogo que incluya los datos previamente evaluados. El panel tiene un aspecto similar al de la captura de pantalla siguiente:  
![\[Captura de pantalla del cuadro Configuraciones alternativas\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-jumpstart-alternate-configurations.png)

   En el cuadro **Configuraciones alternativas**, haga lo siguiente:

   1. Seleccione un tipo de instancia. Puede elegir **Costo por hora** o **Mejor rendimiento** para ver los tipos de instancias que optimizan el costo o el rendimiento para el modelo especificado. También puedes elegir **Otras instancias compatibles** para ver una lista de otros tipos de instancias que son compatibles con el JumpStart modelo. Tenga en cuenta que al seleccionar aquí un tipo de instancia se sobrescribirá cualquier selección de instancia anterior especificada en el paso 6.

   1. (Opcional) Active el conmutador de **Personalizar la configuración seleccionada** para especificar las opciones **Número total máximo de tokens** (el número máximo de tokens que desea permitir, que es la suma de los tokens de entrada y la salida generada por el modelo), **Longitud máxima del token de entrada** (el número máximo de tokens que desea permitir para la entrada de cada solicitud) y **Número máximo de solicitudes simultáneas** (el número máximo de solicitudes que el modelo puede procesar a la vez).

   1. Elija **Seleccionar** para confirmar el tipo de instancia y los ajustes de configuración.

1. El campo **Modelo** ya debería estar completado con el nombre del modelo o los modelos que va a implementar. Puede elegir **Añadir modelo** para añadir más modelos a la implementación. En cada modelo que añada, complete los siguientes campos:

   1. En **Número de núcleos de CPU**, introduzca los núcleos de CPU que desea dedicar al uso del modelo.

   1. En **Número mínimo de copias**, introduzca el número mínimo de copias del modelo que desee alojar en el punto de conexión en un momento determinado.

   1. En **Memoria mínima de CPU (MB)**, introduzca la cantidad mínima de memoria (en MB) que requiere el modelo.

   1. En **Memoria máxima de CPU (MB)**, introduzca la cantidad máxima de memoria (en MB) que desea permitir que utilice el modelo.

1. (Opcional) En **Opciones avanzadas**, realice lo siguiente:

   1. Para el **rol de IAM**, usa el rol de ejecución de IAM de SageMaker IA predeterminado o especifica tu propio rol con los permisos que necesitas. Tenga en cuenta que este rol de IAM debe ser el mismo que el que ha especificado al crear el modelo implementable.

   1. En **Nube privada virtual (VPC)**, puede especificar una VPC en la que desee alojar el punto de conexión.

   1. En la **clave KMS de cifrado**, seleccione una AWS KMS clave para cifrar los datos del volumen de almacenamiento adjunto a la instancia de procesamiento de aprendizaje automático que aloja el punto final.

   1. Active el conmutador de **Habilitar el aislamiento de red** para restringir el acceso a Internet por parte del contenedor.

   1. En **Configuración de tiempo de espera**, introduzca los valores de los campos **Tiempo de espera de descarga de datos del modelo (segundos)** y **Tiempo de espera de comprobación de estado de inicio del contenedor (segundos)**. Estos valores determinan el tiempo máximo que permite la SageMaker IA para descargar el modelo en el contenedor y ponerlo en marcha, respectivamente.

   1. En **Etiquetas**, introduzca cualquier etiqueta como pares clave-valor.
**nota**  
SageMaker La IA configura la función de IAM, la VPC y los ajustes de aislamiento de la red con valores iniciales que son compatibles con el modelo que se está implementando. Si crea incompatibilidad al cambiar estos ajustes, Studio mostrará una alerta e impedirá la implementación.

Tras configurar las opciones, la página tendrá un aspecto similar al de la captura de pantalla siguiente.

![\[Captura de pantalla de la página Implementar modelo en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-deploy-realtime-model-2.png)


Tras configurar la implementación, elija **Implementar** para crear el punto de conexión e implementar el modelo.

## Implemente modelos con Python SDKs
<a name="deploy-models-python"></a>

Con el SDK de SageMaker Python, puede crear su modelo de dos maneras. La primera consiste en crear un objeto de modelo a partir de la clase `Model` o `ModelBuilder`. Si utiliza la clase `Model` para crear el objeto `Model`, debe especificar el paquete del modelo o el código de inferencia (según el servidor del modelo), los scripts para administrar la serialización y deserialización de los datos entre el cliente y el servidor y cualquier dependencia que deba cargarse en Amazon S3 para su consumo. La segunda manera de crear el modelo consiste en utilizar `ModelBuilder` para el que proporciona los artefactos del modelo o el código de inferencia. `ModelBuilder` captura automáticamente las dependencias, infiere las funciones de serialización y deserialización necesarias y empaqueta las dependencias para crear el objeto `Model`. Para obtener más información acerca de `ModelBuilder`, consulte [Cree un modelo en Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

En la siguiente sección se describen ambos métodos para crear el modelo e implementar el objeto de modelo.

### Configuración
<a name="python-setup"></a>

En los siguientes ejemplos se prepara el proceso de implementación de un modelo. Importan las bibliotecas necesarias y definen la URL de S3 que localiza los artefactos del modelo.

------
#### [ SageMaker Python SDK ]

**Example instrucciones de importación**  
El siguiente ejemplo importa módulos del SDK de SageMaker Python, el SDK para Python (Boto3) y la biblioteca estándar de Python. En estos módulos se proporcionan métodos útiles que le ayudan a implementar modelos, y se utilizan en el resto de los ejemplos que aparecen a continuación.  

```
import boto3
from datetime import datetime
from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements
from sagemaker.predictor import Predictor
from sagemaker.enums import EndpointType
from sagemaker.model import Model
from sagemaker.session import Session
```

------
#### [ boto3 inference components ]

**Example instrucciones de importación**  
En los siguientes ejemplos se importan módulos desde el SDK de Python (Boto3) y la biblioteca estándar de Python. En estos módulos se proporcionan métodos útiles que le ayudan a implementar modelos, y se utilizan en el resto de los ejemplos que aparecen a continuación.  

```
import boto3
import botocore
import sys
import time
```

------
#### [ boto3 models (without inference components) ]

**Example instrucciones de importación**  
En los siguientes ejemplos se importan módulos desde el SDK de Python (Boto3) y la biblioteca estándar de Python. En estos módulos se proporcionan métodos útiles que le ayudan a implementar modelos, y se utilizan en el resto de los ejemplos que aparecen a continuación.  

```
import boto3
import botocore
import datetime
from time import gmtime, strftime
```

------

**Example URL de artefactos del modelo**  
El siguiente código crea un ejemplo de URL de Amazon S3. La URL localiza los artefactos del modelo de un modelo previamente entrenado en un bucket de Amazon S3.  

```
# Create a variable w/ the model S3 URL

# The name of your S3 bucket:
s3_bucket = "amzn-s3-demo-bucket"
# The directory within your S3 bucket your model is stored in:
bucket_prefix = "sagemaker/model/path"
# The file name of your model artifact:
model_filename = "my-model-artifact.tar.gz"
# Relative S3 path:
model_s3_key = f"{bucket_prefix}/"+model_filename
# Combine bucket name, model file name, and relate S3 path to create S3 model URL:
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```
La URL completa de Amazon S3 se almacena en la variable `model_url`, que se utiliza en los ejemplos siguientes. 

### Descripción general de
<a name="python-overview"></a>

Existen varias formas de implementar modelos con el SDK de SageMaker Python o el SDK para Python (Boto3). En las siguientes secciones se resumen los pasos que debe seguir para varios métodos posibles. Estos pasos se muestran en los ejemplos siguientes.

------
#### [ SageMaker Python SDK ]

Con el SDK de SageMaker Python, puede crear su modelo de cualquiera de las siguientes maneras:
+ **Crear un objeto de modelo a partir de la clase `Model`**: debe especificar el paquete del modelo o el código de inferencia (en función del servidor modelo), los scripts para administrar la serialización y deserialización de los datos entre el cliente y el servidor y cualquier dependencia que deba cargarse en Amazon S3 para su consumo. 
+ **Crear un objeto de modelo a partir de la clase `ModelBuilder`**: debe proporcionar artefactos del modelo o el código de inferencia, y `ModelBuilder` captura automáticamente las dependencias, infiere las funciones de serialización y deserialización necesarias y empaqueta las dependencias para crear el objeto `Model`.

  Para obtener más información acerca de `ModelBuilder`, consulte [Cree un modelo en Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md). También puede consultar el blog [Package and deploy modelos de ML clásicos y LLMs fácilmente con SageMaker AI — Part 1](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-1-pysdk-improvements/) para obtener más información.

En los ejemplos siguientes se describen ambos métodos para crear el modelo e implementar el objeto de modelo. Para eliminar un modelo de estas formas, complete los siguientes pasos:

1. Defina los recursos del punto de conexión que se van a asignar al modelo con un objeto `ResourceRequirements`.

1. Cree un objeto de modelo a partir de las clases `Model` o `ModelBuilder`. El objeto `ResourceRequirements` se especifica en la configuración del modelo.

1. Implemente el modelo en un punto de conexión mediante el método `deploy` del objeto `Model`.

------
#### [ boto3 inference components ]

En los ejemplos siguientes se muestra cómo asignar un modelo a un componente de inferencia y cómo implementarlo en un punto de conexión. Para eliminar un modelo de esta forma, complete los siguientes pasos:

1. (Opcional) Cree un objeto de modelo de SageMaker IA mediante el [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)método.

1. Especifique la configuración del punto de conexión mediante la creación de un objeto de configuración del punto de conexión. Para crear uno, utilice el método [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config).

1. Cree el punto de conexión mediante el método [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) y, en la solicitud, proporcione la configuración del punto de conexión que ha creado.

1. Cree un componente de inferencia mediante el método `create_inference_component`. En la configuración, puede especificar un modelo mediante uno de los siguientes métodos:
   + Especificar un objeto de modelo de SageMaker IA
   + Especificación del URI de la imagen del modelo y la URL de S3

   También se asignan recursos de punto de conexión al modelo. Al crear el componente de inferencia, se implementa el modelo en el punto de conexión. Puede implementar varios modelos en un punto de conexión mediante la creación de varios componentes de inferencia, uno para cada modelo.

------
#### [ boto3 models (without inference components) ]

En los ejemplos siguientes se muestra cómo crear un objeto de modelo y cómo implementarlo en un punto de conexión. Para eliminar un modelo de esta forma, complete los siguientes pasos:

1. Cree un modelo de SageMaker IA mediante el [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)método.

1. Especifique la configuración del punto de conexión mediante la creación de un objeto de configuración del punto de conexión. Para crear uno, utilice el método [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config). En la configuración del punto de conexión, asigne el objeto de modelo a una variante de producción.

1. Cree el punto de conexión mediante el método [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html). En la solicitud, proporcione la configuración del punto de conexión que ha creado. 

   Al crear el punto final, la SageMaker IA aprovisiona los recursos del punto final y despliega el modelo en el punto final.

------

### Configuración
<a name="python-configure"></a>

En los siguientes ejemplos se configuran los recursos que necesita para implementar un modelo en un punto de conexión.

------
#### [ SageMaker Python SDK ]

En el siguiente ejemplo se asignan recursos de punto de conexión a un modelo con un objeto `ResourceRequirements`. Entre estos recursos se incluyen los núcleos de CPU, los aceleradores y la memoria. A continuación, en el ejemplo se crea un objeto de modelo a partir de la clase `Model`. Como alternativa, puede crear un objeto modelo creando una instancia de la [ModelBuilder](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-modelbuilder-creation.html)clase y ejecutándola`build`; este método también se muestra en el ejemplo. `ModelBuilder`proporciona una interfaz unificada para el empaquetado de modelos y, en este caso, prepara un modelo para la implementación de un modelo grande. En el ejemplo se utiliza `ModelBuilder` para construir crear un modelo de Hugging Face (También puede aprobar un JumpStart modelo). Una vez creado el modelo, puede especificar los requisitos de recursos en el objeto de modelo. En el siguiente paso utilice este objeto para implementar el modelo en un punto de conexión. 

```
resources = ResourceRequirements(
    requests = {
        "num_cpus": 2,  # Number of CPU cores required:
        "num_accelerators": 1, # Number of accelerators required
        "memory": 8192,  # Minimum memory required in Mb (required)
        "copies": 1,
    },
    limits = {},
)

now = datetime.now()
dt_string = now.strftime("%d-%m-%Y-%H-%M-%S")
model_name = "my-sm-model"+dt_string

# build your model with Model class
model = Model(
    name = "model-name",
    image_uri = "image-uri",
    model_data = model_url,
    role = "arn:aws:iam::111122223333:role/service-role/role-name",
    resources = resources,
    predictor_cls = Predictor,
)
                        
# Alternate mechanism using ModelBuilder
# uncomment the following section to use ModelBuilder
/*
model_builder = ModelBuilder(
    model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf"
    schema_builder=SchemaBuilder(sample_input,sample_output),
    env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" }
)

# build your Model object
model = model_builder.build()

# create a unique name from string 'mb-inference-component'
model.model_name = unique_name_from_base("mb-inference-component")

# assign resources to your model
model.resources = resources
*/
```

------
#### [ boto3 inference components ]

En el siguiente ejemplo se configura un punto de conexión con el método `create_endpoint_config`. Esta configuración se asigna a un punto de conexión al crearlo. En la configuración, debe definir una o varias variantes de producción. Para cada variante, puede elegir el tipo de instancia que desea que Amazon SageMaker AI aprovisione y puede habilitar el escalado de instancias gestionado.

```
endpoint_config_name = "endpoint-config-name"
endpoint_name = "endpoint-name"
inference_component_name = "inference-component-name"
variant_name = "variant-name"

sagemaker_client.create_endpoint_config(
    EndpointConfigName = endpoint_config_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    ProductionVariants = [
        {
            "VariantName": variant_name,
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1,
            "ManagedInstanceScaling": {
                "Status": "ENABLED",
                "MinInstanceCount": 1,
                "MaxInstanceCount": 2,
            },
        }
    ],
)
```

------
#### [ boto3 models (without inference components) ]

**Example definición del modelo**  
En el siguiente ejemplo, se define un modelo de SageMaker IA con el `create_model` método de AWS SDK para Python (Boto3).  

```
model_name = "model-name"

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    PrimaryContainer = {
        "Image": "image-uri",
        "ModelDataUrl": model_url,
    }
)
```
En este ejemplo se especifica lo siguiente:  
+ `ModelName`: un nombre para el modelo (en este ejemplo, se almacena como una variable de cadena llamada `model_name`).
+ `ExecutionRoleArn`: El nombre del recurso de Amazon (ARN) de la función de IAM que Amazon SageMaker AI puede asumir para acceder a los artefactos del modelo y a las imágenes de Docker para su implementación en instancias de procesamiento de aprendizaje automático o para trabajos de transformación por lotes.
+ `PrimaryContainer`: la ubicación de la imagen de Docker principal que contiene el código de inferencia, los artefactos asociados y mapas de entorno personalizados que el código de inferencia utiliza cuando el modelo se implementa para predicciones.

**Example configuración de punto de enlace**  
En el siguiente ejemplo se configura un punto de conexión con el método `create_endpoint_config`. Amazon SageMaker AI usa esta configuración para implementar modelos. En la configuración, identificas uno o más modelos, creados con el `create_model` método, para implementar los recursos que deseas que Amazon SageMaker AI aprovisione.  

```
endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName = "endpoint-config-name", 
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint:
    ProductionVariants = [
        {
            "VariantName": "variant-name", # The name of the production variant.
            "ModelName": model_name, 
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ]
)
```
En este ejemplo se especifican las siguientes claves para el campo `ProductionVariants`:  
+ `VariantName`: el nombre de la variante de producción.
+ `ModelName`: el nombre del modelo que se desea alojar. Este es el nombre que ha especificado al crear el modelo.
+ `InstanceType`: el tipo de instancia de cómputo. Consulte el `InstanceType` campo correspondiente a los [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html) [precios de la SageMaker IA](https://aws.amazon.com/sagemaker/pricing/) para ver una lista de los tipos de instancias de procesamiento compatibles y los precios de cada tipo de instancia.

------

### Implementación
<a name="python-deploy"></a>

En los siguientes ejemplos se implementa un modelo en un punto de conexión.

------
#### [ SageMaker Python SDK ]

En el siguiente ejemplo se implementa el modelo en un punto de conexión HTTPS en tiempo real con el método `deploy` del objeto de modelo. Si especifica un valor para el argumento `resources` tanto para la creación como para la implementación del modelo, prevalecerán los recursos que especifique para la implementación.

```
predictor = model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    resources = resources,
)
```

En el campo `instance_type`, en el ejemplo se especifica el nombre del tipo de instancia de Amazon EC2 para el modelo. En el campo `initial_instance_count`, se especifica el número inicial de instancias en las que se ejecutará el punto de conexión.

En el siguiente ejemplo de código se muestra otro caso en el que se implementa un modelo en un punto de conexión y, a continuación, se implementa otro modelo en el mismo punto de conexión. En este caso, debe proporcionar el mismo nombre de punto de conexión a los métodos `deploy` de ambos modelos.

```
# Deploy the model to inference-component-based endpoint
falcon_predictor = falcon_model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"
    resources = resources,
)

# Deploy another model to the same inference-component-based endpoint
llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"  # same endpoint name as for falcon model
)
```

------
#### [ boto3 inference components ]

Una vez que tenga una configuración del punto de conexión, utilice el método [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) para crearlo. El nombre del punto de conexión debe ser único dentro y fuera Región de AWS de tu AWS cuenta. 

En el siguiente ejemplo se crea un punto de conexión mediante la configuración especificada en la solicitud. Amazon SageMaker AI usa el punto final para aprovisionar recursos.

```
sagemaker_client.create_endpoint(
    EndpointName = endpoint_name,
    EndpointConfigName = endpoint_config_name,
)
```

Una vez creado un punto de conexión, puede implementar uno o varios modelos en él mediante la creación de componentes de inferencia. En el siguiente ejemplo se crea uno con el método `create_inference_component`.

```
sagemaker_client.create_inference_component(
    InferenceComponentName = inference_component_name,
    EndpointName = endpoint_name,
    VariantName = variant_name,
    Specification = {
        "Container": {
            "Image": "image-uri",
            "ArtifactUrl": model_url,
        },
        "ComputeResourceRequirements": {
            "NumberOfCpuCoresRequired": 1, 
            "MinMemoryRequiredInMb": 1024
        }
    },
    RuntimeConfig = {"CopyCount": 2}
)
```

------
#### [ boto3 models (without inference components) ]

**Example Implementación**  

Proporcione la configuración del punto final a SageMaker AI. El servicio inicia las instancias de cómputo de ML e implementa el modelo o los modelos según se especifica en la configuración.

Una vez que tenga una configuración del modelo y del punto de conexión, utilice el método [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) para el punto de conexión. El nombre del punto final debe ser único Región de AWS en su AWS cuenta. 

En el siguiente ejemplo se crea un punto de conexión mediante la configuración especificada en la solicitud. Amazon SageMaker AI usa el punto final para aprovisionar recursos e implementar modelos.

```
create_endpoint_response = sagemaker_client.create_endpoint(
    # The endpoint name must be unique within an AWS Region in your AWS account:
    EndpointName = "endpoint-name"
    # The name of the endpoint configuration associated with this endpoint:
    EndpointConfigName = "endpoint-config-name")
```

------

## Implemente modelos con AWS CLI
<a name="deploy-models-cli"></a>

Puede implementar un modelo en un punto final mediante el AWS CLI.

### Descripción general de
<a name="deploy-models-cli-overview"></a>

Al implementar un modelo con AWS CLI, puede implementarlo con o sin un componente de inferencia. En las secciones siguientes se resumen los comandos que se ejecutan en ambos métodos. Estos comandos se muestran en los ejemplos siguientes.

------
#### [ With inference components ]

Para implementar un modelo con un componente de inferencia, realice lo siguiente:

1. (Opcional) Cree un modelo con el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html).

1. Especifique la configuración del punto de conexión mediante la creación de una configuración del punto de conexión. Para crear una, ejecute el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html).

1. Cree el punto de conexión mediante el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). En el cuerpo del comando, especifique la configuración del punto de conexión que ha creado.

1. Cree un componente de inferencia mediante el comando `create-inference-component`. En la configuración, puede especificar un modelo mediante uno de los siguientes métodos:
   + Especificar un objeto de modelo de SageMaker IA
   + Especificación del URI de la imagen del modelo y la URL de S3

   También se asignan recursos de punto de conexión al modelo. Al crear el componente de inferencia, se implementa el modelo en el punto de conexión. Puede implementar varios modelos en un punto de conexión mediante la creación de varios componentes de inferencia, uno para cada modelo.

------
#### [ Without inference components ]

Para implementar un modelo sin un componente de inferencia, realice lo siguiente:

1. Cree un modelo de SageMaker IA mediante el [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html)comando.

1. Especifique la configuración del punto de conexión mediante la creación de un objeto de configuración del punto de conexión. Para crear uno, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html). En la configuración del punto de conexión, asigne el objeto de modelo a una variante de producción.

1. Cree el punto de conexión mediante el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). En el cuerpo del comando, especifique la configuración del punto de conexión que ha creado.

   Al crear el punto final, la SageMaker IA aprovisiona los recursos del punto final y despliega el modelo en el punto final.

------

### Configuración
<a name="cli-configure-endpoint"></a>

En los siguientes ejemplos se configuran los recursos que necesita para implementar un modelo en un punto de conexión.

------
#### [ With inference components ]

**Example create-endpoint-config comando**  
En el siguiente ejemplo, se crea una configuración de punto final con el [create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)comando.  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\
--production-variants file://production-variants.json
```
En este ejemplo el archivo `production-variants.json` define una variante de producción con el siguiente JSON:  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------
#### [ Without inference components ]

**Example Comando create-model**  
En el siguiente ejemplo se crea un modelo con el comando [create-model](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html).  

```
aws sagemaker create-model \
--model-name model-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \
--primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name"
}
```

**Example create-endpoint-config comando**  
En el siguiente ejemplo, se crea una configuración de punto final con el [create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)comando.  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--production-variants file://production-variants.json
```
En este ejemplo el archivo `production-variants.json` define una variante de producción con el siguiente JSON:  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------

### Implementación
<a name="cli-deploy"></a>

En los siguientes ejemplos se implementa un modelo en un punto de conexión.

------
#### [ With inference components ]

**Example Comando create-endpoint**  
En el siguiente ejemplo se crea un punto de conexión con el comando [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html).  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

**Example create-inference-component comando**  
El siguiente ejemplo crea un componente de inferencia con el create-inference-component comando.  

```
aws sagemaker create-inference-component \
--inference-component-name inference-component-name \
--endpoint-name endpoint-name \
--variant-name variant-name \
--specification file://specification.json \
--runtime-config "{\"CopyCount\": 2}"
```
En este ejemplo el archivo `specification.json` define el contenedor y los recursos de computación con el siguiente JSON:  

```
{
    "Container": {
        "Image": "image-uri",
        "ArtifactUrl": "model-s3-url"
    },
    "ComputeResourceRequirements": {
        "NumberOfCpuCoresRequired": 1,
        "MinMemoryRequiredInMb": 1024
    }
}
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name"
}
```

------
#### [ Without inference components ]

**Example Comando create-endpoint**  
En el siguiente ejemplo se crea un punto de conexión con el comando [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html).  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
Si el comando se ejecuta correctamente, AWS CLI responde con el ARN del recurso que ha creado.  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

------

# Invocación de modelos para realizar inferencias en tiempo real
<a name="realtime-endpoints-test-endpoints"></a>

Después de usar Amazon SageMaker AI para implementar un modelo en un punto final, puede interactuar con el modelo enviándole solicitudes de inferencia. Para enviar una solicitud de inferencia a un modelo, debe invocar el punto de conexión que lo aloja. Puede invocar sus puntos de enlace mediante Amazon SageMaker Studio AWS SDKs, el o el. AWS CLI

## Invoca tu modelo con Amazon Studio SageMaker
<a name="realtime-endpoints-test-endpoints-studio"></a>

Después de implementar el modelo en un punto final, puede ver el punto final a través de Amazon SageMaker Studio y probarlo enviando solicitudes de inferencia únicas.

**nota**  
SageMaker La IA solo admite las pruebas de puntos de enlace en Studio para puntos de enlace en tiempo real.

**Para enviar una solicitud de inferencia de prueba a su punto de conexión**

1. Abre Amazon SageMaker Studio.

1. En el panel de navegación de la izquierda, elija **Implementaciones**.

1. En el menú desplegable, selecciona **Puntos de conexión**.

1. Busque su punto de conexión por nombre y elija el nombre en la tabla. Los nombres de los puntos de conexión que aparecen en el panel **Puntos de conexión** se definen al implementar un modelo. El espacio de trabajo de Studio abre la página **Punto de conexión** en una pestaña nueva.

1. Seleccione la pestaña **Probar inferencia**.

1. En **Opciones de prueba**, seleccione una de las siguientes opciones:

   1. Seleccione **Probar la solicitud de ejemplo** para enviar inmediatamente una solicitud al punto de conexión. Utilice la opción **Editor JSON** para proporcionar datos de ejemplo en formato JSON y elija **Enviar solicitud** para enviar la solicitud al punto de conexión. Después de enviar la solicitud, Studio muestra el resultado de la inferencia en una tarjeta a la derecha del editor JSON.

   1. Seleccione **Usar código de ejemplo del Python SDK** para ver el código para enviar una solicitud al punto de conexión. A continuación, copie el ejemplo de código de la sección **Ejemplo de solicitud de inferencia** y ejecute el código en el entorno de pruebas.

La parte superior de la tarjeta muestra el tipo de solicitud que se envió al punto de conexión (solo se acepta JSON). La tarjeta muestra los campos siguientes:
+ **Estado**: muestra uno de los siguientes tipos de estado:
  + `Success`: la solicitud se ha realizado correctamente.
  + `Failed`: error en la solicitud. Aparece una respuesta en **Motivo del error**.
  + `Pending`: mientras la solicitud de inferencia está pendiente, el estado muestra un icono circular giratorio.
+ **Duración de la ejecución**: tiempo que duró la invocación (hora de finalización menos hora de inicio) en milisegundos.
+ **Tiempo de solicitud**: cuántos minutos han transcurrido desde que se envió la solicitud.
+ **Tiempo de resultado**: cuántos minutos han transcurrido desde que se envió la solicitud.

## Invoque su modelo mediante el AWS SDK para Python (Boto3)
<a name="realtime-endpoints-test-endpoints-api"></a>

Si desea invocar un punto final del modelo en el código de su aplicación, puede utilizar uno de los AWS SDKs, incluido el. AWS SDK para Python (Boto3) Para invocar el punto de conexión con este SDK, utilice uno de los siguientes métodos de Python:
+ `invoke_endpoint`: envía una solicitud de inferencia a un punto de conexión del modelo y devuelve la respuesta que genera el modelo. 

  Este método devuelve la carga útil de inferencia como respuesta cuando el modelo termina de generarla. Para obtener más información, consulte [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime/client/invoke_endpoint.html) en la Referencia de la API del SDK *AWS para Python (Boto3)*.
+ `invoke_endpoint_with_response_stream`: envía una solicitud de inferencia a un punto de conexión del modelo y transmite la respuesta de forma incremental mientras el modelo la genera. 

  Con este método, la aplicación recibe partes de la respuesta a medida que están disponibles. Para obtener más información, consulte [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime/client/invoke_endpoint.html) en la Referencia de la API del SDK *AWS para Python (Boto3)*.

  Utilice este método únicamente para invocar modelos que admitan streaming de inferencias.

Antes de poder utilizar estos métodos en el código de la aplicación, debe inicializar un cliente de SageMaker AI Runtime y especificar el nombre del punto final. En el siguiente ejemplo, se configuran el cliente y el punto de conexión para el resto de los ejemplos:

```
import boto3

sagemaker_runtime = boto3.client(
    "sagemaker-runtime", region_name='aws_region')

endpoint_name='endpoint-name'
```

### Invocar para obtener una respuesta de inferencia
<a name="test-invoke-endpoint"></a>

En el siguiente ejemplo se utiliza el método `invoke_endpoint` para invocar un punto de conexión con AWS SDK para Python (Boto3):

```
# Gets inference from the model hosted at the specified endpoint:
response = sagemaker_runtime.invoke_endpoint(
    EndpointName=endpoint_name, 
    Body=bytes('{"features": ["This is great!"]}', 'utf-8')
    )

# Decodes and prints the response body:
print(response['Body'].read().decode('utf-8'))
```

En este ejemplo, se proporcionan datos de entrada en el `Body` campo para que la SageMaker IA los pase al modelo. Estos datos deben tener el mismo formato que se utilizó para el entrenamiento. El ejemplo almacena la respuesta en la variable `response`.

La variable `response` proporciona acceso al estado HTTP, al nombre del modelo implementado y a otros campos. El siguiente fragmento de código imprime el código del estado HTTP:

```
print(response["HTTPStatusCode"])
```

### Invocar para transmitir una respuesta de inferencia
<a name="test-invoke-endpoint-with-response-stream"></a>

Si implementó un modelo que admite streaming de inferencias, puede invocar el modelo para recibir su carga útil de inferencia como un flujo de partes. El modelo entrega estas partes de forma incremental a medida que las genera. Cuando una aplicación recibe un flujo de inferencia, no necesita esperar a que el modelo genere toda la carga útil de respuesta. Por el contrario, la aplicación recibe inmediatamente partes de la respuesta a medida que están disponibles. 

Al consumir un flujo de inferencia en la aplicación, puede crear interacciones en las que los usuarios perciban que la inferencia es rápida, ya que obtienen la primera parte de forma inmediata. Puede implementar la transmisión en streaming para que admita experiencias interactivas rápidas, como chatbots, asistentes virtuales y generadores de música. Por ejemplo, puede crear un chatbot que muestre de forma incremental el texto generado por un modelo de lenguaje grande (LLM).

Para obtener una transmisión de inferencia, puede usar el método `invoke_endpoint_with_response_stream`. En el cuerpo de la respuesta, el SDK proporciona un objeto `EventStream`, que proporciona la inferencia en forma de una serie de objetos `PayloadPart`.

**Example Flujo de inferencia**  
A continuación se muestra un ejemplo de objetos `PayloadPart`:  

```
{'PayloadPart': {'Bytes': b'{"outputs": [" a"]}\n'}}
{'PayloadPart': {'Bytes': b'{"outputs": [" challenging"]}\n'}}
{'PayloadPart': {'Bytes': b'{"outputs": [" problem"]}\n'}}
. . .
```
En cada parte de la carga útil, el campo `Bytes` proporciona una parte de la respuesta de inferencia del modelo. Esta parte puede ser cualquier tipo de contenido que genere un modelo, como datos de texto, imagen o audio. En este ejemplo, las partes son objetos JSON que contienen texto generado a partir de un LLM.  
La parte de carga útil suele contener un fragmento discreto de datos del modelo. En este ejemplo, los fragmentos discretos son objetos JSON completos. Algunas veces, la respuesta de streaming divide los fragmentos en varias partes de la carga útil o combina varios fragmentos en una sola parte de la carga útil. En el siguiente ejemplo se muestra un fragmento de datos en formato JSON dividido en dos partes de carga útil:  

```
{'PayloadPart': {'Bytes': b'{"outputs": '}}
{'PayloadPart': {'Bytes': b'[" problem"]}\n'}}
```
Cuando escriba el código de una aplicación que procesa un flujo de inferencia, incluya la lógica que gestiona estas divisiones y combinaciones ocasionales de los datos. Como estrategia, puede escribir código que concatene el contenido de `Bytes` mientras la aplicación recibe las partes de la carga. Al concatenar aquí los datos JSON del ejemplo, se combinan los datos en un cuerpo JSON delimitado por nuevas líneas. A continuación, el código podría procesar el flujo analizando todo el objeto JSON en cada línea.  
El siguiente ejemplo muestra el JSON delimitado por nuevas líneas que crearía al concatenar el contenido del ejemplo de `Bytes`:  

```
{"outputs": [" a"]}
{"outputs": [" challenging"]}
{"outputs": [" problem"]}
. . .
```

**Example Código para procesar un flujo de inferencia**  

El siguiente ejemplo de clase de Python, `SmrInferenceStream`, demuestra cómo se puede procesar un flujo de inferencia que envía datos de texto en formato JSON:

```
import io
import json

# Example class that processes an inference stream:
class SmrInferenceStream:
    
    def __init__(self, sagemaker_runtime, endpoint_name):
        self.sagemaker_runtime = sagemaker_runtime
        self.endpoint_name = endpoint_name
        # A buffered I/O stream to combine the payload parts:
        self.buff = io.BytesIO() 
        self.read_pos = 0
        
    def stream_inference(self, request_body):
        # Gets a streaming inference response 
        # from the specified model endpoint:
        response = self.sagemaker_runtime\
            .invoke_endpoint_with_response_stream(
                EndpointName=self.endpoint_name, 
                Body=json.dumps(request_body), 
                ContentType="application/json"
        )
        # Gets the EventStream object returned by the SDK:
        event_stream = response['Body']
        for event in event_stream:
            # Passes the contents of each payload part
            # to be concatenated:
            self._write(event['PayloadPart']['Bytes'])
            # Iterates over lines to parse whole JSON objects:
            for line in self._readlines():
                resp = json.loads(line)
                part = resp.get("outputs")[0]
                # Returns parts incrementally:
                yield part
    
    # Writes to the buffer to concatenate the contents of the parts:
    def _write(self, content):
        self.buff.seek(0, io.SEEK_END)
        self.buff.write(content)

    # The JSON objects in buffer end with '\n'.
    # This method reads lines to yield a series of JSON objects:
    def _readlines(self):
        self.buff.seek(self.read_pos)
        for line in self.buff.readlines():
            self.read_pos += len(line)
            yield line[:-1]
```

En este ejemplo se procesa el flujo de inferencia de la siguiente manera:
+ Inicializa un cliente SageMaker AI Runtime y establece el nombre del punto final del modelo. Para poder obtener un flujo de inferencia, el modelo que aloja el punto de conexión debe admitir streaming de inferencia.
+ En el método `stream_inference` de ejemplo, recibe un cuerpo de solicitud y lo pasa al método `invoke_endpoint_with_response_stream` del SDK.
+ Itera cada evento del objeto `EventStream` que devuelve el SDK.
+ De cada evento, obtiene el contenido del objeto `Bytes` en el objeto `PayloadPart`.
+ En el método `_write` de ejemplo, escribe en un búfer para concatenar el contenido de los objetos `Bytes`. El contenido combinado forma un cuerpo JSON delimitado por nuevas líneas.
+ Utiliza el método `_readlines` de ejemplo para obtener una serie iterable de objetos JSON.
+ En cada objeto JSON, obtiene una parte de la inferencia.
+ Con la expresión `yield`, devuelve las partes de forma incremental.

El siguiente ejemplo crea y utiliza un objeto `SmrInferenceStream`:

```
request_body = {"inputs": ["Large model inference is"],
                "parameters": {"max_new_tokens": 100,
                               "enable_sampling": "true"}}
smr_inference_stream = SmrInferenceStream(
    sagemaker_runtime, endpoint_name)
stream = smr_inference_stream.stream_inference(request_body)
for part in stream:
    print(part, end='')
```

Este ejemplo pasa un cuerpo de solicitud al método `stream_inference`. Itera la respuesta para imprimir cada parte que devuelve el flujo de inferencia.

En el ejemplo se da por sentado que el modelo del punto de conexión especificado es un LLM que genera texto. El resultado de este ejemplo es un cuerpo de texto generado que se imprime de forma incremental:

```
a challenging problem in machine learning. The goal is to . . .
```

## Invoque su modelo mediante el AWS CLI
<a name="realtime-endpoints-test-endpoints-cli"></a>

Puede invocar el punto final de su modelo ejecutando comandos con la tecla AWS Command Line Interface ()AWS CLI. AWS CLI admite solicitudes de inferencia estándar con el comando `invoke-endpoint` y admite solicitudes de inferencia asincrónicas con el comando `invoke-endpoint-async`.

**nota**  
 AWS CLI No admite solicitudes de inferencia de transmisión.

En el siguiente ejemplo se utiliza el comando `invoke-endpoint` para enviar una solicitud de inferencia a un punto de conexión del modelo:

```
aws sagemaker-runtime invoke-endpoint \
    --endpoint-name endpoint_name \
    --body fileb://$file_name \
    output_file.txt
```

En el parámetro `--endpoint-name`, proporcione el nombre del punto de conexión que especificó al crearlo. Para el `--body` parámetro, proporcione los datos de entrada para que la SageMaker IA los pase al modelo. Los datos deben tener el mismo formato que se utilizó para el entrenamiento. En este ejemplo se muestra cómo enviar datos binarios a su punto de conexión.

Para obtener más información sobre cuándo usar `file://` Over `fileb://` al pasar el contenido de un archivo a un parámetro del AWS CLI, consulte [Mejores prácticas para los parámetros de archivos locales](https://aws.amazon.com/blogs/developer/best-practices-for-local-file-parameters/).

Para obtener más información y ver parámetros adicionales que puede pasar, consulte [https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html) en la *Referencia de comandos de AWS CLI *.

Si el comando `invoke-endpoint` se ejecuta correctamente, devuelve una respuesta similar a la siguiente:

```
{
    "ContentType": "<content_type>; charset=utf-8",
    "InvokedProductionVariant": "<Variant>"
}
```

Si el comando no se ejecuta correctamente, compruebe si la carga útil de entrada tiene el formato correcto.

Vea el resultado de la invocación comprobando el archivo de salida del archivo (`output_file.txt` en este ejemplo).

```
more output_file.txt
```

## Invoque su modelo mediante el AWS SDK para Python
<a name="realtime-endpoints-test-endpoints-sdk"></a>

### Invoque para transmitir bidireccionalmente una solicitud de inferencia y una respuesta
<a name="realtime-endpoints-test-endpoints-sdk-overview"></a>

Si desea invocar un punto final modelo en el código de su aplicación para admitir la transmisión bidireccional, puede usar el [nuevo SDK experimental para Python](https://github.com/awslabs/aws-sdk-python) que admite la capacidad de transmisión bidireccional con compatibilidad con HTTP/2. Este SDK permite una comunicación bidireccional en tiempo real entre la aplicación cliente y el SageMaker terminal, lo que le permite enviar solicitudes de inferencia de forma incremental y, al mismo tiempo, recibir respuestas en streaming a medida que las genera el modelo. Esto resulta especialmente útil para aplicaciones interactivas en las que tanto el cliente como el servidor necesitan intercambiar datos de forma continua a través de una conexión persistente.

**nota**  
El nuevo SDK experimental es diferente del SDK estándar de Boto3 y admite conexiones bidireccionales persistentes para el intercambio de datos. Al utilizar el SDK experimental de Python, recomendamos encarecidamente fijar estrictamente una versión del SDK para cualquier caso de uso no experimental.

Para invocar tu punto final con transmisión bidireccional, usa este método. `invoke_endpoint_with_bidirectional_stream` Este método establece una conexión persistente que le permite transmitir varios fragmentos de carga útil a su modelo y, al mismo tiempo, recibir respuestas en tiempo real a medida que el modelo procesa los datos. La conexión permanece abierta hasta que se cierre explícitamente el flujo de entrada o hasta que el terminal cierre la conexión, lo que permite un tiempo de conexión de hasta 30 minutos.

### Requisitos previos
<a name="realtime-endpoints-test-endpoints-sdk-prereq"></a>

Para poder utilizar la transmisión bidireccional en el código de la aplicación, debe:

1. Instale el SDK HTTP/2 experimental en SageMaker tiempo de ejecución

1. Configure AWS las credenciales para su cliente SageMaker Runtime

1. Implemente un modelo que admita la transmisión bidireccional a un punto final SageMaker 

### Configure el cliente de transmisión bidireccional
<a name="realtime-endpoints-test-endpoints-sdk-setup-client"></a>

El siguiente ejemplo muestra cómo inicializar los componentes necesarios para la transmisión bidireccional:

```
from sagemaker_runtime_http2.client import SageMakerRuntimeHTTP2Client
from sagemaker_runtime_http2.config import Config, HTTPAuthSchemeResolver
from smithy_aws_core.identity import EnvironmentCredentialsResolver
from smithy_aws_core.auth.sigv4 import SigV4AuthScheme

# Configuration
AWS_REGION = "us-west-2"
BIDI_ENDPOINT = f"https://runtime.sagemaker.{AWS_REGION}.amazonaws.com:8443"
ENDPOINT_NAME = "your-endpoint-name"

# Initialize the client configuration
config = Config(
    endpoint_uri=BIDI_ENDPOINT,
    region=AWS_REGION,
    aws_credentials_identity_resolver=EnvironmentCredentialsResolver(),
    auth_scheme_resolver=HTTPAuthSchemeResolver(),
    auth_schemes={"aws.auth#sigv4": SigV4AuthScheme(service="sagemaker")}
)

# Create the SageMaker Runtime HTTP/2 client
client = SageMakerRuntimeHTTP2Client(config=config)
```

### Cliente de transmisión bidireccional completo
<a name="realtime-endpoints-test-endpoints-sdk-complete-client"></a>

En el siguiente ejemplo, se muestra cómo crear un cliente de streaming bidireccional que envíe varias cargas de texto a un SageMaker punto final y procese las respuestas en tiempo real:

```
import asyncio
import logging
from sagemaker_runtime_http2.client import SageMakerRuntimeHTTP2Client
from sagemaker_runtime_http2.config import Config, HTTPAuthSchemeResolver
from sagemaker_runtime_http2.models import (
    InvokeEndpointWithBidirectionalStreamInput, 
    RequestStreamEventPayloadPart, 
    RequestPayloadPart
)
from smithy_aws_core.identity import EnvironmentCredentialsResolver
from smithy_aws_core.auth.sigv4 import SigV4AuthScheme

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class SageMakerBidirectionalClient:
    
    def __init__(self, endpoint_name, region="us-west-2"):
        self.endpoint_name = endpoint_name
        self.region = region
        self.client = None
        self.stream = None
        self.response_task = None
        self.is_active = False
        
    def _initialize_client(self):
        bidi_endpoint = f"runtime.sagemaker.{self.region}.amazonaws.com:8443"
        config = Config(
            endpoint_uri=bidi_endpoint,
            region=self.region,
            aws_credentials_identity_resolver=EnvironmentCredentialsResolver(),
            auth_scheme_resolver=HTTPAuthSchemeResolver(),
            auth_schemes={"aws.auth#sigv4": SigV4AuthScheme(service="sagemaker")}
        )
        self.client = SageMakerRuntimeHTTP2Client(config=config)
    
    async def start_session(self):
        """Establish a bidirectional streaming connection with the endpoint."""
        if not self.client:
            self._initialize_client()
            
        logger.info(f"Starting session with endpoint: {self.endpoint_name}")
        self.stream = await self.client.invoke_endpoint_with_bidirectional_stream(
            InvokeEndpointWithBidirectionalStreamInput(endpoint_name=self.endpoint_name)
        )
        self.is_active = True
        
        # Start processing responses concurrently
        self.response_task = asyncio.create_task(self._process_responses())
    
    async def send_message(self, message):
        """Send a single message to the endpoint."""
        if not self.is_active:
            raise RuntimeError("Session not active. Call start_session() first.")
            
        logger.info(f"Sending message: {message}")
        payload = RequestPayloadPart(bytes_=message.encode('utf-8'))
        event = RequestStreamEventPayloadPart(value=payload)
        await self.stream.input_stream.send(event)
    
    async def send_multiple_messages(self, messages, delay=1.0):
        """Send multiple messages with a delay between each."""
        for message in messages:
            await self.send_message(message)
            await asyncio.sleep(delay)
    
    async def end_session(self):
        """Close the bidirectional streaming connection."""
        if not self.is_active:
            return
            
        await self.stream.input_stream.close()
        self.is_active = False
        logger.info("Stream closed")
        
        # Cancel the response processing task
        if self.response_task and not self.response_task.done():
            self.response_task.cancel()
    
    async def _process_responses(self):
        """Process incoming responses from the endpoint."""
        try:
            output = await self.stream.await_output()
            output_stream = output[1]
            
            while self.is_active:
                result = await output_stream.receive()
                
                if result is None:
                    logger.info("No more responses")
                    break
                
                if result.value and result.value.bytes_:
                    response_data = result.value.bytes_.decode('utf-8')
                    logger.info(f"Received: {response_data}")
                    
        except Exception as e:
            logger.error(f"Error processing responses: {e}")

# Example usage
async def run_bidirectional_client():
    client = SageMakerBidirectionalClient(endpoint_name="your-endpoint-name")
    
    try:
        # Start the session
        await client.start_session()
        
        # Send multiple messages
        messages = [
            "I need help with", 
            "my account balance", 
            "I can help with that", 
            "and recent charges"
        ]
        await client.send_multiple_messages(messages)
        
        # Wait for responses to be processed
        await asyncio.sleep(2)
        
        # End the session
        await client.end_session()
        logger.info("Session ended successfully")
        
    except Exception as e:
        logger.error(f"Client error: {e}")
        await client.end_session()

if __name__ == "__main__":
    asyncio.run(run_bidirectional_client())
```

El cliente inicializa el cliente HTTP/2 en SageMaker tiempo de ejecución con el URI del punto final regional en el puerto 8443, que es necesario para las conexiones de streaming bidireccionales. El `session()` método start\$1 llama `invoke_endpoint_with_bidirectional_stream()` para establecer la conexión persistente y crea una tarea asíncrona para procesar las respuestas entrantes de forma simultánea.

El `send_event()` método agrupa los datos de la carga útil en los objetos de solicitud correspondientes y los envía a través del flujo de entrada, mientras que el `_process_responses()` método escucha y procesa continuamente las respuestas del punto final a medida que llegan. Este enfoque bidireccional permite una interacción en tiempo real, en la que tanto el envío de solicitudes como la recepción de respuestas se realizan simultáneamente a través de la misma conexión.

# puntos de conexión
<a name="realtime-endpoints-manage"></a>

Tras implementar el modelo en un punto de conexión, es posible que desee verlo y administrarlo. Con SageMaker AI, puede ver el estado y los detalles del punto de conexión, comprobar las métricas y los registros para supervisar el rendimiento del punto de conexión, actualizar los modelos implementados en el punto final y mucho más.

En las siguientes secciones se muestra cómo administrar los puntos de conexión en Amazon SageMaker Studio o en la Consola de administración de AWS.

En la siguiente página se describe cómo ver y realizar cambios de forma interactiva en los puntos de conexión mediante la consola de Amazon SageMaker AI o SageMaker Studio.

**Topics**
+ [Visualización de los detalles de punto de conexión en SageMaker Studio](manage-endpoints-studio.md)
+ [Visualización de detalles de puntos de conexión en la consola de SageMaker AI](manage-endpoints-console.md)

# Visualización de los detalles de punto de conexión en SageMaker Studio
<a name="manage-endpoints-studio"></a>

En Amazon SageMaker Studio puede ver y administrar los puntos de conexión de alojamiento de SageMaker AI. Para obtener más información sobre Studio, consulte [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html).

Para buscar la lista de puntos de conexión en SageMaker Studio, haga lo siguiente:

1. Abra la aplicación de Studio.

1. En el panel de navegación de la izquierda, elija **Implementaciones**.

1. En el menú desplegable, seleccione **Puntos de conexión**.

Se abrirá la página **Puntos de conexión**, en la que se enumeran todos los puntos de conexión de alojamiento de SageMaker AI. En esta página, puede ver los puntos de conexión y su **Estado**. También puede crear un nuevo punto de conexión, editar o eliminar uno existente.

Para ver los detalles de un determinado punto de conexión, selecciónelo en la lista. En la página de detalles del punto de conexión, podrá ver información general similar a lo que aparece en la siguiente captura de pantalla.

![\[Captura de pantalla de la página principal de un punto de conexión que muestra un resumen de los detalles del punto de conexión en Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-endpoint-details-page.png)


Cada página de detalles del punto de conexión incluye las siguientes pestañas de información:

# Visualización de variantes (o modelos)
<a name="manage-endpoints-studio-variants"></a>

En la pestaña **Variantes** (también denominada la pestaña **Modelos** si el punto de conexión tiene varios modelos implementados) se muestra la lista de [variantes de modelos](https://docs.aws.amazon.com/sagemaker/latest/dg/model-ab-testing.html) o modelos actualmente implementados en el punto de conexión. En la siguiente captura de pantalla se muestra el aspecto de la información general y la sección **Modelos** en un punto de conexión con varios modelos implementados.

![\[Captura de pantalla de la página principal de un punto de conexión que muestra varios modelos implementados\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-goldfinch-multi-model-endpoint.png)


Puede añadir o editar la configuración de cada variante o modelo. También puede seleccionar una variante y habilitar una política predeterminada de escalado automático, que podrá editar más adelante en la pestaña **Escalado automático**.

# Visualización de la configuración
<a name="manage-endpoints-studio-settings"></a>

En la pestaña **Configuración**, puede ver el rol de IAM de AWS asociado al punto de conexión, la clave de AWS KMS utilizada para el cifrado (si corresponde), el nombre de la VPC y la configuración de aislamiento de la red.

# Prueba de inferencia
<a name="manage-endpoints-studio-test"></a>

En la pestaña **Probar inferencia**, puede enviar una solicitud de inferencia de prueba a un modelo implementado. Esto es útil si desea comprobar que el punto de conexión responde a las solicitudes según lo previsto.

Para probar la inferencia, haga lo siguiente:

1. En la pestaña **Probar inferencia** del modelo, elija una de las siguientes opciones:

   1. Seleccione **Introducir el cuerpo de la solicitud** si desea probar el punto de conexión y recibir una respuesta a través de la interfaz de Studio.

   1. Seleccione **Copiar código de ejemplo (Python)** si desea copiar un ejemplo de AWS SDK para Python (Boto3) que pueda usar para invocar el punto de conexión desde un entorno local y recibir una respuesta mediante programación.

1. En **Modelo**, seleccione el modelo que desea probar en el punto de conexión.

1. Si ha elegido el método de prueba de la interfaz de Studio, también puede elegir el **tipo de contenido** que desee para la respuesta en el menú desplegable.

Tras configurar la solicitud, puede elegir **Enviar solicitud** (para recibir una respuesta a través de la interfaz de Studio) o **Copiar** para copiar el ejemplo de Python.

Si recibe una respuesta a través de la interfaz de Studio, tendrá un aspecto similar al que se muestra en la siguiente captura de pantalla.

![\[Captura de pantalla de una solicitud de prueba de inferencia realizada correctamente en un punto de conexión de Studio\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/endpoint-test-inference.png)


# Escalado automático
<a name="manage-endpoints-studio-autoscaling"></a>

En la pestaña **Escalado automático**, puede ver cualquier política de escalado automático configurada para los modelos alojados en el punto de conexión. En la siguiente captura de pantalla se muestra la pestaña **Escalado automático**.

![\[Captura de pantalla de la pestaña Escalado automático, que muestra una política activa\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/inference/studio-endpoint-autoscaling.png)


Puede elegir **Editar escalado automático** para cambiar cualquiera de las políticas y activar o desactivar la política predeterminada de escalado automático.

Para obtener más información sobre el escalado automático de puntos de conexión en tiempo real, consulte [Automatically Scale Amazon SageMaker AI Models](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html). Si no sabe cómo configurar una política de escalado automático del punto de conexión, puede utilizar un [trabajo de recomendaciones de escalado automático de Recomendador de inferencias](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-autoscaling.html) para obtener recomendaciones para una política de escalado automático.

# Visualización de detalles de puntos de conexión en la consola de SageMaker AI
<a name="manage-endpoints-console"></a>

Para ver los puntos de conexión en la consola de SageMaker AI, haga lo siguiente:

1. Vaya a la consola de SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación de la izquierda, elija **Inferencia**.

1. En la lista del menú desplegable, seleccione **Puntos de conexión**.

1. En la página **Puntos de conexión**, elija su punto de conexión.

Debería abrirse la página de detalles del punto de conexión, en la que se mostrará un resumen del punto de conexión y las métricas que se han recopilado para él.

En las siguientes secciones se describen las pestañas de la página de detalles de los puntos de conexión.

# Supervisión de puntos de conexión
<a name="manage-endpoints-console-monitoring"></a>

Tras crear un punto de conexión de alojamiento en SageMaker AI, puede supervisar el punto de conexión con Amazon CloudWatch, que recopila y procesa los datos sin procesar y los convierte en métricas legibles y casi en tiempo real. Puede utilizar estas métricas para obtener acceso a información histórica y obtener una mejor perspectiva del rendimiento de su punto de conexión. Para obtener más información, consulte la *[Guía del usuario de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)*.

En la pestaña **Supervisión** de la página de detalles del punto de conexión, puede ver los datos de métricas de CloudWatch que se han recopilado desde el punto de conexión.

La pestaña **Supervisión** incluye las siguientes secciones:
+ **Métricas operativas**: vea las métricas que rastrean la utilización de los recursos de su punto de conexión, como el uso de la CPU y de la memoria.
+ **Métricas de invocación**: vea las métricas que registran el número, la integridad y el estado de las solicitudes `InvokeEndpoint` que llegan a su punto de conexión, como los errores del modelo de invocación y la latencia del modelo.
+ **Métricas de salud**: vea las métricas que rastrean el estado general de su punto de conexión, como los errores de invocación y los errores de notificación.

Para obtener descripciones detalladas de cada métrica, consulte [Monitor SageMaker AI with CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).

La siguiente captura de pantalla muestra la sección de **Métricas operativas** de un punto de conexión sin servidor.

![\[Captura de pantalla de los gráficos de métricas de la sección de métricas operativas de la página de detalles del punto de conexión.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/hosting-operational-metrics.png)




Puede ajustar el **Periodo** y la **Estadística** del seguimiento que quiera realizar para las métricas de una sección determinada, así como el periodo de tiempo durante el que quiera ver los datos de las métricas. También puede agregar y eliminar widgets de métricas de la vista de cada sección seleccionando **Agregar widget**. En el cuadro de diálogo **Agregar widget**, puede seleccionar y deseleccionar las métricas que desee ver.

Las métricas disponibles pueden depender del tipo de punto de conexión. Por ejemplo, los puntos de conexión sin servidor tienen algunas métricas que no están disponibles para los puntos de conexión en tiempo real. Para obtener información de métricas más específica por tipo de punto de conexión, consulte las páginas siguientes:
+ [Monitorización de un punto de conexión sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints-monitoring.html)
+ [Monitorización de punto de conexión asíncrono](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-monitor.html)
+ [Métricas de CW para implementaciones de puntos de conexión multimodelo](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoint-cloudwatch-metrics.html)
+ [Registros y métricas de canalización de inferencias](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

# Configuración
<a name="manage-endpoints-console-settings"></a>

Puede elegir la pestaña **Configuración** para ver información adicional sobre su punto de conexión, como los ajustes de captura de datos, la configuración del punto de conexión y las etiquetas.

# Creación y visualización de alarmas
<a name="manage-endpoints-console-alarms"></a>

En la pestaña **Alarmas** de la página de detalles del punto de conexión, puede ver y crear alarmas sencillas de métricas de umbral estático, en las que puede especificar un valor de umbral para una métrica. Si la métrica supera el valor de umbral, la alarma pasa al estado `ALARM`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html).

En la sección de **Resumen del punto de conexión**, puede ver el campo **Alarmas**, que indica cuántas alarmas están activas actualmente en su punto de conexión.

Para ver qué alarmas están en el estado `ALARM`, seleccione la pestaña **Alarmas**. La pestaña **Alarmas** le muestra una lista completa de las alarmas de sus punto de conexión, junto con detalles sobre su estado y condiciones. La siguiente captura de pantalla muestra una lista de las alarmas de esta sección que se han configurado para un punto de conexión.

![\[Captura de pantalla de la pestaña de alarmas de la página de detalles del punto de conexión, que muestra una lista de alarmas de CloudWatch.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/hosting-alarms-tab.png)


El estado de una alarma puede ser `In alarm`, `OK` o `Insufficient data` si no se están recopilando suficientes datos de métricas.

Para crear una nueva alarma para su punto de conexión, haga lo siguiente:

1. En la pestaña **Alarmas**, elija **Crear alarma**.

1. Se abre la página **Crear alarma**. En **Nombre de la alarma**, escriba un nombre para la alarma.

1. (Opcional) Escriba una descripción de la alarma.

1. En **Métrica**, elija la métrica de CloudWatch que desee que registre la alarma.

1. En **Nombre de variante**, elija la variante del modelo de punto de conexión que desee supervisar.

1. En **Estadística**, elija una de las estadísticas disponibles para la métrica que seleccionó.

1. En **Periodo**, elija el periodo de tiempo que se utilizará para calcular cada valor estadístico. Por ejemplo, si elige la estadística Promedio y un período de 5 minutos, cada punto de datos monitoreado por la alarma es el promedio de los puntos de datos de la métrica en intervalos de 5 minutos.

1. Para **Periodos de evaluación**, introduzca el número de puntos de datos que desea que la alarma tenga en cuenta al evaluar si debe entrar en el estado de alarma o no.

1. En **Condición**, elija la condición que desee usar para el umbral de alarma.

1. En **Valor de umbral**, introduzca el valor deseado para su umbral.

1. (Opcional) En **Notificación**, puede elegir **Agregar notificación** para crear o especificar un tema de Amazon SNS que reciba una notificación cuando cambie el estado de la alarma.

1. Elija **Crear alarma**.

Tras crear la alarma, puede volver a la pestaña **Alarmas** para ver su estado en cualquier momento. En esta sección, también puede seleccionar la alarma y **editarla** o **eliminarla**.

# Opciones de alojamiento
<a name="realtime-endpoints-options"></a>

En los siguientes temas se describen las opciones de alojamiento en tiempo real de SageMaker IA disponibles y cómo configurar, invocar y eliminar cada opción de alojamiento.

**Topics**
+ [Puntos de conexión de modelo único](realtime-single-model.md)
+ [Puntos de conexión multimodelo](multi-model-endpoints.md)
+ [Puntos de conexión con varios contenedores](multi-container-endpoints.md)
+ [Canalizaciones de inferencia en Amazon AI SageMaker](inference-pipelines.md)
+ [Eliminar puntos de conexión y recursos](realtime-endpoints-delete-resources.md)

# Puntos de conexión de modelo único
<a name="realtime-single-model"></a>

Puede crear, actualizar y eliminar puntos de conexión de inferencia en tiempo real que alojen un único modelo con Amazon SageMaker Studio, AWS SDK para Python (Boto3), el SageMaker Python SDK o la AWS CLI. Para ver los procedimientos y los códigos de ejemplo, consulte [Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md).

# Puntos de conexión multimodelo
<a name="multi-model-endpoints"></a>

Los puntos de conexión multimodelo proporcionan una solución escalable y rentable para implementar grandes cantidades de modelos. Utilizan la misma flota de recursos y un contenedor de servicio compartido para alojar todos sus modelos. Esto reduce los costos de alojamiento al mejorar la utilización del punto de conexión en comparación con el uso de puntos de conexión de modelo único. También reduce la sobrecarga de implementación, ya que Amazon SageMaker AI gestiona la carga de modelos en la memoria y su escalado en función de los patrones de tráfico hacia su punto final.

El siguiente diagrama muestra cómo funcionan los puntos de conexión multimodelo en comparación con los puntos de conexión de un solo modelo.

![\[Diagrama que muestra cómo los puntos de conexión multimodelo alojan los modelos en comparación con la forma en que lo hacen los puntos de conexión de un solo modelo\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/multi-model-endpoints-diagram.png)


Los puntos de conexión multimodelo son ideales para alojar una gran cantidad de modelos que utilizan el mismo marco de ML en un contenedor de servidores compartido. Si tiene una combinación de modelos a los que se accede con frecuencia y con poca frecuencia, un punto de conexión multimodelo puede atender este tráfico de manera eficiente con menos recursos y un mayor ahorro de costos. Su aplicación debe tolerar las penalizaciones de latencia ocasionales relacionadas con el arranque en frío que se producen al invocar modelos que se utilizan con poca frecuencia.

Los puntos de conexión multimodelo admiten el alojamiento de modelos respaldados tanto por CPU como por GPU. Al utilizar modelos respaldados por GPU, puede reducir los costos de implementación del modelo mediante un mayor uso del punto de conexión y sus instancias de computación acelerada subyacentes.

Los puntos de conexión multimodelo permiten compartir el tiempo de los recursos de memoria en todos los modelos. Esto funciona mejor cuando los modelos son bastante similares en tamaño y latencia de invocación. Cuando es el caso, los puntos de conexión multimodelo pueden usar eficazmente instancias en todos los modelos. Si tiene modelos que tienen transacciones por segundo (TPS) o requisitos de latencia notablemente más altos, le recomendamos alojarlos en puntos de conexión dedicados.

Puede utilizar puntos de conexión multimodelo con las siguientes funciones:
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)y VPCs
+ [Escalado automático](multi-model-endpoints-autoscaling.md)
+ [Canalizaciones de inferencia en serie](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html) (pero solo se puede incluir un contenedor habilitado para varios modelos en una canalización de inferencia)
+ Prueba A/B

Puede utilizar la consola de IA AWS SDK para Python (Boto) o la consola de SageMaker IA para crear un punto final multimodelo. Puede utilizar puntos de conexión multimodelo con respaldo de CPU, puede crear su punto de conexión con contenedores personalizados integrando la biblioteca [Multi Model Server](https://github.com/awslabs/multi-model-server).

**Topics**
+ [Cómo funcionan los puntos de conexión multimodelo](#how-multi-model-endpoints-work)
+ [Cuadernos de ejemplo para puntos de conexión multimodelo](#multi-model-endpoint-sample-notebooks)
+ [Algoritmos, marcos e instancias compatibles con puntos de conexión multimodelo](multi-model-support.md)
+ [Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo](multi-model-endpoint-instance.md)
+ [Creación de un punto de conexión multimodelo](create-multi-model-endpoint.md)
+ [Invocar un punto de conexión multimodelo](invoke-multi-model-endpoint.md)
+ [Agregar o eliminar modelos](add-models-to-endpoint.md)
+ [Cree su propio contenedor para terminales SageMaker multimodelo de IA](build-multi-model-build-container.md)
+ [Seguridad de puntos de conexión multimodelo](multi-model-endpoint-security.md)
+ [CloudWatch Métricas para despliegues de terminales multimodelo](multi-model-endpoint-cloudwatch-metrics.md)
+ [Establezca el comportamiento de almacenamiento en caché del modelo de SageMaker punto final multimodelo de IA](multi-model-caching.md)
+ [Establecer políticas de escalado automático para implementaciones de puntos de conexión multimodelo](multi-model-endpoints-autoscaling.md)

## Cómo funcionan los puntos de conexión multimodelo
<a name="how-multi-model-endpoints-work"></a>

 SageMaker La IA gestiona el ciclo de vida de los modelos alojados en puntos finales multimodelo en la memoria del contenedor. En lugar de descargar todos los modelos de un bucket de Amazon S3 al contenedor al crear el punto de conexión, la SageMaker IA los carga y almacena en caché de forma dinámica cuando los invoca. Cuando la SageMaker IA recibe una solicitud de invocación para un modelo en particular, hace lo siguiente: 

1. Enruta la solicitud a una instancia detrás del punto de conexión.

1. Descarga el modelo desde el bucket de S3 al volumen de almacenamiento de esa instancia.

1. Carga el modelo en la memoria del contenedor (CPU o GPU, dependiendo de si tiene instancias respaldadas por CPU o GPU) de esa instancia de computación acelerada. Si el modelo ya está cargado en la memoria del contenedor, la invocación es más rápida porque la SageMaker IA no necesita descargarlo ni cargarlo.

SageMaker La IA sigue dirigiendo las solicitudes de un modelo a la instancia en la que el modelo ya está cargado. Sin embargo, si el modelo recibe muchas solicitudes de invocación y hay instancias adicionales para el punto final multimodelo, la SageMaker IA enruta algunas solicitudes a otra instancia para acomodar el tráfico. Si el modelo aún no está cargado en la segunda instancia, el modelo se descarga en el volumen de almacenamiento de esa instancia y se carga en la memoria del contenedor.

Cuando el uso de memoria de una instancia es elevado y la SageMaker IA necesita cargar otro modelo en la memoria, descarga los modelos no utilizados del contenedor de esa instancia para garantizar que haya suficiente memoria para cargar el modelo. Los modelos que se descargan permanecen en el volumen de almacenamiento de la instancia y se pueden cargar en la memoria del contenedor más adelante sin volver a descargarse desde el bucket S3. Si el volumen de almacenamiento de la instancia alcanza su capacidad máxima, la SageMaker IA elimina los modelos no utilizados del volumen de almacenamiento.

Para eliminar un modelo, deja de enviar solicitudes y elimínalo del bucket de S3. SageMaker La IA proporciona una capacidad de punto final multimodelo en un contenedor de servicio. Al agregar modelos a un punto de conexión multimodelo y eliminarlos del mismo, no es necesario actualizar el punto de conexión en sí. Para añadir un modelo, se carga en el bucket S3 y se empieza a invocar. No necesita cambios de código para usarlo.

**nota**  
Al actualizar un punto de conexión multimodelo, las solicitudes de invocación iniciales en el punto de conexión pueden experimentar latencias más altas, ya que Smart Routing en los puntos de conexión multimodelo se adapta a su patrón de tráfico. Sin embargo, una vez que conozca su patrón de tráfico, podrá experimentar latencias bajas en los modelos que utilice con más frecuencia. Los modelos que se utilizan con menos frecuencia pueden sufrir algunas latencias de arranque en frío, ya que los modelos se cargan dinámicamente en una instancia.

## Cuadernos de ejemplo para puntos de conexión multimodelo
<a name="multi-model-endpoint-sample-notebooks"></a>

Para obtener más información sobre cómo usar puntos de conexión multimodelo, puede probar los siguientes cuadernos de ejemplo:
+ Ejemplos para puntos de conexión multimodelo que utilizan instancias respaldadas por CPU:
  + [ XGBoost Ejemplo de cuaderno de punto final multimodelo](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html): este cuaderno muestra cómo implementar varios XGBoost modelos en un punto final.
  + [Cuaderno de ejemplo BYOC para terminales multimodelo](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_bring_your_own/multi_model_endpoint_bring_your_own.html): este cuaderno muestra cómo configurar e implementar un contenedor de clientes que admita puntos finales multimodelo en la IA. SageMaker 
+ Ejemplo para puntos de conexión multimodelo que utilizan instancias respaldadas por GPU:
  + [Ejecute varios modelos de aprendizaje profundo GPUs con puntos de conexión multimodelo (MME) de Amazon SageMaker AI: en este cuaderno se muestra cómo utilizar un contenedor de inferencias Triton de NVIDIA para implementar ResNet -50 modelos en un punto final](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb) multimodelo.

Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar los ejemplos anteriores en IA, consulte. SageMaker [Instancias de Amazon SageMaker Notebook](nbi.md) Una vez que hayas creado una instancia de bloc de notas y la hayas abierto, selecciona la pestaña **Ejemplos de SageMaker IA** para ver una lista de todos los ejemplos de SageMaker IA. Los cuadernos de punto de conexión multimodelo se encuentran en la sección **FUNCIONALIDAD AVANZADA**. Para abrir un bloc de notas, elija su pestaña **Usar** y, a continuación, **Crear copia**.

Para obtener más información sobre casos de uso de puntos de conexión multimodelo, consulte los siguientes blogs y recursos:
+ Vídeo: [Alojar miles de modelos con SageMaker IA](https://www.youtube.com/watch?v=XqCNTWmHsLc&t=751s)
+ Vídeo: [SageMaker AI ML para SaaS](https://www.youtube.com/watch?v=BytpYlJ3vsQ)
+ Blog: [Cómo escalar la inferencia de machine learning para casos de uso de SaaS multiusuario](https://aws.amazon.com/blogs/machine-learning/how-to-scale-machine-learning-inference-for-multi-tenant-saas-use-cases/)
+ Caso práctico: [Veeva Systems](https://aws.amazon.com/partners/success/advanced-clinical-veeva/)

# Algoritmos, marcos e instancias compatibles con puntos de conexión multimodelo
<a name="multi-model-support"></a>

Para obtener información sobre algoritmos, marcos y tipos de instancias que puedes usar con puntos de conexión multimodelo, consulte las siguientes secciones.

## Algoritmos, marcos e instancias compatibles para puntos de conexión multimodelo que utilizan instancias respaldadas por CPU
<a name="multi-model-support-cpu"></a>

Los contenedores de inferencia de los siguientes algoritmos y marcos admiten puntos de conexión multimodelo:
+ [XGBoost algoritmo con Amazon SageMaker AI](xgboost.md)
+ [Algoritmo k vecinos más próximos (k-NN) (K-Nearest Neighbors)](k-nearest-neighbors.md)
+ [Algoritmo de aprendizaje lineal](linear-learner.md)
+ [Algoritmo de bosque de corte aleatorio (RCF)](randomcutforest.md)
+ [Recursos para usar TensorFlow con Amazon SageMaker AI](tf.md)
+ [Recursos para usar Scikit-learn con Amazon AI SageMaker](sklearn.md)
+ [Recursos para usar Apache MXNet con Amazon SageMaker AI](mxnet.md)
+ [Recursos para usar PyTorch con Amazon SageMaker AI](pytorch.md)

Para utilizar cualquier otro marco o algoritmo, utilice el kit de herramientas de inferencia de SageMaker IA para crear un contenedor que admita puntos finales multimodelo. Para obtener información, consulte [Cree su propio contenedor para terminales SageMaker multimodelo de IA](build-multi-model-build-container.md).

Los puntos de conexión multimodelo admiten todos los tipos de instancias de CPU.

## Algoritmos, marcos e instancias compatibles para puntos de conexión multimodelo que utilizan instancias respaldadas por GPU
<a name="multi-model-support-gpu"></a>

[El servidor de inferencia Triton de IA permite alojar varios modelos respaldados por GPU en puntos finales multimodelo. SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Esto es compatible con los principales marcos de inferencia, como NVIDIA® TensorRT™, Python PyTorch, ONNX MXNet, scikit-learn XGBoost, OpenVINO, C\$1\$1 personalizado RandomForest y más.

Para usar cualquier otro marco o algoritmo, puede usar el backend Triton para Python o C\$1\$1 para escribir la lógica de su modelo y servir cualquier modelo personalizado. Una vez que tenga el servidor listo, puede empezar a implementar cientos de modelos de aprendizaje profundo en un punto de conexión.

Los puntos de conexión multimodelo admiten los siguientes tipos de instancias de GPU:


| Familia de instancias | Tipo de instancia | v CPUs | GiB de memoria por vCPU | GPUs | Memoria de GPU | 
| --- | --- | --- | --- | --- | --- | 
| p2 | ml.p2.xlarge | 4 | 15.25 | 1 | 12 | 
| p3 | ml.p3.2xlarge | 8 | 7.62 | 1 | 16 | 
| g5 | ml.g5.xlarge | 4 | 4 | 1 | 24 | 
| g5 | ml.g5.2xlarge | 8 | 4 | 1 | 24 | 
| g5 | ml.g5.4xlarge | 16 | 4 | 1 | 24 | 
| g5 | ml.g5.8xlarge | 32 | 4 | 1 | 24 | 
| g5 | ml.g5.16xlarge | 64 | 4 | 1 | 24 | 
| g4dn | ml.g4dn.xlarge | 4 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.2xlarge | 8 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.4xlarge | 16 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.8xlarge | 32 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.16xlarge | 64 | 4 | 1 | 16 | 

# Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo
<a name="multi-model-endpoint-instance"></a>

Hay varios aspectos que se deben tener en cuenta al seleccionar un tipo de instancia de SageMaker AI ML para un punto final multimodelo:
+ Aprovisione suficiente capacidad de [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) para todos los modelos que tenga que atender.
+ Equilibre el rendimiento (minimice los inicios en frío) y el costo (no aprovisione en exceso la capacidad de instancia). Para obtener información sobre el tamaño del volumen de almacenamiento que la SageMaker IA adjunta a cada tipo de instancia para un punto final y para un punto final multimodelo, consulte. [Volúmenes de almacén de instancias](host-instance-storage.md)
+ Para un contenedor configurado para ejecutarse en modo `MultiModel`, el volumen de almacenamiento aprovisionado para sus instancias tiene más memoria que el modo `SingleModel` predeterminado. Esto permite almacenar más modelos en caché en el volumen de almacenamiento de la instancia que en modo `SingleModel`.

A la hora de elegir un tipo de instancia de SageMaker AI ML, ten en cuenta lo siguiente:
+ Actualmente, los puntos de conexión multimodelo se admiten en todos los tipos de instancias de CPU y en tipos de instancias de una sola GPU.
+ Para la distribución del tráfico (patrones de acceso) a los modelos que desea alojar detrás del punto de conexión multimodelo, junto con el tamaño del modelo (cuántos modelos se pueden cargar en la memoria en la instancia), tenga en cuenta la siguiente información:
  + Piensa en la cantidad de memoria de una instancia como el espacio de caché para que se carguen los modelos, y piensa en el número v CPUs como el límite de simultaneidad para realizar inferencias en los modelos cargados (suponiendo que la invocación de un modelo esté vinculada a la CPU).
  + En el caso de las instancias respaldadas por la CPU, la cantidad de v CPUs afecta al número máximo de invocaciones simultáneas por instancia (suponiendo que la invocación de un modelo esté vinculada a la CPU). Una cantidad mayor de v te CPUs permite invocar más modelos únicos de forma simultánea.
  + En el caso de instancias respaldadas por GPU, una mayor cantidad de memoria de GPU e instancia le permite tener más modelos cargados y listos para servir solicitudes de inferencia.
  + En el caso de instancias respaldadas por CPU y GPU, tenga disponible memoria “holgada” para que los modelos no utilizados puedan descargarse, y especialmente para los puntos de conexión multimodelo con varias instancias. Si falla una instancia o una zona de disponibilidad, los modelos de esas instancias se redireccionarán a otras instancias situadas detrás del punto de conexión.
+ Determine su tolerancia a loading/downloading los tiempos:
  + Las familias de tipos de instancia d (por ejemplo, m5d, c5d o r5d) y g5s vienen con una SSD NVMe (memoria no volátil express), que ofrece un alto I/O rendimiento y podría reducir el tiempo necesario para descargar los modelos al volumen de almacenamiento y para que el contenedor cargue el modelo desde el volumen de almacenamiento.
  + Como los tipos de instancia d y g5 vienen con un almacenamiento NVMe SSD, SageMaker AI no adjunta un volumen de almacenamiento de Amazon EBS a estas instancias de procesamiento de aprendizaje automático que alojan el punto final multimodelo. El escalado automático funciona mejor cuando los modelos tienen un tamaño similar y son homogéneos, es decir, cuando sus requisitos de recursos y latencia de inferencia son similares.

También puede utilizar las siguientes instrucciones para optimizar la carga de modelos en sus puntos de conexión multimodelo:

**Elegir un tipo de instancia que no pueda almacenar todos los modelos de destino en la memoria**

En algunos casos, puede optar por reducir los costos y elegir un tipo de instancia que no pueda almacenar todos los modelos de destino en la memoria a la vez. SageMaker La IA descarga los modelos de forma dinámica cuando se queda sin memoria para dejar espacio a un nuevo modelo de segmentación. En el caso de modelos que se solicitan con poca frecuencia, se sacrifica la latencia de carga dinámica. En los casos con necesidades de latencia más estrictas, puede optar por tipos de instancia más grandes o más instancias. Invertir tiempo por adelantado en las pruebas y el análisis del rendimiento le ayuda a realizar implementaciones de producción satisfactorias.

**Evaluar los resultados de caché de su modelo**

 CloudWatch Las métricas de Amazon pueden ayudarte a evaluar tus modelos. Para obtener más información sobre las métricas que puede utilizar con puntos de conexión multimodelo, consulte [CloudWatch Métricas para despliegues de terminales multimodelo](multi-model-endpoint-cloudwatch-metrics.md).

 Puede utilizar la estadística `Average` de la métrica `ModelCacheHit` para monitorizar la proporción de solicitudes en las que el modelo ya está cargado. Puede utilizar la estadística `SampleCount` de la métrica `ModelUnloadingTime` para monitorizar el número de solicitudes de descarga enviadas al contenedor durante un período de tiempo. Si los modelos se descargan con demasiada frecuencia (un indicador de *pérdidas*, donde los modelos se descargan y se cargan de nuevo porque no hay suficiente espacio en caché para el conjunto de modelos de trabajo), considere utilizar un tipo de instancia mayor con más memoria o aumentar el número de instancias detrás del punto de conexión multimodelo. En el caso de los puntos de conexión multimodelo con varias instancias, tenga en cuenta que un modelo puede cargarse en más de una instancia.

# Creación de un punto de conexión multimodelo
<a name="create-multi-model-endpoint"></a>

Puede utilizar la consola de SageMaker IA o la AWS SDK para Python (Boto) para crear un punto final multimodelo. Para crear un punto de conexión respaldado por CPU o GPU a través de la consola, consulte el procedimiento de la consola en las siguientes secciones. Si desea crear un punto final multimodelo con el AWS SDK para Python (Boto), utilice el procedimiento de CPU o GPU de las siguientes secciones. Los flujos de trabajo de la CPU y GPU son similares, pero presentan varias diferencias, como los requisitos del contenedor.

**Topics**
+ [Creación de un punto de conexión multimodelo (consola)](#create-multi-model-endpoint-console)
+ [Cree un punto final multimodelo utilizando el CPUs AWS SDK para Python (Boto3)](#create-multi-model-endpoint-sdk-cpu)
+ [Cree un punto final multimodelo utilizando el GPUs AWS SDK para Python (Boto3)](#create-multi-model-endpoint-sdk-gpu)

## Creación de un punto de conexión multimodelo (consola)
<a name="create-multi-model-endpoint-console"></a>

Puede crear puntos de conexión multimodelo compatibles con la CPU y la GPU a través de la consola. Utilice el siguiente procedimiento para crear un punto final multimodelo a través de la consola de SageMaker IA.

**Para crear un punto de conexión multimodelo (consola)**

1. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Elija **Modelo** y, a continuación, en el grupo **Inferencia**, elija **Crear modelo**. 

1. En **Nombre del modelo**, escriba un nombre.

1. Par el **rol de IAM**, escoja o cree un rol de IAM que tenga asociada la política de IAM `AmazonSageMakerFullAccess`. 

1.  En la sección **Definición de contenedor**, en **Proporcionar opciones de imagen de inferencia y artefactos de modelo**, elija **Utilizar modelos múltiples**.  
![\[Sección de la página Crear modelo donde puede elegir Usar varios modelos\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/mme-create-model-ux-2.PNG)

1. Para la **Imagen del contenedor de inferencia**, introduzca la ruta de Amazon ECR de la imagen de contenedor que desee.

   Para los modelos de GPU, debe utilizar un contenedor respaldado por el servidor de inferencia NVIDIA Triton. Para obtener una lista de imágenes de contenedores que funcionan con terminales respaldados por GPU, consulte los [contenedores de inferencia NVIDIA Triton (solo compatibles con SM)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only). Para obtener más información sobre el servidor de inferencia Triton de NVIDIA, consulte [Uso del servidor de inferencia Triton](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) con IA. SageMaker 

1. Seleccione **Crear modelo**.

1. Implemente el punto de conexión multimodelo como lo haría con un punto de conexión de modelo único. Para obtener instrucciones, consulte [Implemente el modelo en los servicios de alojamiento de SageMaker IA](ex1-model-deployment.md#ex1-deploy-model).

## Cree un punto final multimodelo utilizando el CPUs AWS SDK para Python (Boto3)
<a name="create-multi-model-endpoint-sdk-cpu"></a>

Utilice la siguiente sección para crear un punto de conexión multimodelo respaldado por instancias de CPU. Puede crear un punto final multimodelo con Amazon SageMaker AI y [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model), de la [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs misma manera que crearía un punto final de un solo modelo, pero con dos cambios. Al definir el contenedor de modelos, debe transferir un nuevo valor de parámetro `Mode`, `MultiModel`. También debe transferir el campo `ModelDataUrl` que especifica el prefijo en Amazon S3 donde se encuentran los artefactos del modelo, en lugar de la ruta a un solo artefacto del modelo, como haría cuando se implementa un solo modelo.

Para ver un ejemplo de bloc de notas que utiliza la SageMaker IA para implementar varios XGBoost modelos en un terminal, consulte el cuaderno de [ XGBoost muestra de terminales multimodelo](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html). 

En el siguiente procedimiento se describen los pasos clave utilizados en esa muestra para crear un punto de conexión multimodelo.

**Para implementar el modelo (AWS SDK para Python (Boto 3))**

1. Obtenga un contenedor con una imagen que permita implementar puntos de conexión multimodelo. Para obtener una lista de los algoritmos integrados y contenedores de marcos que admiten puntos de conexión multimodelo, consulte [Algoritmos, marcos e instancias compatibles con puntos de conexión multimodelo](multi-model-support.md). Para este ejemplo, utilizamos el algoritmo integrado [Algoritmo k vecinos más próximos (k-NN) (K-Nearest Neighbors)](k-nearest-neighbors.md). Llamamos a la función de utilidad [SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) `image_uris.retrieve()` para obtener la dirección de la imagen del algoritmo integrado K-Nearest Neighbors.

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   image = sagemaker.image_uris.retrieve("knn",region=region)
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   ```

1. Obtenga un cliente de AWS SDK para Python (Boto3) SageMaker IA y cree el modelo que usa este contenedor.

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. (Opcional) Si usa una canalización de inferencia en serie, obtenga los contenedores adicionales que se incluirán en la canalización e inclúyalos en el argumento `Containers` de `CreateModel`:

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**nota**  
Solo puede usar un multi-model-enabled punto final en una canalización de inferencia en serie.

1. (Opcional) Si su caso de uso no aprovecha almacenamiento en caché del modelo, defina el valor del campo `ModelCacheSetting` del parámetro `MultiModelConfig` en `Disabled` e inclúyalo en el argumento `Container` de la llamada a `create_model`. El valor predeterminado del campo `ModelCacheSetting` es `Enabled`.

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. Configure el punto de conexión multimodelo para el modelo. Recomendamos configurar los puntos de conexión con al menos dos instancias. Esto permite a la SageMaker IA proporcionar a los modelos un conjunto de predicciones de alta disponibilidad en varias zonas de disponibilidad.

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.m4.xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```
**nota**  
Solo puede usar un multi-model-enabled punto final en una canalización de inferencia en serie.

1. Creación del punto de conexión multimodelo utilizando los parámetros `EndpointName` y `EndpointConfigName`.

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

## Cree un punto final multimodelo utilizando el GPUs AWS SDK para Python (Boto3)
<a name="create-multi-model-endpoint-sdk-gpu"></a>

Utilice la siguiente sección para crear un punto de conexión multimodelo respaldado por GPU. Se crea un punto final multimodelo mediante Amazon SageMaker AI y [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model), de [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs forma similar a la creación de puntos finales de un solo modelo, pero hay varios cambios. Al definir el contenedor de modelos, debe transferir un nuevo valor de parámetro `Mode`, `MultiModel`. También debe transferir el campo `ModelDataUrl` que especifica el prefijo en Amazon S3 donde se encuentran los artefactos del modelo, en lugar de la ruta a un solo artefacto del modelo, como haría cuando se implementa un solo modelo. En el caso de puntos de conexión multimodelo respaldados por GPU, también debe utilizar un contenedor con el servidor de inferencia NVIDIA Triton que esté optimizado para ejecutarse en instancias de GPU. Para obtener una lista de imágenes de contenedores que funcionan con terminales respaldados por GPU, consulte los [contenedores de inferencia NVIDIA Triton (solo compatibles con SM)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only).

Para ver un ejemplo de bloc de notas que muestra cómo crear un punto final multimodelo respaldado por GPUs, consulte [Ejecutar varios modelos de aprendizaje profundo con puntos de enlace multimodelo (MME) de GPUs Amazon SageMaker AI](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb).

En el siguiente procedimiento se describen los pasos clave para crear un punto de conexión multimodelo.

**Para implementar el modelo (AWS SDK para Python (Boto 3))**

1. Defina la imagen del contenedor. Para crear un punto final multimodelo con soporte de GPU para ResNet los modelos, defina el contenedor para usar la imagen del servidor [NVIDIA Triton](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html). Este contenedor admite puntos de conexión multimodelo y está optimizado para ejecutarse en instancias de GPU. Llamamos a la función de utilidad [SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) `image_uris.retrieve()` para obtener la dirección de la imagen. Por ejemplo:

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   
   // Find the sagemaker-tritonserver image at 
   // https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-triton/resnet50/triton_resnet50.ipynb
   // Find available tags at https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only
   
   image = "<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-tritonserver:<TAG>".format(
       account_id=account_id_map[region], region=region
   )
   
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel',
                 "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "resnet"},
               }
   ```

1. Obtenga un cliente de AWS SDK para Python (Boto3) SageMaker IA y cree el modelo que utiliza este contenedor.

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. (Opcional) Si usa una canalización de inferencia en serie, obtenga los contenedores adicionales que se incluirán en la canalización e inclúyalos en el argumento `Containers` de `CreateModel`:

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**nota**  
Solo puede usar un multi-model-enabled punto final en una canalización de inferencia en serie.

1. (Opcional) Si su caso de uso no aprovecha almacenamiento en caché del modelo, defina el valor del campo `ModelCacheSetting` del parámetro `MultiModelConfig` en `Disabled` e inclúyalo en el argumento `Container` de la llamada a `create_model`. El valor predeterminado del campo `ModelCacheSetting` es `Enabled`.

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. Configure el punto de conexión multimodelo con instancias respaldadas por GPU para el modelo. Recomendamos configurar los puntos de conexión con más de una instancia para permitir una alta disponibilidad y un mayor número de visitas a la memoria caché.

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.g4dn.4xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```

1. Creación del punto de conexión multimodelo utilizando los parámetros `EndpointName` y `EndpointConfigName`.

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

# Invocar un punto de conexión multimodelo
<a name="invoke-multi-model-endpoint"></a>

Para invocar un punto final de varios modelos, utilice el [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)de SageMaker AI Runtime del mismo modo que si se invocara un punto final de un solo modelo, con un solo cambio. Transfiera un nuevo parámetro de `TargetModel` que especifique cuál de los modelos en el punto de conexión establecer como destino. La `InvokeEndpoint` solicitud SageMaker AI Runtime se admite `X-Amzn-SageMaker-Target-Model` como un nuevo encabezado que toma la ruta relativa del modelo especificado para la invocación. El sistema de SageMaker IA construye la ruta absoluta del modelo combinando el prefijo que se proporciona como parte de la llamada a la `CreateModel` API con la ruta relativa del modelo.

Los siguientes procedimientos son los mismos para los puntos de conexión multimodelo respaldados por CPU y GPU.

------
#### [ AWS SDK for Python (Boto 3) ]

La solicitud de predicción de ejemplo siguiente utiliza el [SDK AWS para Python (Boto 3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html) en el cuaderno de muestras.

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName = "<ENDPOINT_NAME>",
                        ContentType  = "text/csv",
                        TargetModel  = "<MODEL_FILENAME>.tar.gz",
                        Body         = body)
```

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

 En el siguiente ejemplo, se muestra cómo realizar una solicitud CVS con dos filas mediante AWS Command Line Interface (AWS CLI):

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name "<ENDPOINT_NAME>" \
  --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \
  --content-type "text/csv" \
  --target-model "<MODEL_NAME>.tar.gz"
  output_file.txt
```

Si la inferencia se realizó correctamente, se crea un `output_file.txt` con información sobre sus solicitudes de inferencia. Para obtener más ejemplos sobre cómo hacer predicciones con el AWS CLI, consulte [Hacer predicciones con el AWS CLI en la](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#making-predictions-with-the-aws-cli) documentación del SDK de SageMaker Python.

------

El punto de conexión multimodelo carga dinámicamente los modelos de destino según sea necesario. Esto se puede observar al ejecutar el [Cuaderno de muestras de MME](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html), ya que itera por invocaciones aleatorias en diferentes modelos de destino que están alojados detrás del mismo punto de conexión. La primera solicitud contra un modelo específico tarda más tiempo porque el modelo se tiene que descargar de Amazon Simple Storage Service (Amazon S3) y cargar en la memoria. Esto se denomina *arranque en frío* y se prevé que en los puntos de conexión multimodelo se optimice para obtener una mejor relación precio-rendimiento para los clientes. Las llamadas posteriores terminan más rápido porque no hay sobrecarga adicional una vez que el modelo se haya cargado.

**nota**  
En el caso de las instancias respaldadas por GPU, el código de respuesta HTTP con 507 del contenedor de la GPU indica una falta de memoria o de otros recursos. Esto hace que los modelos no utilizados se descarguen del contenedor para cargar los modelos que se utilizan con más frecuencia.

## Reintente las solicitudes en caso de errores ModelNotReadyException
<a name="invoke-multi-model-config-retry"></a>

La primera vez que llame a `invoke_endpoint` para solicitar un modelo, este se descargará de Amazon Simple Storage Service y se cargará en el contenedor de inferencias. Esto hace que la primera llamada tarde más en devolverse. Las llamadas posteriores al mismo modelo finalizan más rápido, porque el modelo ya está cargado.

SageMaker La IA devuelve la respuesta a una llamada en un `invoke_endpoint` plazo de 60 segundos. Algunos modelos son demasiado grandes para descargarlos en 60 segundos. Si el modelo no termina de cargarse antes del límite de tiempo de espera de 60 segundos, la solicitud a `invoke_endpoint` devuelve el código de error `ModelNotReadyException` y el modelo continúa descargándose y cargándose en el contenedor de inferencia durante un máximo de 360 segundos. Si recibe un código de error `ModelNotReadyException` para una solicitud `invoke_endpoint`, vuelva a intentarlo. De forma predeterminada, las `invoke_endpoint` solicitudes de reintento AWS SDKs para Python (Boto 3) (con el [modo de reintento heredado](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode)) y Java que producen errores. `ModelNotReadyException` Puede configurar la estrategia de reintento para seguir reintentando la solicitud durante un máximo de 360 segundos. Si espera que su modelo tarde más de 60 segundos en descargarse y cargarse en el contenedor, establezca el tiempo de espera del socket del SDK en 70 segundos. Para obtener más información sobre cómo configurar la estrategia de reintento para AWS SDK para Python (Boto3), consulte [Configurar un modo de reintento](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#configuring-a-retry-mode). El código siguiente muestra un ejemplo que configura la estrategia de reintento para reintentar las llamadas a `invoke_endpoint` durante un máximo de 180 segundos.

```
import boto3
from botocore.config import Config

# This example retry strategy sets the retry attempts to 2. 
# With this setting, the request can attempt to download and/or load the model 
# for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds)
config = Config(
    read_timeout=70,
    retries={
        'max_attempts': 2  # This value can be adjusted to 5 to go up to the 360s max timeout
    }
)
runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)
```

# Agregar o eliminar modelos
<a name="add-models-to-endpoint"></a>

Puede implementar modelos adicionales en un punto de conexión multimodelo e invocarlos a través de ese punto de conexión de inmediato. Al agregar un modelo nuevo, no es necesario actualizar o reducir el punto de conexión, por lo que evita el costo de crear y ejecutar un punto de conexión independiente para cada modelo nuevo. El proceso para agregar y eliminar modelos es el mismo para los puntos de conexión multimodelo respaldados por CPU y GPU.

 SageMaker La IA descarga los modelos no utilizados del contenedor cuando la instancia alcanza su capacidad de memoria y es necesario descargar más modelos al contenedor. SageMaker La IA también elimina los artefactos de modelos no utilizados del volumen de almacenamiento de la instancia cuando el volumen alcanza su capacidad máxima y es necesario descargar nuevos modelos. La primera invocación a un modelo recién agregado tarda más tiempo porque el punto de conexión tarda tiempo en descargar el modelo desde S3 a la memoria del contenedor en la instancia que aloja el punto de conexión

Con el punto de conexión ya en ejecución, copie un nuevo conjunto de artefactos de modelo en la ubicación de Amazon S3 en la que almacene los modelos.

```
# Add an AdditionalModel to the endpoint and exercise it
aws s3 cp AdditionalModel.tar.gz s3://amzn-s3-demo-bucket/path/to/artifacts/
```

**importante**  
Para actualizar un modelo, proceda como haría al agregar un modelo nuevo. Use un nombre nuevo y único. No sobrescriba artefactos del modelo en Amazon S3 ya que la versión antigua del modelo podría aún cargarse en los contenedores o en el volumen de almacenamiento de las instancias en el punto de conexión. Las invocaciones al nuevo modelo podrían invocar la versión anterior del modelo. 

Las aplicaciones cliente pueden solicitar predicciones del modelo de destino adicional en cuanto se almacene en S3.

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName='<ENDPOINT_NAME>',
                        ContentType='text/csv',
                        TargetModel='AdditionalModel.tar.gz',
                        Body=body)
```

Para eliminar un modelo de un punto de conexión multimodelo, deje de invocar el modelo desde los clientes y elimínelo de la ubicación de S3 donde se almacenan los artefactos del modelo.

# Cree su propio contenedor para terminales SageMaker multimodelo de IA
<a name="build-multi-model-build-container"></a>

Consulte las siguientes secciones para incorporar su propio contenedor y sus dependencias a los puntos de conexión multimodelo.

**Topics**
+ [Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por CPU](#build-multi-model-container-cpu)
+ [Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por GPU](#build-multi-model-container-gpu)
+ [Usa el kit de herramientas de inferencia de IA SageMaker](#multi-model-inference-toolkit)
+ [Contrato para contenedores personalizados para puntos de conexión multimodelo](mms-container-apis.md)

## Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por CPU
<a name="build-multi-model-container-cpu"></a>

Si ninguna de las imágenes de contenedor prediseñadas satisface sus necesidades, puede crear su propio contenedor para usarlo con puntos de conexión multimodelo respaldados por CPU.

Se espera que las imágenes personalizadas de Amazon Elastic Container Registry (Amazon ECR) implementadas en SageMaker Amazon AI cumplan con el contrato básico descrito [Código de inferencia personalizado con los servicios de alojamiento](your-algorithms-inference-code.md) en el que se rige la SageMaker forma en que la IA interactúa con un contenedor de Docker que ejecuta su propio código de inferencia. Para que un contenedor pueda cargar y servir varios modelos de forma simultánea, hay otros APIs comportamientos que se deben seguir. Este contrato adicional incluye nuevos modelos APIs para cargar, enumerar, obtener y descargar modelos, y una API diferente para invocar los modelos. También hay diferentes comportamientos en los escenarios de error que APIs es necesario respetar. Para indicar que el contenedor cumple los requisitos adicionales, puede agregar el siguiente comando al archivo de Docker:

```
LABEL com.amazonaws.sagemaker.capabilities.multi-models=true
```

SageMaker La IA también inyecta una variable de entorno en el contenedor

```
SAGEMAKER_MULTI_MODEL=true
```

Si está creando un punto de conexión multimodelo para una canalización de inferencia en serie, el archivo Docker debe tener las etiquetas necesarias para las canalizaciones de inferencia multimodelo y en serie. Para obtener más información acerca de las canalizaciones de información en serie, consulte [Ejecutar predicciones en tiempo real con una canalización de inferencia](inference-pipeline-real-time.md).

Para ayudarle a implementar estos requisitos para un contenedor personalizado, hay dos bibliotecas disponibles:
+ [Multi Model Server](https://github.com/awslabs/multi-model-server) es un marco de código abierto para ofrecer modelos de aprendizaje automático que se pueden instalar en contenedores para proporcionar la interfaz que cumpla con los requisitos del nuevo contenedor de puntos finales multimodelo. APIs Proporciona las capacidades de administración de modelos y front-end HTTP requeridas por los puntos de conexión multimodelo para alojar varios modelos dentro de un único contenedor, cargar y descargar modelos del contenedor dinámicamente y realizar inferencia en un modelo cargado especificado. También proporciona un backend conectable que admite un controlador backend personalizado conectable donde puede implementar su propio algoritmo.
+ [SageMaker AI Inference Toolkit](https://github.com/aws/sagemaker-inference-toolkit) es una biblioteca que dota al servidor multimodelo de una configuración y unos ajustes que lo hacen compatible con los puntos finales multimodelo de IA. SageMaker También le permite ajustar parámetros de rendimiento importantes, como el número de trabajadores por modelo, en función de las necesidades de su situación. 

## Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por GPU
<a name="build-multi-model-container-gpu"></a>

En la actualidad, las bibliotecas Multi Model Server y AI Inference Toolkit no admiten la funcionalidad «trae tu propio contenedor» (BYOC) en terminales multimodelo con instancias respaldadas por la GPU. SageMaker 

[Para crear puntos de conexión multimodelo con instancias respaldadas por GPU, puede utilizar el servidor de inferencia NVIDIA Triton, compatible con SageMaker IA, junto con los contenedores de [inferencia NVIDIA Triton](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html).](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only) Para crear tus propias dependencias, puedes crear tu propio contenedor con el [servidor de inferencia NVIDIA Triton](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) compatible con la SageMaker IA como imagen base de tu archivo de Docker:

```
FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
```

**importante**  
Los contenedores con el servidor de inferencia Triton son los únicos contenedores compatibles que puede utilizar para puntos de conexión multimodelo respaldados por GPU.

## Usa el kit de herramientas de inferencia de IA SageMaker
<a name="multi-model-inference-toolkit"></a>

**nota**  
El kit de herramientas de inferencia de SageMaker IA solo es compatible con terminales multimodelo respaldados por la CPU. Actualmente, el kit de herramientas de inferencia de SageMaker IA no es compatible con los terminales multimodelo compatibles con la GPU.

Los contenedores prediseñados que admiten puntos de conexión multimodelo se muestran en [Algoritmos, marcos e instancias compatibles con puntos de conexión multimodelo](multi-model-support.md). Si desea usar cualquier otro marco o algoritmo, necesita compilar un contenedor. La forma más sencilla de hacerlo es utilizar el [kit de herramientas de inferencia de SageMaker IA](https://github.com/aws/sagemaker-inference-toolkit) para ampliar un contenedor prediseñado existente. El kit de herramientas de inferencia de SageMaker IA es una implementación para el servidor multimodelo (MMS) que crea puntos finales que se pueden implementar en la IA. SageMaker [Para ver un ejemplo de cuaderno que muestra cómo configurar e implementar un contenedor personalizado que admita terminales multimodelo en la SageMaker IA, consulte el cuaderno de muestra BYOC para terminales multimodelo.](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_bring_your_own)

**nota**  
El kit de herramientas de inferencia de SageMaker IA solo admite controladores de modelos de Python. Si desea implementar su controlador en cualquier otro lenguaje, debe crear su propio contenedor que implemente el punto final multimodelo adicional. APIs Para obtener información, consulte [Contrato para contenedores personalizados para puntos de conexión multimodelo](mms-container-apis.md).

**Para ampliar un contenedor mediante el kit de herramientas de inferencia de SageMaker IA**

1. Cree un controlador del modelo. MMS espera un controlador del modelo, que es un archivo de Python que implementa funciones para preprocesar, obtener predicciones del modelo y procesar la salida en un controlador del modelo. Para obtener un ejemplo de un controlador del modelo, consulte [model\$1handler.py](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/model_handler.py) en el cuaderno de muestras.

1. Importe el conjunto de herramientas de inferencia y utilice su función `model_server.start_model_server` para iniciar MMS. El siguiente ejemplo procede del archivo `dockerd-entrypoint.py` del cuaderno de muestras. Observe que la llamada a `model_server.start_model_server` pasa el controlador del modelo descrito en el paso anterior:

   ```
   import subprocess
   import sys
   import shlex
   import os
   from retrying import retry
   from subprocess import CalledProcessError
   from sagemaker_inference import model_server
   
   def _retry_if_error(exception):
       return isinstance(exception, CalledProcessError or OSError)
   
   @retry(stop_max_delay=1000 * 50,
          retry_on_exception=_retry_if_error)
   def _start_mms():
       # by default the number of workers per model is 1, but we can configure it through the
       # environment variable below if desired.
       # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2'
       model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle')
   
   def main():
       if sys.argv[1] == 'serve':
           _start_mms()
       else:
           subprocess.check_call(shlex.split(' '.join(sys.argv[1:])))
   
       # prevent docker exit
       subprocess.call(['tail', '-f', '/dev/null'])
       
   main()
   ```

1. En su `Dockerfile`, copie el controlador del modelo del primer paso y especifique el archivo de Python del paso anterior como el punto de entrada en su `Dockerfile`. Las líneas siguientes son del archivo [Dockerfile](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/Dockerfile) utilizado en el cuaderno de muestras:

   ```
   # Copy the default custom service file to handle incoming data and inference requests
   COPY model_handler.py /home/model-server/model_handler.py
   
   # Define an entrypoint script for the docker image
   ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
   ```

1. Compile y registre su contenedor. El siguiente guión de intérprete de comandos del cuaderno de muestras compila el contenedor y lo carga en un repositorio de Amazon Elastic Container Registry de su cuenta de AWS :

   ```
   %%sh
   
   # The name of our algorithm
   algorithm_name=demo-sagemaker-multimodel
   
   cd container
   
   account=$(aws sts get-caller-identity --query Account --output text)
   
   # Get the region defined in the current configuration (default to us-west-2 if none defined)
   region=$(aws configure get region)
   region=${region:-us-west-2}
   
   fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest"
   
   # If the repository doesn't exist in ECR, create it.
   aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1
   
   if [ $? -ne 0 ]
   then
       aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null
   fi
   
   # Get the login command from ECR and execute it directly
   $(aws ecr get-login --region ${region} --no-include-email)
   
   # Build the docker image locally with the image name and then push it to ECR
   # with the full name.
   
   docker build -q -t ${algorithm_name} .
   docker tag ${algorithm_name} ${fullname}
   
   docker push ${fullname}
   ```

Ahora puede usar este contenedor para implementar puntos finales multimodelo en IA. SageMaker 

**Topics**
+ [Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por CPU](#build-multi-model-container-cpu)
+ [Utilice sus propias dependencias para puntos de conexión multimodelo en instancias respaldadas por GPU](#build-multi-model-container-gpu)
+ [Usa el kit de herramientas de inferencia de IA SageMaker](#multi-model-inference-toolkit)
+ [Contrato para contenedores personalizados para puntos de conexión multimodelo](mms-container-apis.md)

# Contrato para contenedores personalizados para puntos de conexión multimodelo
<a name="mms-container-apis"></a>

Para gestionar varios modelos, tu contenedor debe ser compatible con un conjunto APIs que permita a Amazon SageMaker AI comunicarse con el contenedor para cargar, publicar, obtener y descargar los modelos según sea necesario. `model_name`Se utiliza en el nuevo conjunto de APIs como parámetro de entrada clave. Se espera que el contenedor del cliente realice un seguimiento de los modelos cargados mediante `model_name` como clave de asignación. Además, `model_name` es un identificador opaco y no es necesariamente el valor del parámetro `TargetModel` transferido a la API `InvokeEndpoint`. El `TargetModel` valor original de la `InvokeEndpoint` solicitud se pasa al contenedor en APIs forma de `X-Amzn-SageMaker-Target-Model` encabezado que se puede usar para fines de registro.

**nota**  
Actualmente, solo se admiten terminales multimodelo para instancias respaldadas por GPU con el contenedor del servidor de [inferencia NVIDIA Triton](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) de SageMaker AI. Este contenedor ya implementa el contrato que se define a continuación. Los clientes pueden usar este contenedor directamente con sus puntos de conexión multimodelo de GPU, sin necesidad de realizar ningún trabajo adicional.

Puede configurar lo siguiente APIs en sus contenedores para los puntos finales multimodelo respaldados por la CPU.

**Topics**
+ [API Load Model](#multi-model-api-load-model)
+ [API List Model](#multi-model-api-list-model)
+ [API Get Model](#multi-model-api-get-model)
+ [API Unload Model](#multi-model-api-unload-model)
+ [API Invoke Model](#multi-model-api-invoke-model)

## API Load Model
<a name="multi-model-api-load-model"></a>

Indica al contenedor que cargue un modelo particular presente en el campo `url` del cuerpo en la memoria del contenedor del cliente y que realice un seguimiento del mismo con el `model_name` asignado. Después de cargar un modelo, el contenedor debe estar listo para servir solicitudes de inferencia usando este `model_name`.

```
POST /models HTTP/1.1
Content-Type: application/json
Accept: application/json

{
     "model_name" : "{model_name}",
     "url" : "/opt/ml/models/{model_name}/model",
}
```

**nota**  
Si `model_name` ya está cargado, esta API debería devolver 409. Cada vez que no se pueda cargar un modelo por falta de memoria o de cualquier otro recurso, esta API debería devolver un código de estado HTTP 507 a SageMaker AI, que luego iniciará la descarga de los modelos no utilizados para su recuperación.

## API List Model
<a name="multi-model-api-list-model"></a>

Devuelve la lista de modelos cargados en la memoria del contenedor del cliente.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

Esta API también admite paginación.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

SageMaker Inicialmente, AI puede llamar a la API List Models sin proporcionar un valor para. `next_page_token` Si se devuelve un campo `nextPageToken` como parte de la respuesta, se proporcionará como el valor de `next_page_token` una llamada posterior a List Models. Si no se devuelve un `nextPageToken`, significa que no hay más modelos para devolver.

## API Get Model
<a name="multi-model-api-get-model"></a>

Esta es una API de lectura simple en la entidad `model_name`.

```
GET /models/{model_name} HTTP/1.1
Accept: application/json

{
     "modelName" : "{model_name}",
     "modelUrl" : "/opt/ml/models/{model_name}/model",
}
```

**nota**  
Si `model_name` no se carga, esta API debería devolver 404.

## API Unload Model
<a name="multi-model-api-unload-model"></a>

Indica a la plataforma de SageMaker IA que dé instrucciones al contenedor del cliente para que descargue un modelo de la memoria. Esto inicia el desalojo de un modelo candidato tal como determina la plataforma al iniciar el proceso de carga de un nuevo modelo. Los recursos aprovisionados a `model_name` los debe reclamar el contenedor cuando esta API devuelve una respuesta.

```
DELETE /models/{model_name}
```

**nota**  
Si `model_name` no se carga, esta API debería devolver 404.

## API Invoke Model
<a name="multi-model-api-invoke-model"></a>

Realiza una solicitud de predicción del `model_name` particular suministrado. La `InvokeEndpoint` solicitud SageMaker AI Runtime se admite `X-Amzn-SageMaker-Target-Model` como un nuevo encabezado que sigue la ruta relativa del modelo especificado para la invocación. El sistema de SageMaker IA construye la ruta absoluta del modelo combinando el prefijo que se proporciona como parte de la llamada a la `CreateModel` API con la ruta relativa del modelo.

```
POST /models/{model_name}/invoke HTTP/1.1
Content-Type: ContentType
Accept: Accept
X-Amzn-SageMaker-Custom-Attributes: CustomAttributes
X-Amzn-SageMaker-Target-Model: [relativePath]/{artifactName}.tar.gz
```

**nota**  
Si `model_name` no se carga, esta API debería devolver 404.

Además, en las instancias de GPU, si `InvokeEndpoint` se produce un error por falta de memoria o de otros recursos, esta API debería devolver un código de estado HTTP 507 a la SageMaker IA, que a su vez iniciará la descarga de los modelos no utilizados para su recuperación.

# Seguridad de puntos de conexión multimodelo
<a name="multi-model-endpoint-security"></a>

Los modelos y los datos en un punto de conexión multimodelo se encuentran coubicados en el volumen de almacenamiento de la instancia y en la memoria del contenedor. Todas las instancias de los puntos de enlace de Amazon SageMaker AI se ejecutan en un único contenedor arrendatario de tu propiedad. Solo los modelos pueden ejecutarse en el punto de conexión multimodelo. Es su responsabilidad gestionar el mapeo de las solicitudes a los modelos y proporcionar a los usuarios acceso a los modelos de destino correctos. SageMaker La IA utiliza las [funciones de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para proporcionar políticas de IAM basadas en la identidad que se utilizan para especificar las acciones y los recursos permitidos o denegados y las condiciones en las que se permiten o deniegan las acciones.

De forma predeterminada, una entidad principal de IAM con permisos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) en un punto de conexión multimodelo puede invocar cualquier modelo en la dirección del prefijo S3 definido en la operación [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html), siempre que el rol de ejecución de IAM definido en la operación tenga permisos para descargar el modelo. Si necesita restringir el acceso [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) a un grupo limitado de modelos en S3, lleve a cabo una de estas acciones:
+ Restrinja las llamadas `InvokeEndpont` a modelos específicos alojados en el punto de conexión mediante la clave de condición IAM `sagemaker:TargetModel`. Por ejemplo, la siguiente política permite solicitudes `InvokeEndpont` solo cuando el valor del campo `TargetModel` coincide con una de las expresiones regulares especificadas:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "sagemaker:InvokeEndpoint"
              ],
              "Effect": "Allow",
              "Resource":
              "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
              "Condition": {
                  "StringLike": {
                      "sagemaker:TargetModel": ["company_a/*", "common/*"]
                  }
              }
          }
      ]
  }
  ```

------

  Para obtener información sobre las claves de condición de SageMaker IA, consulte [Claves de condición para Amazon SageMaker AI](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys) en la *Guía del AWS Identity and Access Management usuario*.
+ Cree puntos de conexión multimodelo con prefijos S3 más restrictivos. 

Para obtener más información sobre cómo la SageMaker IA utiliza los roles para administrar el acceso a los puntos finales y realizar operaciones en su nombre, consulte[Cómo utilizar las funciones de ejecución de la SageMaker IA](sagemaker-roles.md). Es posible que sus clientes también tengan ciertos requisitos de aislamiento de datos dictados por sus propios requisitos de cumplimiento que se pueden satisfacer mediante identidades de IAM.

# CloudWatch Métricas para despliegues de terminales multimodelo
<a name="multi-model-endpoint-cloudwatch-metrics"></a>

Amazon SageMaker AI proporciona métricas para los puntos de conexión para que pueda supervisar la tasa de aciertos de la memoria caché, el número de modelos cargados y los tiempos de espera de los modelos para cargarse, descargarse y cargarse en un punto final multimodelo. Algunas de las métricas son diferentes para los puntos finales multimodelo respaldados por CPU y GPU, por lo que en las siguientes secciones se describen las CloudWatch métricas de Amazon que puede usar para cada tipo de punto final multimodelo.

Para obtener más información sobre las métricas, consulte **Métricas de carga de modelo de punto de conexión multimodelo** y **Métricas de instancia de modelo de punto de conexión multimodelo** en [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md). Las métricas por modelo no son compatibles. 

## CloudWatch métricas para puntos finales multimodelo respaldados por la CPU
<a name="multi-model-endpoint-cloudwatch-metrics-cpu"></a>

Puede supervisar las siguientes métricas en puntos de conexión multimodelo respaldados por CPU.

El espacio de `AWS/SageMaker` nombres incluye el siguiente modelo de métricas de carga de las llamadas a. [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)

Las métricas están disponibles con una frecuencia de un minuto.

Para obtener información sobre cuánto tiempo se conservan CloudWatch las métricas, consulta la *referencia [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)de la CloudWatch API de Amazon*.

**Métricas de carga de modelo de punto de conexión multimodelo**


| Métrica | Description (Descripción) | 
| --- | --- | 
| ModelLoadingWaitTime  |  El intervalo de tiempo que una solicitud de invocación ha esperado a que se descargue o cargue el modelo de destino, o ambos, para realizar la inferencia.  Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelUnloadingTime  |  El intervalo de tiempo que tardó en descargar el modelo a través de la llamada a la API `UnloadModel` del contenedor.  Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelDownloadingTime |  El intervalo de tiempo que se tardó en descargar el modelo de Amazon Simple Storage Service (Amazon S3). Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelLoadingTime  |  El intervalo de tiempo que tardó en cargar el modelo a través de la llamada a la API `LoadModel` del contenedor. Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelCacheHit  |  El número de solicitudes `InvokeEndpoint` enviadas al punto de conexión multimodelo para el que ya se ha cargado el modelo. La estadística Promedio muestra la proporción de solicitudes para las que el modelo ya se ha cargado. Unidades: ninguna Estadísticas válidas: Average, Sum, Sample Count.  | 

**Dimensiones para métricas de carga de modelo de punto de conexión multimodelo**


| Dimensión | Description (Descripción) | 
| --- | --- | 
| EndpointName, VariantName |  Filtra las métricas de invocación de punto de conexión para una `ProductionVariant` del punto de conexión y la variante especificados.  | 

Los espacios de nombres `/aws/sagemaker/Endpoints` contienen las siguientes métricas de instancia de las llamadas a [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html).

Las métricas están disponibles con una frecuencia de un minuto.

Para obtener información sobre cuánto tiempo se conservan CloudWatch las métricas, consulta la *referencia [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)de la CloudWatch API de Amazon*.

**Métricas de instancia de modelo de punto de conexión multimodelo**


| Métrica | Description (Descripción) | 
| --- | --- | 
| LoadedModelCount  |  El número de modelos cargados en los contenedores del punto de conexión multimodelo. Esta métrica se emite por instancia. La estadística Promedio con un período de 1 minuto indica el número medio de modelos cargados por instancia. La estadística Suma indica el número total de modelos cargados en todas las instancias del punto de conexión. Los modelos de los que realiza el seguimiento de esta métrica no son necesariamente únicos porque un modelo puede cargarse en varios contenedores en el punto de conexión. Unidades: ninguna Estadísticas válidas: Average, Sum, Min, Max, Sample Count.  | 
| CPUUtilization  |  La suma de la utilización de cada núcleo individual de la CPU. La utilización de la CPU de cada núcleo oscila entre 0 y 100. Por ejemplo, si hay cuatro CPUs, el `CPUUtilization` rango es del 0% al 400%. Para las variantes de punto de conexión, el valor es la suma de la utilización de la CPU de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| MemoryUtilization |  El porcentaje de memoria que utilizan los contenedores en una instancia. Este valor oscila del 0 % al 100 %. Para las variantes de punto de conexión, el valor es la suma de la utilización de la memoria de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| DiskUtilization |  El porcentaje de espacio en disco usado por los contenedores en una instancia. Este valor oscila del 0 % al 100 %. Para las variantes de punto de conexión, el valor es la suma de la utilización del espacio en disco de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 

## CloudWatch métricas para despliegues de terminales multimodelo con GPU
<a name="multi-model-endpoint-cloudwatch-metrics-gpu"></a>

Puede supervisar las siguientes métricas en puntos de conexión multimodelo respaldados por GPU.

El espacio de `AWS/SageMaker` nombres incluye las siguientes métricas de carga del modelo de las llamadas a. [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)

Las métricas están disponibles con una frecuencia de un minuto.

Para obtener información sobre cuánto tiempo se conservan CloudWatch las métricas, consulta la *referencia [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)de la CloudWatch API de Amazon*.

**Métricas de carga de modelo de punto de conexión multimodelo**


| Métrica | Description (Descripción) | 
| --- | --- | 
| ModelLoadingWaitTime  |  El intervalo de tiempo que una solicitud de invocación ha esperado a que se descargue o cargue el modelo de destino, o ambos, para realizar la inferencia.  Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelUnloadingTime  |  El intervalo de tiempo que tardó en descargar el modelo a través de la llamada a la API `UnloadModel` del contenedor.  Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelDownloadingTime |  El intervalo de tiempo que se tardó en descargar el modelo de Amazon Simple Storage Service (Amazon S3). Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelLoadingTime  |  El intervalo de tiempo que tardó en cargar el modelo a través de la llamada a la API `LoadModel` del contenedor. Unidades: microsegundos  Estadísticas válidas: Average, Sum, Min, Max, Sample Count.   | 
| ModelCacheHit  |  El número de solicitudes `InvokeEndpoint` enviadas al punto de conexión multimodelo para el que ya se ha cargado el modelo. La estadística Promedio muestra la proporción de solicitudes para las que el modelo ya se ha cargado. Unidades: ninguna Estadísticas válidas: Average, Sum, Sample Count.  | 

**Dimensiones para métricas de carga de modelo de punto de conexión multimodelo**


| Dimensión | Description (Descripción) | 
| --- | --- | 
| EndpointName, VariantName |  Filtra las métricas de invocación de punto de conexión para una `ProductionVariant` del punto de conexión y la variante especificados.  | 

Los espacios de nombres `/aws/sagemaker/Endpoints` contienen las siguientes métricas de instancia de las llamadas a [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html).

Las métricas están disponibles con una frecuencia de un minuto.

Para obtener información sobre cuánto tiempo se conservan CloudWatch las métricas, consulta la *referencia [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)de la CloudWatch API de Amazon*.

**Métricas de instancia de modelo de punto de conexión multimodelo**


| Métrica | Description (Descripción) | 
| --- | --- | 
| LoadedModelCount  |  El número de modelos cargados en los contenedores del punto de conexión multimodelo. Esta métrica se emite por instancia. La estadística Promedio con un período de 1 minuto indica el número medio de modelos cargados por instancia. La estadística Suma indica el número total de modelos cargados en todas las instancias del punto de conexión. Los modelos de los que realiza el seguimiento de esta métrica no son necesariamente únicos porque un modelo puede cargarse en varios contenedores en el punto de conexión. Unidades: ninguna Estadísticas válidas: Average, Sum, Min, Max, Sample Count.  | 
| CPUUtilization  |  La suma de la utilización de cada núcleo individual de la CPU. La utilización de la CPU de cada núcleo oscila entre 0 y 100. Por ejemplo, si hay cuatro CPUs, el `CPUUtilization` rango es del 0% al 400%. Para las variantes de punto de conexión, el valor es la suma de la utilización de la CPU de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| MemoryUtilization |  El porcentaje de memoria que utilizan los contenedores en una instancia. Este valor oscila del 0 % al 100 %. Para las variantes de punto de conexión, el valor es la suma de la utilización de la memoria de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| GPUUtilization |  El porcentaje de unidades de GPU usadas por los contenedores en una instancia. El valor puede oscilar entre 0 y 100 y se multiplica por el número de. GPUs Por ejemplo, si hay cuatro GPUs, el `GPUUtilization` rango es del 0% al 400%. Para las variantes de punto de conexión, el valor es la suma de la utilización de la GPU de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| GPUMemoryUtilization |  El porcentaje de memoria de GPU que utilizan los contenedores en una instancia. El rango de valores es de 0 a 100 y se multiplica por el número de. GPUs Por ejemplo, si hay cuatro GPUs, el `GPUMemoryUtilization` rango es del 0% al 400%. Para las variantes de punto de conexión, el valor es la suma de la utilización de la memoria de la GPU de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 
| DiskUtilization |  El porcentaje de espacio en disco usado por los contenedores en una instancia. Este valor oscila del 0 % al 100 %. Para las variantes de punto de conexión, el valor es la suma de la utilización del espacio en disco de los contenedores principales y suplementarios en la instancia. Unidad: porcentaje  | 

# Establezca el comportamiento de almacenamiento en caché del modelo de SageMaker punto final multimodelo de IA
<a name="multi-model-caching"></a>

De forma predeterminada, los puntos de conexión multimodelo almacenan en caché los modelos que se utilizan con más frecuencia en la memoria (CPU o GPU, dependiendo de si tiene instancias respaldadas por CPU o GPU) y en disco para proporcionar inferencias de baja latencia. Los modelos en caché se descargan y se and/or eliminan del disco solo cuando un contenedor se queda sin memoria o espacio en disco para adaptarse a un modelo recién diseñado.

Puede cambiar el comportamiento de almacenamiento en caché de un punto de conexión multimodelo y habilitar o deshabilitar explícitamente el almacenamiento en caché del modelo configurando el parámetro `ModelCacheSetting` al llamar a [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model).

Recomendamos establecer el valor del parámetro `ModelCacheSetting` en `Disabled` para los casos de uso que no aprovechen el almacenamiento en caché del modelo. Por ejemplo, cuando es necesario servir una gran cantidad de modelos desde el punto de conexión, pero cada modelo se invoca solo una vez (o con muy poca frecuencia). En estos casos de uso, si se establece el valor del parámetro `ModelCacheSetting` en `Disabled` permite un mayor número de transacciones por segundo (TPS) para solicitudes `invoke_endpoint`, en comparación con el modo de almacenamiento en caché predeterminado. Un TPS más alto en estos casos de uso se debe a que la SageMaker IA hace lo siguiente después de la solicitud: `invoke_endpoint`
+ Descarga el modelo de la memoria de forma asíncrona y lo elimina del disco inmediatamente después de invocarlo.
+ Proporciona una mayor simultaneidad para descargar y cargar modelos en el contenedor de inferencias. Tanto en el caso de los puntos finales respaldados por la CPU como por la GPU, la simultaneidad es un factor del número de la v CPUs de la instancia contenedora.

Para obtener instrucciones sobre cómo elegir un tipo de instancia de SageMaker IA ML para un punto final multimodelo, consulte. [Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo](multi-model-endpoint-instance.md)

# Establecer políticas de escalado automático para implementaciones de puntos de conexión multimodelo
<a name="multi-model-endpoints-autoscaling"></a>

SageMaker Los puntos finales multimodelo de IA son totalmente compatibles con el escalado automático, que gestiona las réplicas de los modelos para garantizar que los modelos escalen en función de los patrones de tráfico. Se recomienda configurar el punto de conexión multimodelo y el tamaño de las instancias teniendo en cuenta [Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo](multi-model-endpoint-instance.md) y también configurar la instancia en función del escalado automático para el punto de conexión. Las tasas de invocación utilizadas para desencadenar un evento de escalado automático se basan en el conjunto agregado de predicciones a través del conjunto completo de modelos atendidos por el punto de conexión. Para obtener más información sobre cómo configurar el escalado automático de puntos finales, consulte [Escalar automáticamente los modelos de Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html).

Puede configurar políticas de escalado automático con métricas predefinidas y personalizadas en puntos de conexión multimodelo respaldados por CPU y GPU.

**nota**  
SageMaker Las métricas de puntos finales multimodelo de IA están disponibles con un nivel de detalle de un minuto.

## Definir una política de escalado
<a name="multi-model-endpoints-autoscaling-define"></a>

Para especificar las métricas y los valores de destino para una política de escalado, puede configurar una política de escalado de seguimiento de destino. Puede utilizar una métrica predefinida o una métrica personalizada.

La configuración de la política de escalado está representada por un bloque JSON. Puede guardar su configuración de la política de escalado como bloque JSON en un archivo de texto. Este archivo de texto se utiliza al invocar la API Application Auto Scaling AWS CLI o la API. Para obtener más información acerca de la sintaxis de configuración de la política, consulte `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)` en la *referencia de la API de Auto Scaling de aplicaciones*.

Las siguientes opciones están disponibles para definir una configuración de la política de escalado de seguimiento de destino.

### Uso de una métrica predefinida
<a name="multi-model-endpoints-autoscaling-predefined"></a>

Para definir rápidamente una política de escalado de seguimiento de destino para una variante, utilice la métrica predefinida `SageMakerVariantInvocationsPerInstance`. `SageMakerVariantInvocationsPerInstance` es el número medio de veces por minuto que cada instancia de una variante se invoca. Le recomendamos fehacientemente el uso de esta métrica.

Para usar una métrica predefinida en una política de escalado, cree una configuración de seguimiento de destino para su política. En la configuración de seguimiento de destino, incluya `PredefinedMetricSpecification` para la métrica predefinida y `TargetValue` para el valor de destino de esa métrica.

El siguiente ejemplo es una configuración de política típica para el escalado de seguimiento de destino para una variante. En esta configuración, utilizamos la métrica predefinida `SageMakerVariantInvocationsPerInstance` para ajustar el número de las instancias de variantes de manera que cada instancia disponga de una métrica `InvocationsPerInstance` de `70`.

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "InvocationsPerInstance"
    }
}
```

**nota**  
Le recomendamos que utilice `InvocationsPerInstance` mientras utilice puntos de conexión multimodelo. El `TargetValue` de esta métrica depende de los requisitos de latencia de la aplicación. También le recomendamos que realice una prueba de carga de sus puntos de conexión para configurar los valores de los parámetros de escalado adecuados. Para obtener más información sobre las pruebas de carga y la configuración del escalado automático para sus puntos de enlace, consulte el blog [Configuración de puntos de enlace de inferencia de escalado automático en Amazon AI](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-sagemaker/). SageMaker 

### Uso de una métrica personalizada
<a name="multi-model-endpoints-autoscaling-custom"></a>

Si tiene que definir una política de escalado de seguimiento de destino que cumpla sus requisitos personalizados, defina una métrica personalizada. Puede definir una métrica personalizada en función de cualquier métrica de variante de producción que cambie en proporción al escalado.

No todas las métricas de SageMaker IA funcionan para el seguimiento de objetivos. La métrica debe ser una métrica de utilización válida y debe describir el nivel de actividad de una instancia. El valor de la métrica debe aumentar o reducirse en proporción inversa al número de instancias de variantes. Es decir, el valor de la métrica debe disminuir cuando el número de instancias aumenta.

**importante**  
Antes de implementar el escalado automático en producción, debe realizar la prueba del escalado automático con su métrica personalizada.

#### Ejemplo de métrica personalizada para un punto de conexión multimodelo respaldado por CPU
<a name="multi-model-endpoints-autoscaling-custom-cpu"></a>

En el siguiente ejemplo aparece una configuración de seguimiento de destino para una política de escalado. En esta configuración, para una variante llamada `my-model`, la métrica personalizada de `CPUUtilization` ajusta el número de instancias del punto de conexión en función de la utilización media de la CPU del 50 por ciento en todas las instancias.

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "CPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

#### Ejemplo de métrica personalizada para un punto de conexión multimodelo respaldado por GPU
<a name="multi-model-endpoints-autoscaling-custom-gpu"></a>

En el siguiente ejemplo aparece una configuración de seguimiento de destino para una política de escalado. En esta configuración, para una variante llamada `my-model`, la métrica personalizada de `GPUUtilization` ajusta el número de instancias del punto de conexión en función de la utilización media de la GPU del 50 por ciento en todas las instancias.

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "GPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## Incorporación de un periodo de recuperación
<a name="multi-model-endpoints-autoscaling-cooldown"></a>

Para agregar un periodo de recuperación para el escalado horizontal de su modelo, especifique un valor, en segundos, para `ScaleOutCooldown`. De forma similar, para agregar un periodo de recuperación para reducir horizontalmente su modelo, agregue un valor, en segundos, para `ScaleInCooldown`. Para obtener más información acerca de `ScaleInCooldown` y `ScaleOutCooldown`, consulte `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)` en la *referencia de la API de Application Auto Scaling*.

A continuación se muestra un ejemplo de la configuración de seguimiento de destino para una política de escalado. En esta configuración, la métrica predefinida `SageMakerVariantInvocationsPerInstance` se utiliza para ajustar el escalado según una media de `70` en todas las instancias de esa variante. La configuración proporciona un periodo de recuperación de escalado descendente de 10 minutos y un periodo de recuperación de escalado ascendente de 5 minutos.

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# Puntos de conexión con varios contenedores
<a name="multi-container-endpoints"></a>

SageMaker Los puntos de enlace multicontenedor de IA permiten a los clientes implementar varios contenedores, que utilizan diferentes modelos o marcos, en un único punto de enlace de IA. SageMaker Los contenedores se pueden ejecutar en secuencia como una canalización de inferencia, o se puede acceder a cada contenedor de forma individual mediante la invocación directa para mejorar la utilización de los puntos de conexión y optimizar los costes.

Para obtener información sobre cómo invocar los contenedores de un punto de conexión multicontenedor de forma secuencial, consulte [Canalizaciones de inferencia en Amazon AI SageMaker](inference-pipelines.md).

Para obtener información sobre cómo invocar un contenedor específico de un punto de conexión multicontenedor, consulte [Invoque un punto de conexión multicontenedor con invocación directa](multi-container-direct.md)

**Topics**
+ [Para crear un punto de conexión multicontenedor (Boto 3)](multi-container-create.md)
+ [Actualice un punto de conexión multicontenedor](multi-container-update.md)
+ [Invoque un punto de conexión multicontenedor con invocación directa](multi-container-direct.md)
+ [Seguridad con puntos de conexión multicontenedor con invocación directa](multi-container-security.md)
+ [Métricas de puntos de conexión multicontenedor con invocación directa](multi-container-metrics.md)
+ [Puntos de conexión multicontenedor](multi-container-auto-scaling.md)
+ [Solución de problemas de puntos de conexión multicontenedor](multi-container-troubleshooting.md)

# Para crear un punto de conexión multicontenedor (Boto 3)
<a name="multi-container-create"></a>

Cree un punto final de varios contenedores mediante una llamada [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)y [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) APIs como lo haría si creara cualquier otro punto de enlace. [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Puede ejecutar estos contenedores secuencialmente como una canalización de inferencia o ejecutar cada contenedor individual mediante la invocación directa. Los puntos de conexión multicontenedor tienen los siguientes requisitos cuando llama: `create_model`
+ Utilice el parámetro `Containers` en lugar de `PrimaryContainer` e incluya más de un contenedor en el parámetro `Containers`.
+ El `ContainerHostname` parámetro es obligatorio para cada contenedor en un punto de conexión multicontenedor con invocación directa.
+ Defina el parámetro `Mode` del campo `InferenceExecutionConfig` en `Direct` para la invocación directa de cada contenedor o `Serial` para utilizarlos como una canalización de inferencia. El modo predeterminado es `Serial`. 

**nota**  
Actualmente, hay un límite de hasta 15 contenedores admitidos en un punto de conexión multicontenedor.

En el siguiente ejemplo, se crea un modelo multicontenedor para la invocación directa.

1. Cree elementos contenedores y `InferenceExecutionConfig` con invocación directa.

   ```
   container1 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage1:mytag',
                    'ContainerHostname': 'firstContainer'
                }
   
   container2 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage2:mytag',
                    'ContainerHostname': 'secondContainer'
                }
   inferenceExecutionConfig = {'Mode': 'Direct'}
   ```

1. Cree el modelo con los elementos contenedores y establece el campo `InferenceExecutionConfig`.

   ```
   import boto3
   sm_client = boto3.Session().client('sagemaker')
   
   response = sm_client.create_model(
                  ModelName = 'my-direct-mode-model-name',
                  InferenceExecutionConfig = inferenceExecutionConfig,
                  ExecutionRoleArn = role,
                  Containers = [container1, container2]
              )
   ```

Para crear un punto de conexión, debe llamar a [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) y [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) como lo haría para crear cualquier otro punto de conexión.

# Actualice un punto de conexión multicontenedor
<a name="multi-container-update"></a>

Para actualizar un punto final multicontenedor de Amazon SageMaker AI, complete los siguientes pasos.

1.  Llame a [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) para crear un nuevo modelo con un nuevo valor para el parámetro `Mode` del campo `InferenceExecutionConfig`.

1.  Llame a [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) para crear una nueva configuración de punto de conexión con un nombre diferente utilizando el nuevo modelo que creó en el paso anterior.

1.  Llame a [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.update_endpoint) para actualizar el punto de conexión con la nueva configuración de punto final que creó en el paso anterior. 

# Invoque un punto de conexión multicontenedor con invocación directa
<a name="multi-container-direct"></a>

SageMaker Los puntos de enlace de varios contenedores de IA permiten a los clientes implementar varios contenedores para implementar diferentes modelos en un punto final de IA. SageMaker Puede alojar hasta 15 contenedores de inferencia diferentes en un único punto de conexión. Al utilizar la invocación directa, puede enviar una solicitud a un contenedor de inferencia específico alojado en un punto de conexión multicontenedor.

 Para invocar un punto de conexión multicontenedor con invocación directa, llame a [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint) como lo haría con cualquier otro punto de conexión y especifique qué contenedor desea invocar mediante el parámetro `TargetContainerHostname`.

 

 En el siguiente ejemplo, se invoca directamente el `secondContainer` de un punto de conexión multicontenedor para obtener una predicción.

```
import boto3
runtime_sm_client = boto3.Session().client('sagemaker-runtime')

response = runtime_sm_client.invoke_endpoint(
   EndpointName ='my-endpoint',
   ContentType = 'text/csv',
   TargetContainerHostname='secondContainer', 
   Body = body)
```

 Para cada solicitud de invocación directa a un punto de conexión multicontenedor, solo el contenedor con `TargetContainerHostname` procesa la solicitud de invocación. Se producirán errores de validación si realiza alguna de las siguientes acciones:
+ Especificar un `TargetContainerHostname` que no exista en el punto de conexión
+ No especifique un valor para `TargetContainerHostname` en una solicitud a un punto de conexión configurado para invocación directa
+ No especifique un valor para `TargetContainerHostname` en una solicitud a un punto de conexión configurado para invocación directa.

# Seguridad con puntos de conexión multicontenedor con invocación directa
<a name="multi-container-security"></a>

 En el caso de puntos de conexión multicontenedor con invocación directa, hay varios contenedores alojados en una sola instancia que comparten memoria y un volumen de almacenamiento. Es su responsabilidad utilizar contenedores seguros, mantener el mapeo correcto de las solicitudes a los contenedores de destino y proporcionar a los usuarios el acceso correcto a los contenedores de destino. SageMaker La IA utiliza las funciones de IAM para proporcionar políticas de IAM basadas en la identidad que se utilizan para especificar si se permite o deniega el acceso a un recurso a esa función y en qué condiciones. Para obtener más información acerca de los roles de IAM, consulte [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) en la *AWS Identity and Access Management Guía del usuario*. Para obtener más información acerca de las políticas basadas en recursos, consulte [Políticas basadas en identidad y políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

De forma predeterminada, una entidad principal de IAM con `InvokeEndpoint` permisos en un punto de conexión multicontenedor y con invocación directa puede invocar cualquier contenedor situado dentro del punto de conexión con el nombre que especifique al llamar a `invoke_endpoint`. Si necesita restringir el `invoke_endpoint` acceso a un conjunto limitado de contenedores dentro de un punto de conexión multicontenedor, utilice la clave de condición de IAM `sagemaker:TargetContainerHostname`. Las siguientes políticas muestran cómo limitar las llamadas a contenedores específicos dentro de un punto de conexión.

La siguiente política permite solicitudes `invoke_endpoint` solo cuando el valor del campo `TargetContainerHostname` coincide con una de las expresiones regulares especificadas.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "customIps*",
                        "common*"
                    ]
                }
            }
        }
    ]
}
```

------

La siguiente política deniega solicitudes `invoke_endpoint` solo cuando el valor del campo `TargetContainerHostname` coincide con una de las expresiones regulares especificadas de la declaración `Deny`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "model_name*"
                    ]
                }
            }
        },
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Deny",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "special-model_name*"
                    ]
                }
            }
        }
    ]
}
```

------

 *Para obtener información sobre las claves de condición de la SageMaker IA, consulte las claves de [condición de la SageMaker IA en la Guía](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys) del usuario.AWS Identity and Access Management *

# Métricas de puntos de conexión multicontenedor con invocación directa
<a name="multi-container-metrics"></a>

Además de las métricas de puntos finales que aparecen en la lista[Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md), la SageMaker IA también proporciona métricas por contenedor.

Las métricas por contenedor para los puntos finales de varios contenedores con invocación directa se ubican en dos espacios de nombres y se clasifican en dos espacios de nombres: CloudWatch y. `AWS/SageMaker` `aws/sagemaker/Endpoints` El espacio de nombres `AWS/SageMaker` incluye métricas relacionadas con la invocación y el espacio de nombres `aws/sagemaker/Endpoints` incluye métricas de uso de memoria y CPU.

En la siguiente tabla, se enumeran las métricas por contenedor para los puntos de conexión multicontenedor con invocación directa. Todas las métricas utilizan la dimensión [`EndpointName, VariantName, ContainerName`], que filtra las métricas en un punto de conexión específico, para una variante específica y correspondientes a un contenedor específico. Estas métricas comparten los mismos nombres de métrica que las de las canalizaciones de inferencia, pero a nivel de contenedor [`EndpointName, VariantName, ContainerName`].

 


|  |  |  |  | 
| --- |--- |--- |--- |
|  Nombre de métrica  |  Description (Descripción)  |  Dimensión  |  NameSpace  | 
|  Invocations  |  El número de solicitudes InvokeEndpoint enviadas a un contenedor dentro de un punto de conexión. Para obtener el número total de solicitudes enviadas a un contenedor, utilice la estadística Sum. Unidades: ninguna Estadísticas válidas: Sum, Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation4XX Errors  |  El número de solicitudes InvokeEndpoint para el que el modelo devolvió un código de respuesta HTTP en un contenedor específico 4xx. Para cada respuesta, la IA envía 4xx un. SageMaker 1 Unidades: ninguna Estadísticas válidas: Average, Sum  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation5XX Errors  |  El número de solicitudes InvokeEndpoint para el que el modelo devolvió un código de respuesta HTTP en un contenedor específico 5xx. Para cada 5xx respuesta, la SageMaker IA envía un1. Unidades: ninguna Estadísticas válidas: Average, Sum  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  ContainerLatency  |  El tiempo que tardó el contenedor objetivo en responder visto desde la SageMaker IA. ContainerLatencyincluye el tiempo que se tardó en enviar la solicitud, obtener la respuesta del contenedor del modelo y completar la inferencia en el contenedor. Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  OverheadLatency  |  El tiempo que se suma al tiempo necesario para responder a una solicitud de un cliente por parte de la SageMaker IA en concepto de gastos generales. OverheadLatencyse mide desde el momento en que SageMaker AI recibe la solicitud hasta que devuelve una respuesta al cliente, menos elModelLatency. La latencia de sobrecargas puede variar en función de los tamaños de carga de solicitud y respuesta, la frecuencia de solicitud y la autenticación o la autorización de la solicitud, entre otros factores. Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, “Recuento de muestras”  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  CPUUtilization  | El porcentaje de unidades de CPU usadas por cada contenedor que se ejecutan en una instancia. El valor oscila entre el 0% y el 100% y se multiplica por el número de CPUs. Por ejemplo, si hay cuatro CPUs, CPUUtilization puede oscilar entre el 0% y el 400%. En el caso de los puntos finales con invocación directa, el número de CPUUtilization métricas es igual al número de contenedores de ese punto final. Unidad: porcentaje  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 
|  MemoryUtilizaton  |  El porcentaje de memoria que utiliza cada contenedor que se ejecuta en una instancia. Este valor oscila entre 0 % y 100 %. Al igual que CPUUtilization en los puntos finales con invocación directa, el número de MemoryUtilization métricas es igual al número de contenedores en ese punto final. Unidad: porcentaje  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 

Todas las métricas de la tabla anterior son específicas de los puntos de conexión multicontenedor con invocación directa. Además de estas métricas especiales por contenedor, también hay métricas a nivel de variante con dimensiones `[EndpointName, VariantName]` para todas las métricas de la tabla previstas `ContainerLatency`.

# Puntos de conexión multicontenedor
<a name="multi-container-auto-scaling"></a>

Si desea configurar el escalado automático para un punto de conexión multicontenedor mediante la métrica `InvocationsPerInstance`, le recomendamos que el modelo de cada contenedor muestre un uso de la CPU y una latencia similares en cada solicitud de inferencia. Esto se recomienda porque si el tráfico al punto de conexión multicontenedor pasa de un modelo de bajo uso de CPU a un modelo de alto uso de CPU, pero el volumen total de llamadas sigue siendo el mismo, el punto de conexión no se amplía y es posible que no haya suficientes instancias para gestionar todas las solicitudes al modelo de alto uso de CPU. Para obtener información sobre la configuración del escalado automático de puntos de conexión, consulte [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md).

# Solución de problemas de puntos de conexión multicontenedor
<a name="multi-container-troubleshooting"></a>

Las siguientes secciones pueden ayudarle a solucionar errores de puntos de conexión multicontenedor.

## Errores de comprobación de estado de ping
<a name="multi-container-ping-errors"></a>

 Con varios contenedores, la memoria y CPU del punto de conexión están sometidas a una mayor presión durante la creación del punto de conexión. En concreto, las métricas `MemoryUtilization` y `CPUUtilization` son más altas que las de los puntos de conexión de un solo contenedor, ya que la presión de utilización es proporcional al número de contenedores. Por este motivo, le recomendamos que elija tipos de instancias con suficiente memoria y CPU para asegurarse de que la instancia dispone de memoria suficiente para cargar todos los modelos (la misma guía se aplica a la implementación de una canalización de inferencia). De lo contrario, es posible que no se pueda crear el punto de conexión y se produzca un error como `XXX did not pass the ping health check`.

## Falta la etiqueta Docker accept-bind-to-port = true
<a name="multi-container-missing-accept"></a>

Los contenedores de un punto de conexión multicontenedor escuchan en el puerto especificado en la variable de entorno `SAGEMAKER_BIND_TO_PORT` en lugar de puerto 8080. Cuando un contenedor se ejecuta en un punto final con varios contenedores, la SageMaker IA proporciona automáticamente esta variable de entorno al contenedor. Si esta variable de entorno no está presente, los contenedores de manera predeterminada asignan el uso del puerto 8080. Para indicar que el contenedor cumple con este requisito, ejecute el siguiente comando para añadir una etiqueta a su Dockerfile: 

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

 De lo contrario, aparecerá un mensaje de error como `Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).`

 Si su contenedor necesita escuchar en otro puerto, elija un puerto que esté en el intervalo especificado por la variable de entorno `SAGEMAKER_SAFE_PORT_RANGE`. Especifique el valor como un rango inclusivo en el formato *XXXX* -*YYYY*, donde XXXX y YYYY son números enteros de varios dígitos. SageMaker La IA proporciona este valor automáticamente cuando se ejecuta el contenedor en un punto final con varios contenedores. 

# Canalizaciones de inferencia en Amazon AI SageMaker
<a name="inference-pipelines"></a>

Una *canalización de inferencias* es un modelo de Amazon SageMaker AI que se compone de una secuencia lineal de dos a quince contenedores que procesan las solicitudes de inferencias sobre los datos. Utiliza una canalización de inferencias para definir e implementar cualquier combinación de algoritmos integrados de SageMaker IA previamente entrenados y sus propios algoritmos personalizados empaquetados en contenedores de Docker. Puede utilizar una canalización de inferencia para combinar tareas de ciencia de datos de preprocesamiento, predicciones y posprocesamiento. Las canalizaciones de inferencia se administran completamente.

Puedes añadir contenedores SageMaker AI Spark ML Serving y scikit-learn que reutilizan los transformadores de datos desarrollados para los modelos de entrenamiento. Todo el proceso de inferencias ensamblado puede considerarse un modelo de SageMaker IA que se puede utilizar para hacer predicciones en tiempo real o para procesar transformaciones por lotes directamente sin ningún preprocesamiento externo. 

Dentro de un modelo de canalización de inferencias, la SageMaker IA gestiona las invocaciones como una secuencia de solicitudes HTTP. El primer contenedor de la canalización gestiona la solicitud inicial, luego la respuesta intermedia se envía como una solicitud al segundo contenedor y así sucesivamente, para cada contenedor de la canalización. SageMaker La IA devuelve la respuesta final al cliente. 

Al implementar el modelo de canalización, la SageMaker IA instala y ejecuta todos los contenedores de cada instancia de Amazon Elastic Compute Cloud (Amazon EC2) del punto final o del trabajo de transformación. El procesamiento de características y las inferencias se ejecutan con baja latencia, ya que los contenedores están ubicados en las misma instancias de EC2. Puede definir los contenedores para un modelo de canalización mediante la operación [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) o desde la consola. En lugar de configurar un `PrimaryContainer`, utilice el parámetro `Containers` para configurar los contenedores que componen la canalización. También se especifica el orden en el que se ejecutan los contenedores. 

Un modelo de canalización es inmutable, pero puede actualizar una canalización de inferencia implementando una nueva con la operación [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Esta modularidad admite una mayor flexibilidad durante la experimentación. 

Para obtener información sobre cómo crear una canalización de inferencias con el registro de SageMaker modelos, consulte. [Implementación del registro de modelos con el registro de modelos](model-registry.md)

El uso de esta característica no tiene costos adicionales. Solo tiene que pagar por las instancias que se ejecutan en un punto de conexión.

**Topics**
+ [Cuadernos de ejemplo para canalizaciones de inferencia](#inference-pipeline-sample-notebooks)
+ [Procesamiento de características con Spark ML y Scikit-learn](inference-pipeline-mleap-scikit-learn-containers.md)
+ [Creación de un modelo de canalización](inference-pipeline-create-console.md)
+ [Ejecutar predicciones en tiempo real con una canalización de inferencia](inference-pipeline-real-time.md)
+ [Transformaciones por lotes con canalizaciones de inferencia](inference-pipeline-batch.md)
+ [Registros y métricas de canalización de inferencias](inference-pipeline-logs-metrics.md)
+ [Solución de problemas de canalizaciones de inferencia](inference-pipeline-troubleshoot.md)

## Cuadernos de ejemplo para canalizaciones de inferencia
<a name="inference-pipeline-sample-notebooks"></a>

Para ver un ejemplo que muestra cómo crear e implementar canalizaciones de inferencia, consulte el cuaderno de muestra [Inference Pipeline with Scikit-learn and Linear Learner](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/scikit_learn_inference_pipeline). Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar el ejemplo en SageMaker IA, consulte. [Instancias de Amazon SageMaker Notebook](nbi.md) 

Para ver una lista de todos los ejemplos de SageMaker IA, después de crear y abrir una instancia de bloc de notas, selecciona la pestaña **Ejemplos de SageMaker IA**. Existen tres blocs de notas de canalización de inferencias. Los dos primeros blocs de notas de canalización de inferencias que acabamos de describir se encuentran en la carpeta `advanced_functionality` y el tercer bloc de notas está en la carpeta `sagemaker-python-sdk`. Para abrir un bloc de notas, elija su pestaña **Usar** y, a continuación, elija **Crear copia**.

# Procesamiento de características con Spark ML y Scikit-learn
<a name="inference-pipeline-mleap-scikit-learn-containers"></a>

Antes de entrenar un modelo con algoritmos integrados o personalizados de Amazon SageMaker AI, puedes usar los preprocesadores Spark y scikit-learn para transformar tus datos y diseñar funciones. 

## Procesamiento de características con Spark ML
<a name="feature-processing-spark"></a>

Puedes ejecutar trabajos de Spark ML con [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html), un servicio ETL (extraer, transformar, cargar) sin servidor, desde tu cuaderno de SageMaker IA. También puede conectarse a clústeres de EMR existentes para ejecutar trabajos de Spark ML con [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html). Para ello, necesitas un rol AWS Identity and Access Management (de IAM) que te permita realizar llamadas desde tu bloc de notas de SageMaker IA a. AWS Glue

**nota**  
Para ver qué versiones de Python y Spark son AWS Glue compatibles, consulta las [notas de la versión de AWS Glue](/glue/latest/dg/release-notes.html).

Después de diseñar las funciones, empaquetas y serializas los trabajos de Spark ML MLeap en MLeap contenedores que puedes añadir a un proceso de inferencia. No es necesario utilizar clústeres de Spark administrados externamente. Con este enfoque, puede escalar sin problemas a partir de una muestra de filas a terabytes de datos. Los mismos transformadores trabajar tanto para entrenamiento como para inferencia, por lo que no es necesario duplicar el preprocesamiento y la lógica de ingeniería de características o desarrollar una solución puntual para que persistan los modelos. Con las canalizaciones de inferencia, no es necesario mantenerse fuera de la infraestructura, y puede realizar predicciones directamente a partir de las entradas de datos.

Cuando ejecutas un trabajo de Spark ML AWS Glue, una canalización de Spark ML se serializa en formato. [MLeap](https://github.com/combust/mleap) Luego, puede usar el trabajo con el [contenedor de servicio de modelos SparkML](https://github.com/aws/sagemaker-sparkml-serving-container) en una canalización de inferencias de SageMaker IA. *MLeap*es un formato de serialización y un motor de ejecución para procesos de aprendizaje automático. Es compatible con Spark, Scikit-learn y TensorFlow para entrenar canalizaciones y exportarlas a una canalización serializada llamada Bundle. MLeap Puedes volver a deserializar los paquetes para convertirlos en Spark para puntuarlos en modo lote o en tiempo de ejecución para potenciar los servicios de API en tiempo real. MLeap 

Para ver un ejemplo que muestra cómo utilizar el proceso con Spark ML, consulte el cuaderno de muestra [Entrenar un modelo de aprendizaje automático con Apache Spark en Amazon EMR e implementarlo en SageMaker IA](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/sparkml_serving_emr_mleap_abalone).

## Procesamiento de características con Scikit-Learn
<a name="feature-processing-with-scikit"></a>

Puede ejecutar y empaquetar trabajos de scikit-learn en contenedores directamente en Amazon AI. SageMaker Para consultar un ejemplo de código de Python para crear un modelo caracterizador de scikit-learn que se entrena en [conjuntos de datos de la flor Iris de Fisher](http://archive.ics.uci.edu/ml/datasets/Iris) y predice la especie de iris en función de medidas morfológicas, consulte la página de [entrenamiento y predicción de IRIS con SageMaker Scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/scikit_learn_iris). 

# Creación de un modelo de canalización
<a name="inference-pipeline-create-console"></a>

Para crear un modelo de canalización que pueda implementarse en un punto final o usarse para un trabajo de transformación por lotes, utilice la consola Amazon SageMaker AI o la `CreateModel` operación. 

**Para crear una canalización de inferencia (consola)**

1. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Elija **Modelos** y, a continuación, seleccione **Crear modelos** en el grupo **Inferencia**. 

1. En la página **Crear modelo**, proporcione un nombre de modelo, elija un rol de IAM y, si desea utilizar una VPC privada, especifique los valores de la VPC.   
![\[La página para crear un modelo para una canalización de inferencia.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/create-pipeline-model.png)

1. Para añadir información sobre los contenedores en la canalización de inferencia, seleccione **Agregar contenedor** y luego haga clic en **Siguiente**.

1. Complete los campos para cada contenedor en el orden en el que desee ejecutarlos, hasta un máximo de quince. Complete los campos **Opciones de entrada del contenedor**, **Ubicación de la imagen de código de inferencia** y, opcionalmente, **Ubicación de artefactos de modelos**, **Nombre de host de contenedor** y **Variables de entorno**.  
![\[Creación de un modelo de canalización con contenedores.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/create-pipeline-model-containers.png)

   La **MyInferencePipelineModel**página resume la configuración de los contenedores que proporcionan información para el modelo. Si has proporcionado las variables de entorno en la definición de contenedor correspondiente, SageMaker AI las muestra en el campo **Variables de entorno**.  
![\[El resumen de configuración de contenedor para el modelo de canalización.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/pipeline-MyInferencePipelinesModel-recap.png)

# Ejecutar predicciones en tiempo real con una canalización de inferencia
<a name="inference-pipeline-real-time"></a>

Puede utilizar modelos entrenados en una canalización de inferencia para realizar predicciones en tiempo real directamente sin realizar preprocesamiento externo. Al configurar la canalización, puede optar por utilizar los transformadores de funciones integrados que ya están disponibles en Amazon SageMaker AI. O bien, puede implementar su propia lógica de transformación con solo unas pocas líneas de código de scikit-learn o Spark. 

[MLeap](https://combust.github.io/mleap-docs/), un formato de serialización y motor de ejecución para canalizaciones de aprendizaje automático, es compatible con Spark, scikit-learn y TensorFlow para entrenar canalizaciones y exportarlas a una canalización serializada denominada Bundle. MLeap Puedes volver a deserializar los paquetes para convertirlos en Spark para obtener una puntuación por lotes o en tiempo de ejecución para potenciar los servicios de API en tiempo real. MLeap 

Los contenedores de una canalización escuchan en el puerto especificado en la variable de entorno `SAGEMAKER_BIND_TO_PORT` (en lugar de 8080). Cuando se ejecuta en una canalización de inferencias, la SageMaker IA proporciona automáticamente esta variable de entorno a los contenedores. Si esta variable de entorno no está presente, los contenedores de manera predeterminada asignan el uso del puerto 8080. Para indicar que el contenedor cumple con este requisito, ejecute el siguiente comando para añadir una etiqueta a su Dockerfile:

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

Si su contenedor necesita escuchar en otro puerto, elija un puerto que esté en el intervalo especificado por la variable de entorno `SAGEMAKER_SAFE_PORT_RANGE`. Especifique el valor como un rango inclusivo en el formato**"XXXX-YYYY"**, donde `XXXX` y `YYYY` son números enteros de varios dígitos. SageMaker La IA proporciona este valor automáticamente cuando se ejecuta el contenedor en una canalización de varios contenedores.

**nota**  
Para utilizar imágenes de Docker personalizadas en una canalización que incluye [algoritmos integrados de SageMaker IA](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), necesitas una política de [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html). Su repositorio de Amazon ECR debe conceder permiso a la SageMaker IA para extraer la imagen. Para obtener más información, consulte [Solución de problemas de permisos de Amazon ECR para canalizaciones de inferencia](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions).

## Creación e implementación de un punto de conexión de canalización de inferencia
<a name="inference-pipeline-real-time-sdk"></a>

El siguiente código crea e implementa un modelo de canalización de inferencias en tiempo real con SparkML y XGBoost modelos en serie con el SDK de IA. SageMaker 

```
from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel

sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])
sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)
```

## Solicitar inferencia en tiempo real desde un punto de conexión de canalización de inferencia
<a name="inference-pipeline-endpoint-request"></a>

El ejemplo siguiente muestra cómo realizar predicciones en tiempo real llamando a un punto de conexión de inferencia y trasladando una carga de solicitud en formato JSON:

```
import sagemaker
from sagemaker.predictor import json_serializer, json_deserializer, Predictor

payload = {
        "input": [
            {
                "name": "Pclass",
                "type": "float",
                "val": "1.0"
            },
            {
                "name": "Embarked",
                "type": "string",
                "val": "Q"
            },
            {
                "name": "Age",
                "type": "double",
                "val": "48.0"
            },
            {
                "name": "Fare",
                "type": "double",
                "val": "100.67"
            },
            {
                "name": "SibSp",
                "type": "double",
                "val": "1.0"
            },
            {
                "name": "Sex",
                "type": "string",
                "val": "male"
            }
        ],
        "output": {
            "name": "features",
            "type": "double",
            "struct": "vector"
        }
    }

predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer,
                                content_type='text/csv', accept='application/json')

print(predictor.predict(payload))
```

La respuesta que obtiene de `predictor.predict(payload)` es el resultado de la inferencia del modelo.

## Ejemplo de canalización de inferencia en tiempo real
<a name="inference-pipeline-example"></a>

Puedes ejecutar este [cuaderno de ejemplo con el SKLearn predictor](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb) que muestra cómo implementar un punto final, ejecutar una solicitud de inferencia y, a continuación, deserializar la respuesta. Encuentra este cuaderno y otros ejemplos en el [ GitHub repositorio de SageMaker ejemplos de Amazon](https://github.com/awslabs/amazon-sagemaker-examples).

# Transformaciones por lotes con canalizaciones de inferencia
<a name="inference-pipeline-batch"></a>

Para obtener inferencias sobre un conjunto de datos completo, ejecute una transformación por lotes en un modelo entrenado. Para ejecutar inferencias en un conjunto de datos completo, puede utilizar el mismo modelo de canalización de inferencias que se creó e implementó en un punto de conexión con el procesamiento en tiempo real de trabajos de transformación por lotes. Para ejecutar un trabajo de transformación por lotes en una canalización, descargue los datos de entrada desde Amazon S3 y envíelos en una o varias solicitudes HTTP al modelo de canalización de inferencia. Para ver un ejemplo que muestra cómo preparar los datos para una transformación por lotes, consulte la «Sección 2: Preprocesar los datos de alojamiento sin procesar con Scikit Learn» del cuaderno de muestra [Amazon SageMaker Multi-Model Endpoints con Linear Learner](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_linear_learner_home_value). Para obtener información sobre las transformaciones por lotes de Amazon SageMaker AI, consulte[Transformación por lotes para inferencias con Amazon AI SageMaker](batch-transform.md). 

**nota**  
Para usar imágenes de Docker personalizadas en una canalización que incluye los [algoritmos integrados de Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), necesita una política de [Amazon Elastic Container Registry (ECR).](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) Su repositorio de Amazon ECR debe conceder permiso a la SageMaker IA para extraer la imagen. Para obtener más información, consulte [Solución de problemas de permisos de Amazon ECR para canalizaciones de inferencia](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions).

El siguiente ejemplo muestra cómo ejecutar un trabajo de transformación con el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable). En este ejemplo, `model_name` es la canalización de inferencia que combina SparkML XGBoost y modelos (creados en ejemplos anteriores). La ubicación de Amazon S3 especificada por `input_data_path` contiene los datos de entrada, en formato CSV, que se van a descargar y envíar al modelo de Spark ML. Una vez finalizado el trabajo de transformación, la ubicación de Amazon S3 especificada por `output_data_path` contiene los datos de salida devueltos por el XGBoost modelo en formato CSV.

```
import sagemaker
input_data_path = 's3://{}/{}/{}'.format(default_bucket, 'key', 'file_name')
output_data_path = 's3://{}/{}'.format(default_bucket, 'key')
transform_job = sagemaker.transformer.Transformer(
    model_name = model_name,
    instance_count = 1,
    instance_type = 'ml.m4.xlarge',
    strategy = 'SingleRecord',
    assemble_with = 'Line',
    output_path = output_data_path,
    base_transform_job_name='inference-pipelines-batch',
    sagemaker_session=sagemaker.Session(),
    accept = CONTENT_TYPE_CSV)
transform_job.transform(data = input_data_path, 
                        content_type = CONTENT_TYPE_CSV, 
                        split_type = 'Line')
```

# Registros y métricas de canalización de inferencias
<a name="inference-pipeline-logs-metrics"></a>

La supervisión es importante para mantener la fiabilidad, la disponibilidad y el rendimiento de los recursos de SageMaker IA de Amazon. Para supervisar y solucionar problemas de rendimiento de la canalización de inferencias, utiliza CloudWatch los registros y mensajes de error de Amazon. Para obtener información sobre las herramientas de monitoreo que proporciona la SageMaker IA, consulte. [Supervisión de AWS los recursos en Amazon SageMaker AI](monitoring-overview.md)

## Uso de métricas para monitorizar modelos de varios contenedores
<a name="inference-pipeline-metrics"></a>

Para supervisar los modelos de varios contenedores en Inference Pipelines, utilice Amazon. CloudWatch CloudWatchrecopila datos sin procesar y los procesa para convertirlos en métricas legibles y prácticamente en tiempo real. SageMaker Los puntos finales y los trabajos de formación en IA escriben CloudWatch métricas y registros en el `AWS/SageMaker` espacio de nombres. 

Las siguientes tablas muestran las métricas y dimensiones de los siguientes:
+ Invocaciones de punto de conexión
+ Trabajos de entrenamiento, trabajos de transformación por lotes e instancias de punto de conexión

Una *dimensión* es un name/value par que identifica de forma única una métrica. Puede asignar hasta 10 dimensiones a una métrica. Para obtener más información sobre la supervisión con CloudWatch, consulte[Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md). 

**Métricas de invocación de puntos de conexión**

El espacio de nombres `AWS/SageMaker` incluye las siguientes métricas de respuesta desde llamadas en [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) .

Las métricas se notifican a intervalos de 1 minuto.


| Métrica | Description (Descripción) | 
| --- | --- | 
| Invocation4XXErrors |  El número de solicitudes `InvokeEndpoint` para el que el modelo devolvió un código de respuesta HTTP `4xx`. Para cada `4xx` respuesta, la SageMaker IA envía un`1`. Unidades: ninguna Estadísticas válidas: `Average`, `Sum`  | 
| Invocation5XXErrors |  El número de solicitudes `InvokeEndpoint` para el que el modelo devolvió un código de respuesta HTTP `5xx`. Para cada `5xx` respuesta, la SageMaker IA envía un`1`. Unidades: ninguna Estadísticas válidas: `Average`, `Sum`  | 
| Invocations |  Las solicitudes de `number of InvokeEndpoint` enviadas a un punto de conexión del modelo.  Para obtener el número total de solicitudes enviadas a un punto de conexión del modelo, utilice la estadística `Sum`. Unidades: ninguna Estadísticas válidas: `Sum`, `Sample Count`  | 
| InvocationsPerInstance |  El número de invocaciones de puntos finales enviadas a un modelo, normalizado `InstanceCount` en cada una. `ProductionVariant` SageMaker La IA envía 1/ `numberOfInstances` como valor para cada solicitud, que `numberOfInstances` es el número de instancias activas ProductionVariant en el punto final en el momento de la solicitud. Unidades: ninguna Estadísticas válidas: `Sum`  | 
| ModelLatency | El tiempo que el modelo o modelos tardan en responder. Esto incluye el tiempo necesario para enviar la solicitud, para obtener la respuesta del contenedor de modelos y para completar la inferencia en el contenedor. ModelLatency es el tiempo total que tardan todos los contenedores en una canalización de inferencia.Unidades: microsegundosEstadísticas válidas: `Average`, `Sum`, `Min`, `Max`, Sample Count | 
| OverheadLatency |  El tiempo que se suma al tiempo necesario para responder a una solicitud de un cliente por parte de SageMaker AI en concepto de gastos generales. `OverheadLatency`se mide desde el momento en que SageMaker AI recibe la solicitud hasta que devuelve una respuesta al cliente, menos el`ModelLatency`. La latencia de sobrecargas puede variar en función de los tamaños de carga de solicitud y respuesta, la frecuencia de solicitud y la autenticación o la autorización de la solicitud, entre otros factores. Unidades: microsegundos Estadísticas válidas: `Average`, `Sum`, `Min`, `Max`, `Sample Count`  | 
| ContainerLatency | El tiempo que tardó un contenedor de Inference Pipelines en responder, visto desde SageMaker AI. ContainerLatencyincluye el tiempo que se tardó en enviar la solicitud, obtener la respuesta del contenedor del modelo y completar la inferencia en el contenedor.Unidades: microsegundosEstadísticas válidas: `Average`, `Sum`, `Min`, `Max`, `Sample Count` | 

**Dimensiones de las métricas de invocación de puntos de conexión**


| Dimensión | Description (Descripción) | 
| --- | --- | 
| EndpointName, VariantName, ContainerName |  Filtra las métricas de invocación de punto de conexión para `ProductionVariant` en el punto de conexión especificado y para la variante especificada.  | 

En el caso de un punto final de proceso de inferencia, CloudWatch enumera las métricas de latencia por contenedor de su cuenta como métricas de **contenedores de terminales y métricas** **de variantes** de puntos finales en el espacio de nombres de **SageMaker AI, de la siguiente manera**. La métrica `ContainerLatency` solo aparece para canalizaciones de inferencias.

![\[El CloudWatch panel de control de una canalización de inferencias.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/pipeline-endpoint-metrics.png)


Para cada punto de conexión y cada contenedor, las métricas de latencia muestran los nombres del contenedor, punto de conexión, variante y métrica.

![\[Las métricas de latencia de un punto de conexión.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/pipeline-endpoint-metrics-details.png)


**Métricas de instancias de punto de conexión, trabajo de transformación por lotes y trabajo de entrenamiento**

Los espacios de nombres `/aws/sagemaker/TrainingJobs`, `/aws/sagemaker/TransformJobs` y `/aws/sagemaker/Endpoints` incluyen las siguientes métricas para los trabajos de entrenamiento y las instancias de punto de conexión.

Las métricas se notifican a intervalos de 1 minuto.


| Métrica | Description (Descripción) | 
| --- | --- | 
| CPUUtilization |  El porcentaje de unidades de CPU usadas por los contenedores que se ejecutan en una instancia. El valor oscila entre el 0% y el 100% y se multiplica por el número de CPUs. Por ejemplo, si hay cuatro CPUs, `CPUUtilization` puede oscilar entre el 0% y el 400%. Para los trabajos de entrenamiento, `CPUUtilization` es la utilización de la CPU del contenedor de algoritmos que se ejecutan en la instancia. Para los trabajos de transformación por lotes, `CPUUtilization` es la utilización de la CPU del contenedor de transformación que se ejecuta en la instancia. Para modelos de varios contenedores, `CPUUtilization` es la suma de la utilización de CPU por parte de todos los contenedores que se ejecutan en la instancia. Para variantes de punto de conexión, `CPUUtilization` es la suma de la utilización de CPU por parte de todos los contenedores que se ejecutan en la instancia. Unidad: porcentaje  | 
| MemoryUtilization | El porcentaje de memoria que utilizan los contenedores que se ejecutan en una instancia. Este valor oscila entre 0 % y 100 %.Para trabajos de entrenamiento, `MemoryUtilization` es la memoria utilizada por el contenedor de algoritmos que se ejecuta en la instancia.Para trabajos de transformación por lotes, `MemoryUtilization` es la memoria utilizada por el contenedor de transformación que se ejecuta en la instancia.Para modelos de varios contenedores, MemoryUtilization es la suma de memoria utilizada por todos los contenedores que se ejecutan en la instancia.Para variantes de punto de conexión, `MemoryUtilization` es la suma de memoria utilizada por todos los contenedores que se ejecutan en la instancia.Unidad: porcentaje | 
| GPUUtilization |  El porcentaje de unidades de GPU que utilizan los contenedores que se ejecutan en una instancia. `GPUUtilization`oscila entre el 0% y el 100% y se multiplica por el número de GPUs. Por ejemplo, si hay cuatro GPUs, `GPUUtilization` puede oscilar entre el 0% y el 400%. Para trabajos de entrenamiento, `GPUUtilization` es la GPU que utiliza el contenedor de algoritmo que se ejecuta en la instancia. Para trabajos de transformación por lotes, `GPUUtilization` es la GPU utilizada por el contenedor de transformación que se ejecuta en la instancia. Para modelos de varios contenedores, `GPUUtilization` es la suma de GPU utilizada por todos los contenedores que se ejecutan en la instancia. Para variantes de punto de conexión, `GPUUtilization` es la suma de GPU utilizada por todos los contenedores que se ejecutan en la instancia. Unidad: porcentaje  | 
| GPUMemoryUtilization |  El porcentaje de memoria de la GPU que utilizan los contenedores que se ejecutan en una instancia. GPUMemoryEl uso oscila entre el 0% y el 100% y se multiplica por el número de GPUs. Por ejemplo, si hay cuatro GPUs, `GPUMemoryUtilization` puede oscilar entre el 0% y el 400%. Para trabajos de entrenamiento, `GPUMemoryUtilization` es la memoria de GPU utilizada por el contenedor de algoritmos que se ejecuta en la instancia. Para trabajos de transformación por lotes, `GPUMemoryUtilization` es la memoria de GPU utilizada por el contenedor de transformación que se ejecuta en la instancia. Para modelos de varios contenedores, `GPUMemoryUtilization` es la suma de GPU utilizados por todos los contenedores que se ejecutan en la instancia. Para variantes de punto de conexión, `GPUMemoryUtilization` es la suma de la memoria de GPU utilizada por todos los contenedores que se ejecutan en la instancia. Unidad: porcentaje  | 
| DiskUtilization |  El porcentaje de espacio en disco que utilizan los contenedores que se ejecutan en una instancia. DiskUtilization oscila entre el 0% y el 100%. Esta métrica no es compatible con los trabajos de transformación por lotes. Para trabajos de entrenamiento, `DiskUtilization` es el espacio en disco utilizado por el contenedor de algoritmos que se ejecuta en la instancia. Para variantes de punto de conexión, `DiskUtilization` es la suma de espacio en disco utilizado por todos los contenedores proporcionados que se ejecutan en la instancia. Unidad: porcentaje  | 

**Dimensiones de métricas de instancias de punto de conexión, trabajo de transformación por lotes y trabajo de entrenamiento**


| Dimensión | Description (Descripción) | 
| --- | --- | 
| Host |  Para trabajos de entrenamiento, `Host` tiene el formato `[training-job-name]/algo-[instance-number-in-cluster]`. Utilice esta dimensión para filtrar métricas de instancias para la instancia y el trabajo de entrenamiento especificados. Este formato de dimensión está solo presente en el espacio de nombres `/aws/sagemaker/TrainingJobs`. Para trabajos de transformación por lotes, `Host` tiene el formato `[transform-job-name]/[instance-id]`. Utilice esta dimensión para filtrar métricas de instancias para la instancia y el trabajo de transformación por lotes especificados. Este formato de dimensión está solo presente en el espacio de nombres `/aws/sagemaker/TransformJobs`. Para los puntos de conexión, `Host` tiene el formato `[endpoint-name]/[ production-variant-name ]/[instance-id]`. Utilice esta dimensión para filtrar métricas de instancias para la instancia, la variante y el punto de conexión especificados. Este formato de dimensión está solo presente en el espacio de nombres `/aws/sagemaker/Endpoints`.  | 

Para ayudarte a depurar tus tareas de formación, los puntos finales y las configuraciones del ciclo de vida de las instancias de cuadernos, la SageMaker IA también envía todo lo que un contenedor de algoritmos, un contenedor de modelos o una configuración del ciclo de vida de una instancia de cuaderno envíe a Amazon Logs `stdout` o a `stderr` Amazon CloudWatch Logs. Puede utilizar esta información para depuración y para analizar el progreso.

## Uso de registros para monitorizar una canalización de inferencia
<a name="inference-pipeline-logs"></a>

En la siguiente tabla se enumeran los grupos de registros y los flujos de registros que la SageMaker IA envía a Amazon. CloudWatch 

Un *flujo de registro* es una secuencia de eventos de registro que comparten la misma fuente. Cada fuente independiente de registros forma CloudWatch un flujo de registro independiente. Un *grupo de registro* es un grupo de flujos de registro que comparten la misma configuración de retención, monitorización y control de acceso.

**Registros**

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

**nota**  
SageMaker La IA crea el grupo de `/aws/sagemaker/NotebookInstances` registros al crear una instancia de bloc de notas con una configuración de ciclo de vida. Para obtener más información, consulte [Personalización de una instancia de SageMaker bloc de notas mediante un script LCC](notebook-lifecycle-config.md).

Para obtener más información sobre el registro de SageMaker IA, consulte[CloudWatch Registros para Amazon SageMaker AI](logging-cloudwatch.md). 

# Solución de problemas de canalizaciones de inferencia
<a name="inference-pipeline-troubleshoot"></a>

Para solucionar los problemas de la canalización de inferencias, utilice los CloudWatch registros y los mensajes de error. Si utilizas imágenes de Docker personalizadas en una canalización que incluye los algoritmos integrados de Amazon SageMaker AI, es posible que también tengas problemas con los permisos. Para conceder los permisos necesarios, cree una política de Amazon Elastic Container Registry (Amazon ECR).

**Topics**
+ [Solución de problemas de permisos de Amazon ECR para canalizaciones de inferencia](#inference-pipeline-troubleshoot-permissions)
+ [Utilice CloudWatch los registros para solucionar problemas de los canales de inferencia de SageMaker IA](#inference-pipeline-troubleshoot-logs)
+ [Utilizar mensajes de error para solucionar problemas de canalizaciones de inferencia](#inference-pipeline-troubleshoot-errors)

## Solución de problemas de permisos de Amazon ECR para canalizaciones de inferencia
<a name="inference-pipeline-troubleshoot-permissions"></a>

Cuando utilizas imágenes de Docker personalizadas en una canalización que incluye [algoritmos integrados de SageMaker IA](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), necesitas una política de [Amazon ECR.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) La política permite que tu repositorio de Amazon ECR conceda permiso para que SageMaker AI extraiga la imagen. La política debe agregar los permisos siguientes:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "allowSageMakerToPull",
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Utilice CloudWatch los registros para solucionar problemas de los canales de inferencia de SageMaker IA
<a name="inference-pipeline-troubleshoot-logs"></a>

SageMaker La IA publica los registros de los contenedores para los puntos finales que despliegan una canalización de inferencias hacia Amazon CloudWatch en la siguiente ruta para cada contenedor.

```
/aws/sagemaker/Endpoints/{EndpointName}/{Variant}/{InstanceId}/{ContainerHostname}
```

Por ejemplo, los registros para este punto de conexión se publican en los siguientes grupos de registros y secuencias:

```
EndpointName: MyInferencePipelinesEndpoint
Variant: MyInferencePipelinesVariant
InstanceId: i-0179208609ff7e488
ContainerHostname: MyContainerName1 and MyContainerName2
```

```
logGroup: /aws/sagemaker/Endpoints/MyInferencePipelinesEndpoint
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName1
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName2
```

Un *flujo de registro* es una secuencia de eventos de registro que comparten la misma fuente. Cada fuente independiente de registros forma un CloudWatch flujo de registros independiente. Un *grupo de registro* es un grupo de flujos de registro que comparten la misma configuración de retención, monitorización y control de acceso.

**Para ver los grupos de registro y secuencias**

1. Abra la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

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

1. En **Grupos de registro**, filtre en **MyInferencePipelinesEndpoint**:   
![\[Los grupos de CloudWatch registros filtrados para el punto final de la canalización de inferencia.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/pipeline-log-group-filter.png)

1. Para ver los flujos de registros, en la página **Grupos de CloudWatch registros**, elija y**MyInferencePipelinesEndpoint**, a continuación, **Buscar grupo de registros**.  
![\[El flujo de CloudWatch registro de la canalización de inferencias.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/pipeline-log-streams-2.png)

Para obtener una lista de los registros que publica SageMaker AI, consulte[Registros y métricas de canalización de inferencias](inference-pipeline-logs-metrics.md).

## Utilizar mensajes de error para solucionar problemas de canalizaciones de inferencia
<a name="inference-pipeline-troubleshoot-errors"></a>

Los mensajes de error de canalización de inferencia indican que los contenedores presentan errores. 

Si se produce un error mientras la SageMaker IA invoca un punto final, el servicio devuelve un `ModelError` (código de error 424), que indica qué contenedor ha fallado. Si la carga útil de la solicitud (la respuesta del contenedor anterior) supera el límite de 5 MB, SageMaker AI proporciona un mensaje de error detallado, como: 

Recibió una respuesta de MyContainerName 1 con el código de estado 200. Sin embargo, la carga útil de la solicitud de MyContainerName 1 a MyContainerName 2 es de 6000000 bytes, lo que ha superado el límite máximo de 5 MB.

``

Si un contenedor no supera la comprobación de estado del ping mientras la SageMaker IA está creando un punto final, devuelve un valor `ClientError` e indica todos los contenedores que no pasaron la comprobación de ping en la última comprobación de estado.

# Eliminar puntos de conexión y recursos
<a name="realtime-endpoints-delete-resources"></a>

Elimine puntos de conexión para dejar de incurrir en gastos.

## Eliminar punto de conexión
<a name="realtime-endpoints-delete-endpoint"></a>

Elimine su punto final mediante programación mediante AWS SDK para Python (Boto3), con o de forma interactiva mediante la AWS CLI SageMaker consola de IA.

SageMaker La IA libera todos los recursos que se desplegaron cuando se creó el punto final. Al eliminar un punto final, no se eliminará la configuración del punto final ni el modelo de SageMaker IA. Consulte [Eliminar configuración de punto de conexión](#realtime-endpoints-delete-endpoint-config) y [Eliminar modelo](#realtime-endpoints-delete-model) para obtener información sobre cómo eliminar la configuración de su punto final y su modelo de SageMaker IA.

------
#### [ AWS SDK para Python (Boto3) ]

Utilice la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) para eliminar el punto de conexión. Especifique el nombre del punto de conexión para el campo `EndpointName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete endpoint
sagemaker_client.delete_endpoint(EndpointName=endpoint_name)
```

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

Para eliminar el punto de conexión, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html). Especifique el nombre del punto de conexión para la marca `endpoint-name`.

```
aws sagemaker delete-endpoint --endpoint-name <endpoint-name>
```

------
#### [ SageMaker AI Console ]

Elimine su punto final de forma interactiva con la consola de SageMaker IA.

1. En la consola de SageMaker IA, en el menú [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)de navegación, selecciona **Inferencia**.

1. Elija **Puntos de conexión** en el menú desplegable. Aparecerá una lista de los puntos de enlace creados en AWS su cuenta por nombre, nombre del recurso de Amazon (ARN), hora de creación, estado y una marca de tiempo que indica cuándo se actualizó el punto de enlace por última vez.

1. Seleccione el punto de conexión que desea eliminar.

1. Seleccione el botón desplegable **Acciones** en la esquina superior derecha.

1. Elija **Eliminar**.

------

## Eliminar configuración de punto de conexión
<a name="realtime-endpoints-delete-endpoint-config"></a>

Elimine la configuración de su punto de conexión mediante programación mediante AWS SDK para Python (Boto3), con o de forma interactiva mediante la AWS CLI consola de IA. SageMaker Al eliminar una configuración de punto de conexión, no se eliminan los puntos de conexión creados con esta configuración. Consulte [Eliminar punto de conexión](#realtime-endpoints-delete-endpoint) para obtener información sobre cómo eliminar un punto de conexión.

No elimine una configuración de punto de conexión que esté utilizando un punto de conexión activo o mientras el punto de conexión se está actualizando o creando. Es posible que pierda visibilidad sobre el tipo de instancia que utiliza el punto de conexión si elimina la configuración de un punto de conexión que está activo o que se está creando o actualizando.

------
#### [ AWS SDK para Python (Boto3) ]

Utilice la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html) para eliminar el punto de conexión. Especifique el nombre de la configuración del punto de conexión para el campo `EndpointConfigName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint configuration
endpoint_config_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

Si lo desea, puede utilizar la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) para devolver información sobre el nombre de los modelos implementados (variantes de producción), como el nombre del modelo y el nombre de la configuración del punto de conexión asociada a ese modelo implementado. Proporcione el nombre del punto de conexión en el campo `EndpointConfigName`. 

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
endpoint_config_name = response['ProductionVariants'][0]['EndpointConfigName']
                        
# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

[Para obtener más información sobre otros elementos de respuesta devueltos por`DescribeEndpointConfig`, consulte la guía de referencia de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)la SageMaker API.](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html)

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

Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html) para eliminar la configuración del punto de conexión. Especifique el nombre de la configuración del punto de conexión para la marca `endpoint-config-name`.

```
aws sagemaker delete-endpoint-config \
                        --endpoint-config-name <endpoint-config-name>
```

Si lo desea, puede utilizar el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) para devolver información sobre el nombre de los modelos implementados (variantes de producción), como el nombre del modelo y el nombre de la configuración del punto de conexión asociado a ese modelo implementado. Proporcione el nombre del punto de conexión para la marca `endpoint-config-name`.

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

Se devolverá una respuesta JSON. Puede copiar y pegar o utilizar un analizador de JSON o una herramienta diseñada para análisis de JSON para obtener el nombre de la configuración del punto de conexión asociado a ese punto de conexión.

------
#### [ SageMaker AI Console ]

Elimine la configuración de sus terminales de forma interactiva con la consola de SageMaker IA.

1. En la consola de SageMaker IA, en el menú [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)de navegación, selecciona **Inferencia**.

1. Elija **Configuraciones de puntos de conexión** en el menú desplegable. Aparecerá una lista de las configuraciones de puntos de conexión creadas en su cuenta de AWS por nombre, Nombre de recurso de Amazon (ARN) y hora de creación.

1. Seleccione la configuración del punto de conexión que desea eliminar.

1. Seleccione el botón desplegable **Acciones** en la esquina superior derecha.

1. Elija **Eliminar**.

------

## Eliminar modelo
<a name="realtime-endpoints-delete-model"></a>

Elimine su modelo de SageMaker IA mediante programación mediante AWS SDK para Python (Boto3), con la consola de IA o de forma interactiva mediante la AWS CLI consola de IA. SageMaker Al eliminar un modelo de SageMaker IA, solo se elimina la entrada del modelo que se creó en la IA. SageMaker La eliminación del modelo no elimina los artefactos del modelo, el código de inferencia ni el rol de IAM que especificó al crear el modelo.

------
#### [ AWS SDK para Python (Boto3) ]

Usa la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html)API para eliminar tu modelo de SageMaker IA. Especifique el nombre del modelo para el campo `ModelName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint configuration
model_name='<model_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete model
sagemaker_client.delete_model(ModelName=model_name)
```

Si lo desea, puede utilizar la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) para devolver información sobre el nombre de los modelos implementados (variantes de producción), como el nombre del modelo y el nombre de la configuración del punto de conexión asociada a ese modelo implementado. Proporcione el nombre del punto de conexión en el campo `EndpointConfigName`. 

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
model_name = response['ProductionVariants'][0]['ModelName']
sagemaker_client.delete_model(ModelName=model_name)
```

Para obtener más información sobre otros elementos de respuesta devueltos por`DescribeEndpointConfig`, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)la [guía de referencia de la SageMaker API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

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

Usa el [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html)comando para eliminar tu modelo de SageMaker IA. Especifique el nombre del modelo para el campo `model-name`.

```
aws sagemaker delete-model \
                        --model-name <model-name>
```

Si lo desea, puede utilizar el comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) para devolver información sobre el nombre de los modelos implementados (variantes de producción), como el nombre del modelo y el nombre de la configuración del punto de conexión asociado a ese modelo implementado. Proporcione el nombre del punto de conexión para la marca `endpoint-config-name`.

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

Se devolverá una respuesta JSON. Puede copiar y pegar o utilizar un analizador de JSON o una herramienta diseñada para análisis de JSON para obtener el nombre del modelo asociado a ese punto de conexión.

------
#### [ SageMaker AI Console ]

Elimine su modelo de SageMaker IA de forma interactiva con la consola de SageMaker IA.

1. En la consola de SageMaker IA, en el menú [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)de navegación, selecciona **Inferencia**.

1. En el menú desplegable, seleccione **Modelos**. Aparecerá una lista de los modelos creados en AWS su cuenta por nombre, nombre de recurso de Amazon (ARN) y hora de creación.

1. Seleccione el modelo que desea eliminar.

1. Seleccione el botón desplegable **Acciones** en la esquina superior derecha.

1. Elija **Eliminar**.

------

# Escalado automático de los modelos de Amazon SageMaker AI
<a name="endpoint-auto-scaling"></a>

Amazon SageMaker AI admite el escalado automático (autoescalado) para sus modelos alojados. El *escalado automático* ajusta dinámicamente el número de instancias aprovisionadas para un modelo en respuesta a los cambios en su carga de trabajo. Cuando la carga de trabajo aumenta, el escalado automático proporciona más instancias en línea. Cuando la carga de trabajo desciende, el escalado automático quita las instancias innecesarias, a fin de que no pague por las instancias aprovisionadas que no utiliza.

**Topics**
+ [Información general sobre las políticas de escalado automático](endpoint-auto-scaling-policy.md)
+ [Requisitos previos de escalado automático](endpoint-auto-scaling-prerequisites.md)
+ [Configuración del escalado automático de modelos con la consola](endpoint-auto-scaling-add-console.md)
+ [Registrar un modelo](endpoint-auto-scaling-add-policy.md)
+ [Definir una política de escalado](endpoint-auto-scaling-add-code-define.md)
+ [Aplicar una política de escalado](endpoint-auto-scaling-add-code-apply.md)
+ [Instrucciones para editar una política de escalado](endpoint-auto-scaling-edit.md)
+ [Cierre temporal de las políticas de escalado](endpoint-auto-scaling-suspend-scaling-activities.md)
+ [Eliminación de una política de escalado](endpoint-auto-scaling-delete.md)
+ [Comprobación del estado de una actividad de escalado describiendo las actividades de escalado](endpoint-scaling-query-history.md)
+ [Escalado de un punto de conexión a cero instancias](endpoint-auto-scaling-zero-instances.md)
+ [Prueba de carga de la configuración de escalado automático](endpoint-scaling-loadtest.md)
+ [Se utiliza CloudFormation para crear una política de escalado](endpoint-scaling-cloudformation.md)
+ [Actualización de puntos de conexión que utilizan el escalado automático](endpoint-scaling-update.md)
+ [Eliminación de puntos de conexión configurados para el escalado automático](endpoint-delete-with-scaling.md)

# Información general sobre las políticas de escalado automático
<a name="endpoint-auto-scaling-policy"></a>

Para usar el escalado automático, debe definir una política de escalado que agregue y elimine el número de instancias de la variante de producción en respuesta a las cargas de trabajo reales.

Para escalar automáticamente a medida que se producen cambios en la carga de trabajo, tiene dos opciones: políticas de seguimiento de destino y de escalado por pasos. 

En la mayoría de los casos, recomendamos utilizar políticas de escalado de seguimiento de destino. Con el seguimiento objetivo, eliges una CloudWatch métrica y un valor objetivo de Amazon. El escalado automático crea y gestiona las CloudWatch alarmas de la política de escalado y calcula el ajuste de escalado en función de la métrica y el valor objetivo. La política agrega o quita las instancias en función de las necesidades para mantener la métrica en el valor objetivo especificado o en un valor próximo. Por ejemplo, una política de escalado que utiliza la métrica predefinida `InvocationsPerInstance` con un valor de destino de 70 puede mantener `InvocationsPerInstance` en 70 o cerca de ese valor. Para obtener más información, consulte [Políticas de escalado de seguimiento de destino](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) en la *Guía del usuario de Application Auto Scaling*.

Puede utilizar el escalado por pasos cuando necesite una configuración avanzada, como especificar cuántas instancias se implementarán y en qué condiciones. Por ejemplo, debe usar el escalado por pasos si desea permitir que un punto de conexión se escale horizontalmente desde cero instancias activas. Para obtener más información acerca de políticas de escalado por pasos y su funcionamiento, consulte [Step scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) en la *Guía del usuario de Application Auto Scaling*.

Para crear una política de escalado de seguimiento de destino, debe especificar lo siguiente:
+ **Métrica**: la CloudWatch métrica que se debe rastrear, como el número promedio de invocaciones por instancia. 
+ **Valor objetivo**: el valor objetivo de la métrica, como 70 invocaciones por instancia por minuto.

Puede crear políticas de escalado de seguimiento de destino con métricas predefinidas o personalizadas. Una métrica predefinida se define en una enumeración para que puedas especificarla por su nombre en el código o utilizarla en la consola de SageMaker IA. También puede utilizar la AWS CLI o la API de Application Auto Scaling para aplicar una política de escalado de seguimiento de destino basada en una métrica predefinida o personalizada.

Tenga en cuenta que las actividades de escalado se realizan con periodos de recuperación entre ellas para evitar fluctuaciones rápidas de la capacidad. Si lo desea, puede configurar los periodos de recuperación para su política de escalado. 

Para obtener más información acerca de los conceptos clave del escalado automático, consulte la siguiente sección.

## Escalado basado en programación
<a name="scheduled-scaling"></a>

También puede crear acciones programadas para realizar actividades de escalado en momentos específicos. Puede crear acciones programadas que se escalen solo una vez o que se escalen según un cronograma recurrente. Después de ejecutar una acción programada, la política de escalado puede seguir tomando decisiones sobre si desea escalar dinámicamente a medida que se producen cambios en la carga de trabajo. El escalado programado solo se puede gestionar desde la API Application Auto Scaling AWS CLI o desde ella. Para obtener más información, consulte [Escalado programado](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) en la *Guía del usuario de Auto Scaling de aplicaciones*.

## Límites de escalado máximo y mínimo
<a name="endpoint-auto-scaling-target-capacity"></a>

Al configurar el escalado automático, debe especificar sus límites de escalado antes de crear una política de escalado. Configure los límites por separado para los valores mínimo y máximo.

Este valor debe ser al menos 1, e igual o inferior al valor especificado para el máximo.

El valor máximo debe ser igual o superior al valor especificado para el valor mínimo. SageMaker El escalado automático mediante IA no impone un límite para este valor.

Para determinar los límites de escalado que necesita para el tráfico normal, pruebe la configuración de escalado automático con la tasa de tráfico esperada para su modelo.

Si el tráfico de una variante se reduce a cero, la SageMaker IA se ajusta automáticamente al número mínimo de instancias especificado. En este caso, la SageMaker IA emite métricas con un valor de cero.

Hay tres opciones para especificar la capacidad mínima y máxima:

1. Utilice la consola para actualizar la configuración del **número mínimo de instancias** y el **número máximo de instancias**.

1. Utilice las opciones AWS CLI e incluya las `--max-capacity` opciones `--min-capacity` y al ejecutar el [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)comando.

1. Llame a la [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)API y especifique los `MaxCapacity` parámetros `MinCapacity` y.

**sugerencia**  
Puede escalar horizontalmente de forma manual aumentando el valor mínimo, o reducir horizontalmente de forma manual reduciendo el valor máximo.

## Periodo de recuperación
<a name="endpoint-auto-scaling-target-cooldown"></a>

Se utiliza un *periodo de recuperación* para proteger contra el escalado excesivo cuando el modelo se reduzca horizontalmente (reducción de la capacidad) o se escale horizontalmente (aumento de la capacidad). Se hace ralentizando las actividades de escalado posteriores hasta que venza el periodo. En concreto, bloquea la eliminación de las instancias para las solicitudes de reducción horizontal y limita la creación de instancias de solicitudes de escalado horizontal. Para obtener más información, consulte [Define cooldown periods](https://docs.aws.amazon.com/autoscaling/application/userguide/target-tracking-scaling-policy-overview.html#target-tracking-cooldown) en la *Guía del usuario de Application Auto Scaling*. 

El periodo de recuperación se configura en la política de escalado. 

Si no especifica un periodo de recuperación de reducción horizontal o escalado horizontal, la política de escalado utiliza el valor predeterminado, que es 300 segundos en cada uno de ellos.

Si las instancias se agregan o quitan demasiado rápido al probar la configuración del escalado, plantéese aumentar ese valor. Puede ver este comportamiento si el tráfico al modelo tiene muchos picos, o si dispone de varias políticas de escalado definidas para una variante.

Si las instancias no se agregan lo suficientemente rápido como para tratar el aumento del tráfico, considere reducir este valor.

## Recursos relacionados
<a name="auto-scaling-related-resources"></a>

Para obtener más información sobre la configuración del escalado automático, vea los siguientes recursos:
+ Sección [application-autoscaling](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling) de la *Referencia de comandos de la AWS CLI *
+ [Referencia de la API de Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/APIReference/)
+ [Guía del usuario de la aplicación Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/)

**nota**  
SageMaker La IA introdujo recientemente nuevas capacidades de inferencia basadas en puntos finales de inferencia en tiempo real. Se crea un punto final de SageMaker IA con una configuración de punto final que define el tipo de instancia y el recuento inicial de instancias del punto final. A continuación, cree un componente de inferencia, que es un objeto de alojamiento de SageMaker IA que puede utilizar para implementar un modelo en un punto final. Para obtener información sobre cómo escalar los componentes de inferencia, consulte La [SageMaker IA añade nuevas capacidades de inferencia para ayudar a reducir los costes de despliegue y la latencia del modelo básico](https://aws.amazon.com/blogs/aws/amazon-sagemaker-adds-new-inference-capabilities-to-help-reduce-foundation-model-deployment-costs-and-latency/) y [reduce los costes de despliegue del modelo en un 50% de media utilizando las últimas funciones de SageMaker IA](https://aws.amazon.com/blogs/machine-learning/reduce-model-deployment-costs-by-50-on-average-using-sagemakers-latest-features/) publicadas en el blog. AWS 

# Requisitos previos de escalado automático
<a name="endpoint-auto-scaling-prerequisites"></a>

Antes de poder utilizar el escalado automático, debe haber creado ya un punto final del modelo Amazon SageMaker AI. Puede tener varias versiones del modelo para el mismo punto de conexión. Cada modelo se denomina [variante de producción (modelo)](model-ab-testing.md). Para obtener más información sobre la implementación de un punto de enlace del modelo, consulte [Implemente el modelo en los servicios de alojamiento de SageMaker IA](ex1-model-deployment.md#ex1-deploy-model).

Para activar el autoescalado de un modelo, puede usar la consola de SageMaker IA, el AWS Command Line Interface (AWS CLI) o un AWS SDK a través de la API Application Auto Scaling. 
+ Si es la primera vez que configura el escalado de un modelo, le recomendamos [Configuración del escalado automático de modelos con la consola](endpoint-auto-scaling-add-console.md). 
+ Cuando se utiliza la AWS CLI API Application Auto Scaling, el flujo consiste en registrar el modelo como un objetivo escalable, definir la política de escalado y, a continuación, aplicarla. En la consola de SageMaker IA, en **Inferencia** del panel de navegación, elija **Endpoints**. Busque el nombre del punto de conexión del modelo y, a continuación, elíjalo para buscar el nombre de la variante. Debe especificar tanto el nombre del punto de conexión como el nombre de la variante para activar el escalado automático de un modelo.

El escalado automático es posible gracias a una combinación de Amazon SageMaker AI CloudWatch, Amazon y Application Auto Scaling APIs. Para obtener información sobre los permisos mínimos necesarios, consulte los [Application Auto Scaling identity-based policy examples](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_id-based-policy-examples.html) en la *Guía del usuario de Application Auto Scaling*.

La política de IAM `SagemakerFullAccessPolicy` dispone de todos los permisos de IAM necesarios para el escalado automático. Para obtener más información sobre los permisos de SageMaker AI IAM, consulte[Cómo utilizar las funciones de ejecución de la SageMaker IA](sagemaker-roles.md).

Si administra su propia política de permiso, debe incluir los siguientes permisos:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:UpdateEndpointWeightsAndCapacities"
      ],
      "Resource": "*"
    },
    {    
        "Effect": "Allow",
        "Action": [
            "application-autoscaling:*"
        ],
        "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/sagemaker.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint",
      "Condition": {
        "StringLike": { "iam:AWSServiceName": "sagemaker.application-autoscaling.amazonaws.com"	}
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:DeleteAlarms"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Rol vinculado a servicios
<a name="endpoint-auto-scaling-slr"></a>

Auto Scaling usa el rol vinculado a un servicio `AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint`. Este rol vinculado a servicio concede a Application Auto Scaling permiso para describir las alarmas de sus políticas, supervisar los niveles de capacidad actual y escalar el recurso de destino. Este rol se crea automáticamente para usted. Para que la creación automática de roles se realice correctamente, debe disponer de permisos para la acción `iam:CreateServiceLinkedRole`. Para obtener más información, consulte [Roles vinculados a servicios](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html) en la *Guía del usuario de Auto Scaling de aplicaciones*.

# Configuración del escalado automático de modelos con la consola
<a name="endpoint-auto-scaling-add-console"></a>

**Configuración del escalado automático de un modelo (consola)**

1. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación, elija **Inferencia** y, a continuación, elija **Puntos de conexión**. 

1. Elija el punto de conexión y, a continuación, en **Configuración del tiempo de ejecución de punto de conexión**, elija la variante.

1. Elija **Configure auto scaling (Configurar escalado automático)**.

1. En la página **Configurar escalado automático de variantes**, para **Escalado automático de variantes**, realice lo siguiente:

   1. Para **Recuento mínimo de instancias**, escriba el número mínimo de instancias que desee que conserve la política de escalado. Se requiere al menos 1 instancia.

   1. Para **Recuento máximo de instancias**, escriba el número máximo de instancias que desee que conserve la política de escalado.

1. Para una **política de escalado integrada**, haga lo siguiente:

   1. Para la **Métrica de destino**, se selecciona automáticamente `SageMakerVariantInvocationsPerInstance` para la métrica y no se puede cambiar.

   1. Para el **Valor de destino**, escriba el número medio de invocaciones por instancia por minuto para el modelo. Para determinar este valor, siga las directrices en [Prueba de carga](endpoint-scaling-loadtest.md).

   1. (Opcional) Para **Periodo de recuperación de escalado descendente (segundos)** y **Periodo de recuperación de escalado ascendente (segundos)**, escriba la cantidad de tiempo, en segundos, para cada periodo de recuperación.

   1. (Opcional) Seleccione **Deshabilitar escalado descendente** si no desea que el escalado automático termine instancias cuando disminuye el tráfico.

1. Seleccione **Save**.

Este procedimiento registra un modelo como destino escalable con Application Auto Scaling. Al registrar un modelo, Application Auto Scaling realiza las comprobaciones de validación para garantizar lo siguiente:
+ El modelo existe
+ Los permisos son suficientes.
+ No está registrando ninguna variante con una instancia que sea una instancia de desempeño por ráfagas como T2.
**nota**  
SageMaker La IA no admite el escalado automático para instancias con capacidad de ráfaga, como la T2, porque ya permiten aumentar la capacidad con cargas de trabajo cada vez mayores. Para obtener información sobre las instancias de rendimiento ampliable, consulte [Tipos de instancias de Amazon EC2](https://aws.amazon.com/ec2/instance-types/).

# Registrar un modelo
<a name="endpoint-auto-scaling-add-policy"></a>

Antes de agregar una política de escalado a su modelo, primero debe registrar el modelo para el escalado automático y definir los límites de escalado del modelo.

Los siguientes procedimientos explican cómo registrar un modelo (variante de producción) para el escalado automático mediante AWS Command Line Interface (AWS CLI) o la API Application Auto Scaling.

**Topics**
+ [Registrar un modelo (AWS CLI)](#endpoint-auto-scaling-add-cli)
+ [Registrar un modelo (API de Application Auto Scaling)](#endpoint-auto-scaling-add-api)

## Registrar un modelo (AWS CLI)
<a name="endpoint-auto-scaling-add-cli"></a>

Para registrar su variante de producción, utilice el [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)comando con los siguientes parámetros:
+ `--service-namespace`: establezca este valor en `sagemaker`.
+ `--resource-id`: el identificador de recursos del modelo (en concreto, la variante de producción). Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante de producción. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.
+ `--min-capacity`: el número mínimo de instancias. Este valor debe establecerse en al menos 1 y debe ser igual o inferior al valor especificado para `max-capacity`.
+ `--max-capacity`: el número máximo de instancias. Este valor debe establecerse en al menos 1 y debe ser igual o superior al valor especificado para `min-capacity`.

**Example**  
El siguiente ejemplo muestra cómo registrar una variante de denominada `my-variant`, que se ejecuta en el punto de conexión `my-endpoint` y que puede escalarse dinámicamente para disponer de una a ocho instancias.  

```
aws application-autoscaling register-scalable-target \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --min-capacity 1 \
  --max-capacity 8
```

## Registrar un modelo (API de Application Auto Scaling)
<a name="endpoint-auto-scaling-add-api"></a>

Para registrar un modelo con Application Auto Scaling, use la acción de API [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) de Application Auto Scaling con los siguientes parámetros.
+ `ServiceNamespace`: establezca este valor en `sagemaker`.
+ `ResourceID`: el identificador de recurso para la variante de producción. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.
+ `MinCapacity`: el número mínimo de instancias. Este valor debe establecerse en al menos 1 y debe ser igual o inferior al valor especificado para `MaxCapacity`.
+ `MaxCapacity`: el número máximo de instancias. Este valor debe establecerse en al menos 1 y debe ser igual o superior al valor especificado para `MinCapacity`.

**Example**  
El siguiente ejemplo muestra cómo registrar una variante de denominada `my-variant`, que se ejecuta en el punto de conexión `my-endpoint` y que puede escalarse dinámicamente para usar de una a ocho instancias.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "MinCapacity": 1,
    "MaxCapacity": 8
}
```

# Definir una política de escalado
<a name="endpoint-auto-scaling-add-code-define"></a>

Antes de agregar una política de escalado al modelo, guarde la configuración de política como bloque JSON en un archivo de texto. Se usa ese archivo de texto al invocar AWS Command Line Interface (AWS CLI) o la API Application Auto Scaling. Puede optimizar el escalado eligiendo una CloudWatch métrica adecuada. Sin embargo, antes de usar una métrica personalizada en producción, debe probar el escalado automático con su métrica personalizada.

**Topics**
+ [Especifique una métrica predefinida (CloudWatch métrica: InvocationsPerInstance)](#endpoint-auto-scaling-add-code-predefined)
+ [Especifique una métrica predefinida de alta resolución (CloudWatch métricas: ConcurrentRequestsPerModel y ConcurrentRequestsPerCopy)](#endpoint-auto-scaling-add-code-high-res)
+ [Defina una métrica personalizada (CloudWatch métrica: CPUUtilization)](#endpoint-auto-scaling-add-code-custom)
+ [Defina una métrica personalizada (CloudWatch métrica: ExplanationsPerInstance)](#endpoint-auto-scaling-online-explainability)
+ [Especificación de periodos de recuperación](#endpoint-auto-scaling-add-code-cooldown)

En esta sección, se muestran ejemplos de configuraciones de políticas para las políticas de escalado de seguimiento de destino.

## Especifique una métrica predefinida (CloudWatch métrica: InvocationsPerInstance)
<a name="endpoint-auto-scaling-add-code-predefined"></a>

**Example**  
A continuación, se muestra un ejemplo de configuración de política de seguimiento de destino para una variante que mantiene el promedio de invocaciones por instancia en 70. Guarde esta configuración en un archivo llamado `config.json`.  

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    }
}
```
Para obtener más información, consulte la *Referencia [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)de la API Application Auto Scaling*.

## Especifique una métrica predefinida de alta resolución (CloudWatch métricas: ConcurrentRequestsPerModel y ConcurrentRequestsPerCopy)
<a name="endpoint-auto-scaling-add-code-high-res"></a>

Con las siguientes CloudWatch métricas de alta resolución, puede establecer políticas de escalado para el volumen de solicitudes simultáneas que reciben sus modelos:

**ConcurrentRequestsPerModel**  
El número de solicitudes simultáneas que recibe un contenedor de modelos.

**ConcurrentRequestsPerCopy**  
El número de solicitudes simultáneas que recibe un componente de inferencia.

Estas métricas realizan un seguimiento del número de solicitudes simultáneas que gestionan los contenedores de modelos, incluidas las solicitudes que están en cola dentro de los contenedores. En el caso de los modelos que envían su respuesta de inferencia como un flujo de tokens, estas métricas realizan un seguimiento de cada solicitud hasta que el modelo envía el último token de la solicitud.

Como métricas de alta resolución, emiten datos con más frecuencia que las métricas estándar. CloudWatch Las métricas estándar, como la métrica `InvocationsPerInstance`, emiten datos una vez por minuto. Sin embargo, estas métricas de alta resolución emiten datos cada 10 segundos. Por lo tanto, a medida que aumenta el tráfico simultáneo a los modelos, la política reacciona escalándose horizontalmente mucho más rápido que en el caso de las métricas estándar. Sin embargo, a medida que disminuye el tráfico hacia sus modelos, la política se reduce horizontalmente a la misma velocidad que lo haría con las métricas estándar.

A continuación, se muestra un ejemplo de configuración de política de seguimiento de destinos que añade instancias si el número de solicitudes simultáneas por modelo supera las 5. Guarde esta configuración en un archivo llamado `config.json`.

```
{
    "TargetValue": 5.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantConcurrentRequestsPerModelHighResolution"
    }
}
```

Si utiliza componentes de inferencia para implementar varios modelos en el mismo punto de conexión, puede crear una política equivalente. En ese caso, establezca `PredefinedMetricType` en `SageMakerInferenceComponentConcurrentRequestsPerCopyHighResolution`.

Para obtener más información, consulte la *Referencia [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)de la API Application Auto Scaling*.

## Defina una métrica personalizada (CloudWatch métrica: CPUUtilization)
<a name="endpoint-auto-scaling-add-code-custom"></a>

Para crear una política de escalado de seguimiento de destino con una métrica personalizada, especifique el nombre de la métrica, el espacio de nombres, la unidad, la estadística y cero o más dimensiones. Una dimensión consta de un nombre de dimensión y un valor de dimensión. Puede usar cualquier métrica de variante de producción que cambie en proporción a la capacidad. 

**Example**  
El siguiente ejemplo de configuración muestra una política de escalado de seguimiento de destino con una métrica personalizada. La política escala la variante en función de un uso medio de la CPU del 50 % en todas las instancias. Guarde esta configuración en un archivo llamado `config.json`.  

```
{
    "TargetValue": 50.0,
    "CustomizedMetricSpecification":
    {
        "MetricName": "CPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "VariantName","Value": "my-variant"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```
Para obtener más información, consulte la *Referencia [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)de la API Application Auto Scaling*. 

## Defina una métrica personalizada (CloudWatch métrica: ExplanationsPerInstance)
<a name="endpoint-auto-scaling-online-explainability"></a>

Cuando el punto de conexión tiene activada la explicabilidad en línea, emite una métrica `ExplanationsPerInstance` que muestra el promedio de registros explicados por minuto y por instancia para una variante. El uso de recursos de registros de explicabilidad puede ser más distinto que el de los registros de predictabilidad. Recomendamos encarecidamente utilizar esta métrica para el escalado del seguimiento de destino de los puntos de conexión con la explicabilidad activada.

Puede crear varias políticas de seguimiento de destino para un objetivo escalable. Valore la posibilidad de agregar la política `InvocationsPerInstance` desde la sección de [Especifique una métrica predefinida (CloudWatch métrica: InvocationsPerInstance)](#endpoint-auto-scaling-add-code-predefined) (además de la política `ExplanationsPerInstance`). Si la mayoría de las invocaciones no devuelven una explicación debido al valor límite establecido en el parámetro `EnableExplanations`, el punto de conexión puede elegir la política `InvocationsPerInstance`. Si hay un gran número de explicaciones, el punto de conexión puede usar la política `ExplanationsPerInstance`. 

**Example**  
El siguiente ejemplo de configuración muestra una política de escalado de seguimiento de destino con una métrica personalizada. El escalado de la política ajusta el número de instancias de variantes de modo que cada instancia tenga una métrica `ExplanationsPerInstance` de 20. Guarde esta configuración en un archivo llamado `config.json`.  

```
{
    "TargetValue": 20.0,
    "CustomizedMetricSpecification":
    {
        "MetricName": "ExplanationsPerInstance",
        "Namespace": "AWS/SageMaker",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "VariantName","Value": "my-variant"}
        ],
        "Statistic": "Sum"
    }
}
```

Para obtener más información, consulte la *Referencia [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)de la API Application Auto Scaling*. 

## Especificación de periodos de recuperación
<a name="endpoint-auto-scaling-add-code-cooldown"></a>

Si lo desea, puede definir periodos de recuperación en su política de escalado de seguimiento de destinos, especificando los parámetros `ScaleOutCooldown` y `ScaleInCooldown`. 

**Example**  
A continuación, se muestra un ejemplo de configuración de política de seguimiento de destino para una variante que mantiene el promedio de invocaciones por instancia en 70. La configuración de política proporciona un periodo de recuperación de reducción horizontal de 10 minutos (600 segundos) y un periodo de recuperación de escalado horizontal de 5 minutos (300 segundos). Guarde esta configuración en un archivo llamado `config.json`.   

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```
Para obtener más información, consulte la *Referencia [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)de la API Application Auto Scaling*. 

# Aplicar una política de escalado
<a name="endpoint-auto-scaling-add-code-apply"></a>

Una vez registrado su modelo y definido una política de escalado, aplique la política de escalado al modelo registrado. Esta sección muestra cómo aplicar una política de escalado con la AWS Command Line Interface (AWS CLI) o la API de Application Auto Scaling. 

**Topics**
+ [Aplicación de una política de escalado de seguimiento de destino (AWS CLI)](#endpoint-auto-scaling-add-code-apply-cli)
+ [Aplicación de una política de escalado (API de Application Auto Scaling)](#endpoint-auto-scaling-add-code-apply-api)

## Aplicación de una política de escalado de seguimiento de destino (AWS CLI)
<a name="endpoint-auto-scaling-add-code-apply-cli"></a>

Para aplicar una política de escalado a su modelo, utilice el [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI comando con los siguientes parámetros:
+ `--policy-name`: el nombre de la política de escalado.
+ `--policy-type`: establezca este valor en `TargetTrackingScaling`.
+ `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `--service-namespace`: establezca este valor en `sagemaker`.
+ `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.
+ `--target-tracking-scaling-policy-configuration`: configuración de la política de escalado de seguimiento de destino que se usará para el modelo.

**Example**  
En el siguiente ejemplo se aplica una política de escalado de seguimiento de destino denominada `my-scaling-policy` en una variante llamada `my-variant` que se ejecuta en el punto de conexión `my-endpoint`. Para la opción `--target-tracking-scaling-policy-configuration`, especifique el archivo `config.json` que creó anteriormente.   

```
aws application-autoscaling put-scaling-policy \
  --policy-name my-scaling-policy \
  --policy-type TargetTrackingScaling \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --target-tracking-scaling-policy-configuration file://config.json
```

## Aplicación de una política de escalado (API de Application Auto Scaling)
<a name="endpoint-auto-scaling-add-code-apply-api"></a>

Para aplicar una política de escalado a una variante con la API de Application Auto Scaling, utilice la acción [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) de la API de Application Auto Scaling con los siguientes parámetros:
+ `PolicyName`: el nombre de la política de escalado.
+ `ServiceNamespace`: establezca este valor en `sagemaker`.
+ `ResourceID`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.
+ `PolicyType`: establezca este valor en `TargetTrackingScaling`.
+ `TargetTrackingScalingPolicyConfiguration`: configuración de la política de escalado de seguimiento de objetivos que se usará para la variante.

**Example**  
En el siguiente ejemplo se aplica una política de escalado de seguimiento de destino denominada `my-scaling-policy` en una variante llamada `my-variant` que se ejecuta en el punto de conexión `my-endpoint`. La configuración de la política mantiene el promedio de invocaciones por instancia en 70.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 70.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
        }
    }
}
```

# Instrucciones para editar una política de escalado
<a name="endpoint-auto-scaling-edit"></a>

Después de crear una política de escalado, puede editar cualquiera de sus configuraciones, excepto el nombre.

 Para editar una política de escalado de seguimiento de objetivos con la Consola de administración de AWS, utilice el mismo procedimiento que utilizaba antes[Configuración del escalado automático de modelos con la consola](endpoint-auto-scaling-add-console.md).

Puede usar la AWS CLI API Application Auto Scaling para editar una política de escalado del mismo modo que crea una nueva política de escalado. Para obtener más información, consulte [Aplicar una política de escalado](endpoint-auto-scaling-add-code-apply.md).

# Cierre temporal de las políticas de escalado
<a name="endpoint-auto-scaling-suspend-scaling-activities"></a>

Después de configurar el escalado automático, tiene las siguientes opciones si necesita investigar un problema sin que las políticas de escalado interfieran (escalado dinámico):
+ Suspenda temporalmente las actividades de escalado y, a continuación, las reanude llamando al comando [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)CLI o a la acción de la [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)API y especificando un valor booleano para ambos`DynamicScalingInSuspended`. `DynamicScalingOutSuspended`   
**Example**  

  En el siguiente ejemplo, se muestra cómo suspender las políticas de escalado para una variante denominada `my-variant`, que se ejecuta en el punto de conexión `my-endpoint`.

  ```
  aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant \
    --scalable-dimension sagemaker:variant:DesiredInstanceCount \
    --suspended-state '{"DynamicScalingInSuspended":true,"DynamicScalingOutSuspended":true}'
  ```
+ Evite que políticas de escalado de seguimiento de destino específicas se reduzcan horizontalmente en su variante desactivando la parte de reducción horizontal de la política. Este método evita que la política de escalado elimine instancias, a la vez que le permite crearlas según sea necesario.

  Inhabilite temporalmente y, a continuación, habilite las actividades de escalado mediante la edición de la política mediante el comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)CLI o la acción de la [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)API, especificando un valor booleano para. `DisableScaleIn`  
**Example**  

  A continuación se muestra un ejemplo de configuración de seguimiento de destino para una política de escalado en la que se escalará horizontalmente, pero no se reducirá horizontalmente. 

  ```
  {
      "TargetValue": 70.0,
      "PredefinedMetricSpecification":
      {
          "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
      },
      "DisableScaleIn": true
  }
  ```

# Eliminación de una política de escalado
<a name="endpoint-auto-scaling-delete"></a>

Puede eliminar una política de escalado si ya no la necesite.

**Topics**
+ [Eliminación de todas las políticas de escalado y anulación del registro del modelo (consola)](#endpoint-auto-scaling-delete-console)
+ [Eliminar una política de escalado (AWS CLI o API Application Auto Scaling)](#endpoint-auto-scaling-delete-code)

## Eliminación de todas las políticas de escalado y anulación del registro del modelo (consola)
<a name="endpoint-auto-scaling-delete-console"></a>

**Eliminación de todas las políticas de escalado y anulación del registro de la variante como destino escalable**

1. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. En el panel de navegación, elija **Puntos de conexión**.

1. Elija el punto de conexión y, a continuación, en **Configuración del tiempo de ejecución de punto de conexión**, elija la variante.

1. Elija **Configure auto scaling (Configurar escalado automático)**.

1. Seleccione **Anular el registro de escalado automático**.

## Eliminar una política de escalado (AWS CLI o API Application Auto Scaling)
<a name="endpoint-auto-scaling-delete-code"></a>

Puede usar la API Application Auto Scaling AWS CLI o la API para eliminar una política de escalado de una variante.

### Eliminación de una política de escalado (AWS CLI)
<a name="endpoint-auto-scaling-delete-code-cli"></a>

Para eliminar una política de escalado de una variante, utilice el [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html)comando con los siguientes parámetros:
+ `--policy-name`: el nombre de la política de escalado.
+ `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `--service-namespace`: establezca este valor en `sagemaker`.
+ `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.

**Example**  
En el siguiente ejemplo se elimina una política de escalado de seguimiento de destino denominada `my-scaling-policy` en una variante llamada `my-variant` que se ejecuta en el punto de conexión `my-endpoint`.  

```
aws application-autoscaling delete-scaling-policy \
  --policy-name my-scaling-policy \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount
```

### Eliminación de una política de escalado (API de Application Auto Scaling)
<a name="endpoint-auto-scaling-delete-code-api"></a>

Para eliminar una política de escalado de su variante, use la acción de API [DeleteScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeleteScalingPolicy.html) de Application Auto Scaling con los siguientes parámetros:
+ `PolicyName`: el nombre de la política de escalado.
+ `ServiceNamespace`: establezca este valor en `sagemaker`.
+ `ResourceID`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredInstanceCount`.

**Example**  
En el siguiente ejemplo se elimina una política de escalado de seguimiento de destino denominada `my-scaling-policy` en una variante llamada `my-variant` que se ejecuta en el punto de conexión `my-endpoint`.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount"
}
```

# Comprobación del estado de una actividad de escalado describiendo las actividades de escalado
<a name="endpoint-scaling-query-history"></a>

Puede comprobar el estado de una actividad de escalado para un punto de conexión con escalado automático describiendo actividades de escalado. Application Auto Scaling proporciona información descriptiva sobre las actividades de escalado en el espacio de nombres especificado de las seis semanas anteriores. Para obtener más información, consulte [Scaling activities for Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scaling-activities.html) en la *Guía del usuario de Application Auto Scaling*.

Para comprobar el estado de una actividad de escalado, utilice el [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando. No puede comprobar el estado de una actividad de escalado con la consola.

**Topics**
+ [Descripción de las actividades de escalado (AWS CLI)](#endpoint-how-to)
+ [Identificación de actividades de escalado bloqueado a partir de las cuotas de instancia (AWS CLI)](#endpoint-identify-blocked-autoscaling)

## Descripción de las actividades de escalado (AWS CLI)
<a name="endpoint-how-to"></a>

Para describir las actividades de escalado de todos los recursos de SageMaker IA registrados en Application Auto Scaling, utilice el [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando y especifique `sagemaker` la `--service-namespace` opción.

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker
```

Para describir las actividades de escalado de un recurso específico, incluya la opción `--resource-id`. 

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant
```

El siguiente ejemplo muestra los resultados del comando.

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "string",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "string",
    "StatusMessage": "string"
}
```

## Identificación de actividades de escalado bloqueado a partir de las cuotas de instancia (AWS CLI)
<a name="endpoint-identify-blocked-autoscaling"></a>

Cuando escala horizontalmente (agrega más instancias), es posible que llegue a su cuota de instancias para la cuenta. Puede usar el [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando para comprobar si ha alcanzado la cuota de instancias. Cuando supera la cuota, el escalado automático se bloquea. 

Para comprobar si has alcanzado la cuota de instancias, usa el [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando y especifica el ID de recurso de la `--resource-id` opción. 

```
aws application-autoscaling describe-scaling-activities \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant
```

En la sintaxis de retorno, compruebe las claves [StatusMessage](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusMessage) y [StatusCode](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusCode) y sus valores asociados. `StatusCode` devuelve `Failed`. En `StatusMessage`, hay un mensaje que indica que se ha alcanzado la cuota de servicio de la cuenta. Lo que sigue es un ejemplo del aspecto que puede tener ese mensaje: 

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "minimum capacity was set to 110",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "Failed",
    "StatusMessage": "Failed to set desired instance count to 110. Reason: The 
    account-level service limit 'ml.xx.xxxxxx for endpoint usage' is 1000 
    Instances, with current utilization of 997 Instances and a request delta 
    of 20 Instances. Please contact AWS support to request an increase for this 
    limit. (Service: AmazonSageMaker; Status Code: 400; 
    Error Code: ResourceLimitExceeded; Request ID: request-id)."
}
```

# Escalado de un punto de conexión a cero instancias
<a name="endpoint-auto-scaling-zero-instances"></a>

Al configurar el escalado automático para un punto de conexión, puede permitir que el proceso de reducción horizontal disminuya el número de instancias en servicio a cero. De este modo, ahorra costos durante los períodos en los que el punto de conexión no atiende solicitudes de inferencia y, por lo tanto, no requiere instancias activas. 

Sin embargo, tras reducir horizontalmente a cero instancias, el punto de conexión no podrá responder a solicitudes de inferencia entrantes hasta que aprovisione al menos una instancia. Para automatizar el proceso de aprovisionamiento, cree una política de escalado por pasos con Application Auto Scaling. A continuación, asignas la política a una CloudWatch alarma de Amazon.

Tras configurar la política de escalado por pasos y la alarma, el punto de conexión aprovisionará automáticamente una instancia poco después de recibir una solicitud de inferencia a la que no pueda responder. Tenga en cuenta que el proceso de aprovisionamiento suele tardar varios minutos. Durante ese tiempo, cualquier intento de invocar el punto de conexión producirá un error.

Los siguientes procedimientos explican cómo configurar el escalado automático para un punto de conexión de manera que se reduzca horizontalmente a cero instancias y se escale horizontalmente desde cero instancias. En los procedimientos se utilizan comandos con la AWS CLI.

**Antes de empezar**

Para que el punto de conexión pueda reducirse horizontalmente hacia o desde cero instancias, debe cumplir los siguientes requisitos:
+ Está en servicio.
+ Aloja uno o más componentes de inferencia. Un punto de conexión se puede reducir horizontalmente a cero instancias y escalar horizontalmente desde cero instancias únicamente si aloja componentes de inferencia.

  Para obtener información sobre el alojamiento de componentes de inferencia en puntos finales de SageMaker IA, consulte. [Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md)
+ En la configuración de punto de conexión, para el objeto `ManagedInstanceScaling` de variante de producción, ha establecido el parámetro `MinInstanceCount` en `0`.

  Para obtener información de referencia sobre este parámetro, consulte. [ProductionVariantManagedInstanceScaling](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantManagedInstanceScaling.html)

**Cómo permitir que un punto de conexión se reduzca horizontalmente a cero instancias (AWS CLI)**

Para cada componente de inferencia que aloja el punto de conexión, haga lo siguiente:

1. Registre el componente de inferencia como destino escalable. Al registrarlo, defina la capacidad mínima en `0`, como se muestra en el siguiente comando:

   ```
   aws application-autoscaling register-scalable-target \
     --service-namespace sagemaker \
     --resource-id inference-component/inference-component-name \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --min-capacity 0 \
     --max-capacity n
   ```

   En este ejemplo, *inference-component-name* sustitúyalo por el nombre del componente de inferencia. *n*Sustitúyalo por el número máximo de copias del componente de inferencia que desee aprovisionar al ampliarlo.

   Para obtener más información sobre este comando y cada uno de sus parámetros, consulte [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)la *Referencia de AWS CLI comandos*.

1. Aplique una política de seguimiento de destino al componente de inferencia, como se muestra en el siguiente comando:

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type TargetTrackingScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --target-tracking-scaling-policy-configuration file://config.json
   ```

   En este ejemplo, *inference-component-name* sustitúyalo por el nombre del componente de inferencia.

   En el ejemplo, el archivo `config.json` contiene una configuración de política de seguimiento de destino similar a esta:

   ```
   {
     "PredefinedMetricSpecification": {
         "PredefinedMetricType": "SageMakerInferenceComponentInvocationsPerCopy"
     },
     "TargetValue": 1,
     "ScaleInCooldown": 300,
     "ScaleOutCooldown": 300
   }
   ```

   Para obtener más ejemplos de configuraciones de políticas de seguimiento, consulte [Definir una política de escalado](endpoint-auto-scaling-add-code-define.md).

   Para obtener más información sobre este comando y cada uno de sus parámetros, consulte [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)la *Referencia de AWS CLI comandos*.

**Para permitir que un punto de conexión se escale horizontalmente desde cero instancias (AWS CLI)**

Para cada componente de inferencia que aloja el punto de conexión, haga lo siguiente:

1. Aplique una política de escalado por pasos al componente de inferencia, como se muestra en el siguiente comando:

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type StepScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --step-scaling-policy-configuration file://config.json
   ```

   En este ejemplo, *my-scaling-policy* sustitúyalo por un nombre único para la política. *inference-component-name*Sustitúyalo por el nombre del componente de inferencia.

   En el ejemplo, el archivo `config.json` contiene una configuración de política de escalado por pasos, como la siguiente:

   ```
   {
       "AdjustmentType": "ChangeInCapacity",
       "MetricAggregationType": "Maximum",
       "Cooldown": 60,
       "StepAdjustments":
         [
            {
              "MetricIntervalLowerBound": 0,
              "ScalingAdjustment": 1
            }
         ]
   }
   ```

   Cuando se activa esta política de escalado por etapas, la SageMaker IA aprovisiona las instancias necesarias para respaldar las copias de los componentes de inferencia.

   Después de crear la política de escalado por pasos, anote su nombre de recurso de Amazon (ARN). En el siguiente paso, necesitará el ARN CloudWatch de la alarma.

   Para obtener más información acerca de políticas de escalado por pasos, consulte [Step scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) en la *Guía del usuario de Application Auto Scaling*.

1. Cree una CloudWatch alarma y asígnele la política de escalado escalonado, como se muestra en el siguiente ejemplo:

   ```
   aws cloudwatch put-metric-alarm \
   --alarm-actions step-scaling-policy-arn \
   --alarm-description "Alarm when SM IC endpoint invoked that has 0 instances." \
   --alarm-name ic-step-scaling-alarm \
   --comparison-operator GreaterThanThreshold  \
   --datapoints-to-alarm 1 \
   --dimensions "Name=InferenceComponentName,Value=inference-component-name" \
   --evaluation-periods 1 \
   --metric-name NoCapacityInvocationFailures \
   --namespace AWS/SageMaker \
   --period 60 \
   --statistic Sum \
   --threshold 1
   ```

   En este ejemplo, *step-scaling-policy-arn* sustitúyalo por el ARN de tu política de escalado por pasos. *ic-step-scaling-alarm*Sustitúyalo por el nombre que prefiera. *inference-component-name*Sustitúyalo por el nombre del componente de inferencia. 

   En este ejemplo, se establece el `--metric-name` parámetro en`NoCapacityInvocationFailures`. SageMaker La IA emite esta métrica cuando un punto final recibe una solicitud de inferencia, pero el punto final no tiene instancias activas para atender la solicitud. Cuando se produce ese evento, la alarma inicia la política de escalado por pasos del paso anterior.

   Para obtener más información sobre este comando y cada uno de sus parámetros, consulte la [put-metric-alarm](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html)Referencia de *AWS CLI comandos*.

# Prueba de carga de la configuración de escalado automático
<a name="endpoint-scaling-loadtest"></a>

Realice pruebas de carga para elegir una configuración de escalado que funcione de la manera que desea.

Las siguientes directrices de prueba de carga presuponen que está utilizando una política de escalado que usa la métrica de destino predefinida `SageMakerVariantInvocationsPerInstance`.

**Topics**
+ [Determinación de las características de rendimiento](#endpoint-scaling-loadtest-variant)
+ [Cálculo de la carga de destino](#endpoint-scaling-loadtest-calc)

## Determinación de las características de rendimiento
<a name="endpoint-scaling-loadtest-variant"></a>

Realice la prueba de carga para buscar el pico `InvocationsPerInstance` que la variante de producción del modelo puede administrar y la latencia de las solicitudes a medida que la concurrencia aumenta.

Este valor depende del tipo de instancia elegido, las cargas que los clientes de su modelo suelen enviar y el rendimiento de cualquier dependencia externa que tenga su modelo.

**Para determinar el pico requests-per-second (RPS) que puede gestionar la variante de producción de su modelo y la latencia de las solicitudes**

1. Configure un punto de enlace con su modelo mediante una instancia única. Para obtener información sobre cómo configurar un punto de enlace, consulte [Implemente el modelo en los servicios de alojamiento de SageMaker IA](ex1-model-deployment.md#ex1-deploy-model).

1. Utilice una herramienta de prueba de carga para generar un número mayor de solicitudes en paralelo y monitorear las RPS y la latencia del modelo en la salida de la herramienta de prueba de carga. 
**nota**  
También puede monitorizar requests-per-minute en lugar de RPS. En ese caso, no multiplique por 60 en la ecuación para calcular `SageMakerVariantInvocationsPerInstance` que se muestra a continuación.

   Cuando la latencia de modelo aumenta o la proporción de las transacciones correctas desciende, esta es las RPS pico que su modelo puede administrar.

## Cálculo de la carga de destino
<a name="endpoint-scaling-loadtest-calc"></a>

Una vez que encuentre las características de desempeño de la variante, puede determinar las RPS máximas que debemos permitir que se envíen a una instancia. El umbral utilizado para el escalado debe ser inferior a este valor máximo. Utilice la siguiente ecuación en combinación con la prueba de carga para determinar el valor correcto para la métrica de destino `SageMakerVariantInvocationsPerInstance` en su configuración de escalado.

```
SageMakerVariantInvocationsPerInstance = (MAX_RPS * SAFETY_FACTOR) * 60
```

Donde `MAX_RPS` son las RPS máximas que determinó anteriormente y `SAFETY_FACTOR` es el factor de seguridad que eligió para garantizar que sus clientes no superan las RPS máximas. Multiplica por 60 para convertir de RPS invocations-per-minute a una CloudWatch métrica por minuto que utiliza la SageMaker IA para implementar el escalado automático (no es necesario que hagas esto si mides requests-per-minute en lugar de requests-per-second hacerlo).

**nota**  
SageMaker AI recomienda empezar las pruebas con un valor `SAFETY_FACTOR` de 0,5. Pruebe la configuración de escalado para asegurarse de que funciona de la forma que espera con su modelo para el aumento y el descenso de tráfico del cliente en su punto de conexión.

# Se utiliza CloudFormation para crear una política de escalado
<a name="endpoint-scaling-cloudformation"></a>

En el siguiente ejemplo se muestra cómo configurar el escalado automático de modelos en un punto de conexión mediante CloudFormation.

```
  Endpoint:
    Type: "AWS::SageMaker::Endpoint"
    Properties:
      EndpointName: yourEndpointName
      EndpointConfigName: yourEndpointConfigName

  ScalingTarget:
    Type: "AWS::ApplicationAutoScaling::ScalableTarget"
    Properties:
      MaxCapacity: 10
      MinCapacity: 2
      ResourceId: endpoint/my-endpoint/variant/my-variant
      RoleARN: arn
      ScalableDimension: sagemaker:variant:DesiredInstanceCount
      ServiceNamespace: sagemaker

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      PolicyName: my-scaling-policy
      PolicyType: TargetTrackingScaling
      ScalingTargetId:
        Ref: ScalingTarget
      TargetTrackingScalingPolicyConfiguration:
        TargetValue: 70.0
        ScaleInCooldown: 600
        ScaleOutCooldown: 30
        PredefinedMetricSpecification:
          PredefinedMetricType: SageMakerVariantInvocationsPerInstance
```

Para obtener más información, consulte [Create Application Auto Scaling resources with AWS CloudFormation](https://docs.aws.amazon.com/autoscaling/application/userguide/creating-resources-with-cloudformation.html) en la *Guía del usuario de Application Auto Scaling*.

# Actualización de puntos de conexión que utilizan el escalado automático
<a name="endpoint-scaling-update"></a>

Cuando actualiza un punto de conexión, Application Auto Scaling realiza la comprobación para ver si alguno de los modelos de ese punto de conexión es el objetivo del escalado automático. Si la actualización cambia el tipo de instancia de cualquier modelo que sea un destino para el escalado automático, se producirá un error en la actualización. 

En el Consola de administración de AWS, verá una advertencia en la que se le indica que debe anular el registro del modelo del escalado automático antes de poder actualizarlo. Si intenta actualizar el punto de enlace llamada a la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), se produce un error en la llamada. Antes de actualizar el punto final, elimine las políticas de escalado configuradas para él y anule el registro de la variante como destino escalable mediante una llamada a la acción [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)Application Auto Scaling API. Después de actualizar el punto de conexión, puede registrar la variante como destino escalable y asociar una política de escalado.

Existe una excepción. Si cambias el modelo por una variante que está configurada para el escalado automático, el escalado automático de Amazon SageMaker AI permite la actualización. Esto se debe a que cambiar el modelo no afecta normalmente lo suficiente al rendimiento como para cambiar el comportamiento de escalado. Si actualiza un modelo para una variante configurada para el escalado automático, asegúrese de que el cambio al modelo no afecte significativamente al rendimiento y al comportamiento del escalado automático.

Cuando actualice los puntos finales de SageMaker IA a los que se ha aplicado el escalado automático, complete los siguientes pasos:

**Actualización de un punto de conexión que tiene aplicado el escalado automático**

1. Para anular el registro del punto final como objetivo escalable, llama. [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)

1. Dado que el escalado automático está bloqueado mientras la operación de actualización está en curso (o si desactivó el escalado automático en el paso anterior), es posible que desee tomar la precaución adicional de aumentar el número de instancias del punto de conexión durante la actualización. Para ello, actualice el recuento de instancias para las variantes de producción alojadas en el punto de enlace llamando a [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html).

1. Llame a [ DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) repetidamente hasta que el valor del campo `EndpointStatus` de la respuesta sea `InService`.

1. Llame a [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) para obtener los valores de la configuración del punto de enlace actual.

1. Cree una configuración de punto de enlace nueva llamando a [ CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Para las variantes de producción en las que desea mantener el recuento o el peso de las instancias existentes, utilice el mismo nombre de variante de la respuesta de la llamada a [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) en el paso anterior. Para todos los demás valores, utilice los valores que obtuvo como respuesta cuando llamó a [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) en el paso anterior.

1. Actualice el punto de enlace llamando a [ UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Especifique la configuración de punto de enlace que ha creado en el paso anterior en el campo `EndpointConfig`. Si desea conservar las propiedades de variante, como el recuento de instancias o el peso, establezca el valor del parámetro `RetainAllVariantProperties` en `True`. Esto especifica que las variantes de producción con el mismo nombre se actualizarán con el `DesiredInstanceCount` más reciente de la respuesta de la llamada a `DescribeEndpoint`, independientemente de los valores del campo `InitialInstanceCount` en el nuevo `EndpointConfig`.

1. (Opcional) Vuelva a activar el escalado automático llamando a [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)y [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html).

**nota**  
Los pasos 1 y 7 solo son necesarios si actualiza un punto de enlace con los siguientes cambios:  
Cambio del tipo de instancia para una variante de producción que tenga configurado el escalado automático
Eliminación de una variante de producción con el escalado automático configurado.

# Eliminación de puntos de conexión configurados para el escalado automático
<a name="endpoint-delete-with-scaling"></a>

Si elimina un punto de conexión, Application Auto Scaling realiza la comprobación para ver si alguno de los modelos de ese punto de conexión es el objetivo del escalado automático. Si hay alguno y usted tiene permiso para anular el registro del modelo, Application Auto Scaling anula el registro de esos modelos como objetivos escalables sin notificárselo. Si utilizas una política de permisos personalizada que no otorga permisos para la [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)acción, debes solicitar el acceso a esta acción antes de eliminar el punto final.

**nota**  
Como usuario de IAM, puede no disponer de permisos suficientes para eliminar un punto de conexión si otro usuario ha configurado el escalado automático para una variante en ese punto de conexión.

# Volúmenes de almacén de instancias
<a name="host-instance-storage"></a>

Al crear un punto de conexión, Amazon SageMaker AI asocia un volumen de almacenamiento de Amazon Elastic Block Store (Amazon EBS) a las instancias de Amazon EC2 que alojan el punto de conexión. El tamaño del volumen de almacenamiento es escalable y las opciones de almacenamiento se dividen en dos categorías: almacenamiento basado en SSD y almacenamiento basado en disco duro. 

Para obtener más información sobre el almacenamiento y las características de Amazon EBS, consulte las siguientes páginas.
+ [Características de Amazon EBS](https://aws.amazon.com/ebs/features/)
+ [Guía del usuario de Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)

Para obtener una lista completa de los volúmenes de almacenamiento de la instancia de host, consulte el tema sobre la [tabla de volúmenes de almacenamiento de instancias de host](https://aws.amazon.com/releasenotes/host-instance-storage-volumes-table/) 

**nota**  
Amazon SageMaker AI asocia un volumen de almacenamiento de Amazon Elastic Block Store (Amazon EBS) a las instancias de Amazon EC2 solamente al crear los tipos de puntos de conexión [Inferencia asíncrona](async-inference.md) o [Inferencia en tiempo real](realtime-endpoints.md). Para obtener más información sobre la personalización del volumen de almacenamiento de Amazon EBS, consulte [Parámetros de punto de conexión de SageMaker AI para inferencia de modelos grandes](large-model-inference-hosting.md).

# Validación de modelos en producción
<a name="model-validation"></a>

 Con SageMaker AI puede probar varios modelos o versiones de modelos detrás del mismo punto de conexión utilizando variantes. Una variante consiste en una instancia de ML y los componentes de servicio especificados en un modelo de SageMaker AI. Puede disponer de varias variantes detrás de un punto de conexión. Cada variante puede tener un tipo de instancia diferente o un modelo de SageMaker AI al que se puede ajustar automáticamente la escala de forma independiente de las demás. Los modelos de las variantes se pueden entrenar utilizando diferentes conjuntos de datos, diferentes algoritmos, diferentes marcos de ML o cualquier combinación de todos ellos. Todas las variantes de un punto de conexión comparten el mismo código de inferencia. SageMaker AI admite dos tipos de variantes, las variantes de producción y las variantes ocultas. 

 Si tiene varias variantes de producción detrás de un punto de conexión, puede asignar una parte de sus solicitudes de inferencia a cada variante. Cada solicitud se envía a una sola de las variantes de producción. La variante de producción a la que se envió la solicitud proporciona la respuesta a la persona que llama. Puede comparar el rendimiento de las variantes de producción entre sí. 

 También puede disponer de una variante oculta correspondiente a una variante de producción situada detrás de un punto de conexión. Una parte de las solicitudes de inferencia que se destinan a la variante de producción se replica en la variante oculta. Las respuestas de la variante oculta se registran para compararlas y no se devuelven a la persona que llama. Esto le permite probar el rendimiento de la variante oculta sin exponer a la persona que llama a la respuesta producida por la variante oculta. 

**Topics**
+ [Prueba de modelos con variantes de producción](model-ab-testing.md)
+ [Prueba de modelos con variantes de sombra](model-shadow-deployment.md)

# Prueba de modelos con variantes de producción
<a name="model-ab-testing"></a>

 En los flujos de trabajo de ML de producción, los ingenieros y científicos de datos tratan con frecuencia de mejorar los modelos de diversas maneras, por ejemplo [Ajuste automático de modelos con IA SageMaker](automatic-model-tuning.md), realizando entrenamientos en datos adicionales o más recientes y mejorando la selección de características, utilizando instancias con mejor actualización y prestando servicio de contenedores. Puede utilizar las variantes de producción para comparar sus modelos, instancias y contenedores, y elegir el candidato con mejor rendimiento para responder a solicitudes de inferencia. 

 Con los puntos de enlace multivariantes de SageMaker IA, puede distribuir las solicitudes de invocación de puntos finales en varias variantes de producción proporcionando la distribución del tráfico para cada variante, o puede invocar una variante específica directamente para cada solicitud. En este tema, analizamos ambos métodos para probar modelos ML. 

**Topics**
+ [Probar modelos especificando la distribución del tráfico](#model-testing-traffic-distribution)
+ [Probar modelos invocando variantes específicas](#model-testing-target-variant)
+ [Ejemplo de A/B prueba de modelo](#model-ab-test-example)

## Probar modelos especificando la distribución del tráfico
<a name="model-testing-traffic-distribution"></a>

 Para probar varios modelos distribuyendo tráfico entre ellos, especifique el porcentaje del tráfico que se dirige a cada modelo indicando el peso de cada variante de producción en la configuración del punto de enlace. Para obtener información, consulte [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). El siguiente diagrama muestra con más detalle cómo funciona este proceso. 

![\[Ejemplo que muestra cómo funciona la distribución del tráfico entre los modelos que se utilizan InvokeEndpoint en la IA. SageMaker\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-traffic-distribution.png)


## Probar modelos invocando variantes específicas
<a name="model-testing-target-variant"></a>

 Para probar varios modelos invocando modelos específicos para cada solicitud, especifique la versión específica del modelo que desea invocar proporcionando un valor para el `TargetVariant` parámetro cuando llame. [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) SageMaker La IA se asegura de que la solicitud se procese según la variante de producción que especifique. Si ya ha proporcionado la distribución del tráfico y especificado un valor para el parámetro `TargetVariant`, el direccionamiento dirigido suplanta la distribución aleatoria del tráfico. El siguiente diagrama muestra con más detalle cómo funciona este proceso. 

![\[Ejemplo que muestra cómo InvokeEndpoint funciona en la SageMaker IA la invocación de modelos específicos para cada solicitud.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-target-variant.png)


## Ejemplo de A/B prueba de modelo
<a name="model-ab-test-example"></a>

 Realizar A/B pruebas entre un modelo nuevo y un modelo antiguo con tráfico de producción puede ser un paso final eficaz en el proceso de validación de un modelo nuevo. En A/B las pruebas, se prueban diferentes variantes de los modelos y se compara el rendimiento de cada variante. Si la versión más reciente del modelo ofrece un mejor rendimiento que la versión anterior, reemplace la versión anterior del modelo por la nueva versión en producción. 

 El siguiente ejemplo muestra cómo realizar pruebas de A/B modelos. Para ver un bloc de notas de ejemplo que implementa este ejemplo, consulte [Prueba A/B de modelos ML en producción](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_endpoints/a_b_testing/a_b_testing.html). 

### Paso 1: Crear e implementar modelos
<a name="model-ab-test-step1"></a>

 Primero, definimos dónde se encuentran los modelos en Amazon S3. Estas ubicaciones se utilizan al implementar los modelos en los siguientes pasos: 

```
model_url = f"s3://{path_to_model_1}"
model_url2 = f"s3://{path_to_model_2}"
```

 A continuación, creamos los objetos del modelo con la imagen y los datos del modelo. Estos objetos del modelo se utilizan para implementar variantes de producción en un punto de enlace. Los modelos se desarrollan mediante el entrenamiento de modelos ML en diferentes conjuntos de datos, diferentes algoritmos o marcos ML y diferentes hiperparámetros: 

```
from sagemaker.amazon.amazon_estimator import get_image_uri

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"
image_uri = get_image_uri(boto3.Session().region_name, 'xgboost', '0.90-1')
image_uri2 = get_image_uri(boto3.Session().region_name, 'xgboost', '0.90-2')

sm_session.create_model(
    name=model_name,
    role=role,
    container_defs={
        'Image': image_uri,
        'ModelDataUrl': model_url
    }
)

sm_session.create_model(
    name=model_name2,
    role=role,
    container_defs={
        'Image': image_uri2,
        'ModelDataUrl': model_url2
    }
)
```

 Ahora creamos dos variantes de producción, cada una con sus propios requisitos de modelo y recursos diferentes (tipo de instancia y recuentos). De este modo, es posible probar modelos en diferentes tipos de instancia. 

 Definimos un peso inicial de 1 para ambas variantes. Esto significa que el 50 % de las solicitudes van a la `Variant1` y el 50 % restante a la `Variant2`. La suma de pesos de ambas variantes es 2 y cada variante tiene una asignación de peso de 1. Esto significa que cada variante recibe la mitad, es decir el 50 %, del tráfico total. 

```
from sagemaker.session import production_variant

variant1 = production_variant(
               model_name=model_name,
               instance_type="ml.m5.xlarge",
               initial_instance_count=1,
               variant_name='Variant1',
               initial_weight=1,
           )

variant2 = production_variant(
               model_name=model_name2,
               instance_type="ml.m5.xlarge",
               initial_instance_count=1,
               variant_name='Variant2',
               initial_weight=1,
           )
```

 Por fin, estamos preparados para implementar estas variantes de producción en un terminal de SageMaker IA. 

```
endpoint_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
print(f"EndpointName={endpoint_name}")

sm_session.endpoint_from_production_variants(
    name=endpoint_name,
    production_variants=[variant1, variant2]
)
```

### Paso 2: Invocar los modelos implementados
<a name="model-ab-test-step2"></a>

 Ahora enviamos las solicitudes a este punto de conexión para obtener inferencias en tiempo real. Utilizamos tanto la distribución de tráfico como el direccionamiento directo. 

 En primer lugar, utilizamos la distribución de tráfico que configuramos en el paso anterior. Cada respuesta de inferencia contiene el nombre de la variante de producción que procesa la solicitud, por lo que podemos ver que el tráfico a las dos variantes de producción es aproximadamente igual. 

```
# get a subset of test data for a quick test
!tail -120 test_data/test-dataset-input-cols.csv > test_data/test_sample_tail_input_cols.csv
print(f"Sending test traffic to the endpoint {endpoint_name}. \nPlease wait...")

with open('test_data/test_sample_tail_input_cols.csv', 'r') as f:
    for row in f:
        print(".", end="", flush=True)
        payload = row.rstrip('\n')
        sm_runtime.invoke_endpoint(
            EndpointName=endpoint_name,
            ContentType="text/csv",
            Body=payload
        )
        time.sleep(0.5)

print("Done!")
```

 SageMaker La IA emite métricas como `Latency` y `Invocations` para cada variante en Amazon CloudWatch. Para ver una lista completa de las métricas que emite la SageMaker IA, consulta. [Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md) Vamos CloudWatch a obtener el número de invocaciones por variante para mostrar cómo se dividen las invocaciones entre las variantes de forma predeterminada: 

![\[Ejemplo CloudWatch de número de invocaciones por variante.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-variant-invocations.png)


 Ahora vamos a invocar una versión específica del modelo indicando `Variant1` como `TargetVariant` en la llamada a `invoke_endpoint`. 

```
print(f"Sending test traffic to the endpoint {endpoint_name}. \nPlease wait...")
with open('test_data/test_sample_tail_input_cols.csv', 'r') as f:
    for row in f:
        print(".", end="", flush=True)
        payload = row.rstrip('\n')
        sm_runtime.invoke_endpoint(
            EndpointName=endpoint_name,
            ContentType="text/csv",
            Body=payload,
            TargetVariant="Variant1"
        ) 
        time.sleep(0.5)
```

 Para confirmar que todas las nuevas invocaciones fueron procesadas por`Variant1`, podemos consultar CloudWatch el número de invocaciones por variante. Vemos que en las invocaciones más recientes (última marca de tiempo), todas las solicitudes fueron procesadas por la `Variant1`, como habíamos especificado. No hubo invocaciones para la `Variant2`. 

![\[Ejemplo de CloudWatch número de invocaciones para cada variante.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-invocations-target1.png)


### Paso 3: Evaluar el rendimiento del modelo
<a name="model-ab-test-step3"></a>

 Para ver qué versión del modelo funciona mejor, evaluemos la precisión, la recuperación, la puntuación de F1 y el funcionamiento del receptor por charactersistic/Area debajo de la curva para cada variante. En primer lugar, veamos estas métricas para la `Variant1`: 

![\[Ejemplo de curva de características de funcionamiento del receptor para Variant1\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-curve.png)


Ahora veamos las métricas de la `Variant2`:

![\[Ejemplo de curva de características de funcionamiento del receptor para Variant2\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model2-curve.png)


 En la mayoría de las métricas definidas, funciona mejor la `Variant2`, por lo que esta es la que usaremos en producción. 

### Paso 4: Aumentar el tráfico al mejor modelo
<a name="model-ab-test-step4"></a>

 Ahora que hemos determinado que la `Variant2` funciona mejor que la `Variant1`, dirigimos más tráfico a esta variante. Podemos seguir utilizándola para `TargetVariant` invocar una variante de modelo específica, pero un enfoque más sencillo consiste en actualizar los pesos asignados a cada variante mediante una llamada [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html). Esto cambia la distribución del tráfico a las variantes de producción sin necesidad de actualizaciones en el punto de conexión. Recuerde que en la sección de configuración establecimos pesos de variante para dividir el tráfico 50/50. Las CloudWatch métricas del total de invocaciones de cada variante que aparecen a continuación nos muestran los patrones de invocación de cada variante: 

![\[Ejemplos de CloudWatch métricas para el total de invocaciones de cada variante.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-invocations-even-dist.png)


 Ahora trasladamos el 75% del tráfico a `Variant2` mediante la asignación de nuevos pesos a cada variante utilizando. `UpdateEndpointWeightsAndCapacities` SageMaker La IA ahora envía el 75% de las solicitudes de inferencia `Variant2` y el 25% restante a. `Variant1` 

```
sm.update_endpoint_weights_and_capacities(
    EndpointName=endpoint_name,
    DesiredWeightsAndCapacities=[
        {
            "DesiredWeight": 25,
            "VariantName": variant1["VariantName"]
        },
        {
            "DesiredWeight": 75,
            "VariantName": variant2["VariantName"]
        }
    ]
)
```

 Las CloudWatch métricas del total de invocaciones de cada variante nos muestran un número mayor de invocaciones que de`Variant2`: `Variant1` 

![\[Ejemplos de CloudWatch métricas para el total de invocaciones de cada variante.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-invocations-75-25.png)


 Podemos seguir monitoreando las métricas y, cuando estemos satisfechos con el rendimiento de una variante, dirigir el 100 % del tráfico a esa variante. Utilizamos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html) para actualizar las asignaciones de tráfico para las variantes. El peso para `Variant1` está establecido en 0 y el peso para `Variant2` está establecido en 1. SageMaker La IA ahora envía el 100% de todas las solicitudes de inferencia a`Variant2`. 

```
sm.update_endpoint_weights_and_capacities(
    EndpointName=endpoint_name,
    DesiredWeightsAndCapacities=[
        {
            "DesiredWeight": 0,
            "VariantName": variant1["VariantName"]
        },
        {
            "DesiredWeight": 1,
            "VariantName": variant2["VariantName"]
        }
    ]
)
```

 Las CloudWatch métricas del total de invocaciones de cada variante muestran que todas las solicitudes de inferencia están siendo procesadas por `Variant2` y no hay ninguna solicitud de inferencia procesada por. `Variant1` 

![\[Ejemplos de CloudWatch métricas para el total de invocaciones de cada variante.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-invocations-best-model.png)


 Ahora puede actualizar de forma segura el punto de enlace y eliminar la `Variant1` del punto de conexión. También puede continuar probando nuevos modelos en producción y agregar nuevas variantes al punto de conexión según los pasos 2 a 4. 

# Prueba de modelos con variantes de sombra
<a name="model-shadow-deployment"></a>

 Puede utilizar SageMaker AI Model Shadow Deployments para crear variantes ocultas de larga duración para validar cualquier nuevo componente candidato de su pila de servidores de modelos antes de promocionarlo a producción. El siguiente diagrama muestra con más detalle cómo funcionan las variantes ocultas. 

![\[Detalles de una variante oculta.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/juxtaposer/shadow-variant.png)


## Implementación de variantes ocultas
<a name="model-shadow-deployment-deploy"></a>

 En el siguiente ejemplo de código se muestra cómo se pueden implementar variantes ocultas mediante programación. Sustituya el *texto del marcador de usuario* del ejemplo por su propia información. 

1.  Cree dos modelos de SageMaker AI: uno para la variante de producción y otro para la variante oculta. 

   ```
   import boto3
   from sagemaker import get_execution_role, Session
                   
   aws_region = "aws-region"
   
   boto_session = boto3.Session(region_name=aws_region)
   sagemaker_client = boto_session.client("sagemaker")
   
   role = get_execution_role()
   
   bucket = Session(boto_session).default_bucket()
   
   model_name1 = "name-of-your-first-model"
   model_name2 = "name-of-your-second-model"
   
   sagemaker_client.create_model(
       ModelName = model_name1,
       ExecutionRoleArn = role,
       Containers=[
           {
               "Image": "ecr-image-uri-for-first-model",
               "ModelDataUrl": "s3-location-of-trained-first-model" 
           }
       ]
   )
   
   sagemaker_client.create_model(
       ModelName = model_name2,
       ExecutionRoleArn = role,
       Containers=[
           {
               "Image": "ecr-image-uri-for-second-model",
               "ModelDataUrl": "s3-location-of-trained-second-model" 
           }
       ]
   )
   ```

1.  Creación de una configuración de punto de conexión. Especifique las variantes de producción y ocultas en la configuración. 

   ```
   endpoint_config_name = name-of-your-endpoint-config
   
   create_endpoint_config_response = sagemaker_client.create_endpoint_config(
       EndpointConfigName=endpoint_config_name,
       ProductionVariants=[
           {
               "VariantName": name-of-your-production-variant,
               "ModelName": model_name1,
               "InstanceType": "ml.m5.xlarge",
               "InitialInstanceCount": 1,
               "InitialVariantWeight": 1,
           }
       ],
       ShadowProductionVariants=[
           {
               "VariantName": name-of-your-shadow-variant,
               "ModelName": model_name2,
               "InstanceType": "ml.m5.xlarge",
               "InitialInstanceCount": 1,
               "InitialVariantWeight": 1,
           }
      ]
   )
   ```

1. Cree un punto de conexión.

   ```
   create_endpoint_response = sm.create_endpoint(
       EndpointName=name-of-your-endpoint,
       EndpointConfigName=endpoint_config_name,
   )
   ```

# Explicabilidad en línea con Clarify SageMaker
<a name="clarify-online-explainability"></a>

Esta guía muestra cómo configurar la explicabilidad en línea con Clarify. SageMaker Con los puntos finales de [inferencia en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) de la SageMaker IA, puede analizar la explicabilidad en tiempo real y de forma continua. La función de explicabilidad en línea se integra en la parte de **implementación para producción** del flujo de trabajo de [Amazon SageMaker AI Machine Learning](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-mlconcepts.html).

## Cómo funciona la explicabilidad en línea de Clarify
<a name="clarify-online-explainability-how-it-works"></a>

En el siguiente gráfico, se muestra la arquitectura de SageMaker IA para alojar un punto final que responde a las solicitudes de explicabilidad. Describe las interacciones entre un punto final, el contenedor modelo y la herramienta explicativa de SageMaker Clarify.

![\[SageMaker La arquitectura de IA muestra el alojamiento de un punto final que atiende solicitudes de explicabilidad bajo demanda.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/clarify/DeveloperGuideArchitecture.png)


Así es como funciona la explicabilidad en línea de Clarify. La aplicación envía una `InvokeEndpoint` solicitud tipo REST al SageMaker AI Runtime Service. El servicio dirige esta solicitud a un punto final de SageMaker IA para obtener predicciones y explicaciones. A continuación, el servicio recibe la respuesta del punto de conexión. Por último, el servicio envía la respuesta de vuelta a la aplicación.

Para aumentar la disponibilidad de los puntos finales, la SageMaker IA intenta distribuir automáticamente las instancias de puntos finales en varias zonas de disponibilidad, según el número de instancias de la configuración del punto final. En una instancia de punto final, ante una nueva solicitud de explicabilidad, el explicador de SageMaker Clarify recurre al contenedor del modelo para realizar predicciones. A continuación, calcula y devuelve las atribuciones de características.

Estos son los cuatro pasos para crear un punto final que utilice SageMaker la explicabilidad en línea de Clarify:

1. [Compruebe si su modelo de SageMaker IA previamente entrenado es compatible con la explicabilidad en línea siguiendo los pasos de verificación previa.](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-precheck.html)

1. [Cree una configuración de punto final con la configuración](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) explicativa de SageMaker Clarify mediante la API. `CreateEndpointConfig`

1. [Cree un punto final](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) y proporcione la configuración del punto final a SageMaker AI mediante la `CreateEndpoint` API. El servicio lanza la instancia de computación de ML e implementa el modelo según se especifica en la configuración.

1. [Invoca el punto final](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html): cuando el punto final esté en servicio, llama a la API SageMaker AI Runtime `InvokeEndpoint` para enviar solicitudes al punto final. A continuación, el punto de conexión devuelve las explicaciones y las predicciones.

# Comprobación previa del contenedor de modelos
<a name="clarify-online-explainability-precheck"></a>

Esta sección le muestra cómo realizar la comprobación previa de la compatibilidad de las entradas y salidas del contenedor de modelos antes de configurar un punto de conexión. La explicación SageMaker de Clarify es **independiente del modelo**, pero tiene requisitos para la entrada y salida del contenedor del modelo.

**nota**  
Puede aumentar la eficiencia si configura su contenedor para que admita solicitudes por lotes, que admiten dos o más registros en una sola solicitud. Por ejemplo, un único registro es una sola línea de datos CSV o una sola línea de datos JSON Lines. SageMaker Clarify intentará enviar primero un minilote de registros al contenedor modelo antes de recurrir a solicitudes de registro único.

## Entrada del contenedor de modelos
<a name="clarify-online-explainability-input"></a>

------
#### [ CSV ]

El contenedor de modelos admite entradas en CSV con el tipo MIME: `text/csv`. La siguiente tabla muestra ejemplos de entradas compatibles con SageMaker Clarify.


| Entrada del contenedor de modelos (representación de cadena) | Comentarios | 
| --- | --- | 
|  '1,2,3,4'  |  Registro único que utiliza cuatro características numéricas.  | 
|  '1,2,3,4\$1n5,6,7,8'  |  Dos registros, separados por un salto de línea '\$1n'.  | 
|  '"Este es un buen producto",5'  |  Registro único que contiene una característica de texto y una característica numérica.  | 
|  ‘"Este es un buen producto",5\$1n"Mala experiencia de compra",1'  |  Dos registros.  | 

------
#### [ JSON Lines ]

SageMaker AI también admite la entrada en [formato denso de líneas JSON](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-jsonlines) con el tipo MIME:`application/jsonlines`, como se muestra en la siguiente tabla.


| Entrada del contenedor de modelos | Comentarios | 
| --- | --- | 
|  '\$1"datos":\$1"características":[1,2,3,4]\$1\$1'  |  Registro único; se puede extraer una lista de características por JMESPath expresión`data.features`.  | 
|  '\$1"datos":\$1"características":[1,2,3,4]\$1\$1\$1n\$1"datos":\$1"características":[5,6,7,8]\$1\$1'  |  Dos registros.  | 
|  '\$1"características":["Este es un buen producto",5]\$1'  |  Registro único; se puede extraer una lista de características mediante una JMESPath expresión`features`.  | 
|  '\$1"características":["Este es un buen producto",5]\$1\$1n\$1"características":["Mala experiencia de compra",1]\$1'  |  Dos registros.  | 

------

## Salida del contenedor de modelos
<a name="clarify-online-explainability-output"></a>

La salida del contenedor de modelos también debe estar en formato denso CSV o JSON Lines. Además, el contenedor del modelo debe incluir las probabilidades de los registros de entrada, que SageMaker Clarify utiliza para calcular las atribuciones de las características.

Los siguientes ejemplos de datos son para salidas de contenedores de modelos en **formato CSV**.

------
#### [ Probability only ]

En el caso de problemas de regresión y clasificación binaria, el contenedor de modelos genera un único valor de probabilidad (puntuación) de la etiqueta predicha. Estas probabilidades se pueden extraer utilizando el índice de columna 0. En el caso de problemas con varias clases, el contenedor de modelos genera una lista de probabilidades (puntuaciones). En el caso de problemas con varias clases, si no se proporciona ningún índice, se extraen todos los valores.


| Entrada del contenedor de modelos | Salida del contenedor de modelos (representación de cadena) | 
| --- | --- | 
|  Registro único  |  '0,6'  | 
|  Dos registros (resultados en una línea)  |  '0,6,0,3'  | 
|  Dos registros (resultados en dos líneas)  |  '0,6\$1n0,3'  | 
|  Registro único de un modelo multiclase (tres clases)  |  '0,1,0,6,0,3'  | 
|  Dos registros de un modelo multiclase (tres clases)  |  '0,1,0,6,0,3\$1n0,2,0,5,0,3'  | 

------
#### [ Predicted label and probabilities ]

El contenedor de modelos genera la etiqueta predicha seguida de su probabilidad en formato **CSV**. Estas probabilidades se pueden extraer utilizando el índice `1`.


| Entrada del contenedor de modelos | Salida del contenedor de modelos | 
| --- | --- | 
|  Registro único  |  '1,0,6'  | 
|  Dos registros  |  '1,0,6\$1n0,0,3'  | 

------
#### [ Predicted labels header and probabilities ]

Se puede configurar un contenedor de modelos multiclase entrenado por el piloto automático para que genere **la representación en cadena** de la lista de etiquetas y probabilidades predichas en formato **CSV**. En el siguiente ejemplo, las probabilidades se pueden extraer mediante el índice `1`. Los encabezados de las etiquetas se pueden extraer mediante el índice `1`, y los encabezados de las etiquetas se pueden extraer utilizando el índice `0`.


| Entrada del contenedor de modelos | Salida del contenedor de modelos | 
| --- | --- | 
|  Registro único  |  '"[\$1'gato\$1',\$1'perro\$1',\$1'pez\$1']","[0,1,0,6,0,3]"'  | 
|  Dos registros  |  '"[\$1'gato\$1',\$1'perro\$1',\$1'pez\$1']","[0,1,0,6,0,3]"\$1n"[\$1'gato\$1',\$1'perro\$1',\$1'pez\$1']","[0,2,0,5,0,3]"'  | 

------

Los siguientes ejemplos de datos son para salidas del contenedor de modelos en formato **JSON Lines**.

------
#### [ Probability only ]

En este ejemplo, el contenedor de modelos genera la probabilidad que se puede extraer mediante una expresión de [https://jmespath.org/](https://jmespath.org/) `score` en formato **JSON Lines**.


| Entrada del contenedor de modelos | Salida del contenedor de modelos | 
| --- | --- | 
|  Registro único  |  '\$1"puntuación":0,6\$1'  | 
|  Dos registros  |  '\$1"puntuación":0,6\$1\$1n\$1"puntuación":0,3\$1'  | 

------
#### [ Predicted label and probabilities ]

En este ejemplo, un contenedor de modelos multiclase genera una lista de encabezados de etiquetas junto con una lista de probabilidades en formato **JSON Lines**. Las probabilidades se pueden extraer mediante la expresión de `JMESPath` `probability` y los encabezados de las etiquetas se pueden extraer mediante la expresión de `JMESPath` `predicted labels`.


| Entrada del contenedor de modelos | Salida del contenedor de modelos | 
| --- | --- | 
|  Registro único  |  '\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0,3]\$1'  | 
|  Dos registros  |  '\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0.3]\$1\$1n\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,2,0,5,0,3]\$1'  | 

------
#### [ Predicted labels header and probabilities ]

En este ejemplo, un contenedor de modelos multiclase genera una lista de encabezados de etiquetas y probabilidades en formato **JSON Lines**. Las probabilidades se pueden extraer mediante la expresión de `JMESPath` `probability` y los encabezados de las etiquetas se pueden extraer mediante la expresión de `JMESPath` `predicted labels`.


| Entrada del contenedor de modelos | Salida del contenedor de modelos | 
| --- | --- | 
|  Registro único  |  '\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0,3]\$1'  | 
|  Dos registros  |  '\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0.3]\$1\$1n\$1"etiquetas\$1predichas":["gato","perro","pez"],"probabilidades":[0,2,0,5,0,3]\$1'  | 

------

## Validación del contenedor de modelos
<a name="clarify-online-explainability-container-validation"></a>

Le recomendamos que implemente su modelo en un punto final de inferencia en tiempo real de la SageMaker IA y que envíe las solicitudes al punto final. Examine manualmente las solicitudes (entradas del contenedor de modelos) y las respuestas (salidas del contenedor de modelos) para asegurarse de que ambas cumplan con los requisitos de las secciones **Entrada del contenedor de modelos** y **Salida del contenedor de modelos**. Si el contenedor de modelos admite solicitudes por lotes, puede empezar con una sola solicitud de registro y, a continuación, probar con dos o más registros.

En los siguientes comandos se muestra cómo solicitar una respuesta mediante la AWS CLI. Viene AWS CLI preinstalado en las instancias de SageMaker Studio Classic y SageMaker Notebook. Si necesita instalar el AWS CLI, siga esta [guía de instalación](https://aws.amazon.com/cli/).

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name $ENDPOINT_NAME \
  --content-type $CONTENT_TYPE \
  --accept $ACCEPT_TYPE \
  --body $REQUEST_DATA \
  $CLI_BINARY_FORMAT \
  /dev/stderr 1>/dev/null
```

Los parámetros se definen como sigue:
+ `$ENDPOINT NAME`: el nombre del punto de conexión.
+ `$CONTENT_TYPE`: el tipo MIME de la solicitud (entrada del contenedor de modelos).
+ `$ACCEPT_TYPE`: el tipo MIME de la respuesta (salida del contenedor de modelos).
+ `$REQUEST_DATA`: la cadena de carga solicitada.
+ `$CLI_BINARY_FORMAT`: el formato del parámetro de la interfaz de la línea de comandos (CLI). Para la AWS CLI versión 1, este parámetro debe permanecer en blanco. En la versión 2, este parámetro debe establecerse en `--cli-binary-format raw-in-base64-out`.

**nota**  
AWS CLI [v2 pasa los parámetros binarios como cadenas codificadas en base64 por defecto.](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-binaryparam)

En los ejemplos siguientes se utiliza v1: AWS CLI 

------
#### [ Request and response in CSV format ]
+ La solicitud consta de un único registro y la respuesta es su valor de probabilidad.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.6`
+ La solicitud consta de dos registros, la respuesta incluye sus probabilidades y el modelo separa las probabilidades con una coma. La expresión `$'content'` en `--body` indica al comando que debe interpretar `\n` en el contenido como un salto de línea.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.6,0.3`
+ La solicitud consta de dos registros, la respuesta incluye sus probabilidades y el modelo separa las probabilidades con un salto de línea.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.6`

  `0.3`
+ La solicitud consta de un único registro y la respuesta son los valores de probabilidad (modelo multiclase, tres clases).

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.1,0.6,0.3`
+ La solicitud consta de dos registros y la respuesta incluye sus valores de probabilidad (modelo multiclase, tres clases).

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.1,0.6,0.3`

  `0.2,0.5,0.3`
+ La solicitud consta de dos registros y la respuesta incluye la probabilidad y la etiqueta predicha.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-2 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `1,0.6`

  `0,0.3`
+ La solicitud consta de dos registros y la respuesta incluye los encabezados de la etiqueta y las probabilidades.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-3 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `"['cat','dog','fish']","[0.1,0.6,0.3]"`

  `"['cat','dog','fish']","[0.2,0.5,0.3]"`

------
#### [ Request and response in JSON Lines format ]
+ La solicitud consta de un único registro y la respuesta es su valor de probabilidad.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body '{"features":["This is a good product",5]}' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `{"score":0.6}`
+ La solicitud contiene dos registros y la respuesta incluye la probabilidad y la etiqueta predicha.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-2 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `{"predicted_label":1,"probability":0.6}`

  `{"predicted_label":0,"probability":0.3}`
+ La solicitud contiene dos registros y la respuesta incluye los encabezados de la etiqueta y las probabilidades.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-3 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}`

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}`

------
#### [ Request and response in different formats ]
+ La solicitud está en formato CSV y la respuesta está en formato JSON Lines:

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-in-jsonlines-out \
    --content-type text/csv \
    --accept application/jsonlines \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `{"probability":0.6}`

  `{"probability":0.3}`
+ La solicitud está en formato JSON Lines y la respuesta está en formato CSV:

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-in-csv-out \
    --content-type application/jsonlines \
    --accept text/csv \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  Salida:

  `0.6`

  `0.3`

------

Una vez finalizadas las validaciones, [elimine](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-delete-resources.html) el punto de conexión de prueba.

# Configuración y creación de un punto de conexión
<a name="clarify-online-explainability-create-endpoint"></a>

Cree una nueva configuración de punto de conexión que se adapte a su modelo y utilice esta configuración para crear el punto de conexión. Puede usar el contenedor modelo validado en el [paso previo a la verificación](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-precheck.html) para crear un punto final y habilitar la función de explicabilidad en línea SageMaker de Clarify.

Utilice el `sagemaker_client` objeto para crear un punto final mediante la API. [CreateEndpointConfig](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Defina el miembro `ClarifyExplainerConfig` dentro del parámetro `ExplainerConfig` de la siguiente manera:

```
sagemaker_client.create_endpoint_config(
    EndpointConfigName='name-of-your-endpoint-config',
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'EnableExplanations': '`true`',
            'InferenceConfig': {
                ...
            },
            'ShapConfig': {
                ...
            }
        },
    },
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': 'name-of-your-model',
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }]
     ...
)
sagemaker_client.create_endpoint(
    EndpointName='name-of-your-endpoint',
    EndpointConfigName='name-of-your-endpoint-config'
)
```

La primera llamada al objeto `sagemaker_client` crea una nueva configuración de punto de conexión con la característica de explicabilidad habilitada. La segunda llamada usa la configuración del punto de conexión para lanzar el punto de conexión.

**nota**  
También puede alojar varios modelos en un contenedor detrás de un [punto final multimodelo de inferencia de SageMaker IA en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) y configurar la explicabilidad en línea con Clarify. SageMaker 

# La expresión `EnableExplanations`
<a name="clarify-online-explainability-create-endpoint-enable"></a>

El parámetro `EnableExplanations` es una cadena de expresión booleana de [https://jmespath.org/](https://jmespath.org/). Se evalúa para **cada registro** de la solicitud de explicabilidad. Si se considera que este parámetro es **verdadero**, se explicará el registro. Si se evalúa que este parámetro es **falso**, no se generarán explicaciones.

SageMaker Clarify deserializa la salida del contenedor de modelos para cada registro en una estructura de datos compatible con JSON y, a continuación, usa el parámetro para evaluar los `EnableExplanations` datos.

**Notas**  
Hay dos opciones para los registros en función del formato de la salida del contenedor de modelos.  
Si la salida del contenedor de modelos está en formato CSV, se carga un registro como una matriz JSON.
Si la salida del contenedor de modelos está en formato JSON Lines, se carga un registro como un objeto JSON.

El `EnableExplanations` parámetro es una JMESPath expresión que se puede pasar durante las operaciones `InvokeEndpoint` o`CreateEndpointConfig`. Si la JMESPath expresión que ha proporcionado no es válida, se producirá un error al crear el punto final. Si la expresión es válida, pero el resultado de la evaluación de la expresión es inesperado, el punto de conexión se creará correctamente, pero se generará un error cuando se invoque el punto de conexión. Pruebe la expresión `EnableExplanations` mediante la API `InvokeEndpoint` y, a continuación, aplíquela a la configuración del punto de conexión.

A continuación se muestran algunos ejemplos de expresiones de `EnableExplanations` válidas. En los ejemplos, una JMESPath expresión incluye un literal con caracteres de comillas invertidas. Por ejemplo, ``true`` significa verdadero.


| Expresión (representación de cadena) | Salida del contenedor de modelos (representación de cadena) | Resultado de la evaluación (booleano) | Significado | 
| --- | --- | --- | --- | 
|  '`true`'  |  (N/A)  |  True  |  Activa la explicabilidad en línea de forma incondicional.  | 
|  '`false`'  |  (N/A)  |  False  |  Desactiva la explicabilidad en línea de forma incondicional.  | 
|  '[1]>`0,5`'  |  '1,0,6'  |  True  |  Para cada registro, el contenedor de modelos genera su etiqueta predicha y probabilidad. Explica un registro si su probabilidad (en el índice 1) es superior a 0,5.  | 
|  'probabilidad>`0,5`'  |  '\$1"etiqueta\$1predicha":1,"probabilidad":0,6\$1'  |  True  |  Para cada registro, el contenedor de modelos genera datos JSON. Explica un registro si su probabilidad es superior a 0,5.  | 
|  '\$1contains(probabilities[:-1], max(probabilities))'  |  '\$1"probabilidades": [0,4, 0,1, 0,4], "etiquetas":["gato","perro","pez"]\$1'  |  False  |  Para un modelo multiclase: explica un registro si su etiqueta predicha (la clase que tiene el valor de probabilidad máximo) es la última clase. Literalmente, la expresión significa que el valor de probabilidad máxima no está en la lista de probabilidades, excluyendo la última.  | 

# Conjunto de datos sintéticos
<a name="clarify-online-explainability-create-endpoint-synthetic"></a>

SageMaker Clarify usa el algoritmo SHAP del núcleo. A partir de un registro (también denominado muestra o instancia) y de la configuración SHAP, el explicador primero genera un conjunto de datos sintético. SageMaker A continuación, Clarify consulta el contenedor del modelo para encontrar las predicciones del conjunto de datos y, a continuación, calcula y devuelve las atribuciones de las características. El tamaño del conjunto de datos sintético afecta al tiempo de ejecución del explicador de Clarify. Los conjuntos de datos sintéticos más grandes requieren más tiempo para obtener predicciones de modelos que los más pequeños.

 El tamaño del conjunto de datos sintéticos se determina mediante la siguiente fórmula:

```
Synthetic dataset size = SHAP baseline size * n_samples
```

El tamaño de referencia SHAP es el número de registros en los datos de referencia SHAP. Esta información se toma de `ShapBaselineConfig`.

El tamaño de `n_samples` lo establece el parámetro `NumberOfSamples` en la configuración del explicador y el número de características. Si el número de característica es `n_features`, entonces `n_samples` es lo siguiente: 

```
n_samples = MIN(NumberOfSamples, 2^n_features - 2)
```

A continuación se muestra `n_samples` si no se proporciona el `NumberOfSamples`.

```
n_samples = MIN(2*n_features + 2^11, 2^n_features - 2)
```

Por ejemplo, un registro tabular con 10 características tiene un tamaño de referencia SHAP de 1. Si no se proporciona el `NumberOfSamples`, el conjunto de datos sintético contiene 1022 registros. Si el registro tiene 20 características, el conjunto de datos sintético contiene 2088 registros.

En el caso de problemas de NLP, `n_features` es igual al número de características no textuales más el número de unidades de texto.

**nota**  
La API `InvokeEndpoint` tiene un límite de tiempo de espera para las solicitudes. Si el conjunto de datos sintético es demasiado grande, es posible que el explicador no pueda completar el cálculo dentro de este límite. Si es necesario, utilice la información anterior para comprender y reducir el tamaño de referencia SHAP y `NumberOfSamples`. Si el contenedor de modelos está configurado para gestionar solicitudes por lotes, también puede ajustar el valor de `MaxRecordCount`.

# Invocación del punto de conexión
<a name="clarify-online-explainability-invoke-endpoint"></a>

Una vez que el punto final esté en ejecución, usa la [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)API SageMaker AI Runtime del servicio SageMaker AI Runtime para enviar solicitudes al punto final o invocarlo. En respuesta, el explicador de Clarify gestiona las solicitudes como solicitudes de explicabilidad. SageMaker 

**nota**  
Para invocar un punto de conexión, elija una de las siguientes opciones:  
Para obtener instrucciones sobre cómo usar Boto3 o para invocar un punto final, AWS CLI consulte. [Invocación de modelos para realizar inferencias en tiempo real](realtime-endpoints-test-endpoints.md)
Para usar el SageMaker SDK para Python a fin de invocar un punto final, consulta la API de [Predictor](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html).

## Solicitud
<a name="clarify-online-explainability-request"></a>

La API `InvokeEndpoint` tiene un parámetro opcional `EnableExplanations`, que se asigna al encabezado HTTP `X-Amzn-SageMaker-Enable-Explanations`. Si se proporciona este parámetro, anula el parámetro `EnableExplanations`de `ClarifyExplainerConfig`.

**nota**  
Los parámetros `ContentType` y `Accept` de la API `InvokeEndpoint` son obligatorios. Los formatos admitidos incluyen el tipo MIME `text/csv` y `application/jsonlines`.

Utilice `sagemaker_runtime_client` para enviar una solicitud al punto de conexión de la siguiente manera:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName='name-of-your-endpoint',
    EnableExplanations='`true`',
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',  # single record (of four numerical features)
)
```

Para los puntos de conexión multimodelo, pase un parámetro `TargetModel` adicional en la solicitud de ejemplo anterior para especificar a qué modelo debe dirigirse en el punto de conexión. El punto de conexión multimodelo carga dinámicamente los modelos de destino según sea necesario. Para obtener más información sobre puntos de conexión multimodelo, consulte [Puntos de conexión multimodelo](multi-model-endpoints.md). Consulte el [cuaderno de muestra SageMaker Clarify Online Explicability on MultiModel Endpoint](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/tabular_multi_model_endpoint/multi_model_xgboost_with_online_explainability.ipynb) para ver un ejemplo de cómo configurar e invocar varios modelos de destino desde un único punto final.

## Respuesta
<a name="clarify-online-explainability-response"></a>

Si el punto de conexión se crea con `ExplainerConfig`, entonces, se utiliza un nuevo esquema de respuesta. Este nuevo esquema es diferente y no es compatible con un punto de conexión que carezca del parámetro `ExplainerConfig` proporcionado.

El tipo MIME de la respuesta es `application/json`, y la carga de la respuesta se puede decodificar de bytes UTF-8 a un objeto JSON. A continuación se muestra que los miembros de este objeto JSON son los siguientes:
+ `version`: la versión del esquema de respuesta en formato de cadena. Por ejemplo, `1.0`.
+ `predictions`: las predicciones que hace la solicitud son las siguientes:
  + `content_type`: el tipo MIME de las predicciones, en referencia al `ContentType` de la respuesta del contenedor de modelos.
  + `data`: la cadena de datos de las predicciones entregada como carga de la respuesta del contenedor de modelos a la solicitud.
+ `label_headers`: los encabezados de las etiquetas del parámetro `LabelHeaders`. Esto se proporciona en la configuración del explicador o en la salida del contenedor de modelos.
+ `explanations`: las explicaciones que figuran en la carga de la solicitud. Si no se explica ningún registro, este miembro devuelve el objeto `{}` vacío.
+ 
  + `kernel_shap`: una clave que hace referencia a una matriz de explicaciones SHAP del kernel para cada registro de la solicitud. Si un registro no tiene explicación, la explicación correspondiente es `null`.

El elemento `kernel_shap` tiene los siguientes miembros:
+ `feature_header`: el nombre del encabezado de las características que proporciona el parámetro `FeatureHeaders` en la configuración del explicador `ExplainerConfig`.
+ `feature_type`: el tipo de característica inferido por el explicador o proporcionado en el parámetro `FeatureTypes` en `ExplainerConfig`. Este elemento solo está disponible para problemas de explicabilidad de NLP.
+ `attributions`: una matriz de objetos de atribución. Las características de texto pueden tener varios objetos de atribución, cada uno para una unidad. El objeto de atribución tiene los siguientes miembros:
  + `attribution`: una lista de valores de probabilidad, proporcionada para cada clase.
  + `description`: la descripción de las unidades de texto, disponible solo para problemas de explicabilidad de NLP.
    + `partial_text`: la parte del texto explicada por el explicador.
    + `start_idx`: un índice de base cero para identificar la ubicación de la matriz al principio del fragmento de texto parcial.

# Ejemplos de código: SDK para Python
<a name="clarify-online-explainability-examples"></a>

En esta sección se proporciona un ejemplo de código para crear e invocar un punto final que utilice la explicabilidad en línea de Clarify. SageMaker Estos ejemplos de código utilizan el [SDK de AWS para Python](https://aws.amazon.com/sdk-for-python/).

## Datos tabulares
<a name="clarigy-online-explainability-examples-tabular"></a>

En el siguiente ejemplo, se utilizan datos tabulares y un SageMaker modelo de IA denominado. `model_name` En este ejemplo, el contenedor de modelos acepta datos en formato CSV y cada registro tiene cuatro características numéricas. En esta configuración mínima, **solo con fines de demostración**, los datos de referencia SHAP se establecen en cero. Consulte [Referencias SHAP para la explicabilidad](clarify-feature-attribute-shap-baselines.md) para obtener información sobre cómo elegir valores más adecuados para `ShapBaseline`.

Configure el punto de conexión de la siguiente manera:

```
endpoint_config_name = 'tabular_explainer_endpoint_config'
response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': model_name,
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }],
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'ShapConfig': {
                'ShapBaselineConfig': {
                    'ShapBaseline': '0,0,0,0',
                },
            },
        },
    },
)
```

Utilice la configuración de punto de conexión para crear un punto de conexión, de la siguiente manera:

```
endpoint_name = 'tabular_explainer_endpoint'
response = sagemaker_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)
```

Utilice la API `DescribeEndpoint` para inspeccionar el progreso de la creación de un punto de conexión, de la siguiente manera:

```
response = sagemaker_client.describe_endpoint(
    EndpointName=endpoint_name,
)
response['EndpointStatus']
```

Cuando el estado del punto final sea "InService«, invoque el punto final con un registro de prueba, de la siguiente manera:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',
)
```

**nota**  
En el ejemplo de código anterior, en el caso de los puntos de conexión multimodelo, introduzca un parámetro `TargetModel` adicional en la solicitud para especificar a qué modelo debe dirigirse en el punto de conexión.

Suponga que la respuesta tiene un código de estado 200 (sin errores) y cargue el cuerpo de la respuesta de la siguiente manera:

```
import codecs
import json
json.load(codecs.getreader('utf-8')(response['Body']))
```

La acción predeterminada para el punto de conexión es explicar el registro. A continuación, se muestra un ejemplo de salida en el objeto JSON devuelto.

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv; charset=utf-8",
        "data": "0.0006380207487381"
    },
    "explanations": {
        "kernel_shap": [
            [
                {
                    "attributions": [
                        {
                            "attribution": [-0.00433456]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [-0.005369821]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [0.007917749]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [-0.00261214]
                        }
                    ]
                }
            ]
        ]
    }
}
```

Utilice el parámetro `EnableExplanations` para habilitar las explicaciones bajo demanda, de la siguiente manera:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',
    EnableExplanations='[0]>`0.8`',
)
```

**nota**  
En el ejemplo de código anterior, en el caso de los puntos de conexión multimodelo, introduzca un parámetro `TargetModel` adicional en la solicitud para especificar a qué modelo debe dirigirse en el punto de conexión.

En este ejemplo, el valor de predicción es inferior al valor umbral de `0.8`, por lo que no se explica el registro:

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv; charset=utf-8",
        "data": "0.6380207487381995"
    },
    "explanations": {}
}
```

Utilice herramientas de visualización para ayudar a interpretar las explicaciones devueltas. La siguiente imagen muestra cómo se pueden utilizar los gráficos SHAP para comprender cómo contribuye cada característica a la predicción. El valor base del diagrama, también denominado valor esperado, es la media de las predicciones del conjunto de datos de entrenamiento. Las características que empujan el valor esperado hacia arriba aparecen en rojo y las características que empujan el valor esperado hacia abajo aparecen en azul. Consulte el [diagrama de fuerza aditiva SHAP](https://shap.readthedocs.io/en/latest/generated/shap.plots.force.html) para obtener información adicional.

![\[Un ejemplo de gráfico SHAP que se puede utilizar para comprender cómo contribuye cada característica a la predicción.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/clarify/force-plot.png)


Consulte el [cuaderno de ejemplos completo para datos tabulares](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/tabular/tabular_online_explainability_with_sagemaker_clarify.ipynb). 

## Datos de texto
<a name="clarigy-online-explainability-examples-text"></a>

En esta sección se proporciona un ejemplo de código para crear e invocar un punto de conexión de explicabilidad en línea para datos de texto. El ejemplo de código usa SDK para Python.

En el siguiente ejemplo, se utilizan datos de texto y un modelo de SageMaker IA denominado`model_name`. En este ejemplo, el contenedor de modelos acepta datos en formato CSV y cada registro es una sola cadena.

```
endpoint_config_name = 'text_explainer_endpoint_config'
response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': model_name,
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }],
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'InferenceConfig': {
                'FeatureTypes': ['text'],
                'MaxRecordCount': 100,
            },
            'ShapConfig': {
                'ShapBaselineConfig': {
                    'ShapBaseline': '"<MASK>"',
                },
                'TextConfig': {
                    'Granularity': 'token',
                    'Language': 'en',
                },
                'NumberOfSamples': 100,
            },
        },
    },
)
```
+ `ShapBaseline`: un token especial reservado para el procesamiento de lenguaje natural (NLP).
+ `FeatureTypes`: identifica la característica como texto. Si no se proporciona este parámetro, el explicador intentará inferir el tipo de característica.
+ `TextConfig`: especifica la unidad de granularidad y el idioma para el análisis de las características del texto. En este ejemplo, el idioma es el inglés y la granularidad `token` significa una palabra en texto inglés.
+ `NumberOfSamples`: un límite para establecer los límites superiores del tamaño del conjunto de datos sintéticos.
+ `MaxRecordCount`: el número máximo de registros de una solicitud que puede gestionar el contenedor de modelos. Este parámetro se establece para estabilizar el rendimiento.

Utilice la configuración de punto de conexión para crear un punto de conexión, de la siguiente manera:

```
endpoint_name = 'text_explainer_endpoint'
response = sagemaker_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)
```

Cuando el estado del punto de conexión pase a ser `InService`, invoque el punto de conexión. En el siguiente ejemplo de código, se utiliza un registro de prueba de la siguiente manera:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='"This is a good product"',
)
```

Si la solicitud se completa correctamente, el cuerpo de la respuesta devolverá un objeto JSON válido similar al siguiente:

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv",
        "data": "0.9766594\n"
    },
    "explanations": {
        "kernel_shap": [
            [
                {
                    "attributions": [
                        {
                            "attribution": [
                                -0.007270948666666712
                            ],
                            "description": {
                                "partial_text": "This",
                                "start_idx": 0
                            }
                        },
                        {
                            "attribution": [
                                -0.018199033666666628
                            ],
                            "description": {
                                "partial_text": "is",
                                "start_idx": 5
                            }
                        },
                        {
                            "attribution": [
                                0.01970993241666666
                            ],
                            "description": {
                                "partial_text": "a",
                                "start_idx": 8
                            }
                        },
                        {
                            "attribution": [
                                0.1253469515833334
                            ],
                            "description": {
                                "partial_text": "good",
                                "start_idx": 10
                            }
                        },
                        {
                            "attribution": [
                                0.03291143366666657
                            ],
                            "description": {
                                "partial_text": "product",
                                "start_idx": 15
                            }
                        }
                    ],
                    "feature_type": "text"
                }
            ]
        ]
    }
}
```

Utilice herramientas de visualización para ayudar a interpretar las atribuciones de texto devueltas. La siguiente imagen muestra cómo se puede utilizar la utilidad de visualización de captum para comprender cómo contribuye cada palabra a la predicción. Cuanto mayor sea la saturación del color, mayor será la importancia que se le dé a la palabra. En este ejemplo, un color rojo brillante muy saturado indica una fuerte contribución negativa. Un color verde muy saturado indica una fuerte contribución positiva. El color blanco indica que la palabra tiene una contribución neutra. Consulte la biblioteca de [captum](https://github.com/pytorch/captum) para obtener información adicional sobre el análisis y la renderización de las atribuciones.

![\[La utilidad de visualización de captum se utiliza para comprender cómo contribuye cada palabra a la predicción.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/clarify/word-importance.png)


Consulte el [cuaderno de ejemplos completo para texto](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/natural_language_processing/nlp_online_explainability_with_sagemaker_clarify.ipynb). 

# Guía para solucionar problemas
<a name="clarify-online-explainability-troubleshooting"></a>

Si encuentra errores al utilizar la explicabilidad en SageMaker línea de Clarify, consulte los temas de esta sección.

**`InvokeEndpoint`La API falla y aparece el error «:Read ReadTimeoutError timeout on endpoint...»** 

Este error significa que la solicitud no se pudo completar dentro del límite de tiempo de 60 segundos establecido por el [tiempo de espera de la solicitud](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html).

Para reducir la latencia de la solicitud, pruebe lo siguiente:
+ Ajuste el rendimiento del modelo durante la inferencia. Por ejemplo, SageMaker AI [Neo](https://aws.amazon.com/sagemaker/neo/) puede optimizar los modelos para la inferencia.
+ Permita que el contenedor de modelos gestione las solicitudes por lotes.
+ Utilice un `MaxRecordCount` más grande para reducir el número de llamadas desde el explicador al contenedor de modelos. Esto reducirá la latencia y la sobrecarga de la red.
+ Use un tipo de instancia que tenga más recursos asignados. Como alternativa, asigne más instancias al punto de conexión para ayudar a equilibrar la carga.
+ Reduzca la cantidad de registros incluidos en una sola solicitud `InvokeEndpoint`.
+ Reduzca el número de registros de los datos de referencia.
+ Utilice un valor de `NumberOfSamples` más pequeño para reducir el tamaño del conjunto de datos sintético. Para obtener más información acerca de cómo afecta la cantidad de muestras al conjunto de datos sintéticos, consulte [Conjunto de datos sintéticos](clarify-online-explainability-create-endpoint-synthetic.md).

# Refinamiento de modelos con componentes de inferencia del adaptador
<a name="realtime-endpoints-adapt"></a>

Con Amazon SageMaker AI, puede alojar modelos básicos previamente entrenados sin necesidad de crear sus propios modelos desde cero. Sin embargo, para adaptar un modelo fundacional de uso general a las necesidades únicas de su empresa, debe crear una versión de refinamiento del modelo. Una técnica rentable de refinamiento es la adaptación de rango bajo (LoRA). El principio en el que se basa LoRA es que solo una pequeña parte de un gran modelo fundacional debe actualizarse para adaptarlo a nuevas tareas o dominios. Un adaptador LoRA aumenta la inferencia de un modelo fundacional con solo unas cuantas capas de adaptador adicionales.

*Si aloja su modelo base mediante un componente de inferencia de SageMaker IA, puede ajustar ese modelo base con adaptadores LoRa creando componentes de inferencia de adaptadores.* Al crear un componente de inferencia de adaptador, especifica lo siguiente:
+ El *componente de inferencia básico* que va a contener el componente de inferencia del adaptador. El componente de inferencia básico contiene el modelo fundacional que desea adaptar. El componente de inferencia del adaptador utiliza los recursos computación que usted asignó al componente de inferencia básico.
+ La ubicación en la que ha almacenado el adaptador LoRA en Amazon S3.

Una vez creado el componente de inferencia del adaptador, puede invocarlo directamente. Cuando lo haga, la SageMaker IA combina el adaptador con el modelo base para aumentar la respuesta generada.

**Antes de empezar**

Antes de poder crear un componente de inferencia del adaptador, asegúrese de que cumple los siguientes requisitos: 
+ Tiene un componente de inferencia básico que contiene el modelo fundacional que debe adaptarse. Ha implementado este componente de inferencia en un punto final de SageMaker IA. 

  Para obtener más información acerca de cómo implementar componentes de inferencia en puntos de conexión, consulte [Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md).
+ Tiene un modelo de adaptador LoRA y ha almacenado los artefactos del modelo como un archivo `tar.gz` en Amazon S3. Al crear el componente de inferencia del adaptador, debe especificar el URI de S3 de los artefactos.

En los siguientes ejemplos se utiliza el SDK para Python (Boto3) para crear e invocar un componente de inferencia del adaptador.

**Example `create_inference_component` llama para crear un componente de inferencia del adaptador**  
En el siguiente ejemplo se crea un componente de inferencia del adaptador y lo asigna a un componente de inferencia básico:  

```
sm_client.create_inference_component(
    InferenceComponentName = adapter_ic_name,
    EndpointName = endpoint_name,
    Specification={
        "BaseInferenceComponentName": base_inference_component_name,
        "Container": {
            "ArtifactUrl": adapter_s3_uri
        },
    },
)
```
Cuando utilice este ejemplo en su propio código, sustituya los valores de marcador de posición de la siguiente manera:  
+ *adapter\$1ic\$1name*— Un nombre exclusivo para el componente de inferencia del adaptador.
+ *endpoint\$1name*— El nombre del punto final que aloja el componente de inferencia base.
+ *base\$1inference\$1component\$1name*— El nombre del componente de inferencia base que contiene el modelo básico que se va a adaptar.
+ *adapter\$1s3\$1uri*— El URI de S3 que localiza el `tar.gz` archivo con los artefactos del adaptador LoRa.
Crea un componente de inferencia del adaptador con un código similar al de un componente de inferencia normal. Una diferencia es que, para el parámetro `Specification`, se omite la clave `ComputeResourceRequirements`. Cuando invoca un componente de inferencia del adaptador, es cargado por el componente de inferencia básico. El componente de inferencia del adaptador utiliza los recursos de computación del componente de inferencia básico.  
Para obtener más información sobre la creación e implementación de componentes de inferencia con el SDK para Python (Boto3), consulte [Implemente modelos con Python SDKs](realtime-endpoints-deploy-models.md#deploy-models-python).

Después de crear un componente de inferencia del adaptador, lo invoca especificando su nombre en una solicitud `invoke_endpoint`.

**Example `invoke_endpoint` llama para invocar un componente de inferencia del adaptador**  
En el siguiente ejemplo se invoca un componente de inferencia del adaptador:  

```
response = sm_rt_client.invoke_endpoint(
    EndpointName = endpoint_name,
    InferenceComponentName = adapter_ic_name,
    Body = json.dumps(
        {
            "inputs": prompt,
            "parameters": {"max_new_tokens": 100, "temperature":0.9}
        }
    ),
    ContentType = "application/json",
)

adapter_reponse = response["Body"].read().decode("utf8")["generated_text"]
```
Cuando utilice este ejemplo en su propio código, sustituya los valores de marcador de posición de la siguiente manera:  
+ *endpoint\$1name*— El nombre del punto final que aloja los componentes de inferencia base y del adaptador.
+ *adapter\$1ic\$1name*— El nombre del componente de inferencia del adaptador.
+ *prompt*— El mensaje de la solicitud de inferencia.
Para obtener más información sobre cómo invocar componentes de inferencia con el SDK para Python (Boto3), consulte [Invocación de modelos para realizar inferencias en tiempo real](realtime-endpoints-test-endpoints.md).

# Implemente modelos con Amazon SageMaker Serverless Inference
<a name="serverless-endpoints"></a>

Amazon SageMaker Serverless Inference es una opción de inferencia diseñada específicamente que le permite implementar y escalar modelos de aprendizaje automático sin configurar ni administrar ninguna de las infraestructuras subyacentes. La inferencia sin servidor bajo demanda es ideal para cargas de trabajo que tienen períodos de inactividad entre picos de tráfico y que pueden tolerar arranques en frío. Los puntos de conexión sin servidor lanzan automáticamente los recursos informáticos y los amplían y reducen en función del tráfico, lo que elimina la necesidad de elegir tipos de instancias o de gestionar las políticas de escalado. Esto acaba con el trabajo pesado e indiferenciado que supone seleccionar y administrar los servidores. La inferencia sin servidor se integra con AWS Lambda para ofrecerle alta disponibilidad, tolerancia a errores integrada y escalado automático. Con un pay-per-use modelo, la inferencia sin servidor es una opción rentable si tiene un patrón de tráfico poco frecuente o impredecible. Cuando no haya solicitudes, la inferencia sin servidor reduce su punto de conexión a 0, lo que le ayuda a minimizar los costes. Para obtener más información sobre los precios de Serverless Inference bajo demanda, consulta [Amazon SageMaker ](https://aws.amazon.com/sagemaker/pricing/) Pricing.

Si lo desea, también puede utilizar la simultaneidad aprovisionada con la inferencia sin servidor. La inferencia sin servidor con simultaneidad aprovisionada es una opción rentable cuando tiene ráfagas predecibles en su tráfico. La simultaneidad aprovisionada le permite implementar modelos en puntos finales sin servidor con un rendimiento predecible y una alta escalabilidad, ya que mantiene sus puntos de enlace calientes. SageMaker La IA garantiza que, con el número de simultaneidad aprovisionada que asigne, los recursos informáticos se inicialicen y estén listos para responder en cuestión de milisegundos. En el caso de la inferencia sin servidor con simultaneidad aprovisionada, usted paga por la capacidad informática utilizada para procesar las solicitudes de inferencia, facturada por milisegundos, y por la cantidad de datos procesados. También paga por el uso de la simultaneidad aprovisionada, en función de la memoria configurada, la duración aprovisionada y la cantidad de simultaneidad habilitada. [Para obtener más información sobre los precios de Serverless Inference with Provisioned Concurrency, consulte Amazon Pricing. SageMaker ](https://aws.amazon.com/sagemaker/pricing/)

[Puede integrar Serverless Inference con sus MLOps procesos para agilizar su flujo de trabajo de aprendizaje automático, y puede utilizar un terminal sin servidor para alojar un modelo registrado en Model Registry.](model-registry.md)

La inferencia sin servidor generalmente está disponible en 21 AWS regiones: EE. UU. Este (Norte de Virginia), EE. UU. Este (Ohio), EE. UU. Oeste (Norte de California), EE. UU. Oeste (Oregón), África (Ciudad del Cabo), Asia Pacífico (Hong Kong), Asia Pacífico (Bombay), Asia Pacífico (Tokio), Asia Pacífico (Seúl), Asia Pacífico (Osaka), Asia Pacífico (Singapur), Asia Pacífico (Sídney), Canadá (Central), Europa (Frankfurt), Europa (Irlanda), Europa (Londres), Europa (París), Europa (Estocolmo), Europa (Milán), Oriente Medio (Baréin), Sudamérica (São Paulo). Para obtener más información sobre la disponibilidad regional de Amazon SageMaker AI, consulte la [Lista de servicios AWS regionales](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).

## Funcionamiento
<a name="serverless-endpoints-how-it-works"></a>

El siguiente diagrama muestra el flujo de trabajo de la inferencia sin servidor bajo demanda y las ventajas de utilizar un punto de conexión sin servidor.

![\[Diagrama que muestra el flujo de trabajo de Inferencia sin servidor\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/serverless-endpoints-how-it-works.png)


Cuando crea un punto final sin servidor bajo demanda, la SageMaker IA aprovisiona y administra los recursos informáticos por usted. Luego, puede realizar solicitudes de inferencia al punto final y recibir predicciones del modelo en respuesta. SageMaker La IA amplía y reduce los recursos informáticos según sea necesario para gestionar el tráfico de solicitudes, y usted solo paga por lo que utilice.

En el caso de la simultaneidad aprovisionada, la inferencia sin servidor también se integra con Application Auto Scaling, de modo que puede gestionar la simultaneidad aprovisionada en función de una métrica objetiva o de una programación. Para obtener más información, consulte [Escalar automáticamente la simultaneidad aprovisionada para un punto de conexión sin servidor](serverless-endpoints-autoscale.md).

Las siguientes secciones proporcionan detalles adicionales sobre la inferencia sin servidor y su funcionamiento.

**Topics**
+ [Compatibilidad con contenedor](#serverless-endpoints-how-it-works-containers)
+ [Tamaño de memoria](#serverless-endpoints-how-it-works-memory)
+ [Invocaciones simultáneas](#serverless-endpoints-how-it-works-concurrency)
+ [Minimización del arranque en frío](#serverless-endpoints-how-it-works-cold-starts)
+ [Exclusiones de características](#serverless-endpoints-how-it-works-exclusions)

### Compatibilidad con contenedor
<a name="serverless-endpoints-how-it-works-containers"></a>

Para su contenedor de punto final, puede elegir un contenedor SageMaker proporcionado por la IA o traer el suyo propio. SageMaker La IA proporciona contenedores para sus algoritmos integrados e imágenes de Docker prediseñadas para algunos de los marcos de aprendizaje automático más comunes, como Apache,, y MXNet Chainer TensorFlow. PyTorch Para ver una lista de las SageMaker imágenes disponibles, consulte Imágenes [disponibles de Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Si va a traer su propio contenedor, debe modificarlo para que funcione con la SageMaker IA. Para obtener más información sobre cómo llevar su propio contenedor, consulte [Adapte su propio contenedor de inferencias para Amazon AI SageMaker](adapt-inference-container.md).

El tamaño máximo de la imagen del contenedor que puede utilizar es de 10 GB. Para los puntos de conexión sin servidor, se recomienda crear solo un elemento de trabajo en el contenedor y cargar solo una copia del modelo. Tenga en cuenta que esto es diferente a los puntos de conexión en tiempo real, donde algunos contenedores de SageMaker IA pueden crear un trabajador para cada vCPU a fin de procesar las solicitudes de inferencia y cargar el modelo en cada trabajador.

Si ya dispone de un contenedor para un punto de conexión en tiempo real, puede usar el mismo contenedor para su punto de conexión sin servidor, aunque se excluyen algunas funciones. Para obtener más información sobre las capacidades de los contenedores que no se admiten en inferencia sin servidor, consulte [Exclusiones de características](#serverless-endpoints-how-it-works-exclusions). Si eliges usar el mismo contenedor, la SageMaker IA guarda en custodia (conserva) una copia de la imagen del contenedor hasta que elimines todos los puntos finales que usan la imagen. SageMaker La IA cifra la imagen copiada en reposo con una clave propiedad de la IA. SageMaker AWS KMS 

### Tamaño de memoria
<a name="serverless-endpoints-how-it-works-memory"></a>

Su punto de conexión sin servidor tiene un tamaño de RAM mínimo de 1024 MB (1 GB) y el tamaño máximo de RAM que puede elegir es de 6144 MB (6 GB). Los tamaños de memoria que puede elegir son 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. La inferencia sin servidor asigna automáticamente los recursos de procesamiento proporcionales a la memoria que seleccione. Si eliges un tamaño de memoria más grande, tu contenedor tiene acceso a más v. CPUs Elija el tamaño de memoria de su terminal de acuerdo con el tamaño de su modelo. Por lo general, el tamaño de la memoria debe ser al menos tan grande como el tamaño del modelo. Es posible que tengas que realizar una evaluación comparativa para elegir la memoria adecuada para tu modelo en función de tu latencia SLAs. Para obtener una guía paso a paso sobre la evaluación comparativa, consulte [Presentación del kit de herramientas de evaluación comparativa de inferencias de Amazon SageMaker Serverless](https://aws.amazon.com/blogs/machine-learning/introducing-the-amazon-sagemaker-serverless-inference-benchmarking-toolkit/). Los incrementos de tamaño de memoria tienen precios diferentes; consulta la [página de precios de Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/) para obtener más información.

Independientemente del tamaño de memoria que elija, su punto de conexión sin servidor dispone de 5 GB de almacenamiento en disco efímero. Para obtener ayuda con los problemas de permisos de los contenedores al trabajar con el almacenamiento, consulte [Solución de problemas](serverless-endpoints-troubleshooting.md).

### Invocaciones simultáneas
<a name="serverless-endpoints-how-it-works-concurrency"></a>

La inferencia sin servidor bajo demanda gestiona políticas y cuotas de escalado predefinidas para la capacidad de su punto de conexión. Los puntos de conexión sin servidor tienen una cuota del número de invocaciones simultáneas que pueden procesarse al mismo tiempo. Si se invoca el punto de conexión antes de que termine de procesar la primera solicitud, gestionará la segunda solicitud de forma simultánea.

La simultaneidad total que puede compartir entre todos los puntos de conexión sin servidor de su cuenta depende de su región:
+ Para las regiones de Este de EE. UU. (Ohio), el Este de EE. UU. (Norte de Virginia), el Oeste de EE. UU. (Oregón), Asia Pacífico (Singapur), Asia Pacífico (Sídney), Asia Pacífico (Tokio), Europa (Fráncfort) y Europa (Irlanda), la simultaneidad total que puede compartir entre todos los puntos de conexión sin servidor por región en su cuenta es 1000.
+ Para las regiones de Oeste de EE. UU. (Norte de California), África (Ciudad del Cabo), Asia Pacífico (Hong Kong), Asia Pacífico (Mumbai), Asia Pacífico (Osaka), Asia Pacífico (Seúl), Canadá (Central), Europa (Londres), Europa (Milán), Europa (París), Europa (Estocolmo), Medio Oriente (Bahréin) y América del Sur (São Paulo), la simultaneidad total por región en su cuenta es de 500.

Puede establecer la simultaneidad máxima para un solo punto de conexión hasta 200, y el número total de puntos de conexión sin servidor que puede alojar en una región es de 50. La simultaneidad máxima de un punto de conexión individual impide que ese punto de conexión acepte todas las invocaciones permitidas para su cuenta, y cualquier invocación de punto de conexión que supere el máximo queda limitada.

**nota**  
La simultaneidad aprovisionada que asigne a un punto de conexión sin servidor siempre debe ser inferior o igual a la simultaneidad máxima que haya asignado a ese punto de conexión.

Para obtener información acerca de cómo configurar la simultaneidad máxima para su punto de conexión, consulte [Creación de una configuración de punto de conexión](serverless-endpoints-create-config.md). Para obtener más información sobre las cuotas y los límites, consulte los [puntos de enlace y las cuotas de Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) en. *Referencia general de AWS* Para solicitar un aumento del límite de servicio, consulte [Soporte de AWS](https://console.aws.amazon.com/support). Para obtener instrucciones sobre cómo solicitar un aumento de límite de servicio, consulte [Regiones y cuotas admitidas](regions-quotas.md).

### Minimización del arranque en frío
<a name="serverless-endpoints-how-it-works-cold-starts"></a>

Si el punto de conexión de inferencia sin servidor bajo demanda no recibe tráfico durante un tiempo y, de repente, el punto de conexión recibe nuevas solicitudes, el punto de conexión puede tardar algún tiempo en activar los recursos informáticos necesarios para procesarlas. Esto se denomina *arranque en frío*. Dado que los puntos de conexión sin servidor suministran recursos informáticos a pedido, es posible que su punto de conexión sufra interrupciones. También se puede producir un arranque en frío si las solicitudes simultáneas superan el uso actual de solicitudes simultáneas. El tiempo de arranque en frío depende del tamaño del modelo, del tiempo que lleve descargarlo y del tiempo de puesta en marcha del contenedor.

Para controlar cuánto dura el tiempo de arranque en frío, puedes usar la CloudWatch métrica de Amazon `OverheadLatency` para monitorear tu punto final sin servidor. Esta métrica registra el tiempo que se tarda en lanzar nuevos recursos informáticos para su punto de conexión. Para obtener más información sobre el uso de CloudWatch métricas con puntos de enlace sin servidor, consulte. [Alarmas y registros para realizar un seguimiento de las métricas de los puntos de conexión sin servidor](serverless-endpoints-monitoring.md)

Puede minimizar los arranques en frío mediante la simultaneidad aprovisionada. SageMaker La IA mantiene el punto final caliente y preparado para responder en milisegundos, según el número de simultaneidad aprovisionada que hayas asignado.

### Exclusiones de características
<a name="serverless-endpoints-how-it-works-exclusions"></a>

Algunas de las funciones disponibles actualmente para la inferencia en tiempo real con SageMaker IA no son compatibles con la inferencia sin servidor, como los paquetes de modelos de AWS mercado GPUs, los registros de Docker privados, los puntos finales multimodelo, la configuración de VPC, el aislamiento de la red, la captura de datos, las múltiples variantes de producción, el monitor de modelos y los canales de inferencia.

No puede convertir un punto de conexión en tiempo real y basado en instancias en un punto de conexión sin servidor. Si intenta actualizar su punto de conexión en tiempo real a uno sin servidor, recibirá un mensaje `ValidationError`. Puede convertir un punto de conexión sin servidor en un punto de conexión en tiempo real, pero una vez realizada la actualización, no podrá revertirlo a un punto de conexión sin servidor.

## Introducción
<a name="serverless-endpoints-get-started"></a>

Puede crear, actualizar, describir y eliminar un punto final sin servidor mediante la consola de SageMaker IA AWS SDKs, el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) y el AWS CLI. Puede invocar su punto de conexión mediante AWS SDKs el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) y el AWS CLI. Para los puntos de conexión sin servidor con simultaneidad aprovisionada, puede usar Application Auto Scaling para escalar automáticamente la simultaneidad aprovisionada en función de una métrica objetiva o un cronograma. Para obtener más información acerca de cómo configurar y utilizar un punto de conexión sin servidor, consulte la guía [Operaciones de punto de conexión sin servidor](serverless-endpoints-create-invoke-update-delete.md). Para obtener más información sobre el escalado automático de puntos de conexión sin servidor con la simultaneidad aprovisionada, consulte [Escalar automáticamente la simultaneidad aprovisionada para un punto de conexión sin servidor](serverless-endpoints-autoscale.md).

**nota**  
 Actualmente, no se admite Application Auto Scaling para la inferencia aprovisionada no se admite actualmente en AWS CloudFormation. 

### Ejemplos de cuadernos y blogs
<a name="serverless-endpoints-get-started-nbs"></a>

Para ver ejemplos de cuadernos de Jupyter que muestran flujos de trabajo de puntos finales end-to-end sin servidor, consulte los cuadernos de ejemplo de inferencia de [servidores](https://github.com/aws/amazon-sagemaker-examples/tree/master/serverless-inference).

# Operaciones de punto de conexión sin servidor
<a name="serverless-endpoints-create-invoke-update-delete"></a>

A diferencia de otros puntos finales de SageMaker IA en tiempo real, Serverless Inference administra los recursos informáticos por usted, lo que reduce la complejidad para que pueda centrarse en su modelo de aprendizaje automático en lugar de en administrar la infraestructura. La siguiente guía resalta las capacidades clave de los puntos de conexión sin servidor: cómo crear, invocar, actualizar, describir o eliminar un punto de conexión. Puede utilizar la consola de SageMaker IA AWS SDKs, el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) o el AWS CLI para gestionar sus puntos de conexión sin servidor.

**Topics**
+ [Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md)
+ [Creación de punto de conexión sin servidor](serverless-endpoints-create.md)
+ [Invocación de un punto de conexión sin servidor](serverless-endpoints-invoke.md)
+ [Actualización de un punto de conexión sin servidor](serverless-endpoints-update.md)
+ [Describa un punto de conexión sin servidor](serverless-endpoints-describe.md)
+ [Eliminación de un punto de conexión sin servidor](serverless-endpoints-delete.md)

# Cumplimiento de los requisitos previos de
<a name="serverless-endpoints-prerequisites"></a>

En el siguiente tema se describen los requisitos previos que debe completar antes de crear un punto de conexión sin servidor. Estos requisitos previos incluyen almacenar adecuadamente los artefactos del modelo, configurar un AWS IAM con los permisos correctos y seleccionar una imagen de contenedor.

**Cumplimiento de los requisitos previos**

1. **Configure una AWS cuenta.** Primero necesita una AWS cuenta y un usuario AWS Identity and Access Management administrador. Para obtener instrucciones sobre cómo configurar una AWS cuenta, consulta [¿Cómo se crea y activa una AWS cuenta nueva?](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) . Para obtener instrucciones sobre cómo proteger su cuenta con un usuario administrador de IAM, consulte [Creación del primer grupo y usuario administrador de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) en la *Guía del usuario de IAM*.

1. **Cree un bucket de Amazon S3.** Utilice un bucket de Amazon S3 para almacenar los artefactos de su modelo. Para obtener información sobre cómo crear un bucket, consulte [Crear su primer bucket de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) en la *Guía del usuario de Amazon S3*.

1. **Cargue los artefactos de su modelo en el bucket de S3.** Para obtener instrucciones sobre cómo cargar el modelo en su bucket, consulte [Cargar un objeto en su bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/uploading-an-object-bucket.html) en la *Guía del usuario de Amazon S3*.

1. **Cree un rol de IAM para Amazon SageMaker AI.** Amazon SageMaker AI necesita acceder al depósito S3 en el que se almacena su modelo. Cree un rol de IAM con una política que dé a la SageMaker IA acceso de lectura a su bucket. El siguiente procedimiento muestra cómo crear un rol en la consola, pero también puedes usar la [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)API de la Guía del *usuario de IAM*. Para obtener información sobre cómo dar a su rol permisos más detallados basados en su caso de uso, consulte [Cómo utilizar las funciones de ejecución de la SageMaker IA](sagemaker-roles.md#sagemaker-roles-createmodel-perms).

   1. Inicie sesión en la [consola de IAM](https://console.aws.amazon.com/iam/).

   1. En la pestaña de navegación, seleccione **Roles**.

   1. Seleccione **Crear rol**.

   1. En **Seleccione el tipo de entidad de confianza**, elija **AWS servicio** y, a continuación, **SageMaker IA**.

   1. Seleccione **Siguiente: permisos** y, a continuación, **Siguiente: etiquetas**.

   1. (Opcional) Agregue etiquetas como pares clave-valor si quiere tener metadatos para el rol.

   1. Seleccione **Siguiente: revisar**.

   1.  En **Nombre del rol**, ingresa un nombre para el nuevo rol que sea único en tu AWS cuenta. No puede editar el nombre del rol una vez creado.

   1. (Opcional) En **Descripción del rol**, introduzca una descripción para el nuevo rol.

   1. Seleccione **Crear rol**.

1. **Adjunta los permisos del bucket de S3 a tu rol de SageMaker IA.** Tras crear un rol de IAM, adjunta una política que dé permiso a SageMaker AI para acceder al depósito de S3 que contiene los artefactos de tu modelo.

   1. En la pestaña de navegación de la consola de IAM, seleccione **Roles**.

   1. En la lista de roles, busque el rol que haya creado en el paso anterior por nombre.

   1. Seleccione su rol y, a continuación, seleccione **Asociar políticas**.

   1. En **Asociar políticas de permisos**, seleccione **crear política**.

   1. Seleccione la vista **Crear política** y haga clic en la pestaña **JSON**.

   1. Añada la siguiente declaración de política en el editor JSON. Asegúrese de sustituir `<your-bucket-name>` por el nombre del bucket de S3 que almacena los artefactos de su modelo. Si quiere restringir el acceso a una carpeta o un archivo específicos de su bucket, también puede especificar la ruta de la carpeta de Amazon S3, por ejemplo, `<your-bucket-name>/<model-folder>`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::<your-bucket-name>/*"
              }
          ]
      }
      ```

------

   1. Seleccione **Siguiente: etiquetas**.

   1. (Opcional) Agregar etiquetas en pares clave-valor a la política.

   1. Seleccione **Siguiente: revisar**.

   1. En **Nombre**, introduzca un nombre para la política.

   1. (Opcional) Añada una **descripción** a la política.

   1. Seleccione **Crear política**.

   1. Tras crear la política, vuelva a **Funciones** en la [consola de IAM](https://console.aws.amazon.com/iam/) y seleccione su función de SageMaker IA.

   1. Seleccione **Asociar políticas**.

   1. En **Asociar permisos**, busque la política que haya creado por su nombre. Selecciónela y seleccione **Asociar política**.

1. **Seleccione una imagen del contenedor Docker prediseñada o añada la suya propia.** El contenedor que elija sirve para hacer inferencias en su punto final. SageMaker La IA proporciona contenedores para algoritmos integrados e imágenes de Docker prediseñadas para algunos de los marcos de aprendizaje automático más comunes, como Apache, MXNet TensorFlow PyTorch, y Chainer. Para obtener una lista completa de las SageMaker imágenes disponibles, consulte Imágenes [disponibles de Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

   Si ninguno de los contenedores de SageMaker IA existentes satisface tus necesidades, es posible que tengas que crear tu propio contenedor de Docker. Para obtener información sobre cómo crear una imagen de Docker y hacerla compatible con la SageMaker IA, consulte. [Contenedores con código de inferencia personalizado](your-algorithms-inference-main.md) Para usar el contenedor con un punto final sin servidor, la imagen del contenedor debe residir en un repositorio de Amazon ECR dentro de la misma AWS cuenta que creó el punto final.

1. **(Opcional) Registre su modelo en el registro de modelos.** [SageMaker Model Registry](model-registry.md) le ayuda a catalogar y administrar las versiones de sus modelos para utilizarlas en las canalizaciones de aprendizaje automático. Para obtener más información sobre cómo registrar una versión de su modelo, consulte [Cree un grupo de modelos](model-registry-model-group.md) y [Registro de una versión del modelo](model-registry-version.md). Para ver un ejemplo de un flujo de trabajo del registro de modelos e inferencias sin servidor, consulte el siguiente [cuaderno de ejemplo](https://github.com/aws/amazon-sagemaker-examples/blob/main/serverless-inference/serverless-model-registry.ipynb).

1. **(Opcional) Traiga una AWS KMS clave.** Al configurar un punto final sin servidor, tiene la opción de especificar una clave de KMS que la SageMaker IA utilice para cifrar la imagen de Amazon ECR. Tenga en cuenta que la política de claves para la clave KMS debe permitir el acceso a la función de IAM que especifique al configurar el punto de conexión. Para obtener más información sobre las claves de KMS, consulte la AWS Key Management Service Guía del desarrollador.

# Creación de punto de conexión sin servidor
<a name="serverless-endpoints-create"></a>

**importante**  
Las políticas de IAM personalizadas que permiten a Amazon SageMaker Studio o Amazon SageMaker Studio Classic crear SageMaker recursos de Amazon también deben conceder permisos para añadir etiquetas a esos recursos. El permiso para añadir etiquetas a los recursos es necesario porque Studio y Studio Classic etiquetan automáticamente todos los recursos que crean. Si una política de IAM permite a Studio y Studio Classic crear recursos, pero no permite el etiquetado, se pueden producir errores de tipo AccessDenied «» al intentar crear recursos. Para obtener más información, consulte [Proporcione permisos para etiquetar los recursos de SageMaker IA](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS políticas gestionadas para Amazon SageMaker AI](security-iam-awsmanpol.md)que otorgan permisos para crear SageMaker recursos ya incluyen permisos para añadir etiquetas al crear esos recursos.

Para crear un punto final sin servidor, puede utilizar la consola Amazon SageMaker AI APIs, la o la AWS CLI. Puede crear un punto final sin servidor mediante un proceso similar al de un [punto de conexión en tiempo real.](realtime-endpoints.md)

**Topics**
+ [Crear un modelo](serverless-endpoints-create-model.md)
+ [Creación de una configuración de punto de conexión](serverless-endpoints-create-config.md)
+ [Crear un punto de conexión](serverless-endpoints-create-endpoint.md)

# Crear un modelo
<a name="serverless-endpoints-create-model"></a>

Para crear el modelo, debe proporcionar la ubicación de los artefactos de su modelo y la imagen del contenedor. También puede usar una versión modelo de Model [SageMaker Registry](model-registry.md). Los ejemplos de las siguientes secciones muestran cómo crear un modelo mediante la [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API, Model Registry y la [consola Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

## Crear un modelo (mediante el registro de modelos)
<a name="serverless-endpoints-create-model-registry"></a>

El [registro de modelos](model-registry.md) es una función de la SageMaker IA que le ayuda a catalogar y gestionar las versiones de su modelo para utilizarlas en los procesos de aprendizaje automático. Para utilizar el registro de modelos con inferencia sin servidor, primero debe registrar una versión del modelo en un grupo de modelos del registro de modelos. Para obtener información sobre cómo registrar un modelo en el registro de modelos, siga los procedimientos que se indican en [Cree un grupo de modelos](model-registry-model-group.md) y [Registro de una versión del modelo](model-registry-version.md).

El siguiente ejemplo requiere que tengas el ARN de una versión de modelo registrada y usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) En el caso de la inferencia sin servidor, Model Registry solo es compatible actualmente con el AWS SDK para Python (Botoboto3). Por ejemplo, especifique los siguientes valores:
+ En `model_name`, introduzca un nombre para el modelo.
+ Para ello`sagemaker_role`, puede utilizar el rol predeterminado SageMaker creado por IA o un rol de IAM de SageMaker IA personalizado del paso 4 de la sección. [Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md)
+ En `ModelPackageName`, especifique el ARN de la versión de su modelo, que debería haberse registrado en un grupo de modelos del registro de modelos.

```
#Setup
import boto3
import sagemaker
region = boto3.Session().region_name
client = boto3.client("sagemaker", region_name=region)

#Role to give SageMaker AI permission to access AWS services.
sagemaker_role = sagemaker.get_execution_role()

#Specify a name for the model
model_name = "<name-for-model>"

#Specify a Model Registry model version
container_list = [
    {
        "ModelPackageName": <model-version-arn>
     }
 ]

#Create the model
response = client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    container_list
)
```

## Crear un modelo (mediante la API)
<a name="serverless-endpoints-create-model-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) Especifique los siguientes valores:
+ Pues `sagemaker_role,` puedes usar el rol predeterminado SageMaker creado por IA o un rol de IAM de SageMaker IA personalizado en el paso 4 de la sección. [Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md)
+ En `model_url`, especifique el URI de Amazon S3 para su modelo.
+ En `container`, recupere el contenedor que quiera usar por su ruta de Amazon ECR. En este ejemplo, se utiliza un contenedor proporcionado por la IA SageMaker . XGBoost Si no ha seleccionado un contenedor de SageMaker IA ni ha traído el suyo propio, consulte el paso 6 de la [Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md) sección para obtener más información.
+ En `model_name`, introduzca un nombre para el modelo.

```
#Setup
import boto3
import sagemaker
region = boto3.Session().region_name
client = boto3.client("sagemaker", region_name=region)

#Role to give SageMaker AI permission to access AWS services.
sagemaker_role = sagemaker.get_execution_role()

#Get model from S3
model_url = "s3://amzn-s3-demo-bucket/models/model.tar.gz"

#Get container image (prebuilt example)
from sagemaker import image_uris
container = image_uris.retrieve("xgboost", region, "0.90-1")

#Create model
model_name = "<name-for-model>"

response = client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    Containers = [{
        "Image": container,
        "Mode": "SingleModel",
        "ModelDataUrl": model_url,
    }]
)
```

## Crear un modelo (usando la consola)
<a name="serverless-endpoints-create-model-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione **Modelos**.

1. Seleccione **Crear modelo**.

1. En **Nombre del modelo**, introduce un nombre para el modelo que sea exclusivo de tu cuenta y Región de AWS.

1. Para el **rol de IAM**, seleccione un rol de IAM que ya haya creado (consulte[Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md)) o deje que SageMaker AI cree uno por usted.

1. En la **Definición de contenedor 1**, en **Opciones de entrada del contenedor**, seleccione **Proporcionar artefactos del modelo y ubicación de entrada**.

1. En **Proporcionar artefactos de modelo y opciones de imagen de inferencia**, seleccione **Usar un solo modelo**.

1. En **Ubicación de la imagen del código de inferencia**, introduzca una ruta de Amazon ECR para un contenedor. La imagen debe ser una imagen propia SageMaker proporcionada por la IA (por ejemplo TensorFlow, XGBoost) o una imagen que resida en un repositorio de Amazon ECR dentro de la misma cuenta en la que está creando el punto final. Si no tiene ningún contenedor, vuelva al paso 6 de la sección [Cumplimiento de los requisitos previos de](serverless-endpoints-prerequisites.md) para obtener más información.

1. Para **Ubicación de artefactos del modelo**, introduzca el URI de Amazon S3 en su modelo de machine learning. Por ejemplo, `s3://amzn-s3-demo-bucket/models/model.tar.gz`.

1. (Opcional) En **Etiquetas**, agregue pares clave-valor para crear metadatos para su modelo.

1. Seleccione **Crear modelo**.

# Creación de una configuración de punto de conexión
<a name="serverless-endpoints-create-config"></a>

Una vez creado el modelo, cree una configuración de punto de conexión. A continuación, puede implementar el modelo utilizando las especificaciones de la configuración de su punto de conexión. En la configuración, especifique si desea un punto de conexión en tiempo real o sin servidor. Para crear una configuración de punto final sin servidor, puede utilizar la [consola Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home), la [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API o la AWS CLI. Los enfoques de la API y la consola se describen en las siguientes secciones.

## Crear una configuración de punto de conexión (usando API)
<a name="serverless-endpoints-create-config-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Especifique los siguientes valores:
+ En `EndpointConfigName`, seleccione un nombre para la configuración del punto de conexión. El nombre debe ser único dentro de su cuenta en una Región.
+ (Opcional) Para`KmsKeyId`, utilice el ID de clave, el ARN de clave, el nombre del alias o el ARN del alias para la AWS KMS clave que desee utilizar. SageMaker La IA utiliza esta clave para cifrar la imagen de Amazon ECR.
+ En `ModelName`, utilice el nombre del modelo que quiera implementar. Debe ser el mismo modelo que haya utilizado en el paso [Crear un modelo](serverless-endpoints-create-model.md).
+ En `ServerlessConfig`:
  + Establece `MemorySizeInMB` en `2048`. En este ejemplo, hemos establecido el tamaño de la memoria en 2048 MB, pero puede elegir cualquiera de los siguientes valores para el tamaño de la memoria: 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. 
  + Establece `MaxConcurrency` en `20`. Para este ejemplo, estableceremos la simultaneidad máxima en 20. El número máximo de invocaciones simultáneas que puede establecer para un punto de conexión sin servidor es 200 y el valor mínimo que puede elegir es 1.
  + (Opcional) Para usar la simultaneidad aprovisionada, establezca `ProvisionedConcurrency` en 10. Para este ejemplo, estableceremos la simultaneidad aprovisionada en 10. El número `ProvisionedConcurrency` de un punto de conexión sin servidor debe ser inferior o igual al número `MaxConcurrency`. Puede dejarlo vacío si quiere utilizar un punto de conexión de inferencia sin servidor bajo demanda. Puede escalar de forma dinámica la simultaneidad de aprovisionamiento. Para obtener más información, consulte [Escalar automáticamente la simultaneidad aprovisionada para un punto de conexión sin servidor](serverless-endpoints-autoscale.md).

```
response = client.create_endpoint_config(
   EndpointConfigName="<your-endpoint-configuration>",
   KmsKeyId="arn:aws:kms:us-east-1:123456789012:key/143ef68f-76fd-45e3-abba-ed28fc8d3d5e",
   ProductionVariants=[
        {
            "ModelName": "<your-model-name>",
            "VariantName": "AllTraffic",
            "ServerlessConfig": {
                "MemorySizeInMB": 2048,
                "MaxConcurrency": 20,
                "ProvisionedConcurrency": 10,
            }
        } 
    ]
)
```

## Crear una configuración de punto de conexión (usando la consola)
<a name="serverless-endpoints-create-config-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione las **configuraciones de punto de conexión**.

1. Seleccione **Crear configuración de punto de conexión**.

1. En el **nombre de la configuración del punto de conexión**, introduzca un nombre único dentro de su cuenta en una región.

1. En **Tipo de punto de conexión**, seleccione **Sin rervidor**.  
![\[Captura de pantalla de la opción del tipo de punto de conexión en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/serverless-endpoints-endpoint-config.png)

1. En las **variantes de producción**, seleccione **Añadir modelo**.

1. En **Añadir modelo**, seleccione el modelo que quiera usar de la lista de modelos y, a continuación, seleccione **Guardar**.

1. Tras añadir el modelo, en **Acciones**, seleccione **Editar**.

1. En **Tamaño de memoria**, seleccione el tamaño de memoria que quiera en GB.  
![\[Captura de pantalla de la opción de tamaño de memoria en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/serverless-endpoints-endpoint-config-2.png)

1. En **Simultaneidad máxima**, introduzca el número máximo de invocaciones simultáneas que quiera para el punto de conexión. El valor máximo que puede introducir es 200 y el mínimo es 1.

1. (Opcional) Para usar la simultaneidad aprovisionada, introduzca el número deseado de invocaciones simultáneas en el campo de **configuración de simultaneidad aprovisionada**. El número de invocaciones simultáneas aprovisionadas debe ser menor o igual que el número máximo de invocaciones simultáneas.

1. Seleccione **Guardar**.

1. (Opcional) En **Etiquetas**, introduzca pares clave-valor si quiere crear metadatos para la configuración de punto de conexión.

1. Seleccione **Crear configuración de punto de conexión**.

# Crear un punto de conexión
<a name="serverless-endpoints-create-endpoint"></a>

Para crear un punto final sin servidor, puede utilizar la [consola Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home), la [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API o la AWS CLI. Los enfoques de la API y la consola se describen en las siguientes secciones. Una vez creado el punto de conexión, este puede tardar unos minutos en estar disponible.

## Crear un punto de conexión (mediante la API)
<a name="serverless-endpoints-create-endpoint-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) Especifique los siguientes valores:
+ En `EndpointName`, introduzca un nombre para el punto de conexión que sea exclusivo dentro de una región de su cuenta.
+ En `EndpointConfigName`, utilice el nombre de la configuración del punto de conexión que haya creado en la sección anterior.

```
response = client.create_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-endpoint-config>"
)
```

## Crear un punto de conexión (usando la consola)
<a name="serverless-endpoints-create-endpoint-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione **Puntos de conexión**.

1. Seleccione **Crear punto de conexión**.

1. En el **nombre del punto de conexión**, introduzca un nombre que sea único dentro de una región de su cuenta.

1. En **Asociar configuración del punto de enlace**, seleccione **Usar una configuración del punto de conexión existente**.

1. En la **configuración del punto de conexión**, seleccione el nombre de la configuración del punto de conexión que haya creado en la sección anterior y, a continuación, seleccione **Seleccionar configuración del punto de conexión**.

1. (Opcional) En **Etiquetas**, introduzca pares clave-valor si quiere crear metadatos para el punto de conexión.

1. Seleccione **Crear punto de conexión**.  
![\[Captura de pantalla de la página de creación y configuración del punto de conexión en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/serverless-endpoints-create.png)

# Invocación de un punto de conexión sin servidor
<a name="serverless-endpoints-invoke"></a>

Para realizar la inferencia utilizando un punto de conexión sin servidor, debe enviar una solicitud HTTP al punto de conexión. Puede usar la [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)API o la AWS CLI, que realizan una `POST` solicitud para invocar su punto final. El tamaño máximo de carga útil de solicitud y respuesta para las invocaciones sin servidor es de 4 MB. Para puntos de conexión sin servidor:
+ El modelo debería descargarse y el servidor debería responder correctamente a `/ping` en un plazo de 3 minutos.
+ El tiempo de espera para que el contenedor responda a las solicitudes de inferencia de `/invocations` es de 1 minuto.

## Invocar un punto de conexión
<a name="serverless-endpoints-invoke-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) Ten en cuenta que, a diferencia de las demás llamadas a la API de esta guía`InvokeEndpoint`, for debes usar SageMaker Runtime Runtime como cliente. Especifique los siguientes valores:
+ En `endpoint_name`, utilice el nombre del punto de conexión sin servidor en servicio que quiera invocar.
+ En `content_type`, especifique el tipo MIME de sus datos de entrada en el cuerpo de la solicitud (por ejemplo, `application/json`).
+ En `payload`, utilice la carga útil de la solicitud como inferencia. Su carga útil debe estar en bytes o un objeto similar a un archivo.

```
runtime = boto3.client("sagemaker-runtime")

endpoint_name = "<your-endpoint-name>"
content_type = "<request-mime-type>"
payload = <your-request-body>

response = runtime.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType=content_type,
    Body=payload
)
```

# Actualización de un punto de conexión sin servidor
<a name="serverless-endpoints-update"></a>

Antes de actualizar su punto de conexión, cree una nueva configuración de punto de conexión o utilice una configuración de punto de conexión existente. La configuración del punto de conexión es donde se especifican los cambios para la actualización. A continuación, puede actualizar su terminal con la [consola de SageMaker IA](https://console.aws.amazon.com/sagemaker/home), la [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API o el AWS CLI. El proceso de actualización de un punto de conexión sin servidor es el mismo que el proceso de actualización de un [punto de conexión en tiempo real](realtime-endpoints.md). Ten en cuenta que, al actualizar tu terminal, puedes tener problemas al realizar solicitudes al punto final, ya que la SageMaker IA debe volver a inicializar el contenedor y el modelo.

Es posible que quiera actualizar un punto de conexión sin servidor bajo demanda a un punto de conexión sin servidor con simultaneidad aprovisionada o ajustar el valor de simultaneidad aprovisionada para un punto de conexión sin servidor existente con simultaneidad aprovisionada. En ambos casos, tendrá que crear una nueva configuración de punto de conexión sin servidor con el valor deseado para la simultaneidad aprovisionada y aplicar `UpdateEndpoint` al punto de conexión sin servidor existente. Para obtener más información sobre la creación de una nueva configuración del punto de conexión sin servidor con la simultaneidad aprovisionada, consulte [Creación de una configuración de punto de conexión](serverless-endpoints-create-config.md).

Si quiere eliminar la simultaneidad aprovisionada de un punto de conexión sin servidor, tendrá que crear una nueva configuración de punto de conexión sin especificar ningún valor para la simultaneidad aprovisionada y, a continuación, aplicar `UpdateEndpoint` al punto de conexión.

**nota**  
Actualmente, no se admite la actualización de un punto de conexión de inferencia en tiempo real a un punto de conexión sin servidor bajo demanda o a un punto de conexión sin servidor con la simultaneidad aprovisionada.

## Actualizar el punto de conexión
<a name="serverless-endpoints-update-endpoint"></a>

Tras crear una nueva configuración de punto final sin servidor, puede utilizar la consola de IA [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)o la [consola de SageMaker IA](https://console.aws.amazon.com/sagemaker/) para actualizar un punto final sin servidor existente. En las siguientes secciones se describen ejemplos de cómo actualizar su terminal mediante la consola de SageMaker IA AWS SDK para Python (Boto3) y la consola de IA.

### Actualización del punto de conexión (mediante Boto3)
<a name="serverless-endpoints-update-endpoint-api"></a>

En el siguiente ejemplo se utiliza [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) para llamar al método [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html). Especifique al menos los siguientes parámetros al llamar al método:
+ En `EndpointName`, utilice el nombre del punto de conexión que está actualizando.
+ En `EndpointConfigName`, utilice el nombre de la configuración del punto de conexión que quiera utilizar para la actualización.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<new-endpoint-config>",
)
```

### Actualizar el punto de conexión (mediante la consola)
<a name="serverless-endpoints-update-endpoint-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione **Puntos de conexión**.

1. En la lista de puntos de conexión, seleccione el punto de conexión que quiera actualizar.

1. Seleccione **Cambiar** en la sección **Configuración del punto de conexión**.

1. En **Cambiar la configuración del punto de conexión**, seleccione **Usar una configuración de punto de conexión existente**.

1. En la lista de configuraciones de puntos de conexión, seleccione aquella que quiera usar para la actualización.

1. Seleccione **Seleccionar configuración del punto de conexión**.

1. Seleccione **Actualizar punto de conexión**.

# Describa un punto de conexión sin servidor
<a name="serverless-endpoints-describe"></a>

Es posible que quiera recuperar información sobre su punto de conexión, incluidos detalles como el ARN del punto de conexión, el estado actual, la configuración de la implementación y los motivos del error. Puede encontrar información sobre su punto final mediante la [consola de SageMaker IA](https://console.aws.amazon.com/sagemaker/home), la [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API o el AWS CLI.

## Describir un punto de conexión (mediante la API)
<a name="serverless-endpoints-describe-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#id309) a la API. [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) En `EndpointName`, utilice el nombre del punto de conexión que quiera comprobar.

```
response = client.describe_endpoint(
    EndpointName="<your-endpoint-name>",
)
```

## Describir un punto de conexión (mediante la consola)
<a name="serverless-endpoints-describe-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione **Puntos de conexión**.

1. En la lista de puntos de conexión, seleccione el punto de conexión que quiera comprobar.

La página del punto de conexión recoge la información sobre el punto de conexión.

# Eliminación de un punto de conexión sin servidor
<a name="serverless-endpoints-delete"></a>

Puede eliminar su punto final sin servidor mediante la [consola de SageMaker IA](https://console.aws.amazon.com/sagemaker/home), la [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html)API o el. AWS CLI En los siguientes ejemplos, se muestra cómo eliminar el punto final a través de la API y la consola de SageMaker IA.

## Eliminar un punto de conexión (usando la API)
<a name="serverless-endpoints-delete-api"></a>

El siguiente ejemplo usa el [AWS SDK para Python (Boto3) para llamar](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) a la API. [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) En `EndpointName`, utilice el nombre del punto de conexión sin servidor que quiera eliminar.

```
response = client.delete_endpoint(
    EndpointName="<your-endpoint-name>",
)
```

## Eliminar un punto de conexión (usando la consola)
<a name="serverless-endpoints-delete-console"></a>

1. Inicia sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. En la pestaña de navegación, seleccione **Inferencia**.

1. A continuación, seleccione **Puntos de conexión**.

1. En la lista de puntos de conexión, seleccione aquel que quiera eliminar.

1. Seleccione la lista desplegable **Acciones** y, a continuación, seleccione **Eliminar**.

1. Cuando se le pregunte, seleccione **Eliminar**.

Su punto de conexión debería comenzar ahora el proceso de eliminación.

# Alarmas y registros para realizar un seguimiento de las métricas de los puntos de conexión sin servidor
<a name="serverless-endpoints-monitoring"></a>

Para supervisar su punto de conexión sin servidor, puede utilizar las alarmas de Amazon CloudWatch. CloudWatch es un servicio que recopila métricas en tiempo real de sus aplicaciones AWS y recursos. Una alarma vigila las métricas a medida que se recopilan y permite especificar previamente un umbral y las medidas que deberían tomarse en caso de que se supere. Por ejemplo, la alarma de CloudWatch puede enviarle una notificación en caso de que su punto de conexión supere un umbral de error. Al configurar las alarmas de CloudWatch, obtendrá visibilidad del rendimiento y la funcionalidad de su punto de conexión. Para obtener más información acerca de la creación de alarmas de CloudWatch, consulte [Uso de las alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del usuario de Amazon CloudWatch*.

## Monitorización con CloudWatch
<a name="serverless-endpoints-monitoring-metrics"></a>

Las siguientes métricas son una lista exhaustiva de métricas para puntos de conexión sin servidor. Las métricas que no figuran a continuación no se publican para los puntos de conexión sin servidor. Para obtener información sobre las siguientes métricas, consulte [Monitor Amazon SageMaker AI with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).

### Métricas de puntos de conexión comunes
<a name="serverless-endpoints-monitoring-metrics-common"></a>

Estas métricas de CloudWatch son las mismas que las publicadas para los puntos de conexión en tiempo real.

La métrica `OverheadLatency` registra toda la latencia adicional que SageMaker AI ha añadido, incluida la hora de arranque en frío para lanzar nuevos recursos de computación para el punto de conexión sin servidor. En comparación con los puntos de conexión sin servidor bajo demanda, la `OverheadLatency` de los puntos de conexión sin servidor con la simultaneidad aprovisionada suele ser significativamente menor.

Los puntos de conexión sin servidor también pueden utilizar las métricas `Invocations4XXErrors`, `Invocations5XXErrors`, `Invocations`, `ModelLatency`, `ModelSetupTime` y `MemoryUtilization`. Para obtener más información sobre estas métricas, consulte [SageMaker Métricas de invocación de puntos finales de IA](monitoring-cloudwatch.md#cloudwatch-metrics-endpoint-invocation).

### Métricas de punto de conexión sin servidor
<a name="serverless-endpoints-monitoring-metrics-serverless"></a>

Estas métricas de CloudWatch se publican tanto para los puntos de conexión sin servidor bajo demanda como para los puntos de conexión sin servidor con simultaneidad aprovisionada.


| Nombre de métrica | Descripción | Unidad/estadísticas | 
| --- | --- | --- | 
| ServerlessConcurrentExecutionsUtilization | El número de ejecuciones simultáneas entre la simultaneidad máxima. | Unidades: ningunaEstadísticas válidas: media, máxima, mínima | 

### Punto de conexión sin servidor con métricas de simultaneidad aprovisionada
<a name="serverless-endpoints-monitoring-metrics-serverless-pc"></a>

Estas métricas de CloudWatch se publican para puntos de conexión sin servidor con simultaneidad aprovisionada.


| Nombre de métrica | Descripción | Unidad/estadísticas | 
| --- | --- | --- | 
| ServerlessProvisionedConcurrencyExecutions | El número de ejecuciones simultáneas que gestiona el punto de conexión. | Unidades: recuentoEstadísticas válidas: media, máxima, mínima | 
| ServerlessProvisionedConcurrencyUtilization | El número de ejecuciones simultáneas por la simultaneidad aprovisionada asignada. | Unidades: ningunaEstadísticas válidas: media, máxima, mínima | 
| ServerlessProvisionedConcurrencyInvocations | El número de solicitudes InvokeEndpoint gestionadas por la simultaneidad aprovisionada. | Unidades: recuentoEstadísticas válidas: media, máxima, mínima | 
| ServerlessProvisionedConcurrencySpilloverInvocations | El número de solicitudes de InvokeEndpoint no administradas por la simultaneidad aprovisionada, sino administradas por la inferencia sin servidor bajo demanda. | Unidades: recuentoEstadísticas válidas: media, máxima, mínima | 

## Registros
<a name="serverless-endpoints-monitoring-logs"></a>

Si desea monitorizar los registros de su punto de conexión para realizar una depuración o un análisis del progreso, puede utilizar registros de Amazon CloudWatch. El grupo de registros proporcionado por SageMaker AI que puede usar para los puntos de conexión sin servidor es `/aws/sagemaker/Endpoints/[EndpointName]`. Para obtener más información sobre el uso de registros de CloudWatch en SageMaker AI, consulte [CloudWatch Registros para Amazon SageMaker AI](logging-cloudwatch.md). Para obtener más información sobre los registros de CloudWatch, consulte [¿Qué son los registros de CloudWatch de Amazon?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) en la *Guía del usuario de registros de CloudWatch de Amazon*.

# Escalar automáticamente la simultaneidad aprovisionada para un punto de conexión sin servidor
<a name="serverless-endpoints-autoscale"></a>

 Amazon SageMaker AI escala automáticamente los puntos de conexión sin servidor bajo demanda para escalarlos o reducirlos horizontalmente. Para los puntos de conexión sin servidor con simultaneidad aprovisionada, puede utilizar Application Auto Scaling para aumentar o reducir la simultaneidad aprovisionada en función de su perfil de tráfico, optimizando así los costes. 

 He aquí los requisitos previos para escalar automáticamente la simultaneidad aprovisionada en los puntos de conexión sin servidor: 
+ [Registrar un modelo](#serverless-endpoints-autoscale-register)
+ [Definir una política de escalado](#serverless-endpoints-autoscale-define)
+ [Aplicar una política de escalado](#serverless-endpoints-autoscale-apply)

 Para poder utilizar el escalado automático, debe haber implementado ya un modelo en un punto de conexión sin servidor con la simultaneidad aprovisionada. Los modelos desplegados se conocen como [variantes de producción](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). Consulte [Creación de una configuración de punto de conexión](serverless-endpoints-create-config.md) y [Crear un punto de conexión](serverless-endpoints-create-endpoint.md) para obtener más información sobre la implementación de un modelo en un punto de conexión sin servidor con la simultaneidad aprovisionada. Para especificar las métricas y los valores de destino para una política de escalado, deberá configurar una política de escalado. Para obtener más información sobre cómo definir una política de escalado, consulte [Definir una política de escalado](#serverless-endpoints-autoscale-define). Una vez registrado su modelo y definido una política de escalado, aplique la política de escalado al modelo registrado. Para obtener información sobre cómo aplicar la política de escalado, consulte [Aplicar una política de escalado](#serverless-endpoints-autoscale-apply). 

 Para obtener más información sobre otros requisitos previos y componentes que se utilizan con el escalado automático, consulte la sección [Requisitos previos de escalado automático](endpoint-auto-scaling-prerequisites.md) en [Automatic scaling of Amazon SageMaker AI models](endpoint-auto-scaling.md). 

## Registrar un modelo
<a name="serverless-endpoints-autoscale-register"></a>

 Para añadir el escalado automático a un punto de conexión sin servidor con simultaneidad aprovisionada, primero debe registrar su modelo (variante de producción) con AWS CLI o la API de Application Auto Scaling. 

### Registrar un modelo (AWS CLI)
<a name="serverless-endpoints-autoscale-register-cli"></a>

 Para registrar su punto de conexión, utilice el comando `register-scalable-target` AWS CLI con los siguientes parámetros: 
+  `--service-namespace`: establezca este valor en `sagemaker`. 
+  `--resource-id`: el identificador de recursos del modelo (específicamente, la variante de producción). Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante de producción. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--min-capacity`: el número mínimo de simultaneidad aprovisionada para el modelo. Establezca `--min-capacity` en al menos 1. Debe ser igual o inferior al valor especificado para `--max-capacity`. 
+  `--max-capacity`: el número máximo de simultaneidad aprovisionada que debe habilitarse mediante Application Auto Scaling. Establezca `--max-capacity` en un mínimo de 1. Debe ser mayor o igual que el valor especificado para `--min-capacity`. 

 El siguiente ejemplo muestra cómo registrar un modelo denominado `MyVariant` que se escala dinámicamente para tener un valor de simultaneidad aprovisionada de 1 a 10: 

```
aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --min-capacity 1 \
    --max-capacity 10
```

### Registrar un modelo (API de Application Auto Scaling)
<a name="serverless-endpoints-autoscale-register-api"></a>

 Para registrar su modelo, utilice la acción de la API de Application Auto Scaling `RegisterScalableTarget` con los siguientes parámetros: 
+  `ServiceNamespace`: establezca este valor en `sagemaker`. 
+  `ResourceId`: el identificador de recursos del modelo (específicamente, la variante de producción). Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante de producción. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `MinCapacity`: el número mínimo de simultaneidad aprovisionada para el modelo. Establezca `MinCapacity` en al menos 1. Debe ser igual o inferior al valor especificado para `MaxCapacity`. 
+  `MaxCapacity`: el número máximo de simultaneidad aprovisionada que debe habilitarse mediante Application Auto Scaling. Establezca `MaxCapacity` en un mínimo de 1. Debe ser mayor o igual que el valor especificado para `MinCapacity`. 

 El siguiente ejemplo muestra cómo registrar un modelo denominado `MyVariant` que se escala dinámicamente para tener un valor de simultaneidad aprovisionada de 1 a 10: 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndPoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "MinCapacity": 1,
    "MaxCapacity": 10
}
```

## Definir una política de escalado
<a name="serverless-endpoints-autoscale-define"></a>

 Para especificar las métricas y los valores de destino para una política de escalado, puede configurar una política de escalado de seguimiento de destino. Defina la política de escalado como un bloque JSON en un archivo de texto. Puede utilizar ese archivo de texto al invocar el AWS CLI o la API de Application Auto Scaling. Para definir rápidamente una política de escalado de seguimiento de destino para un punto de conexión sin servidor, utilice la métrica predefinida `SageMakerVariantProvisionedConcurrencyUtilization`. 

```
{
    "TargetValue": 0.5,
    "PredefinedMetricSpecification": 
    {
        "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
    },
    "ScaleOutCooldown": 1,
    "ScaleInCooldown": 1
}
```

## Aplicar una política de escalado
<a name="serverless-endpoints-autoscale-apply"></a>

 Una vez registrado su modelo, podrá aplicar una política de escalado a su punto de conexión sin servidor con la simultaneidad aprovisionada. Consulte [Aplicar una política de escalado de seguimiento de destino](#serverless-endpoints-autoscale-apply-target) para aplicar una política de escalado de seguimiento de destino que haya definido. Si el flujo de tráfico hacia su punto de conexión sin servidor sigue una rutina predecible, en lugar de aplicar una política de escalado basada en el seguimiento de los objetivos, puede que quiera programar las acciones de escalado en momentos específicos. Para obtener más información sobre las acciones de escalado de programación, consulte [Escalado programado](#serverless-endpoints-autoscale-apply-scheduled). 

### Aplicar una política de escalado de seguimiento de destino
<a name="serverless-endpoints-autoscale-apply-target"></a>

 Puede utilizar la AWS CLI o la Consola de administración de AWS API de Application Auto Scaling para aplicar una política de escalado de seguimiento de destino al punto de conexión sin servidor con la simultaneidad de aplicaciones. 

#### Aplicar una política de escalado de seguimiento de destino (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-target-cli"></a>

 Para aplicar una política de escalado a su modelo, use el comando `put-scaling-policy` de la AWS CLI con los siguientes parámetros: 
+  `--policy-name`: el nombre de la política de escalado. 
+  `--policy-type`: establezca este valor en `TargetTrackingScaling`. 
+  `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace`: establezca este valor en `sagemaker`. 
+  `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--target-tracking-scaling-policy-configuration`: configuración de la política de escalado de seguimiento de destino que se usará para el modelo. 

 El siguiente ejemplo muestra cómo aplicar una política de escalado de seguimiento de destino nombrada `MyScalingPolicy` a un modelo llamado `MyVariant`. La configuración de la política se guarda en un archivo denominado `scaling-policy.json`. 

```
aws application-autoscaling put-scaling-policy \
    --policy-name MyScalingPolicy \
    --policy-type TargetTrackingScaling \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --target-tracking-scaling-policy-configuration file://[file-localtion]/scaling-policy.json
```

#### Aplicar una política de escalado de seguimiento de destino (API de Application Auto Scaling)
<a name="serverless-endpoints-autoscale-apply-target-api"></a>

 Para aplicar una política de escalado a su modelo, use la acción de la API de Application Auto Scaling `PutScalingPolicy` con los siguientes parámetros. 
+  `PolicyName`: el nombre de la política de escalado. 
+  `PolicyType`: establezca este valor en `TargetTrackingScaling`. 
+  `ResourceId`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace`: establezca este valor en `sagemaker`. 
+  `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `TargetTrackingScalingPolicyConfiguration`: configuración de la política de escalado de seguimiento de destino que se usará para el modelo. 

 El siguiente ejemplo muestra cómo aplicar una política de escalado de seguimiento de destino nombrada `MyScalingPolicy` a un modelo llamado `MyVariant`. La configuración de la política se guarda en un archivo denominado `scaling-policy.json`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": 
    {
        "TargetValue": 0.5,
        "PredefinedMetricSpecification": 
        {
            "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
        }
    }
}
```

#### Aplicar una política de escalado de seguimiento de destino (Consola de administración de AWS)
<a name="serverless-endpoints-autoscale-apply-target-console"></a>

 Para aplicar una política de escalado al destino con el Consola de administración de AWS: 

1.  Inicie sesión en la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

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

1.  Seleccione **punto de conexión** para ver una lista de todos sus puntos de conexión. 

1.  Seleccione el punto de conexión al que quiera aplicar la política de escalado. Aparecerá una página con la configuración del punto de conexión, con los modelos (variante de producción) listados en la **sección de configuración del tiempo de ejecución del punto de conexión**. 

1.  Seleccione la variante de producción a la que quiera aplicar la política de escalado y elija **Configurar el autoescalado**. Aparecerá la página **Configurar escalado automático de variantes**.   
![\[Captura de pantalla del cuadro de diálogo para configurar el escalado automático de la variante en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/serverless-endpoints-variant-autoscaling.png)

1.  Introduzca los valores mínimo y máximo de simultaneidad aprovisionada en los campos **Simultaneidad mínima aprovisionada** y **Simultaneidad máxima aprovisionada**, respectivamente, en la sección **Escalado automático de variantes**. La simultaneidad mínima aprovisionada debe ser menor o igual que la simultaneidad máxima aprovisionada. 

1.  Introduzca el valor objetivo en el campo **Valor objetivo** de la métrica de destino, `SageMakerVariantProvisionedConcurrencyUtilization`. 

1.  (Opcional) Introduzca los valores de recuperación de escalado descendente y recuperación de escalado ascendente (en segundos) en los campos **Recuperación de escalado descendente** y **Recuperación de escalado ascendente** respectivamente. 

1.  (Opcional) Seleccione **Desactivar escalado descendente** si no desea que el escalado automático elimine la instancia cuando disminuye el tráfico. 

1.  Seleccione **Guardar**. 

### Escalado programado
<a name="serverless-endpoints-autoscale-apply-scheduled"></a>

 Si el tráfico hacia su punto de conexión sin servidor con la simultaneidad aprovisionada sigue un patrón rutinario, puede programar acciones de escalado en momentos específicos, para escalar de forma descendente o ascendente la simultaneidad aprovisionada. Puede utilizar AWS CLI o Application Auto Scaling para programar acciones de escalado. 

#### Escalado programado (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-scheduled-cli"></a>

 Para aplicar una política de escalado a su modelo, use el comando `put-scheduled-action` de la AWS CLI con los siguientes parámetros: 
+  `--schedule-action-name`: el nombre de la acción de escalado. 
+  `--schedule`: una expresión cron que especifica las horas de inicio y finalización de la acción de escalado con una programación periódica. 
+  `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace`: establezca este valor en `sagemaker`. 
+  `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--scalable-target-action`: el destino de la acción de escalado. 

 El siguiente ejemplo muestra cómo agregar una acción de escalado denominada `MyScalingAction` a un modelo nombrado `MyVariant` en una programación recurrente. En el momento de la programación especificada (todos los días a las 12:15 PM UTC), si la simultaneidad aprovisionada actual es inferior al valor especificado para `MinCapacity`. Application Auto Scaling escala horizontalmente la simultaneidad aprovisionada al valor especificado por `MinCapacity`. 

```
aws application-autoscaling put-scheduled-action \
    --scheduled-action-name 'MyScalingAction' \
    --schedule 'cron(15 12 * * ? *)' \
    --service-namespace sagemaker \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --scalable-target-action 'MinCapacity=10'
```

#### Escalado programado (API de Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-apply-scheduled-api"></a>

 Para aplicar una política de escalado a su modelo, utilice la acción de la API de Application Auto Scaling `PutScheduledAction` con los siguientes parámetros: 
+  `ScheduleActionName`: el nombre de la acción de escalado. 
+  `Schedule`: una expresión cron que especifica las horas de inicio y finalización de la acción de escalado con una programación periódica. 
+  `ResourceId`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace`: establezca este valor en `sagemaker`. 
+  `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `ScalableTargetAction`: el destino de la acción de escalado. 

 El siguiente ejemplo muestra cómo agregar una acción de escalado denominada `MyScalingAction` a un modelo nombrado `MyVariant` en una programación recurrente. En el momento de la programación especificada (todos los días a las 12:15 PM UTC), si la simultaneidad aprovisionada actual es inferior al valor especificado para `MinCapacity`. Application Auto Scaling escala horizontalmente la simultaneidad aprovisionada al valor especificado por `MinCapacity`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScheduledAction
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ScheduledActionName": "MyScalingAction",
    "Schedule": "cron(15 12 * * ? *)",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "ScalableTargetAction": "MinCapacity=10"
        }
    }
}
```

# Limpieza
<a name="serverless-endpoints-autoscale-cleanup"></a>

 Una vez que haya terminado de usar el escalado automático para el punto de conexión sin servidor con la simultaneidad aprovisionada, debe limpiar los recursos que ha creado. Esto implica eliminar la política de escalado y anular el registro del modelo en Application Auto Scaling. La limpieza garantiza que no incurra en costos innecesarios por los recursos que ya no utilice. 

## Eliminación de una política de escalado
<a name="serverless-endpoints-autoscale-delete"></a>

 Puede eliminar una política de escalado utilizando la Consola de administración de AWS, la AWS CLI o la API de Application Auto Scaling. Para obtener más información sobre cómo eliminar una política de escalado con la Consola de administración de AWS, consulte [Eliminación de una política de escalado](endpoint-auto-scaling-delete.md) en [Automatic scaling of Amazon SageMaker AI models](endpoint-auto-scaling.md). 

### Eliminación de una política de escalado (AWS CLI)
<a name="serverless-endpoints-autoscale-delete-cli"></a>

 Para aplicar una política de escalado a su modelo, use el comando `delete-scaling-policy` de la AWS CLI con los siguientes parámetros: 
+  `--policy-name`: el nombre de la política de escalado. 
+  `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace`: establezca este valor en `sagemaker`. 
+  `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 

 En el siguiente ejemplo se elimina una política de escalado denominada `MyScalingPolicy` de una variante llamada `MyVariant`. 

```
aws application-autoscaling delete-scaling-policy \
    --policy-name MyScalingPolicy \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### Eliminación de una política de escalado (API de Application Auto Scaling)
<a name="serverless-endpoints-autoscale-delete-api"></a>

 Para eliminar una política de escalado de su modelo, use la acción de la API de Application Auto Scaling `DeleteScalingPolicy` con los siguientes parámetros: 
+  `PolicyName`: el nombre de la política de escalado. 
+  `ResourceId`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace`: establezca este valor en `sagemaker`. 
+  `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 

 El siguiente ejemplo usa la API de Application Auto Scaling para eliminar una política de escalado denominada `MyScalingPolicy` de un modelo denominado`MyVariant`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

## Anular el registro de un modelo
<a name="serverless-endpoints-autoscale-deregister"></a>

 Puede anular del registro de un modelo con la Consola de administración de AWS, AWS CLI o la API de Application Auto Scaling. 

### Anular el registro de un modelo (AWS CLI)
<a name="serverless-endpoints-deregister-model-cli"></a>

 Para anular el registro de un modelo de Application Auto Scaling, use el comando `deregister-scalable-target` de la AWS CLI con los siguientes parámetros: 
+  `--resource-id`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace`: establezca este valor en `sagemaker`. 
+  `--scalable-dimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 

 El siguiente ejemplo anula del registro de un modelo denominado `MyVariant` de Application Auto Scaling. 

```
aws application-autoscaling deregister-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### Anular el registro de un modelo (API de Application Auto Scaling)
<a name="serverless-endpoints-autoscale-deregister-api"></a>

 Para anular el registro de un modelo de Application Auto Scaling, use la acción de la API Application Auto Scaling `DeregisterScalableTarget` con los siguientes parámetros: 
+  `ResourceId`: el identificador de recurso para la variante. Para este parámetro, el tipo de recurso es `endpoint` y el identificador único es el nombre de la variante. Por ejemplo, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace`: establezca este valor en `sagemaker`. 
+  `ScalableDimension`: establezca este valor en `sagemaker:variant:DesiredProvisionedConcurrency`. 

 El siguiente ejemplo usa la API de Application Auto Scaling para anular el registro de un modelo denominado `MyVariant` de Application Auto Scaling. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeregisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

### Anular el registro de un modelo (Consola de administración de AWS)
<a name="serverless-endpoints-autoscale-deregister-console"></a>

 Para anular el registro de un modelo (variante de producción) con el Consola de administración de AWS: 

1.  Abra la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

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

1.  Elija **puntos de conexión** para ver una lista de sus puntos de conexión. 

1.  Elija el punto de conexión sin servidor que aloja la variante de producción. Aparecerá una página con la configuración del punto de conexión, con las variantes de producción listadas en la sección **Configuración de tiempo de ejecución de punto de conexión**. 

1.  Seleccione la variante de producción que quiera anular del registro y elija **Configurar autoescalado**. Aparecerá la página **Configurar escalado automático de variantes**. 

1.  Seleccione **Anular el registro de escalado automático**. 

# Solución de problemas
<a name="serverless-endpoints-troubleshooting"></a>

**importante**  
Las políticas de IAM personalizadas que permiten a Amazon SageMaker Studio o Amazon SageMaker Studio Classic crear recursos de Amazon SageMaker también deben conceder permisos para añadir etiquetas a dichos recursos. El permiso para añadir etiquetas a los recursos es necesario porque Studio y Studio Classic etiquetan automáticamente todos los recursos que crean. Si una política de IAM permite a Studio y Studio Classic crear recursos, pero no permite el etiquetado, se pueden producir errores AccessDenied al intentar crear recursos. Para obtener más información, consulte [Proporcione permisos para etiquetar los recursos de SageMaker IA](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
Las [AWS políticas gestionadas para Amazon SageMaker AI](security-iam-awsmanpol.md) que conceden permisos para crear recursos de SageMaker ya incluyen permisos para añadir etiquetas al crear esos recursos.

Si tiene problemas con la inferencia sin servidor, consulte los siguientes consejos de solución de problemas.

## Problemas con los contenedores
<a name="serverless-endpoints-troubleshooting-containers"></a>

Si el contenedor que usa para un punto de conexión sin servidor es el mismo que usaste en un punto de conexión basado en instancias, es posible que su contenedor no tenga permisos para escribir archivos. Esto podría deberse por alguna de las siguientes razones:
+ Tu punto de conexión sin servidor no se puede crear ni actualizar debido a un error en la comprobación del estado del ping.
+ Los registros de Amazon CloudWatch del punto de conexión muestran que el contenedor no puede escribir en algún archivo o directorio debido a un error de permisos.

Para solucionar este problema, puede intentar añadir permisos de lectura, escritura y ejecución para `other` en el archivo o directorio y, a continuación, reconstruir el contenedor. Puede realizar los siguientes pasos para completar este proceso:

1. En el Dockerfile que usaste para crear el contenedor, añada el siguiente comando: `RUN chmod o+rwX <file or directory name>`

1. Reconstruir el contenedor.

1. Cargue la nueva imagen del contenedor en Amazon ECR.

1. Intente crear o actualizar de nuevo el punto de conexión sin servidor.

# Inferencia asíncrona
<a name="async-inference"></a>

Amazon SageMaker Asynchronous Inference es una capacidad de la SageMaker IA que pone en cola las solicitudes entrantes y las procesa de forma asíncrona. Esta opción es ideal para solicitudes con cargas de gran tamaño (hasta 1 GB), tiempos de procesamiento prolongados (hasta una hora) y requisitos de latencia cercanos al tiempo real. La inferencia asíncrona le permite ahorrar costos al escalar automáticamente el número de instancias a cero cuando no hay solicitudes que procesar, de modo que solo paga cuando el punto de conexión procesa las solicitudes.

## Cómo funciona
<a name="async-inference-how-it-works"></a>

Crear un punto de conexión de inferencia asíncrono es similar a crear puntos de conexión de inferencia en tiempo real. Puede usar sus modelos de SageMaker IA existentes y solo necesita especificar el `AsyncInferenceConfig` objeto al crear la configuración de su punto final con el campo de la API. `EndpointConfig` `CreateEndpointConfig` En el siguiente diagrama, se muestran la arquitectura y el flujo de trabajo de la inferencias asíncronas.

![\[Diagrama de arquitectura de la inferencia asíncrona, donde se observa que un usuario invoca un punto de conexión.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/async-architecture.png)


Para invocar el punto de conexión, debe colocar la carga útil de la solicitud en Amazon S3. También debe proporcionar un puntero a esta carga útil como parte de la solicitud de `InvokeEndpointAsync`. Tras la invocación, la SageMaker IA pone en cola la solicitud para su procesamiento y devuelve un identificador y una ubicación de salida como respuesta. Tras el procesamiento, la SageMaker IA coloca el resultado en la ubicación de Amazon S3. Si lo desea, puede optar por recibir notificaciones de éxito o error con Amazon SNS. Para obtener más información acerca de cómo configurar las notificaciones asíncronas, consulte [Revisar los resultados de predicciones](async-inference-check-predictions.md).

**nota**  
La presencia de un objeto de configuración de inferencia asíncrona (`AsyncInferenceConfig`) en la configuración del punto de conexión implica que este solo puede recibir invocaciones asíncronas.

## ¿Cómo puedo comenzar?
<a name="async-inference-how-to-get-started"></a>

Si es la primera vez que utiliza Amazon SageMaker Asynchronous Inference, le recomendamos que haga lo siguiente:
+ Lea [Operaciones de punto de conexión asíncronas](async-inference-create-invoke-update-delete.md) para obtener información sobre cómo crear, invocar, actualizar y eliminar un punto de conexión asíncrono.
+ [Consulte el cuaderno de ejemplo de inferencia [asíncrona](https://github.com/aws/amazon-sagemaker-examples/blob/main/async-inference/Async-Inference-Walkthrough.ipynb) que se encuentra en el repositorio aws/. amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub 

Tenga en cuenta que, si el punto de conexión utiliza alguna de las características incluidas en esta página [Exclusiones](deployment-guardrails-exclusions.md), no podrá utilizar la inferencia asíncrona.

# Operaciones de punto de conexión asíncronas
<a name="async-inference-create-invoke-update-delete"></a>

En esta guía se muestran los requisitos previos que debe cumplir para crear un punto de conexión asíncrono; también se explica cómo crear y eliminar puntos de conexión asíncronos y cómo invocar a estos. [Puede crear, actualizar, eliminar e invocar puntos de enlace asíncronos con el SDK de AWS SDKs Amazon Python y con él. SageMaker ](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-asynchronous-inference)

**Topics**
+ [Cumplimiento de los requisitos previos de](async-inference-create-endpoint-prerequisites.md)
+ [Cómo crear un punto de conexión de inferencia asíncrono](async-inference-create-endpoint.md)
+ [Invocar un punto de conexión asíncrono](async-inference-invoke-endpoint.md)
+ [Actualizar un punto de conexión asíncrono](async-inference-update-endpoint.md)
+ [Eliminar un punto de conexión asíncrono](async-inference-delete-endpoint.md)

# Cumplimiento de los requisitos previos de
<a name="async-inference-create-endpoint-prerequisites"></a>

En el siguiente tema se describen los requisitos previos que debe completar antes de crear un punto de conexión asíncrono. Estos requisitos previos incluyen almacenar adecuadamente los artefactos del modelo, configurar un AWS IAM con los permisos correctos y seleccionar una imagen de contenedor.

**Cumplimiento de los requisitos previos**

1. **Cree un rol de IAM para Amazon SageMaker AI.**

   La inferencia asíncrona necesita acceso al URI de su bucket de Amazon S3. Para facilitarlo, cree un rol de IAM que pueda ejecutar SageMaker IA y que tenga permiso para acceder a Amazon S3 y Amazon SNS. Con esta función, la SageMaker IA puede ejecutarse en su cuenta y acceder a su bucket de Amazon S3 y a los temas de Amazon SNS.

   Puede crear un rol de IAM mediante la consola de IAM, AWS SDK para Python (Boto3) o. AWS CLI A continuación, se muestra un ejemplo de cómo crear un rol de IAM y cómo asociar las políticas necesarias a la consola de IAM.

   1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

   1. En el panel de navegación de la consola de IAM, seleccione **Roles** y, a continuación, seleccione **Crear rol**.

   1. En **Seleccionar el tipo de entidad de confianza**, elija ** servicio de AWS **.

   1. Elija el servicio que desea permitir que asuma este rol. En este caso, elige **SageMaker AI**. A continuación, elija **Siguiente: Permisos)**.
      + Esto crea automáticamente una política de IAM que concede acceso a servicios relacionados, como Amazon S3, Amazon ECR y CloudWatch Logs.

   1. Elija **Siguiente: Etiquetas**.

   1. De manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información acerca del uso de etiquetas en IAM, consulte [Etiquetado de los recursos de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Elija **Siguiente: revisar**.

   1. Escriba un **Nombre de rol**. 

   1. Si es posible, escriba un nombre de rol o un sufijo de nombre de rol. Los nombres de los roles deben ser únicos en su cuenta. AWS No se distingue por caso. Por ejemplo, no puede crear funciones denominado tanto `PRODROLE` como `prodrole`. Como otros AWS recursos pueden hacer referencia al rol, no puede editar el nombre del rol una vez creado.

   1. (Opcional) En **Descripción de rol**, escriba una descripción para el nuevo rol.

   1. Revise el rol y, a continuación, seleccione **Crear rol**.

      Tenga en cuenta el SageMaker ARN del rol de IA. Para encontrar el ARN de rol mediante la consola, haga lo siguiente:

      1. Ve a la consola de IAM: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Seleccione **Roles**.

      1. Busque el rol que acaba de crear escribiendo el nombre del rol en el campo de búsqueda.

      1. Seleccione el rol.

      1. El ARN del rol se encuentra en la parte superior de la página de **Resumen**.

1. **Añada los permisos de Amazon SageMaker AI, Amazon S3 y Amazon SNS a su función de IAM.**

   Una vez creada la función, conceda permisos a SageMaker AI, Amazon S3 y, opcionalmente, Amazon SNS para su función de IAM.

   En la consola de IAM, seleccione **Roles**. Busque el rol que acaba de crear escribiendo el nombre del rol en el campo **Buscar**.

   1. Elija su rol.

   1. A continuación, seleccione **Asociar políticas**.

   1. Amazon SageMaker Asynchronous Inference necesita permiso para realizar las siguientes acciones:`"sagemaker:CreateModel"`,, y`"sagemaker:CreateEndpointConfig"`. `"sagemaker:CreateEndpoint"` `"sagemaker:InvokeEndpointAsync"` 

      Estas acciones están incluidas en la política `AmazonSageMakerFullAccess`. Añada esta política a su rol de IAM. Busque `AmazonSageMakerFullAccess` en el campo **Buscar**. Seleccione `AmazonSageMakerFullAccess`.

   1. Elija **Asociar política**.

   1. A continuación, elija **Asociar políticas** para añadir los permisos de Amazon S3.

   1. Seleccione **Crear política**.

   1. Seleccione la pestaña `JSON`.

   1. Añada la siguiente instrucción de política:

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:AbortMultipartUpload",
                      "s3:ListBucket"  
                  ],
                  "Effect": "Allow",
                  "Resource": "arn:aws:s3:::bucket_name/*"
              }
          ]
      }
      ```

------

   1. Elija **Siguiente: etiquetas**.

   1. Escriba un **Nombre de política**.

   1. Elija **Crear política**.

   1. Repita los mismos pasos que completó para añadir los permisos de Amazon S3 a fin de añadir los permisos de Amazon SNS. Para la instrucción de la política, asocie lo siguiente:

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "sns:Publish"
                  ],
                  "Effect": "Allow",
      "Resource": "arn:aws:sns:us-east-1:111122223333:SNS_Topic"
              }
          ]
      }
      ```

------

1. **Cargar los datos de inferencia (como el modelo de machine learning o datos de muestra) en **Amazon S3**.**

1. **Seleccionar una imagen de inferencia de Docker prediseñada o crear su propia imagen de Docker de inferencia.**

   SageMaker La IA proporciona contenedores para sus algoritmos integrados e imágenes de Docker prediseñadas para algunos de los marcos de aprendizaje automático más comunes, como Apache MXNet,, y Chainer. TensorFlow PyTorch Para ver una lista completa de las imágenes de SageMaker IA disponibles, consulte Imágenes de [Deep Learning Containers disponibles](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Si opta por utilizar un contenedor provisto por SageMaker IA, puede aumentar el tiempo de espera del punto final y el tamaño de la carga útil con respecto a los valores predeterminados configurando las variables de entorno en el contenedor. Para obtener información sobre cómo configurar las diferentes variables de entorno para cada marco, consulte el paso Crear un modelo para la creación de un punto de conexión asíncrono.

   Si ninguno de los contenedores de SageMaker IA existentes satisface tus necesidades y no tienes uno propio, es posible que tengas que crear uno nuevo en Docker. Consulte [Contenedores con código de inferencia personalizado](your-algorithms-inference-main.md) para obtener información sobre cómo crear una imagen de Docker.

1. **Crear un tema de Amazon SNS (opcional)**

   Cree un tema de Amazon Simple Notification Service (Amazon SNS) que envíe notificaciones sobre las solicitudes que se han procesado. Amazon SNS es un servicio de notificaciones para aplicaciones orientadas a la mensajería; los suscriptores solicitan y reciben notificaciones “push” de mensajes urgentes a través de distintos protocolos de transporte, como HTTP, Amazon SQS y el correo electrónico. Puede especificar los temas de Amazon SNS al crear un objeto `EndpointConfig` si especifica `AsyncInferenceConfig` mediante la API `EndpointConfig`. 

   Siga los pasos para crear y suscribirse a un tema de Amazon SNS.

   1. Con la consola de Amazon SNS, cree un tema. Para obtener instrucciones, consulte [Creación de un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) en la *Guía para desarrolladores* de *Amazon Simple Notification Service*.

   1. Suscríbase al tema. Para obtener instrucciones, consulte el tema [Suscribirse a un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) en la *Guía para desarrolladores* de *Amazon Simple Notification Service*.

   1. Cuando reciba un correo electrónico donde se le pida que confirme su suscripción al tema, confirme la suscripción.

   1. Anote el nombre de recurso de Amazon (ARN) del tema. El tema de Amazon SNS que ha creado es otro recurso de su AWS cuenta y tiene un ARN único. El ARN tiene el siguiente formato:

      ```
      arn:aws:sns:aws-region:account-id:topic-name
      ```

   Para obtener más información acerca de Amazon SNS, consulte la [Guía para desarrolladores de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html).

# Cómo crear un punto de conexión de inferencia asíncrono
<a name="async-inference-create-endpoint"></a>

Cree un punto final asíncrono de la misma manera que crearía un punto final con los servicios de alojamiento de IA: SageMaker 
+ Cree un modelo en SageMaker IA con. `CreateModel`
+ Cree una configuración del punto de conexión con `CreateEndpointConfig`.
+ Cree un punto de conexión HTTPS con `CreateEndpoint`.

Para crear un punto de conexión, primero debe crear un modelo con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html); debe apuntar al artefacto del modelo y a una ruta de registro de Docker (imagen). A continuación, cree una configuración en la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)que especifique uno o más modelos que se crearon con la `CreateModel` API para su implementación y los recursos que desea que la SageMaker IA aprovisione. Cree un punto de conexión con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) utilizando la configuración de punto de conexión especificada en la solicitud. Puede actualizar un punto de conexión asíncrono con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Envíe y reciba solicitudes de inferencia desde el modelo alojado en el punto de conexión con `InvokeEndpointAsync`. Puede eliminar sus puntos de conexión con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html).

Para obtener una lista completa de las SageMaker imágenes disponibles, consulte Imágenes [disponibles de Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Consulte [Contenedores con código de inferencia personalizado](your-algorithms-inference-main.md) para obtener información sobre cómo crear una imagen de Docker.

**Topics**
+ [Creación de un modelo](async-inference-create-endpoint-create-model.md)
+ [Creación de una configuración de punto de conexión](async-inference-create-endpoint-create-endpoint-config.md)
+ [Creación de punto de conexión](async-inference-create-endpoint-create-endpoint.md)

# Creación de un modelo
<a name="async-inference-create-endpoint-create-model"></a>

En el ejemplo siguiente, se muestra cómo crear un modelo usando AWS SDK para Python (Boto3). Las primeras líneas definen:
+ `sagemaker_client`: un objeto cliente de SageMaker IA de bajo nivel que facilita el envío y la recepción de solicitudes a AWS los servicios.
+ `sagemaker_role`: una variable de cadena con el rol de IAM de SageMaker IA: Amazon Resource Name (ARN).
+ `aws_region`: una variable de cadena con el nombre de su región. AWS 

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Role to give SageMaker permission to access AWS services.
sagemaker_role= "arn:aws:iam::<account>:role/*"
```

A continuación, especifique la ubicación del modelo prentrenado almacenado en Amazon S3. En este ejemplo, utilizamos un XGBoost modelo previamente entrenado llamado`demo-xgboost-model.tar.gz`. El URI completo de Amazon S3 se almacena en una variable de cadena `model_url`:

```
#Create a variable w/ the model S3 URI
s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
bucket_prefix='saved_models'
model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz"

#Specify S3 bucket w/ model
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```

Especifique un contenedor principal. Para el contenedor principal, especifique la imagen de Docker que contiene el código de inferencia, los artefactos (del entrenamiento previo) y un mapa de entorno personalizado que el código de inferencia utiliza al implementar el modelo para las predicciones.

 En este ejemplo, especificamos una imagen de contenedor de algoritmos XGBoost integrada: 

```
from sagemaker import image_uris

# Specify an AWS container image. 
container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')
```

Cree un modelo en Amazon SageMaker AI con`CreateModel`. Especifique lo siguiente:
+ `ModelName`: un nombre para el modelo (en este ejemplo, se almacena como una variable de cadena llamada `model_name`).
+ `ExecutionRoleArn`: El nombre del recurso de Amazon (ARN) de la función de IAM que Amazon SageMaker AI puede asumir para acceder a los artefactos del modelo y a las imágenes de Docker para su implementación en instancias de procesamiento de aprendizaje automático o para trabajos de transformación por lotes.
+ `PrimaryContainer`: la ubicación de la imagen de Docker principal que contiene el código de inferencia, los artefactos asociados y mapas de entorno personalizados que el código de inferencia utiliza cuando el modelo se implementa para predicciones.

```
model_name = '<The_name_of_the_model>'

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
    })
```

Consulte la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)descripción en la Guía de referencia de la SageMaker API para obtener una lista completa de los parámetros de la API.

Si utilizas un contenedor proporcionado por la SageMaker IA, puedes aumentar el tiempo de espera del servidor modelo y el tamaño de la carga útil, pasando de los valores predeterminados a los máximos admitidos por el marco. Para ello, configura las variables de entorno en este paso. Es posible que no pueda aprovechar el tiempo de espera y los tamaños de carga máximos que admite la inferencia asíncrona si no establece estas variables de forma explícita. El siguiente ejemplo muestra cómo configurar las variables de entorno para un contenedor de inferencias en función de. PyTorch TorchServe

```
model_name = '<The_name_of_the_model>'

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
        'Environment': {
            'TS_MAX_REQUEST_SIZE': '100000000',
            'TS_MAX_RESPONSE_SIZE': '100000000',
            'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'
        },
    })
```

Cuando termine de crear el punto de conexión, debería probar que haya configurado las variables de entorno correctamente; para ello, imprímalas desde su script `inference.py`. En la siguiente tabla, se enumeran las variables de entorno de varios marcos que puede configurar para cambiar los valores predeterminados.


| Marcos | Variables de entorno | 
| --- | --- | 
|  PyTorch 1.8 (basado en TorchServe)  |  'TS\$1MAX\$1REQUEST\$1SIZE': '100000000' 'TS\$1MAX\$1RESPONSE\$1SIZE': '100000000' 'TS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '1000'  | 
|  PyTorch 1.4 (basado en MMS)  |  'MMS\$1MAX\$1REQUEST\$1SIZE': '1000000000' 'MMS\$1MAX\$1RESPONSE\$1SIZE': '1000000000' 'MMS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '900'  | 
|  HuggingFace Contenedor de inferencias (basado en MMS)  |  'MMS\$1MAX\$1REQUEST\$1SIZE': '2000000000' 'MMS\$1MAX\$1RESPONSE\$1SIZE': '2000000000' 'MMS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '900'  | 

# Creación de una configuración de punto de conexión
<a name="async-inference-create-endpoint-create-endpoint-config"></a>

Cuando tenga un modelo, cree una configuración de punto de conexión con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Los servicios de alojamiento de Amazon SageMaker AI utilizan esta configuración para implementar modelos. En la configuración, identificas uno o más modelos, creados con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html), para implementar los recursos que deseas que Amazon SageMaker AI aprovisione. Especifique el objeto `AsyncInferenceConfig` y proporcione una ubicación de Amazon S3 de salida para `OutputConfig`. Si lo desea, puede especificar los temas de [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) a los que enviar notificaciones sobre los resultados de las predicciones. Para obtener más información sobre temas de Amazon SNS, consulte [Configuración de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

En el siguiente ejemplo se muestra cómo crear una configuración del punto de conexión mediante AWS SDK para Python (Boto3):

```
import datetime
from time import gmtime, strftime

# Create an endpoint config name. Here we create one based on the date  
# so it we can search endpoints based on creation time.
endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}"

# The name of the model that you want to host. This is the name that you specified when creating the model.
model_name='<The_name_of_your_model>'

create_endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request.
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": model_name, 
            "InstanceType": "ml.m5.xlarge", # Specify the compute instance type.
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ],
    AsyncInferenceConfig={
        "OutputConfig": {
            # Location to upload response outputs when no location is provided in the request.
            "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output"
            # (Optional) specify Amazon SNS topics
            "NotificationConfig": {
                "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name",
                "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name",
            }
        },
        "ClientConfig": {
            # (Optional) Specify the max number of inflight invocations per instance
            # If no value is provided, Amazon SageMaker will choose an optimal value for you
            "MaxConcurrentInvocationsPerInstance": 4
        }
    }
)

print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")
```

En el ejemplo mencionado anteriormente, se especifican las siguientes claves para `OutputConfig` en el campo `AsyncInferenceConfig`:
+ `S3OutputPath`: ubicación para cargar los resultados de la respuesta cuando no se proporciona ninguna ubicación en la solicitud.
+ `NotificationConfig`: (opcional) temas de SNS que le envían notificaciones cuando una solicitud de inferencia se realiza correctamente (`SuccessTopic`) o cuando hay un error (`ErrorTopic`).

También puede especificar el siguiente argumento opcional para `ClientConfig` en el campo `AsyncInferenceConfig`:
+ `MaxConcurrentInvocationsPerInstance`: (Opcional) El número máximo de solicitudes simultáneas enviadas por el cliente de SageMaker IA al contenedor de modelos.

# Creación de punto de conexión
<a name="async-inference-create-endpoint-create-endpoint"></a>

Una vez que tenga su configuración de modelo y punto de conexión, utilice la API de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) para crear su punto de conexión. El nombre del punto final debe ser único en una AWS región de su AWS cuenta. 

Siga estas instrucciones para crear un punto de conexión utilizando la configuración especificada en la solicitud. Amazon SageMaker AI usa el punto final para aprovisionar recursos e implementar modelos.

```
# The name of the endpoint.The name must be unique within an AWS Region in your AWS account.
endpoint_name = '<endpoint-name>' 

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

create_endpoint_response = sagemaker_client.create_endpoint(
                                            EndpointName=endpoint_name, 
                                            EndpointConfigName=endpoint_config_name)
```

Cuando llama a la `CreateEndpoint` API, Amazon SageMaker Asynchronous Inference envía una notificación de prueba para comprobar que ha configurado un tema de Amazon SNS. Amazon SageMaker Asynchronous Inference también envía notificaciones de prueba después de las llamadas a y. `UpdateEndpoint` `UpdateEndpointWeightsAndCapacities` Esto permite a SageMaker AI comprobar que tiene los permisos necesarios. La notificación puede ignorarse. La notificación de prueba tiene el siguiente formato:

```
{
    "eventVersion":"1.0",
    "eventSource":"aws:sagemaker",
    "eventName":"TestNotification"
}
```

# Invocar un punto de conexión asíncrono
<a name="async-inference-invoke-endpoint"></a>

Obtenga inferencias del modelo alojado en su punto de conexión asíncrono con `InvokeEndpointAsync`. 

**nota**  
Si aún no lo ha hecho, cargue sus datos de inferencia (como el modelo de machine learning o los datos de muestra) en Amazon S3.

Especifique los siguientes campos en su solicitud:
+ En `InputLocation`, especifique la ubicación de los datos de inferencia.
+ En `EndpointName`, especifique el nombre del punto de conexión.
+ En `InvocationTimeoutSeconds`, puede establecer el tiempo de espera máximo para las solicitudes (opcional). Puede establecer este valor en un máximo de 3600 segundos (una hora) por solicitud. Si no especifica este campo en la solicitud, el tiempo de espera de la solicitud será de 15 minutos de forma predeterminada.

```
# Create a low-level client representing Amazon SageMaker Runtime
sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>)

# Specify the location of the input. Here, a single SVM sample
input_location = "s3://bucket-name/test_point_0.libsvm"

# The name of the endpoint. The name must be unique within an AWS Region in your AWS account. 
endpoint_name='<endpoint-name>'

# After you deploy a model into production using SageMaker AI hosting 
# services, your client applications use this API to get inferences 
# from the model hosted at the specified endpoint.
response = sagemaker_runtime.invoke_endpoint_async(
                            EndpointName=endpoint_name, 
                            InputLocation=input_location,
                            InvocationTimeoutSeconds=3600)
```

Recibirá una respuesta en forma de cadena JSON con su id. de solicitud y el nombre del bucket de Amazon S3 que recibirá la respuesta a la llamada a la API una vez procesada.

# Actualizar un punto de conexión asíncrono
<a name="async-inference-update-endpoint"></a>

Actualice un punto de conexión asíncrono con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Cuando actualizas un punto final, la SageMaker IA primero aprovisiona y cambia a la nueva configuración de punto final que especifiques antes de eliminar los recursos que se aprovisionaron en la configuración de punto final anterior. No elimine un `EndpointConfig` con un punto de conexión que esté activo o mientras las operaciones `CreateEndpoint` o `UpdateEndpoint` se estén llevando a cabo en el punto de conexión. 

```
# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name='<endpoint-name>'

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

sagemaker_client.update_endpoint(
                                EndpointConfigName=endpoint_config_name,
                                EndpointName=endpoint_name
                                )
```

Cuando Amazon SageMaker AI recibe la solicitud, establece el estado del punto de conexión en **Actualización**. Tras actualizar el punto final asíncrono, establece el estado en. **InService** Para comprobar el estado de un punto de conexión, utilice la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html). Para obtener una lista completa de los parámetros que puede especificar al actualizar un punto de conexión, consulte la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html).

# Eliminar un punto de conexión asíncrono
<a name="async-inference-delete-endpoint"></a>

Elimine un punto final asíncrono de forma similar a como eliminaría un punto final hospedado por SageMaker IA con la API. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) Especifique el nombre del punto de conexión asíncrono que desea eliminar. Al eliminar un punto final, la SageMaker IA libera todos los recursos que se desplegaron cuando se creó el punto final. La eliminación del modelo no elimina los artefactos del modelo, el código de inferencia ni el rol de IAM que especificó al crear el modelo.

Elimine su modelo de SageMaker IA con la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html)API o con la consola de SageMaker IA.

------
#### [ Boto3 ]

```
import boto3 

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=<aws_region>)
sagemaker_client.delete_endpoint(EndpointName='<endpoint-name>')
```

------
#### [ SageMaker AI console ]

1. Dirígete a la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Amplíe la lista desplegable **Inferencia**.

1. Seleccione **Endpoints**.

1. Busque el punto de conexión en la barra **Buscar puntos de conexión**.

1. Seleccione el punto de conexión.

1. Elija **Eliminar**.

------

Además de eliminar el punto de conexión asíncrono, es posible que desee borrar otros recursos que se utilizaron para crear el punto de conexión, como el repositorio de Amazon ECR (si creó una imagen de inferencia personalizada), el modelo de SageMaker IA y la propia configuración del punto de conexión asíncrono. 

# Alarmas y registros para realizar un seguimiento de las métricas de los puntos de conexión asíncronos
<a name="async-inference-monitor"></a>

Puede supervisar SageMaker AI mediante Amazon CloudWatch, que recopila y procesa los datos sin procesar y los convierte en métricas legibles y casi en tiempo real. Con Amazon CloudWatch, puede acceder a información histórica y disponer de una mejor perspectiva sobre el rendimiento de su aplicación web o servicio. Para obtener más información sobre Amazon CloudWatch, consulte [¿Qué es Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)

## Monitoreo con CloudWatch
<a name="async-inference-monitor-cloudwatch"></a>

Abajo, encontrará una lista completa de las métricas para puntos de conexión asíncronos, que se encuentran en el espacio de nombres `AWS/SageMaker`. Las métricas que no estén en esta lista no se publican si el punto de conexión está habilitado para la inferencia asincrónica. Estas son algunas de esas métricas:
+ OverheadLatency
+ Invocations
+ InvocationsPerInstance

### Métricas de puntos de conexión comunes
<a name="async-inference-monitor-cloudwatch-common"></a>

Estas métricas son las mismas que las que se publican actualmente para los puntos de conexión en tiempo real. Para obtener más información sobre otras métricas de Amazon CloudWatch, consulte [Monitor SageMaker AI with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).


| Nombre de métrica | Descripción | Unidad/estadísticas | 
| --- | --- | --- | 
| `Invocation4XXErrors` | El número de solicitudes donde el modelo devolvió un código de respuesta HTTP 4xx. Para cada respuesta 4xx, se envía 1; de lo contrario, se envía 0. | Unidades: ningunaEstadísticas válidas: Average, Sum | 
| `Invocation5XXErrors` | El número de solicitudes InvokeEndpoint donde el modelo devolvió un código de respuesta HTTP 5xx. Para cada respuesta 5xx, se envía 1; de lo contrario, se envía 0. | Unidades: ningunaEstadísticas válidas: Average, Sum | 
| `ModelLatency` | El intervalo de tiempo que tarda un modelo en responder como se muestra en SageMaker AI. Este intervalo incluye el tiempo de comunicación local empleado en el envío de la solicitud y la recuperación de la respuesta del contenedor de un modelo, así como el tiempo que se tarda en completar la inferencia en el contenedor. | Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, Sample Count. | 

### Métricas de puntos de conexión de inferencia asíncrona
<a name="async-inference-monitor-cloudwatch-async"></a>

Estas métricas se publican para los puntos de conexión habilitados para la inferencia asíncrona. Las métricas siguientes se publican con una dimensión de `EndpointName`:


| Nombre de métrica | Descripción | Unidad/estadísticas | 
| --- | --- | --- | 
| `ApproximateBacklogSize` | El número de elementos en la cola de un punto de conexión que se están procesando actualmente o que aún no se están procesando. | Unidades: recuento Estadísticas válidas: Max, Min, Average.  | 
| `ApproximateBacklogSizePerInstance` | El número de elementos de la cola dividido por el número de instancias detrás de un punto de conexión. Esta métrica se usa principalmente para configurar el escalado automático de la aplicación para un punto de conexión con capacidad asíncrona. | Unidades: recuentoEstadísticas válidas: Max, Min, Average. | 
| `ApproximateAgeOfOldestRequest` | Antigüedad de la solicitud más antigua de la cola. | Unidades: segundosEstadísticas válidas: Max, Min, Average. | 
| `HasBacklogWithoutCapacity` | El valor de esta métrica es `1` cuando hay solicitudes en la cola pero cero instancias detrás del punto de conexión. El valor es `0` en todos los demás momentos. Puede usar esta métrica para escalar automáticamente el punto de conexión desde cero instancias al recibir una nueva solicitud en la cola. | Unidades: recuentoEstadísticas válidas: Average. | 

Las métricas siguientes se publican con las dimensiones de `EndpointName` y `VariantName`:


| Nombre de métrica | Descripción | Unidad/estadísticas | 
| --- | --- | --- | 
| `RequestDownloadFailures` | Cuando se produce un error de inferencia debido a un problema al descargar la solicitud de Amazon S3. | Unidades: recuentoEstadísticas válidas: Sum | 
| `ResponseUploadFailures` | Cuando se produce un error de inferencia debido a un problema al cargar la respuesta a Amazon S3. | Unidades: recuentoEstadísticas válidas: Sum | 
| `NotificationFailures` | Cuando se produce un problema al publicar las notificaciones. | Unidades: recuentoEstadísticas válidas: Sum | 
| `RequestDownloadLatency` | Tiempo total para descargar la carga de solicitud. | Unidades: microsegundosEstadísticas válidas: Average, Sum, Min, Max, Sample Count. | 
| `ResponseUploadLatency` | Tiempo total para cargar la carga de la respuesta. | Unidades: microsegundos Estadísticas válidas: Average, Sum, Min, Max, Sample Count. | 
| `ExpiredRequests` | Número de solicitudes en la cola que fallan debido a que han alcanzado el TTL de la solicitud especificada. | Unidades: recuentoEstadísticas válidas: Sum | 
| `InvocationFailures` | Si se produce un error en una invocación por cualquier motivo. | Unidades: recuentoEstadísticas válidas: Sum | 
| `InvocationsProcesssed` | Número de invocaciones asíncronas procesadas por el punto de conexión. | Unidades: recuentoEstadísticas válidas: Sum | 
| `TimeInBacklog` | Tiempo total durante el que la solicitud ha estado en cola antes de procesarse. Esto no incluye el tiempo de procesamiento real (es decir, el tiempo de descarga, el tiempo de carga o la latencia del modelo). | Unidades: milisegundosEstadísticas válidas: Average, Sum, Min, Max, Sample Count. | 
| `TotalProcessingTime` | Hora en la que SageMaker AI recibió la solicitud de inferencia hasta la hora en la que la solicitud terminó de procesarse. Esto incluye el tiempo para tareas pendientes y el tiempo necesario para cargar y enviar las notificaciones de respuesta que pueda haber. | Unidades: milisegundosEstadísticas válidas: Average, Sum, Min, Max, Sample Count. | 

La inferencia asíncrona de Amazon SageMaker también incluye métricas en el ámbito del host. Para obtener información sobre las métricas en el ámbito del host, consulte [SageMaker AI Jobs and Endpoint Metrics](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs).

## Registros
<a name="async-inference-monitor-logs"></a>

Además de los [registros del contenedor de modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/logging-cloudwatch.html) que se publican en Amazon CloudWatch, en su cuenta, obtendrá también un nuevo registro de plataforma para rastrear y depurar las solicitudes de inferencia.

Los nuevos registros se publican en el grupo de registro del punto de conexión:

```
/aws/sagemaker/Endpoints/[EndpointName]
```

El nombre del flujo de registro consta de lo siguiente: 

```
[production-variant-name]/[instance-id]/data-log.
```

Las líneas de registro contienen el identificador de inferencia de la solicitud para que los errores se puedan asignar fácilmente a una solicitud concreta.

# Revisar los resultados de predicciones
<a name="async-inference-check-predictions"></a>

Hay varias formas de comprobar resultados de predicciones desde su punto de conexión asíncrono. Estas son las opciones:

1. Temas de Amazon SNS.

1. Comprobar si hay salidas en el bucket de Amazon S3.

## Temas de Amazon SNS
<a name="async-inference-check-predictions-sns-topic"></a>

Amazon SNS es un servicio de notificaciones para aplicaciones orientadas a la mensajería; los suscriptores solicitan y reciben notificaciones “push” de mensajes urgentes a través de distintos protocolos de transporte, como HTTP, Amazon SQS y el correo electrónico. La inferencia asíncrona de Amazon SageMaker publica notificaciones cuando crea un punto de conexión con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) y especifica un tema de Amazon.

**nota**  
Para recibir notificaciones de Amazon SNS, su rol de IAM debe tener permisos `sns:Publish`. Consulte [Cumplimiento de los requisitos previos de](async-inference-create-endpoint-prerequisites.md) para obtener información sobre los requisitos que debe cumplir para utilizar la inferencia asíncrona.

Para utilizar Amazon SNS a fin de revisar los resultados de las predicciones de su punto de conexión asíncrono, primero debe crear un tema, suscribirse a este, confirmar la suscripción y anotar el nombre de recurso de Amazon (ARN) de ese tema. Para obtener información detallada sobre cómo crear un tema de Amazon SNS, suscribirse a este y buscar su ARN de Amazon, consulte [Configuración de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

Proporcione los ARN del tema de Amazon SNS en el campo `AsyncInferenceConfig` cuando cree una configuración de punto de conexión con `CreateEndpointConfig`. Puede especificar un `ErrorTopic` o un `SuccessTopic` de Amazon SNS.

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name=<aws_region>)

sagemaker_client.create_endpoint_config(
    EndpointConfigName=<endpoint_config_name>, # You specify this name in a CreateEndpoint request.
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": "model_name", 
            "InstanceType": "ml.m5.xlarge", # Specify the compute instance type.
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ],
    AsyncInferenceConfig={
        "OutputConfig": {
            # Location to upload response outputs when no location is provided in the request.
            "S3OutputPath": "s3://<bucket>/<output_directory>"
            "NotificationConfig": {
                "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name",
                "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name",
            }
        }
    }
)
```

Tras crear el punto de conexión e invocarlo, recibirá una notificación del tema de Amazon SNS. Por ejemplo, si se ha suscrito para recibir notificaciones por correo electrónico de su tema, recibirá una notificación por correo electrónico cada vez que invoque a su punto de conexión. En el siguiente ejemplo, se muestra el contenido JSON de una notificación de correo electrónico de invocación correcta.

```
{
   "awsRegion":"us-east-1",
   "eventTime":"2022-01-25T22:46:00.608Z",
   "receivedTime":"2022-01-25T22:46:00.455Z",
   "invocationStatus":"Completed",
   "requestParameters":{
      "contentType":"text/csv",
      "endpointName":"<example-endpoint>",
      "inputLocation":"s3://<bucket>/<input-directory>/input-data.csv"
   },
   "responseParameters":{
      "contentType":"text/csv; charset=utf-8",
      "outputLocation":"s3://<bucket>/<output_directory>/prediction.out"
   },
   "inferenceId":"11111111-2222-3333-4444-555555555555", 
   "eventVersion":"1.0",
   "eventSource":"aws:sagemaker",
   "eventName":"InferenceResult"
}
```

## Comprobar el bucket de S3
<a name="async-inference-check-predictions-s3-bucket"></a>

Al invocar un punto de conexión con `InvokeEndpointAsync`, este devuelve un objeto de respuesta. Puede usar el objeto de respuesta para obtener el URI de Amazon S3 en el que se almacena el resultado. Con la ubicación de salida, puede utilizar una clase de sesión de SageMaker AI del SageMaker Python SDK a fin de comprobar mediante programación si hay una salida.

El siguiente ejemplo permite almacenar el diccionario de resultados de `InvokeEndpointAsync` como una variable denominada response. Con la variable response, obtiene el URI de salida de Amazon S3 y lo almacena como una variable de cadena denominada `output_location`. 

```
import uuid
import boto3

sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>)

# Specify the S3 URI of the input. Here, a single SVM sample
input_location = "s3://bucket-name/test_point_0.libsvm" 

response = sagemaker_runtime.invoke_endpoint_async(
    EndpointName='<endpoint-name>',
    InputLocation=input_location,
    InferenceId=str(uuid.uuid4()), 
    ContentType="text/libsvm" #Specify the content type of your data
)

output_location = response['OutputLocation']
print(f"OutputLocation: {output_location}")
```

Para obtener información sobre los tipos de contenido compatibles, consulte [Formatos de datos comunes para la inferencia](cdf-inference.md).

Con la ubicación de salida de Amazon S3, puede utilizar una [clase de sesión de SageMaker AI del SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/api/utility/session.html?highlight=session) a fin de leer en archivos de Amazon S3. El siguiente ejemplo de código muestra cómo crear una función (`get_ouput`) que intente leer repetidamente un archivo desde la ubicación de salida de Amazon S3:

```
import sagemaker
import urllib, time
from botocore.exceptions import ClientError

sagemaker_session = sagemaker.session.Session()

def get_output(output_location):
    output_url = urllib.parse.urlparse(output_location)
    bucket = output_url.netloc
    key = output_url.path[1:]
    while True:
        try:
            return sagemaker_session.read_s3_file(
                                        bucket=output_url.netloc, 
                                        key_prefix=output_url.path[1:])
        except ClientError as e:
            if e.response['Error']['Code'] == 'NoSuchKey':
                print("waiting for output...")
                time.sleep(2)
                continue
            raise
            
output = get_output(output_location)
print(f"Output: {output}")
```

# Escalado automático de un punto de conexión asíncrono
<a name="async-inference-autoscale"></a>

Amazon SageMaker AI admite el escalado automático de su punto de conexión asíncrono. El escalado automático ajusta dinámicamente el número de instancias aprovisionadas para un modelo en respuesta a los cambios en su carga de trabajo. A diferencia de otros modelos alojados compatibles con Amazon SageMaker AI, con la inferencia asíncrona también puede reducir verticalmente sus instancias de puntos de conexión asíncronos a cero. Las solicitudes que se reciben cuando no hay ninguna instancia se ponen en cola para su procesamiento cuando el punto de conexión escale verticalmente.

Para escalar automáticamente su punto de conexión asíncrono, debe hacer, como mínimo, lo siguiente:
+ Registrar un modelo implementado (variante de producción).
+ Definir una política de escalado.
+ Aplicar la política de escalado automático.

Para poder utilizar el escalado automático, debe haber implementado ya un modelo en un punto de conexión de SageMaker AI. Los modelos implementados se denominan [variante de producción](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). Consulte [Implemente el modelo para SageMaker Servicios de alojamiento](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-model-deployment.html#ex1-deploy-model) para obtener más información sobre la implementación de un modelo en un punto de conexión. Para especificar las métricas y los valores de destino para una política de escalado, debe configurar una política de escalado. Para obtener información sobre cómo definir una política de escalado, consulte [Define a scaling policy](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-define.html). Una vez registrado su modelo y definido una política de escalado, aplique la política de escalado al modelo registrado. Para obtener información sobre cómo aplicar una política de escalado, consulte [Apply a scaling policy](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-apply.html).

Para obtener más información sobre cómo definir una política de escalado adicional opcional que amplíe su punto de conexión al recibir una solicitud después de que este se haya reducido verticalmente hasta cero, consulte [Definir una política de escalado que escale verticalmente desde cero para las nuevas solicitudes (opcional)](#async-inference-autoscale-scale-up). Si no especifica esta política opcional, el punto de conexión solo iniciará el escalado vertical desde cero cuando el número de solicitudes pendientes supere el valor de seguimiento objetivo.

 Para obtener más información sobre otros requisitos previos y componentes que se utilizan con el escalado automático, consulte la sección [Prerequisites](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-prerequisites.html) en la documentación de escalado automático de SageMaker AI.

**nota**  
Si asocia varias políticas de escalado al mismo grupo de escalado automático, es posible que surjan conflictos de escalado. Cuando hay un conflicto, Amazon EC2 Auto Scaling elige la política que proporciona la mayor capacidad, tanto para el escalado como para la reducción horizontal. Para obtener más información sobre este comportamiento, consulte [Multiple dynamic scaling policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html#multiple-scaling-policy-resolution) en la *documentación de Amazon EC2 Auto Scaling*.

## Definir una política de escalado
<a name="async-inference-autoscale-define-async"></a>

Para especificar las métricas y los valores de destino para una política de escalado, debe configurar una política de escalado de seguimiento de destino. Defina la política de escalado como un bloque JSON en un archivo de texto. Puede utilizarr ese archivo de texto al invocar AWS CLI o la API de Application Auto Scaling. Para obtener más información acerca de la sintaxis de configuración de la política, consulte [https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html) en la referencia de la API de Auto Scaling de aplicaciones.

Para los puntos de conexión asíncronos, SageMaker AI recomienda encarecidamente que cree una configuración de política para el escalado del seguimiento del destino para una variante. En este ejemplo de configuración, utilizamos una métrica personalizada (`CustomizedMetricSpecification`) llamada `ApproximateBacklogSizePerInstance`.

```
TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 5.0, # The target value for the metric. Here the metric is: ApproximateBacklogSizePerInstance
        'CustomizedMetricSpecification': {
            'MetricName': 'ApproximateBacklogSizePerInstance',
            'Namespace': 'AWS/SageMaker',
            'Dimensions': [
                {'Name': 'EndpointName', 'Value': <endpoint_name> }
            ],
            'Statistic': 'Average',
        }
    }
```

## Definir una política de escalado que escale a cero
<a name="async-inference-autoscale-define-async-zero"></a>

A continuación, se muestra cómo definir y registrar una variante de punto de conexión con el escalado automático de la aplicación mediante AWS SDK para Python (Boto3). Tras definir un objeto cliente de bajo nivel que represente el escalado automático de la aplicación con Boto3, utilizamos el método [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target) para registrar la variante de producción. Hemos establecido `MinCapacity` en 0 porque la inferencia asíncrona permite escalar automáticamente a 0 cuando no hay solicitudes por procesar.

```
# Common class representing application autoscaling for SageMaker 
client = boto3.client('application-autoscaling') 

# This is the format in which application autoscaling references the endpoint
resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'> 

# Define and register your endpoint variant
response = client.register_scalable_target(
    ServiceNamespace='sagemaker', 
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant.
    MinCapacity=0,
    MaxCapacity=5
)
```

Para obtener una descripción detallada de la API de escalado automático de aplicaciones, consulte la documentación [Application Scaling Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target).

## Definir una política de escalado que escale verticalmente desde cero para las nuevas solicitudes (opcional)
<a name="async-inference-autoscale-scale-up"></a>

Quizá haya algún caso de uso en el que tenga solicitudes esporádicas o períodos con un número reducido de solicitudes. Si el punto de conexión se ha reducido verticalmente a cero instancias durante estos períodos, no volverá a escalar hasta que el número de solicitudes en la cola supere el objetivo especificado en la política de escalado. Esto puede provocar largos tiempos de espera para las solicitudes en cola. En la siguiente sección, se muestra cómo crear una política de escalado adicional que aumente su punto de conexión desde cero instancias después de recibir cualquier nueva solicitud en la cola. El punto de conexión podrá responder a las nuevas solicitudes con mayor rapidez, en lugar de esperar a que el tamaño de la cola supere el objetivo.

Para crear una política de escalado para su punto de conexión que escale verticalmente desde cero instancias, haga lo siguiente:

1. Cree una política de escalado que defina el comportamiento deseado; es decir, que escale verticalmente el punto de conexión con cero instancias, pero que haya solicitudes en la cola. A continuación, se muestra cómo definir una política de escalado denominada `HasBacklogWithoutCapacity-ScalingPolicy` usando AWS SDK para Python (Boto3). Cuando la cola es superior a cero y el número de instancias actual del punto de conexión también es cero, la política escala verticalmente el punto de conexión. En el resto de los casos, la política no afecta al escalado del punto de conexión.

   ```
   response = client.put_scaling_policy(
       PolicyName="HasBacklogWithoutCapacity-ScalingPolicy",
       ServiceNamespace="sagemaker",  # The namespace of the service that provides the resource.
       ResourceId=resource_id,  # Endpoint name
       ScalableDimension="sagemaker:variant:DesiredInstanceCount",  # SageMaker supports only Instance Count
       PolicyType="StepScaling",  # 'StepScaling' or 'TargetTrackingScaling'
       StepScalingPolicyConfiguration={
           "AdjustmentType": "ChangeInCapacity", # Specifies whether the ScalingAdjustment value in the StepAdjustment property is an absolute number or a percentage of the current capacity. 
           "MetricAggregationType": "Average", # The aggregation type for the CloudWatch metrics.
           "Cooldown": 300, # The amount of time, in seconds, to wait for a previous scaling activity to take effect. 
           "StepAdjustments": # A set of adjustments that enable you to scale based on the size of the alarm breach.
           [ 
               {
                 "MetricIntervalLowerBound": 0,
                 "ScalingAdjustment": 1
               }
             ]
       },    
   )
   ```

1. Cree una alarma de CloudWatch con la métrica personalizada `HasBacklogWithoutCapacity`. Cuando se activa, la alarma inicia la política de escalado previamente definida. Para obtener más información acerca de la métrica `HasBacklogWithoutCapacity`, consulte [Métricas de puntos de conexión de inferencia asíncrona](async-inference-monitor.md#async-inference-monitor-cloudwatch-async).

   ```
   response = cw_client.put_metric_alarm(
       AlarmName=step_scaling_policy_alarm_name,
       MetricName='HasBacklogWithoutCapacity',
       Namespace='AWS/SageMaker',
       Statistic='Average',
       EvaluationPeriods= 2,
       DatapointsToAlarm= 2,
       Threshold= 1,
       ComparisonOperator='GreaterThanOrEqualToThreshold',
       TreatMissingData='missing',
       Dimensions=[
           { 'Name':'EndpointName', 'Value':endpoint_name },
       ],
       Period= 60,
       AlarmActions=[step_scaling_policy_arn]
   )
   ```

Ahora, debería tener una política de escalado y una alarma de CloudWatch que escale verticalmente el punto de conexión desde cero instancias cuando haya solicitudes pendientes en la cola.

# Solución de problemas
<a name="async-inference-troubleshooting"></a>

Las siguientes preguntas frecuentes pueden ayudarle a solucionar problemas relacionados con los puntos de conexión de inferencia asíncrona de Amazon SageMaker.

## P: Tengo activado el escalado automático. ¿Cómo puedo encontrar el número de instancias detrás del punto de conexión en un punto determinado?
<a name="async-troubleshooting-q1"></a>

Puede utilizar los siguientes métodos para buscar el número de instancias detrás del punto de conexión:
+ Puede utilizar la API [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) de SageMaker AI para describir el número de instancias detrás del punto de conexión en un punto determinado.
+ Puede obtener el recuento de instancias consultando las métricas de Amazon CloudWatch. Consulte las [métricas de las instancias de punto de conexión](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs), como `CPUUtilization` o `MemoryUtilization` y compruebe la estadística del recuento de muestras para un período de 1 minuto. El recuento debe ser igual al número de instancias activas. En la siguiente captura de pantalla, se muestra la métrica `CPUUtilization` representada gráficamente en la consola de CloudWatch, donde **Estadística** se ha configurado en `Sample count`, el **Período** se ha configurado en `1 minute` y el recuento resultante es 5.

![\[Consola de CloudWatch que muestra el gráfico del recuento de instancias activas para un punto de conexión.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/cloudwatch-sample-count.png)


## P: ¿Cuáles son las variables de entorno ajustables más comunes para los contenedores de SageMaker AI?
<a name="async-troubleshooting-q2"></a>

En las tablas siguientes se describen las variables de entorno ajustables más comunes para los contenedores de SageMaker AI por tipo de marco.

**TensorFlow**


| Variable de entorno | Descripción | 
| --- | --- | 
|  `SAGEMAKER_TFS_INSTANCE_COUNT`  |  Para los modelos basados en TensorFlow, el `tensorflow_model_server` binario es la pieza operativa que se encarga de cargar un modelo en la memoria, ejecutar las entradas en un gráfico del modelo y derivar las salidas. Por lo general, se lanza una sola instancia de este binario para servir a los modelos en un punto de conexión. Este binario contiene varios subprocesos internos y genera varios subprocesos para responder a una solicitud de inferencia. En algunos casos, si observa que la CPU se utiliza de forma considerable (más del 30 %), pero la memoria está infrautilizada (menos del 10 %), aumentar este parámetro podría ayudar. El aumento del número de `tensorflow_model_servers` disponibles para prestar servicio suele aumentar el rendimiento de un punto de conexión.  | 
|  `SAGEMAKER_TFS_FRACTIONAL_GPU_MEM_MARGIN`  |  Este parámetro regula la fracción de memoria de la GPU disponible para inicializar CUDA/cuDNN y otras bibliotecas de GPU. `0.2` significa que el 20 % de la memoria de la GPU disponible está reservada para inicializar CUDA/cuDNN y otras bibliotecas de la GPU, mientras que el 80 % disponible se asigna por igual a los procesos de TF. La memoria de la GPU está preasignada, a menos que la opción `allow_growth` esté habilitada.  | 
| `SAGEMAKER_TFS_INTER_OP_PARALLELISM` | Esto se relaciona de nuevo con la variable `inter_op_parallelism_threads`. Esta variable determina el número de subprocesos utilizados por las operaciones independientes sin bloqueo. `0` significa que el sistema selecciona un número apropiado. | 
| `SAGEMAKER_TFS_INTRA_OP_PARALLELISM` | Esto se relaciona de nuevo con la variable `intra_op_parallelism_threads`. Esto determina el número de subprocesos que se pueden utilizar para determinadas operaciones, como la multiplicación de matrices y las reducciones para las aceleraciones. Un valor de `0` significa que el sistema selecciona un número apropiado. | 
| `SAGEMAKER_GUNICORN_WORKERS` | Esto regula la cantidad de procesos de trabajo que se le pide a Gunicorn que genere para gestionar las solicitudes. Este valor se utiliza en combinación con otros parámetros para obtener un conjunto que maximice el rendimiento de las inferencias. Además de esto, `SAGEMAKER_GUNICORN_WORKER_CLASS` regula el tipo de procesos de trabajo generados, normalmente `async` o `gevent`. | 
| `SAGEMAKER_GUNICORN_WORKER_CLASS` | Esto regula la cantidad de procesos de trabajo que se le pide a Gunicorn que genere para gestionar las solicitudes. Este valor se utiliza en combinación con otros parámetros para obtener un conjunto que maximice el rendimiento de las inferencias. Además de esto, `SAGEMAKER_GUNICORN_WORKER_CLASS` regula el tipo de procesos de trabajo generados, normalmente `async` o `gevent`. | 
| `OMP_NUM_THREADS` | Python usa internamente OpenMP para implementar subprocesos múltiples en los procesos. Por lo general, se generan subprocesos equivalentes a la cantidad de núcleos de la CPU. Sin embargo, cuando la implementación ocurre sobre el subprocesamiento múltiple simultáneo (SMT), como el HypeThreading de Intel, un proceso determinado puede sobresuscribir un núcleo determinado al generar el doble de subprocesos que el número real de núcleos de la CPU. En ciertos casos, un binario de Python puede terminar generando hasta cuatro veces más subprocesos que los núcleos de procesador disponibles. Por lo tanto, una configuración ideal para este parámetro, si ha sobresuscrito núcleos disponibles mediante subprocesos de trabajo, es `1` o la mitad del número de núcleos de CPU en una CPU con el SMT activado. | 
|  `TF_DISABLE_MKL` `TF_DISABLE_POOL_ALLOCATOR`  | En algunos casos, la desactivación de MKL puede acelerar la inferencia si `TF_DISABLE_MKL` y `TF_DISABLE_POOL_ALLOCATOR` se establecen en `1`. | 

**PyTorch**


| Variable de entorno | Descripción | 
| --- | --- | 
|  `SAGEMAKER_TS_MAX_BATCH_DELAY`  |  Este es el tiempo máximo de retraso por lote que TorchServe espera para recibir.  | 
|  `SAGEMAKER_TS_BATCH_SIZE`  |  Si TorchServe no recibe la cantidad de solicitudes especificadas en `batch_size` antes de que se acabe el tiempo, envía las solicitudes recibidas al controlador del modelo.  | 
|  `SAGEMAKER_TS_MIN_WORKERS`  |  El número mínimo de procesos al que puede llegar TorchServe en la reducción.  | 
|  `SAGEMAKER_TS_MAX_WORKERS`  |  El número máximo de procesos al que puede llegar TorchServe en la ampliación.  | 
|  `SAGEMAKER_TS_RESPONSE_TIMEOUT`  |  El tiempo de espera; tras este tiempo, se agota el tiempo de espera de la inferencia si no hay respuesta.  | 
|  `SAGEMAKER_TS_MAX_REQUEST_SIZE`  |  Tamaño máximo de carga de TorchServe.  | 
|  `SAGEMAKER_TS_MAX_RESPONSE_SIZE`  |  Tamaño máximo de respuesta de TorchServe.  | 

**Servidor multimodelo (MMS)**


| Variable de entorno | Descripción | 
| --- | --- | 
|  `job_queue_size`  |  Resulta útil ajustar este parámetro en situaciones en las que el tipo de carga de la solicitud de inferencia es grande; puesto que el tamaño de la carga es mayor, es posible que haya un consumo mayor de memoria de pila de la JVM en la que se mantiene esta cola. Lo ideal sería mantener bajos los requisitos de memoria de pila de la JVM y permitir que los procesos de trabajo de Python asignen más memoria para el suministro del modelo. La JVM solo sirve para recibir las solicitudes HTTP, ponerlas en cola y enviarlas a los procesos de trabajo basados en Python para la inferencia. Si aumenta el `job_queue_size`, podría terminar aumentando el consumo de memoria dinámica de la JVM y, en última instancia, quitando memoria del host, algo que los procesos de trabajo de Python podrían haber empleado. Por lo tanto, tenga cuidado también al ajustar este parámetro.  | 
|  `default_workers_per_model`  |  Este parámetro se usa para el servidor del modelo de backend. Podría resultar útil ajustarlo, ya que es el componente más importante en el suministro general del modelo; los procesos de Python se basan en esto a fin de generar subprocesos para cada modelo. Si este componente es más lento (o no está ajustado correctamente), es posible que el ajuste del frontend no sea efectivo.  | 

## P: ¿Cómo puedo asegurarme de que mi contenedor sea compatible con la inferencia asíncrona?
<a name="async-troubleshooting-q3"></a>

Puede usar el mismo contenedor para la inferencia asíncrona que para la inferencia en tiempo real o Batch Transform. Compruebe que los tiempos de espera y los límites de tamaño de la carga de su contenedor estén configurados para gestionar cargas más grandes y tiempos de espera más largos.

## P: ¿Cuáles son los límites específicos de la inferencia asíncrona? ¿Se pueden ajustar?
<a name="async-troubleshooting-q4"></a>

Consulte los siguientes límites para la inferencia asíncrona:
+ Límite de tamaño de carga: 1 GB.
+ Límite de tiempo de espera: una solicitud puede tardar hasta 60 minutos.
+ TimeToLive (TTL) de mensajes de cola: 6 horas.
+ Número de mensajes que se pueden incluir en Amazon SQS: ilimitado. Sin embargo, hay una cuota de 120 000 para el número de mensajes en tránsito para una cola estándar y de 20 000 para una cola FIFO.

## P: ¿Qué métricas es mejor definir para el escalado automático en la inferencia asíncrona? ¿Puedo tener varias políticas de escalado?
<a name="async-troubleshooting-q5"></a>

En términos generales, con la inferencia asíncrona, puede escalar horizontalmente en función de las invocaciones o las instancias. En el caso de las métricas de invocación, es recomendable que consulte su `ApproximateBacklogSize`, una métrica que define el número de elementos de la cola que aún no se han procesado. Puede utilizar esta métrica o su métrica `InvocationsPerInstance` para determinar a qué TPS se limita el rendimiento. En el nivel de la instancia, compruebe el tipo de instancia y el uso de la CPU/GPU para definir cuándo escalar horizontalmente. A menudo, una instancia individual con una capacidad superior al 60 o 70 % es un buen indicativo de que se está saturando el hardware.

No recomendamos tener varias políticas de escalado, ya que pueden entrar en conflicto y generar confusión en el hardware, lo que podría provocar retrasos al escalar horizontalmente.

## P: ¿Por qué finaliza el punto de conexión asíncrono una instancia como `Unhealthy`? ¿Por qué fallan las solicitudes de actualización del escalado automático?
<a name="async-troubleshooting-q6"></a>

Compruebe si el contenedor puede gestionar a la vez solicitudes de ping e invocación. Las solicitudes de invocación de SageMaker AI tardan aproximadamente tres minutos; durante este tiempo, suele haber fallos en varias solicitudes de ping debido al tiempo de espera, lo que hace que SageMaker AI detecte el contenedor como `Unhealthy`.

## P: ¿Puede funcionar `MaxConcurrentInvocationsPerInstance` con un contenedor de modelo BYOC y con la configuración ningx/gunicorn/flask?
<a name="async-troubleshooting-q7"></a>

Sí, `MaxConcurrentInvocationsPerInstance` es una característica de los puntos de conexión asíncronos. Esto no depende de la implementación del contenedor personalizado. `MaxConcurrentInvocationsPerInstance` controla la velocidad a la que se envían las solicitudes de invocación al contenedor del cliente. Si este valor se establece en `1`, solo se envía una solicitud al contenedor a la vez, independientemente del número de trabajadores que haya en el contenedor del cliente.

## P: ¿Cómo puedo depurar los errores de servidor del modelo (500) en el punto de conexión?
<a name="async-troubleshooting-q8"></a>

Este error implica que el contenedor del cliente ha devuelto un error. SageMaker AI no controla el comportamiento de los contenedores de los clientes. SageMaker AI solo devuelve la respuesta de `ModelContainer` y no hace un nuevo intento. Si lo desea, puede configurar la invocación para que se vuelva a intentar en caso de error. Le sugerimos que active los registros de contenedores y que los revise a fin de encontrar la causa principal del error 500 del modelo. Revise también las métricas `CPUUtilization` y `MemoryUtilization` correspondientes en el punto de fallo. También puede configurar [S3FailurePath](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AsyncInferenceOutputConfig.html#sagemaker-Type-AsyncInferenceOutputConfig-S3FailurePath) hacia la respuesta del modelo en Amazon SNS como parte de las notificaciones de errores asíncronos a fin de investigar los errores.

## P: ¿Cómo puedo saber si `MaxConcurrentInvocationsPerInstance=1` ha entrado en vigor? ¿Hay alguna métrica que pueda comprobar?
<a name="async-troubleshooting-q9"></a>

Puede comprobar la métrica `InvocationsProcesssed`, que debería coincidir con el número de invocaciones que espera que se procesen en un minuto en función de la simultaneidad única.

## P: ¿Cómo puedo hacer un seguimiento de los errores/no errores en mis solicitudes de invocación? ¿Cuáles son los procedimientos recomendados?
<a name="async-troubleshooting-q10"></a>

El procedimiento recomendado consiste en habilitar Amazon SNS, que es un servicio de notificación para aplicaciones orientadas a la mensajería; los suscriptores solicitan y reciben notificaciones “push” de mensajes urgentes a través de distintos protocolos de transporte, como HTTP, Amazon SQS y el correo electrónico. La inferencia asíncrona publica notificaciones cuando crea un punto de conexión con `CreateEndpointConfig` y especifica un tema de Amazon ANS.

Para utilizar Amazon SNS a fin de revisar los resultados de las predicciones de su punto de conexión asíncrono, primero debe crear un tema, suscribirse a este, confirmar la suscripción y anotar el nombre de recurso de Amazon (ARN) de ese tema. Para obtener información detallada sobre cómo crear un tema de Amazon SNS, suscribirse a este y buscar su ARN de Amazon, consulte [Configuración de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html) en la *Guía para desarrolladores de Amazon SNS*. Para obtener más información cobre cómo utilizar Amazon SNS con la inferencia asíncrona, consulte [Check prediction results](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-check-predictions.html).

## P: ¿Puedo definir una política de escalado que escale verticalmente desde cero instancias al recibir una nueva solicitud?
<a name="async-troubleshooting-q11"></a>

Sí. La inferencia asíncrona proporciona un mecanismo para reducir verticalmente hasta cero instancias cuando no hay solicitudes. Si el punto de conexión se ha reducido verticalmente a cero instancias durante estos períodos, no volverá a escalar hasta que el número de solicitudes en la cola supere el objetivo especificado en la política de escalado. Esto puede provocar largos tiempos de espera para las solicitudes en cola. En estos casos, si quiere escalar verticalmente desde cero instancias para nuevas solicitudes inferiores al objetivo de cola especificado, puedes usar una política de escalado adicional denominada `HasBacklogWithoutCapacity`. Para obtener más información acerca del modo de definir esta política de escalado, consulte [Autoscale an asynchronous endpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-autoscale.html#async-inference-autoscale-scale-up).

## P: Me aparece un error que indica que el tipo de instancia no es compatible con la inferencia asíncrona. ¿Cuáles son los tipos de instancia compatibles con la inferencia asíncrona?
<a name="async-troubleshooting-q12"></a>

Para obtener una lista completa de las instancias compatibles con la inferencia asíncrona por región, consulte [Precios de Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/). Compruebe si la instancia requerida está disponible en su región antes de continuar.

# Transformación por lotes para inferencias con Amazon AI SageMaker
<a name="batch-transform"></a>

Use la transformación por lotes cuando tenga que hacer lo siguiente: 
+ Procesar previamente los conjuntos de datos para acabar con el ruido o la compensación que interfiere con el entrenamiento o la inferencia del conjunto de datos.
+ Obtener inferencias de los conjuntos de datos grandes.
+ Ejecutar la inferencia cuando no sea necesario un punto de enlace persistente.
+ Asocie registros de entrada con inferencias para ayudar a interpretar los resultados.

Para filtrar los datos de entrada antes de realizar inferencias o asociar los registros de entrada con inferencias sobre estos registros, consulte [Asociar los resultados de la predicción con registros de entrada](batch-transform-data-processing.md). Por ejemplo, puede filtrar los datos de entrada para proporcionar contexto para crear e interpretar informes acerca de los datos de salida.

**Topics**
+ [Uso de la transformación por lotes para obtener inferencias de conjuntos de datos grandes](#batch-transform-large-datasets)
+ [Aceleración de un trabajo de transformación por lotes](#batch-transform-reduce-time)
+ [Uso de la transformación por lotes para probar variantes de producción](#batch-transform-test-variants)
+ [Cuaderno de muestra de transformación por lotes](#batch-transform-notebooks)
+ [Asociar los resultados de la predicción con registros de entrada](batch-transform-data-processing.md)
+ [Almacenamiento en Batch Transform](batch-transform-storage.md)
+ [Resolución de problemas](batch-transform-errors.md)

## Uso de la transformación por lotes para obtener inferencias de conjuntos de datos grandes
<a name="batch-transform-large-datasets"></a>

La transformación por lotes administra automáticamente el procesamiento de conjuntos de datos de gran tamaño dentro de los límites de los parámetros especificados. Por ejemplo, tenemos un archivo del conjunto de datos, `input1.csv`, almacenado en un bucket de S3. El contenido del archivo de entrada podría tener un aspecto similar al del siguiente ejemplo.

```
Record1-Attribute1, Record1-Attribute2, Record1-Attribute3, ..., Record1-AttributeM
Record2-Attribute1, Record2-Attribute2, Record2-Attribute3, ..., Record2-AttributeM
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
...
RecordN-Attribute1, RecordN-Attribute2, RecordN-Attribute3, ..., RecordN-AttributeM
```

Cuando se inicia un trabajo de transformación por lotes, la SageMaker IA inicia las instancias de cómputo y distribuye la carga de trabajo de inferencia o preprocesamiento entre ellas. Batch Transform divide los objetos de Amazon S3 en la entrada por clave y asigna objetos de Amazon S3 a instancias. Si tiene varios archivos, una instancia podría procesar `input1.csv`, mientras que otra instancia podría procesar el archivo llamado `input2.csv`. Si tiene un archivo de entrada, pero inicializa varias instancias de computación, solo una instancia procesará el archivo de entrada. El resto de las instancias están inactivas.

También puede dividir los archivos de entrada en minilotes. Por ejemplo, puede crear un minilote a partir de `input1.csv` incluyendo solo dos de los registros.

```
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
Record4-Attribute1, Record4-Attribute2, Record4-Attribute3, ..., Record4-AttributeM
```

**nota**  
SageMaker La IA procesa cada archivo de entrada por separado. No combina minilotes de diferentes archivos de entrada para cumplir con el límite [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ).

Para dividir los archivos de entrada en minilotes al crear un trabajo de transformación por lotes, defina el valor del [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             )parámetro en. `Line` SageMaker La IA utiliza todo el archivo de entrada en una sola solicitud cuando:
+ `SplitType` se establece en `None`.
+ Un archivo de entrada no puede dividirse en minilotes.

Tenga en cuenta que la transformación por lotes no admite entradas con formato CSV que contengan caracteres de nueva línea incrustados. Puede controlar el tamaño de los minilotes mediante los parámetros `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` y `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)`. `MaxPayloadInMB` no debe ser superior a 100 MB. Si especifica el parámetro `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)` opcional, el valor de `(MaxConcurrentTransforms * MaxPayloadInMB)` tampoco debe superar los 100 MB.

Si el trabajo de transformación por lotes procesa correctamente todos los registros en un archivo de entrada, crea un archivo de salida. Dicho archivo de salida tiene el mismo nombre y la misma extensión de archivo `.out`. Para varios archivos de entrada, como, por ejemplo, `input1.csv` e `input2.csv`, los archivos de salida se denominan `input1.csv.out` e `input2.csv.out`. El trabajo de transformación por lotes almacena los archivos de salida en la ubicación especificada en Amazon S3, como `s3://amzn-s3-demo-bucket/output/`. 

La predicciones en un archivo de salida se enumeran en el mismo orden que los registros correspondientes en el archivo de entrada. El archivo de salida `input1.csv.out`, basado en el archivo de entrada mostrado anteriormente, tendría un aspecto similar al siguiente.

```
Inference1-Attribute1, Inference1-Attribute2, Inference1-Attribute3, ..., Inference1-AttributeM
Inference2-Attribute1, Inference2-Attribute2, Inference2-Attribute3, ..., Inference2-AttributeM
Inference3-Attribute1, Inference3-Attribute2, Inference3-Attribute3, ..., Inference3-AttributeM
...
InferenceN-Attribute1, InferenceN-Attribute2, InferenceN-Attribute3, ..., InferenceN-AttributeM
```

Si establece [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ) en `Line`, puede establecer el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ) en `Line` para concatenar los registros de salida con un delimitador de línea. De este modo, no se modifica el número de archivos de salida. El número de archivos de salida es igual al número de archivos de entrada, y el uso de `AssembleWith` no combina los archivos. Si no especifica el parámetro `AssembleWith`, los registros de salida se concatenan en formato binario de forma predeterminada.

Si el volumen de los datos de entrada es muy grande y se transmiten mediante codificación fragmentada HTTP, para transmitir los datos al algoritmo, establezca [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB) en `0`. Los algoritmos integrados de Amazon SageMaker AI no admiten esta función.

Para obtener información acerca de cómo utilizar la API para crear un trabajo de transformación por lotes, consulte la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html). Para obtener más información acerca de la relación entre los objetos de entrada y salida de transformación por lotes, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html). Para ver un ejemplo de cómo utilizar una transformación por lotes, consulte [(Opcional) Predicciones con la transformación por lotes](ex1-model-deployment.md#ex1-batch-transform).

## Aceleración de un trabajo de transformación por lotes
<a name="batch-transform-reduce-time"></a>

Si está utilizando la API de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html), puede reducir el tiempo necesario para completar los trabajos de transformación por lotes utilizando valores óptimos para parámetros. Esto incluye parámetros como [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB), [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms) o [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy). El valor ideal para `MaxConcurrentTransforms` es igual al número de procesos de computación en el trabajo de transformación por lotes. 

Si utiliza la consola SageMaker AI, especifique estos valores de parámetros óptimos en la sección **Configuración adicional de la página de configuración** del **trabajo de transformación por lotes**. SageMaker La IA encuentra automáticamente la configuración de parámetros óptima para los algoritmos integrados. Para los algoritmos personalizados, proporcione estos valores a través de un punto de conexión [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests).

## Uso de la transformación por lotes para probar variantes de producción
<a name="batch-transform-test-variants"></a>

Para probar diferentes modelos o configuración de hiperparámetros, cree un trabajo de transformación independiente para cada nueva variante de modelo y use un conjunto de datos de validación. Para cada trabajo de transformación, especifique un nombre de modelo único y la ubicación en Amazon S3 para el archivo de salida. Para analizar los resultados, utilice [Registros y métricas de canalización de inferencias](inference-pipeline-logs-metrics.md).

## Cuaderno de muestra de transformación por lotes
<a name="batch-transform-notebooks"></a>

Para ver un cuaderno de muestra que utilice la transformación por lotes, consulte [Batch Transform with PCA and DBSCAN Movie Clusters](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_batch_transform/introduction_to_batch_transform/batch_transform_pca_dbscan_movie_clusters.html). Este cuaderno utiliza la transformación por lotes con un modelo de análisis de componentes de entidades principales (PCA) para reducir los datos de una matriz de revisión de elementos de usuario. A continuación, muestra la aplicación de un algoritmo de agrupación espacial basada en densidad de aplicaciones con ruido (DBSCAN) para agrupar películas en clústeres.

 Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar el ejemplo en SageMaker IA, consulte. [Instancias de Amazon SageMaker Notebook](nbi.md) Tras crear y abrir una instancia de bloc de notas, selecciona la pestaña **SageMakerEjemplos** para ver una lista de todos los ejemplos de SageMaker IA. Los blocs de notas de muestra de modelado de temas que utilizan los algoritmos NTM se encuentran en la sección **Funcionalidad avanzada**. Para abrir un cuaderno, elija su pestaña **Usar** y, a continuación, elija **Crear copia**.

# Asociar los resultados de la predicción con registros de entrada
<a name="batch-transform-data-processing"></a>

Al hacer predicciones sobre un conjunto de datos de gran tamaño, podrá excluir los atributos que no sean necesarios para la predicción. Una vez que se hayan hecho las predicciones, podrá asociar algunos de los atributos excluidos con esas predicciones o con los datos de entrada del informe. Al usar la transformación por lotes para seguir estos pasos de procesamiento de datos, a menudo podrá eliminar el procesamiento previo o posterior adicional. Solo podrá usar archivos de entrada en formato JSON y CVS. 

**Topics**
+ [Flujo de trabajo de asociación de inferencias a registros de entrada](#batch-transform-data-processing-workflow)
+ [Uso del procesamiento de datos en los trabajos de transformación por lotes](#batch-transform-data-processing-steps)
+ [Operadores compatibles JSONPath](#data-processing-operators)
+ [Ejemplos de transformación por lotes](#batch-transform-data-processing-examples)

## Flujo de trabajo de asociación de inferencias a registros de entrada
<a name="batch-transform-data-processing-workflow"></a>

En el siguiente diagrama se muestra el flujo de trabajo de asociación de inferencias a registros de entrada.

![\[Flujo de trabajo de asociación de inferencias a registros de entrada.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/batch-transform-data-processing.png)


Para asociar inferencias a datos de entrada, existen tres pasos principales:

1. Filtre los datos de entrada que no sean necesarios para la inferencia antes de transferirlos al trabajo de transformación por lotes. Use el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ) para determinar qué atributos se deben usar como entrada para el modelo.

1. Asocie los datos de entrada con los resultados de la inferencia. Use el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ) para combinar los datos de entrada con la inferencia.

1. Filtre los datos unidos a fin de conservar las entradas necesarias para proporcionar contexto para la interpretación de las predicciones en los informes. Use [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ) para almacenar la parte especificada del conjunto de datos unido en el archivo de salida.

## Uso del procesamiento de datos en los trabajos de transformación por lotes
<a name="batch-transform-data-processing-steps"></a>

Al crear un trabajo de transformación por lotes con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) para procesar datos:

1. Especifique la parte de la entrada que se va a transferir al modelo con el parámetro `InputFilter` en la estructura de datos `DataProcessing`. 

1. Una los datos de entrada sin procesar con los datos transformados con el parámetro `JoinSource`.

1. Especifique qué parte de los datos transformados y de entrada unidos del trabajo de transformación por lotes se va a incluir en el archivo de salida con el parámetro `OutputFilter`.

1.  Elija archivos con formato JSON o CSV para la entrada: 
   + En el caso de los archivos de entrada con formato de líneas JSON o JSON, la SageMaker IA añade el `SageMakerOutput` atributo al archivo de entrada o crea un nuevo archivo de salida JSON con los `SageMakerInput` atributos y. `SageMakerOutput` Para obtener más información, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html). 
   + Para los archivos de entrada con formato CSV, los datos de entrada unidos van seguidos de los datos transformados y la salida es un archivo CSV.

Si usa un algoritmo con la estructura `DataProcessing`, debe admitir su formato elegido *tanto* para los archivos de entrada como para los de salida. Por ejemplo, con el campo [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html) de la API `CreateTransformJob`, debe establecer los parámetros [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) y [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept) a uno de los siguientes valores: `text/csv`, `application/json` o `application/jsonlines`. La sintaxis para especificar columnas en un archivo CSV es distinta de la sintaxis para especificar atributos en un archivo JSON. El uso de la sintaxis incorrecta provoca un error. Para obtener más información, consulte [Ejemplos de transformación por lotes](#batch-transform-data-processing-examples). Para obtener más información acerca de los formatos de archivo de entrada y salida para los algoritmos integrados, consulte [Algoritmos integrados y modelos previamente entrenados en Amazon SageMaker](algos.md).

Los delimitadores de registro para la entrada y la salida también deben ser consistentes con su entrada de archivo elegida. El parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType) indica cómo dividir los registros en el conjunto de datos de entrada. El parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ) indica cómo volver a ensamblar los registros para la salida. Si establece formatos de entrada y salida en `text/csv`, también deberá establecer los parámetros `SplitType` y `AssembleWith` en `line`. Si define los formatos de entrada y salida en `application/jsonlines`, podrá establecer `SplitType` y `AssembleWith` en `line`.

En el caso de los archivos CSV, no puede utilizar caracteres de nueva línea incrustados. Para los archivos JSON, el nombre de atributo `SageMakerOutput` se reserva para la salida. El archivo de entrada JSON no puede tener un atributo con este nombre. Si lo tiene, los datos del archivo de entrada podrían sobrescribirse. 

## Operadores compatibles JSONPath
<a name="data-processing-operators"></a>

Para filtrar y unir los datos de entrada y la inferencia, utilice una JSONPath subexpresión. SageMaker La IA solo admite un subconjunto de los operadores definidos. JSONPath En la siguiente tabla se enumeran los JSONPath operadores compatibles. En el caso de los datos CSV, cada fila se toma como una matriz JSON, por lo que solo se JSONPaths pueden aplicar los datos basados en índices`$[0]`, por ejemplo`$[1:]`. Los datos CSV también deben seguir el [formato RFC](https://tools.ietf.org/html/rfc4180).


| JSONPath Operador | Description (Descripción) | Ejemplo | 
| --- | --- | --- | 
| \$1 |  El elemento raíz para una consulta. Este operador es necesario al principio de todas las expresiones de ruta.  | \$1 | 
| .<name> |  Un elemento secundario con notación de puntos.  |  `$.id`  | 
| \$1 |  Un comodín. Úselo en lugar de un nombre de atributo o valor numérico.  |  `$.id.*`  | 
| ['<name>' (,'<name>')] |  Un elemento con notación de corchete o varios elementos secundarios.  |  `$['id','SageMakerOutput']`  | 
| [<number> (,<number>)] |  Un índice o una matriz de índices. También se admiten valores de índice negativos. Un índice `-1` hace referencia al último elemento de una matriz.  |  `$[1]` , `$[1,3,5]`  | 
| [<start>:<end>] |  Un operador Slice de la matriz. El método Slice() de la matriz extrae una sección de una matriz y devuelve una nueva matriz. Si lo omites*<start>*, la SageMaker IA utiliza el primer elemento de la matriz. Si lo omites*<end>*, la SageMaker IA utilizará el último elemento de la matriz.  |  `$[2:5]`, `$[:5]`, `$[2:]`  | 

Cuando se utiliza la notación de corchetes para especificar varios elementos secundarios de un campo determinado, no se permite el anidamiento adicional de elementos secundarios dentro de los corchetes. Por ejemplo, `$.field1.['child1','child2']` sí se admite, pero `$.field1.['child1','child2.grandchild']` no. 

Para obtener más información sobre JSONPath los operadores, consulte [JsonPath](https://github.com/json-path/JsonPath). GitHub

## Ejemplos de transformación por lotes
<a name="batch-transform-data-processing-examples"></a>

En los siguientes ejemplos se muestran algunas formas habituales de unir los datos de entrada con los resultados de la predicción.

**Topics**
+ [Ejemplo: generación de inferencias solamente](#batch-transform-data-processing-example-default)
+ [Ejemplo: inferencias de salida unidas a datos de entrada](#batch-transform-data-processing-example-all)
+ [Ejemplo: inferencias de salida unidas a datos de entrada y exclusión de la columna de ID de la entrada (CSV)](#batch-transform-data-processing-example-select-csv)
+ [Ejemplo: inferencias de salida unidas con una columna ID y exclusión de la columna ID de la entrada (CSV)](#batch-transform-data-processing-example-select-json)

### Ejemplo: generación de inferencias solamente
<a name="batch-transform-data-processing-example-default"></a>

De forma predeterminada, el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing) no une los resultados de la inferencia con la entrada. Solo genera los resultados de la inferencia.

Si desea especificar de forma explícita que no se unan los resultados con la entrada, utilice el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) y especifique los siguientes ajustes en una llamada a un transformador.

```
sm_transformer = sagemaker.transformer.Transformer(…)
sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")
```

Para generar inferencias con el AWS SDK para Python, agrega el siguiente código a tu CreateTransformJob solicitud. El siguiente código imita el comportamiento predeterminado.

```
{
    "DataProcessing": {
        "InputFilter": "$",
        "JoinSource": "None",
        "OutputFilter": "$"
    }
}
```

### Ejemplo: inferencias de salida unidas a datos de entrada
<a name="batch-transform-data-processing-example-all"></a>

Si utiliza el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) para combinar los datos de entrada con las inferencias del archivo de salida, especifique los `accept` parámetros `assemble_with` y al inicializar el objeto transformador. Cuando utilice la llamada de transformación, especifique `Input` para el parámetro `join_source` y especifique también los parámetros `split_type` y `content_type`. El parámetro `split_type` debe tener el mismo valor que `assemble_with`, y el parámetro `content_type` debe tener el mismo valor que `accept`. Para obtener más información sobre los parámetros y sus valores aceptados, consulte la página [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) del *Amazon SageMaker AI Python SDK*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")
```

Si utilizas el AWS SDK para Python (Boto 3), une todos los datos de entrada con la inferencia añadiendo el siguiente código a tu [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)solicitud. Los valores de `Accept` y `ContentType` deben coincidir, y los valores de `AssembleWith` y `SplitType` también deben coincidir.

```
{
    "DataProcessing": {
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

Para los archivos de entrada JSON o de líneas de JSON, los resultados están en la clave `SageMakerOutput` del archivo JSON de entrada. Por ejemplo, si la entrada es un archivo JSON que incluye el par clave-valor `{"key":1}`, el resultado de la transformación de los datos puede ser `{"label":1}`.

SageMaker AI almacena ambos en el archivo de entrada de la `SageMakerInput` clave.

```
{
    "key":1,
    "SageMakerOutput":{"label":1}
}
```

**nota**  
El resultado unido para JSON debe ser un objeto de par clave-valor. Si la entrada no es un objeto de par clave-valor, SageMaker AI crea un nuevo archivo JSON. En el nuevo archivo JSON, los datos de entrada se almacenan en la clave `SageMakerInput`, mientras que los resultados se almacenan como el valor `SageMakerOutput`.

Para un archivo CSV, por ejemplo, si el registro es `[1,2,3]` y el resultado de la etiqueta es `[1]`, el archivo de salida incluiría `[1,2,3,1]`.

### Ejemplo: inferencias de salida unidas a datos de entrada y exclusión de la columna de ID de la entrada (CSV)
<a name="batch-transform-data-processing-example-select-csv"></a>

Si utiliza el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) para unir los datos de entrada con la salida de la inferencia y, al mismo tiempo, excluir una columna de ID de la entrada del transformador, especifique los mismos parámetros del ejemplo anterior, así como una JSONPath subexpresión para la llamada `input_filter` in your transformer. Por ejemplo, si en sus datos de entrada se incluyen cinco columnas y la primera es la columna ID, use la siguiente solicitud del transformador para seleccionar todas las columnas excepto la columna ID como características. El transformador sigue emitiendo todas las columnas de entrada unidas a las inferencias. Para obtener más información sobre los parámetros y sus valores aceptados, consulte la página [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) del *Amazon SageMaker AI Python SDK*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")
```

Si utilizas el AWS SDK para Python (Boto 3), añade el siguiente código a tu `[ CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)` solicitud.

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

Para especificar columnas en SageMaker AI, usa el índice de los elementos de la matriz. La primera columna es el índice 0, la segunda columna es el índice 1 y la sexta columna es el índice 5.

Para excluir la primera columna de la entrada, establezca `[InputFilter](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter )` en `"$[1:]"`. Los dos puntos (`:`) indican a SageMaker AI que incluya todos los elementos entre dos valores, ambos inclusive. Por ejemplo, `$[1:4]` especifica de la segunda a la quinta columnas.

Si omite el número después de los dos puntos, por ejemplo, `[5:]`, el subconjunto incluye todas las columnas desde la sexta hasta la última columna. Si omite el número antes de los dos puntos, por ejemplo, `[:5]`, el subconjunto incluye todas las columnas desde la primera columna (índice 0) hasta la sexta columna.

### Ejemplo: inferencias de salida unidas con una columna ID y exclusión de la columna ID de la entrada (CSV)
<a name="batch-transform-data-processing-example-select-json"></a>

Si utiliza el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable), puede especificar la salida para unir solo columnas de entrada específicas (como la columna de ID) con las inferencias especificándolas `output_filter` en la llamada al transformador. `output_filter`Utiliza una JSONPath subexpresión para especificar qué columnas se devolverán como salida después de unir los datos de entrada con los resultados de la inferencia. La siguiente solicitud muestra cómo hacer predicciones excluyendo una columna de ID y, a continuación, uniendo la columna de ID a las inferencias. Tenga en cuenta que, en el siguiente ejemplo, la última columna (`-1`) de la salida contiene las inferencias. Si utiliza archivos JSON, SageMaker AI almacena los resultados de la inferencia en el atributo. `SageMakerOutput` Para obtener más información sobre los parámetros y sus valores aceptados, consulte la página [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) del *Amazon SageMaker AI Python SDK*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")
```

Si utilizas el AWS SDK para Python (Boto 3), añade el siguiente código a tu [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)solicitud para unir solo la columna ID con las inferencias.

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input",
        "OutputFilter": "$[0,-1]"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

**aviso**  
Si usa un archivo de entrada con formato JSON, el archivo no puede contener el nombre de atributo `SageMakerOutput`. Este nombre de atributo se reserva para las inferencias en el archivo de salida. Si el archivo de entrada con formato JSON contiene un atributo con este nombre, los valores del archivo de entrada podrían sobrescribirse con la inferencia.

# Almacenamiento en Batch Transform
<a name="batch-transform-storage"></a>

Cuando ejecuta un trabajo de transformación por lotes, Amazon SageMaker AI adjunta un volumen de almacenamiento de Amazon Elastic Block Store a las instancias de Amazon EC2 que procesan su trabajo. El volumen almacena su modelo y el tamaño del volumen de almacenamiento se fija en 30 GB. Tiene la opción de cifrar el modelo en reposo en el volumen de almacenamiento.

**nota**  
Si tiene un modelo grande, puede encontrarse con un `InternalServerError`.

Para obtener más información sobre el almacenamiento y las características de Amazon EBS, consulte las siguientes páginas:
+ [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) en la Guía del usuario de Amazon EC2
+ [Volúmenes de Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes.html) en la Guía del usuario de Amazon EC2

**nota**  
Las instancias G4dn vienen con su propio almacenamiento SSD local. Para obtener más información sobre las instancias G4dn, consulte la página [Instancias G4 de Amazon EC2](https://aws.amazon.com/ec2/instance-types/g4/).

# Resolución de problemas
<a name="batch-transform-errors"></a>

Si tiene errores en Amazon SageMaker AI Batch Transform, consulte los siguientes consejos de solución de problemas.

## Errores de tiempo de espera máximo
<a name="batch-transform-errors-max-timeout"></a>

Si hay errores de tiempo de espera máximos al ejecutar trabajos de transformación por lotes, intente lo siguiente:
+ Comience con la `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` de registro único, un lote del tamaño predeterminado (6 MB) o inferior que se especifica en el parámetro `[MaxPayloadInMB](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)` y un conjunto de datos de muestra pequeño. Ajuste el parámetro de tiempo de espera máximo `[InvocationsTimeoutInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelClientConfig.html#sagemaker-Type-ModelClientConfig-InvocationsTimeoutInSeconds)` (que tiene un máximo de 1 hora) hasta que reciba una respuesta de invocación correcta.
+ Cuando reciba una respuesta de invocación correcta, aumente los parámetros `MaxPayloadInMB` (con un máximo de 100 MB) y `InvocationsTimeoutInSeconds` juntos para encontrar el tamaño de lote máximo que pueda soportar el tiempo de espera del modelo deseado. En este paso, puede utilizar la `BatchStrategy` de registro único o de registro múltiple.
**nota**  
Exceder el límite `MaxPayloadInMB` provoca un error. Esto podría ocurrir con un conjunto de datos de gran tamaño si no se puede dividir, si el parámetro `SplitType` se establece en “ninguno” o si los registros individuales del conjunto de datos superan el límite.
+ (Opcional) Ajuste el parámetro `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)`, que especifica el número máximo de solicitudes en paralelo que se pueden enviar a cada instancia de un trabajo de transformación por lotes. Sin embargo, el valor de `MaxConcurrentTransforms * MaxPayloadInMB` no debe superar los 100 MB.

## Salida incompleta
<a name="batch-transform-errors-incomplete"></a>

SageMaker La IA utiliza la [API de carga multiparte](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html) de Amazon S3 para cargar los resultados de un trabajo de transformación por lotes a Amazon S3. Si se produce un error, los resultados cargados se eliminan de Amazon S3. En algunos casos, como cuando se produce una interrupción de la red, podría quedar una carga multiparte incompleta en Amazon S3. También puede producirse una carga incompleta si tienes varios archivos de entrada, pero SageMaker AI Batch Transform no puede procesar algunos de ellos. Los archivos de entrada que no se hayan podido procesar no tendrán los archivos de salida correspondientes en Amazon S3.

Para evitar incurrir en cargos de almacenamiento, le recomendamos que añada la [política de bucket de S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) a las reglas de ciclo de vida de bucket de S3. Esta política elimina las cargas multiparte incompletas que podrían almacenarse en el bucket de S3. Para obtener más información, consulte [Administración del ciclo de vida de los objetos](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html).

## El trabajo aparece como `failed`
<a name="batch-transform-errors-failed"></a>

Si un trabajo de transformación por lotes no procesa un archivo de entrada debido a un problema con el conjunto de datos, SageMaker AI marca el trabajo como`failed`. Si un archivo de entrada contiene un registro erróneo, el trabajo de transformación no crea un archivo de salida para dicho archivo de entrada, ya que, así, se evita mantener el mismo orden en los datos transformados como en el archivo de entrada. Si el conjunto de datos tiene varios archivos de entrada, sigue un trabajo de transformación para procesar archivos de entrada incluso si el procesamiento de uno devuelve un error. Los archivos procesados todavía generan resultados que se pueden utilizar.

Si utiliza sus propios algoritmos, puede utilizar texto de marcador de posición, como, por ejemplo `ERROR`, cuando el algoritmo encuentre un registro erróneo en un archivo de entrada. Por ejemplo, si el último registro de un conjunto de datos es incorrecto, el algoritmo coloca el texto del marcador de posición para ese registro en el archivo de salida.

# Paralelismo de modelos e inferencia de modelos grandes
<a name="large-model-inference"></a>

 Amazon SageMaker AI incluye contenedores de aprendizaje profundo (DLC), bibliotecas y herramientas especializados para el paralelismo de modelos e inferencia de modelos grandes (LMI). En las siguientes secciones, puede encontrar recursos para comenzar a usar LMI en SageMaker AI. 

**Topics**
+ [Documentación del contenedor de inferencia de modelos grandes (LMI)](large-model-inference-container-docs.md)
+ [Parámetros de punto de conexión de SageMaker AI para inferencia de modelos grandes](large-model-inference-hosting.md)
+ [Implementación de modelos sin comprimir](large-model-inference-uncompressed.md)
+ [Implemente modelos de gran tamaño para realizar inferencias con TorchServe](large-model-inference-tutorials-torchserve.md)

# Documentación del contenedor de inferencia de modelos grandes (LMI)
<a name="large-model-inference-container-docs"></a>

La documentación sobre [Large Model Inference (LMI) container](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/index.html) se proporciona en el sitio de documentación de Deep Java Library. 

La documentación está dirigida a desarrolladores, científicos de datos e ingenieros de aprendizaje automático que necesitan implementar y optimizar modelos de lenguaje de gran tamaño (LLMs) en Amazon SageMaker AI. Le ayuda a utilizar los contenedores LMI, que son contenedores Docker especializados para la inferencia LLM, proporcionados por. AWS Proporciona información general, guías de implementación y guías de usuario para las bibliotecas de inferencias compatibles, así como tutoriales avanzados.

Al utilizar la documentación del contenedor de LMI, podrá:
+ Comprender los componentes y la arquitectura de los contenedores de LMI.
+ Aprender a seleccionar el tipo de instancia y el backend adecuados para su caso de uso.
+ Configure e implemente LLMs en SageMaker IA mediante contenedores LMI
+ Optimizar el rendimiento mediante características como la cuantificación, el paralelismo de tensores y el procesamiento continuo por lotes.
+ Evalúe y ajuste sus puntos finales de SageMaker IA para obtener un rendimiento y una latencia óptimos

# Parámetros de punto de conexión de SageMaker AI para inferencia de modelos grandes
<a name="large-model-inference-hosting"></a>

 Puede personalizar los siguientes parámetros para facilitar la inferencia de modelos grandes (LMI) de baja latencia con SageMaker AI: 
+  **Tamaño máximo del volumen de Amazon EBS en la instancia (`VolumeSizeInGB`)**: si el tamaño del modelo es superior a 30 GB y utiliza una instancia sin disco local, debe aumentar este parámetro para que sea ligeramente mayor que el tamaño del modelo. 
+  **Cuota de tiempo de espera de comprobación de estado (`ContainerStartupHealthCheckTimeoutInSeconds`)**: si el contenedor está configurado correctamente y los registros de CloudWatch indican que se ha agotado el tiempo de espera de comprobación de estado, debe aumentar esta cuota para que el contenedor tenga tiempo suficiente para responder a las comprobaciones de estado. 
+  **Cuota de tiempo de espera de descarga del modelo (`ModelDataDownloadTimeoutInSeconds`)**: si el tamaño del modelo es superior a 40 GB, debe aumentar esta cuota para disponer de tiempo suficiente para descargar el modelo de Amazon S3 a la instancia. 

El siguiente fragmento de código muestra cómo configurar mediante programación los parámetros mencionados. Sustituya el *texto en cursiva del marcador* por su propia información. 

```
import boto3

aws_region = "aws-region"
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name = "endpoint-name"

# Create an endpoint config name.
endpoint_config_name = "endpoint-config-name"

# The name of the model that you want to host.
model_name = "the-name-of-your-model"

instance_type = "instance-type"

sagemaker_client.create_endpoint_config(
    EndpointConfigName = endpoint_config_name
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": model_name,
            "InstanceType": instance_type, # Specify the compute instance type.
            "InitialInstanceCount": 1, # Number of instances to launch initially.
            "VolumeSizeInGB": 256, # Specify the size of the Amazon EBS volume.
            "ModelDataDownloadTimeoutInSeconds": 1800, # Specify the model download timeout in seconds.
            "ContainerStartupHealthCheckTimeoutInSeconds": 1800, # Specify the health checkup timeout in seconds
        },
    ],
)

sagemaker_client.create_endpoint(EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)
```

 Para obtener más información sobre las claves de `ProductionVariants`, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). 

Para ver ejemplos que demuestren cómo lograr una inferencia de baja latencia con modelos grandes, consulte [Generative AI Inference Examples on Amazon SageMaker AI](https://github.com/aws-samples/sagemaker-genai-hosting-examples/tree/main) en el repositorio de GitHub aws-samples. 

# Implementación de modelos sin comprimir
<a name="large-model-inference-uncompressed"></a>

 Al implementar modelos de ML, una opción es archivar y comprimir los artefactos del modelo en un formato `tar.gz`. Si bien este método funciona con modelos pequeños, comprimir un artefacto de modelo grande con cientos de miles de millones de parámetros y, a continuación, descomprimirlo en un punto de conexión puede llevar un tiempo considerable. Para la inferencia de modelos grandes, se recomienda implementar un modelo de ML sin comprimir. Esta guía muestra cómo implementar un modelo de ML sin comprimir. 

 Para implementar modelos de ML sin comprimir, cargue todos los artefactos del modelo en Amazon S3 y organícelos con un prefijo común de Amazon S3. Un prefijo de Amazon S3 es una cadena de caracteres al principio del nombre de clave de un objeto de Amazon S3, separados del resto del nombre por un delimitador. Para obtener más información acerca de los prefijos de Amazon S3, consulte [Organizar objetos con prefijos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html). 

 Para implementar con SageMaker AI, debe usar la barra inclinada (/) como delimitador. Debe asegurarse de que solo los artefactos asociados a su modelo de ML estén organizados con el prefijo. En los modelos de ML con un único artefacto sin comprimir, el prefijo será idéntico al nombre de la clave. Puede comprobar qué objetos están asociados a su prefijo con AWS CLI: 

```
aws s3 ls --recursive s3://bucket/prefix
```

 Tras cargar los artefactos del modelo en Amazon S3 y organizarlos con un prefijo común, puede especificar su ubicación como parte del campo [ModelDataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelDataSource.html) al invocar la solicitud [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html). SageMaker AI descargará automáticamente los artefactos del modelo sin comprimir a `/opt/ml/model` para su inferencia. Para obtener más información sobre las reglas que SageMaker AI utiliza a la hora de descargar los artefactos, consulte [S3ModelDataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3ModelDataSource.html). 

 El siguiente fragmento de código muestra cómo se puede invocar la API `CreateModel` al implementar un modelo sin comprimir. Reemplace el *texto del usuario en cursiva* con su propia información. 

```
model_name = "model-name"
sagemaker_role = "arn:aws:iam::123456789012:role/SageMakerExecutionRole"
container = "123456789012.dkr.ecr.us-west-2.amazonaws.com/inference-image:latest"

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        "Image": container,
        "ModelDataSource": {
            "S3DataSource": {
                "S3Uri": "s3://amzn-s3-demo-bucket/prefix/to/model/data/", 
                "S3DataType": "S3Prefix",
                "CompressionType": "None",
            },
        },
    },
)
```

 En el ejemplo mencionado anteriormente se supone que los artefactos del modelo están organizados bajo un prefijo común. Si, por el contrario, el artefacto del modelo es un único objeto de Amazon S3 sin comprimir, cambie `"S3Uri"` para apuntar al objeto de Amazon S3 y cambie `"S3DataType"` a `"S3Object"`. 

**nota**  
 Actualmente no se puede utilizar `ModelDataSource` con AWS Marketplace, transformación por lotes de SageMaker AI, puntos de conexión de inferencia sin servidor de SageMaker ni puntos de conexión multimodelo de SageMaker. 

# Implemente modelos de gran tamaño para realizar inferencias con TorchServe
<a name="large-model-inference-tutorials-torchserve"></a>

En este tutorial se muestra cómo implementar modelos grandes y realizar inferencias en Amazon SageMaker AI con TorchServe on GPUs. En este ejemplo, se implementa el modelo [OPT-30b](https://huggingface.co/facebook/opt-30b) en una instancia `ml.g5`. Puede modificarlo para que funcione con otros modelos y tipos de instancias. En el ejemplo, sustituya `italicized placeholder text` por su propia información.

TorchServe es una potente plataforma abierta para la inferencia de modelos distribuidos de gran tamaño. Al ser compatible con bibliotecas populares PyTorch, como Pi nativa y HuggingFace Accelerate PPy DeepSpeed, ofrece un controlador uniforme APIs que mantiene la coherencia en todos los escenarios de inferencia de modelos distribuidos de gran tamaño y no distribuidos. Para obtener más información, consulte la documentación [TorchServede inferencia de modelos de gran tamaño](https://pytorch.org/serve/large_model_inference.html#).

## Contenedores de aprendizaje profundo con TorchServe
<a name="large-model-inference-tutorials-torchserve-dlcs"></a>

Para implementar un modelo grande sin TorchServe SageMaker IA, puede usar uno de los contenedores de aprendizaje profundo de SageMaker IA (DLCs). De forma predeterminada, TorchServe está instalado en todos AWS PyTorch DLCs. Durante la carga del modelo, TorchServe puede instalar bibliotecas especializadas diseñadas para modelos grandes, como PiPPy, Deepspeed y Accelerate.

En la siguiente tabla se muestran todas las [SageMaker IA DLCs con TorchServe](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only).


| Categoría DLC | Marcos | Hardware | URL de ejemplo | 
| --- | --- | --- | --- | 
| [SageMaker Contenedores AI Framework](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) |  PyTorch 2.0.0\$1  | CPU, GPU | 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | 
| [SageMaker Contenedores Graviton de AI Framework](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-graviton-containers-sm-support-only) |  PyTorch 2.0.0\$1  | CPU | 763104351884.dkr. ecr.us-east-1.amazonaws.com /:2.0.1-cpu-py310-ubuntu20.04-sagemaker pytorch-inference-graviton | 
| [Contenedores de inferencias de StabilityAI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#stabilityai-inference-containers) |  PyTorch 2.0.0\$1  | GPU | 763104351884.dkr. ecr.us-east-1.amazonaws.com /:2.0.1-sgm0.1.0-gpu-py310-cu118-ubuntu20.04-sagemaker stabilityai-pytorch-inference | 
| [Contenedores Neuron](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers) | PyTorch 1.13.1 | Neuronx | 763104351884.dkr. ecr.us-west-2.amazonaws.com /:1.13.1-neuron-py310-sdk2.12.0-ubuntu20.04 pytorch-inference-neuron | 

## Introducción
<a name="large-model-inference-tutorials-torchserve-getting-started"></a>

Antes de implementar el modelo, complete los requisitos previos. También se pueden configurar los parámetros del modelo y personalizar el código del controlador.

### Requisitos previos
<a name="large-model-inference-tutorials-torchserve-getting-started-prereqs"></a>

Antes de comenzar, compruebe que cumple los siguientes requisitos previos:

1. Asegúrese de tener acceso a una cuenta. AWS [Configure su entorno](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) para que AWS CLI pueda acceder a su cuenta a través de un usuario de AWS IAM o un rol de IAM. Recomendamos utilizar un rol de IAM. Para realizar pruebas en su cuenta personal, puede asociar las siguientes políticas de permisos gestionados al rol de IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AWSServiceRoleForAmazonEKSNodegroup](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSServiceRoleForAmazonEKSNodegroup)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

   Para obtener información sobre cómo asociar políticas de IAM a un rol, consulte [Incorporación y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *AWS Guía del usuario de IAM*.

1. Configure sus dependencias de forma local, como se muestra en los siguientes ejemplos.

   1. Instale la versión 2 de AWS CLI:

      ```
      # Install the latest AWS CLI v2 if it is not installed
      !curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" !unzip awscliv2.zip
      #Follow the instructions to install v2 on the terminal
      !cat aws/README.md
      ```

   1. Instale SageMaker AI y el cliente Boto3:

      ```
      # If already installed, update your client
      #%pip install sagemaker pip --upgrade --quiet
      !pip install -U sagemaker
      !pip install -U boto
      !pip install -U botocore
      !pip install -U boto3
      ```

### Configure los ajustes y los parámetros del modelo
<a name="large-model-inference-tutorials-torchserve-getting-started-config"></a>

TorchServe se utiliza [https://pytorch.org/docs/stable/elastic/run.html](https://pytorch.org/docs/stable/elastic/run.html)para configurar el entorno distribuido para el procesamiento paralelo de modelos. TorchServe tiene la capacidad de admitir a varios trabajadores en un modelo grande. De forma predeterminada, TorchServe utiliza un algoritmo por turnos para asignar GPUs a un trabajador de un host. En el caso de la inferencia de modelos grandes, el número de trabajadores GPUs asignados a cada trabajador se calcula automáticamente en función del número GPUs especificado en el `model_config.yaml` archivo. La variable de entorno`CUDA_VISIBLE_DEVICES`, que especifica los dispositivos de GPU IDs que están visibles en un momento dado, se establece en función de este número.

Por ejemplo, supongamos que hay 8 GPUs en un nodo y un trabajador necesita 4 GPUs en un nodo (`nproc_per_node=4`). En este caso, TorchServe asigna cuatro GPUs al primer trabajador (`CUDA_VISIBLE_DEVICES="0,1,2,3"`) y cuatro GPUs al segundo trabajador (`CUDA_VISIBLE_DEVICES="4,5,6,7”`).

Además de este comportamiento predeterminado, TorchServe proporciona a los usuarios la flexibilidad de especificar GPUs un trabajador. Por ejemplo, si estableces la variable `deviceIds: [2,3,4,5]` en el [archivo YAML de configuración del modelo y la estableces](https://github.com/pytorch/serve/blob/5ee02e4f050c9b349025d87405b246e970ee710b/model-archiver/README.md?plain=1#L164) y`nproc_per_node=2`, a continuación, la TorchServe asigna `CUDA_VISIBLE_DEVICES=”2,3”` al primer elemento de trabajo y `CUDA_VISIBLE_DEVICES="4,5”` al segundo elemento de trabajo.

En el siguiente `model_config.yaml` ejemplo, configuramos tanto los parámetros de front-end como de back-end correspondientes al modelo [OPT-30b ](https://huggingface.co/facebook/opt-30b). Los parámetros de front-end configurados son `parallelType`, `deviceType`, `deviceIds `y `torchrun`. [Para obtener información más detallada sobre los parámetros del front-end que puede configurar, consulte la documentación. PyTorch GitHub ](https://github.com/pytorch/serve/blob/2bf505bae3046b0f7d0900727ec36e611bb5dca3/docs/configuration.md?plain=1#L267) La configuración de back-end se basa en un mapa YAML que permite una personalización de estilo libre. Para los parámetros de back-end, definimos la DeepSpeed configuración y los parámetros adicionales que utiliza el código de controlador personalizado.

```
# TorchServe front-end parameters
minWorkers: 1
maxWorkers: 1
maxBatchDelay: 100
responseTimeout: 1200
parallelType: "tp"
deviceType: "gpu"
# example of user specified GPU deviceIds
deviceIds: [0,1,2,3] # sets CUDA_VISIBLE_DEVICES

torchrun:
    nproc-per-node: 4

# TorchServe back-end parameters
deepspeed:
    config: ds-config.json
    checkpoint: checkpoints.json

handler: # parameters for custom handler code
    model_name: "facebook/opt-30b"
    model_path: "model/models--facebook--opt-30b/snapshots/ceea0a90ac0f6fae7c2c34bcb40477438c152546"
    max_length: 50
    max_new_tokens: 10
    manual_seed: 40
```

### Personalización de controladores
<a name="large-model-inference-tutorials-torchserve-getting-started-handlers"></a>

TorchServe ofrece [controladores básicos](https://github.com/pytorch/serve/tree/master/ts/torch_handler/distributed) y [utilidades de manejo](https://github.com/pytorch/serve/tree/master/ts/handler_utils) para la inferencia de modelos grandes creados con bibliotecas populares. [El siguiente ejemplo demuestra cómo la clase de controlador personalizada [TransformersSeqClassifierHandler](https://github.com/pytorch/serve/blob/ab69b69a59d6ca6074df7e6d4014f07eb48dedba/examples/large_models/deepspeed/custom_handler.py#L16C7-L16C39)amplía [BaseDeepSpeedHandler](https://github.com/pytorch/serve/blob/ab69b69a59d6ca6074df7e6d4014f07eb48dedba/ts/torch_handler/distributed/base_deepspeed_handler.py#L8)y utiliza las utilidades de controlador.](https://github.com/pytorch/serve/blob/master/ts/handler_utils/distributed/deepspeed.py) Para ver un ejemplo de código completo, consulta el [`custom_handler.py`código de la PyTorch GitHub documentación](https://github.com/pytorch/serve/blob/master/examples/large_models/deepspeed/custom_handler.py).

```
class TransformersSeqClassifierHandler(BaseDeepSpeedHandler, ABC):
    """
    Transformers handler class for sequence, token classification and question answering.
    """

    def __init__(self):
        super(TransformersSeqClassifierHandler, self).__init__()
        self.max_length = None
        self.max_new_tokens = None
        self.tokenizer = None
        self.initialized = False

    def initialize(self, ctx: Context):
        """In this initialize function, the HF large model is loaded and
        partitioned using DeepSpeed.
        Args:
            ctx (context): It is a JSON Object containing information
            pertaining to the model artifacts parameters.
        """
        super().initialize(ctx)
        model_dir = ctx.system_properties.get("model_dir")
        self.max_length = int(ctx.model_yaml_config["handler"]["max_length"])
        self.max_new_tokens = int(ctx.model_yaml_config["handler"]["max_new_tokens"])
        model_name = ctx.model_yaml_config["handler"]["model_name"]
        model_path = ctx.model_yaml_config["handler"]["model_path"]
        seed = int(ctx.model_yaml_config["handler"]["manual_seed"])
        torch.manual_seed(seed)

        logger.info("Model %s loading tokenizer", ctx.model_name)

        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.tokenizer.pad_token = self.tokenizer.eos_token
        config = AutoConfig.from_pretrained(model_name)
        with torch.device("meta"):
            self.model = AutoModelForCausalLM.from_config(
                config, torch_dtype=torch.float16
            )
        self.model = self.model.eval()

        ds_engine = get_ds_engine(self.model, ctx)
        self.model = ds_engine.module
        logger.info("Model %s loaded successfully", ctx.model_name)
        self.initialized = True

    def preprocess(self, requests):
        """
        Basic text preprocessing, based on the user's choice of application mode.
        Args:
            requests (list): A list of dictionaries with a "data" or "body" field, each
                            containing the input text to be processed.
        Returns:
            tuple: A tuple with two tensors: the batch of input ids and the batch of
                attention masks.
        """

    def inference(self, input_batch):
        """
        Predicts the class (or classes) of the received text using the serialized transformers
        checkpoint.
        Args:
            input_batch (tuple): A tuple with two tensors: the batch of input ids and the batch
                                of attention masks, as returned by the preprocess function.
        Returns:
            list: A list of strings with the predicted values for each input text in the batch.
        """
        
    def postprocess(self, inference_output):
        """Post Process Function converts the predicted response into Torchserve readable format.
        Args:
            inference_output (list): It contains the predicted response of the input text.
        Returns:
            (list): Returns a list of the Predictions and Explanations.
        """
```

## Preparación de los artefactos de su modelo
<a name="large-model-inference-tutorials-torchserve-artifacts"></a>

Antes de implementar el modelo en la SageMaker IA, debe empaquetar los artefactos del modelo. Para modelos grandes, le recomendamos que utilice la PyTorch [torch-model-archiver](https://github.com/pytorch/serve/blob/master/model-archiver/README.md)herramienta con el argumento`--archive-format no-archive`, ya que evita la compresión de los artefactos del modelo. El siguiente ejemplo guarda todos los artefactos del modelo en una nueva carpeta denominada `opt/`.

```
torch-model-archiver --model-name opt --version 1.0 --handler custom_handler.py --extra-files ds-config.json -r requirements.txt --config-file opt/model-config.yaml --archive-format no-archive
```

[Una vez creada la `opt/` carpeta, descargue el modelo OPT-30b a la carpeta mediante la herramienta Download\$1model. PyTorch ](https://github.com/pytorch/serve/blob/master/examples/large_models/utils/Download_model.py)

```
cd opt
python path_to/Download_model.py --model_path model --model_name facebook/opt-30b --revision main
```

Por último, cargue los artefactos del modelo en un bucket de Amazon S3. 

```
aws s3 cp opt {your_s3_bucket}/opt --recursive
```

Ahora debería tener los artefactos del modelo almacenados en Amazon S3 que estén listos para implementarse en un punto final de SageMaker IA.

## Implemente el modelo mediante el SDK de SageMaker Python
<a name="large-model-inference-tutorials-torchserve-deploy"></a>

Tras preparar los artefactos del modelo, puede implementarlo en un punto final de SageMaker AI Hosting. En esta sección se describe cómo implementar un único modelo grande en un punto de conexión y realizar predicciones de respuesta en transmisión. Para obtener más información sobre la transmisión de las respuestas desde los puntos de conexión, consulte [Invocar puntos de conexión en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-test-endpoints.html).

Para implementar el modelo, siga los pasos que se describen a continuación:

1. Cree una sesión de SageMaker IA, como se muestra en el siguiente ejemplo.

   ```
   import boto3
   import sagemaker
   from sagemaker import Model, image_uris, serializers, deserializers
   
   boto3_session=boto3.session.Session(region_name="us-west-2")
   smr = boto3.client('sagemaker-runtime-demo')
   sm = boto3.client('sagemaker')
   role = sagemaker.get_execution_role()  # execution role for the endpoint
   sess= sagemaker.session.Session(boto3_session, sagemaker_client=sm, sagemaker_runtime_client=smr)  # SageMaker AI session for interacting with different AWS APIs
   region = sess._region_name  # region name of the current SageMaker Studio Classic environment
   account = sess.account_id()  # account_id of the current SageMaker Studio Classic environment
   
   # Configuration:
   bucket_name = sess.default_bucket()
   prefix = "torchserve"
   output_path = f"s3://{bucket_name}/{prefix}"
   print(f'account={account}, region={region}, role={role}, output_path={output_path}')
   ```

1. Cree un modelo sin comprimir en SageMaker IA, como se muestra en el siguiente ejemplo.

   ```
   from datetime import datetime
   
   instance_type = "ml.g5.24xlarge"
   endpoint_name = sagemaker.utils.name_from_base("ts-opt-30b")
   s3_uri = {your_s3_bucket}/opt
   
   model = Model(
       name="torchserve-opt-30b" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S"),
       # Enable SageMaker uncompressed model artifacts
       model_data={
           "S3DataSource": {
                   "S3Uri": s3_uri,
                   "S3DataType": "S3Prefix",
                   "CompressionType": "None",
           }
       },
       image_uri=container,
       role=role,
       sagemaker_session=sess,
       env={"TS_INSTALL_PY_DEP_PER_MODEL": "true"},
   )
   print(model)
   ```

1. Implemente el modelo en una instancia de Amazon EC2, como se muestra en el siguiente ejemplo.

   ```
   model.deploy(
       initial_instance_count=1,
       instance_type=instance_type,
       endpoint_name=endpoint_name,
       volume_size=512, # increase the size to store large model
       model_data_download_timeout=3600, # increase the timeout to download large model
       container_startup_health_check_timeout=600, # increase the timeout to load large model
   )
   ```

1. Inicie una clase para procesar la respuesta de transmisión, como se muestra en el siguiente ejemplo.

   ```
   import io
   
   class Parser:
       """
       A helper class for parsing the byte stream input. 
       
       The output of the model will be in the following format:
       ```
       b'{"outputs": [" a"]}\n'
       b'{"outputs": [" challenging"]}\n'
       b'{"outputs": [" problem"]}\n'
       ...
       ```
       
       While usually each PayloadPart event from the event stream will contain a byte array 
       with a full json, this is not guaranteed and some of the json objects may be split across
       PayloadPart events. For example:
       ```
       {'PayloadPart': {'Bytes': b'{"outputs": '}}
       {'PayloadPart': {'Bytes': b'[" problem"]}\n'}}
       ```
       
       This class accounts for this by concatenating bytes written via the 'write' function
       and then exposing a method which will return lines (ending with a '\n' character) within
       the buffer via the 'scan_lines' function. It maintains the position of the last read 
       position to ensure that previous bytes are not exposed again. 
       """
       
       def __init__(self):
           self.buff = io.BytesIO()
           self.read_pos = 0
           
       def write(self, content):
           self.buff.seek(0, io.SEEK_END)
           self.buff.write(content)
           data = self.buff.getvalue()
           
       def scan_lines(self):
           self.buff.seek(self.read_pos)
           for line in self.buff.readlines():
               if line[-1] != b'\n':
                   self.read_pos += len(line)
                   yield line[:-1]
                   
       def reset(self):
           self.read_pos = 0
   ```

1. Pruebe una predicción de respuesta de transmisión, como se muestra en el siguiente ejemplo.

   ```
   import json
   
   body = "Today the weather is really nice and I am planning on".encode('utf-8')
   resp = smr.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=body, ContentType="application/json")
   event_stream = resp['Body']
   parser = Parser()
   for event in event_stream:
       parser.write(event['PayloadPart']['Bytes'])
       for line in parser.scan_lines():
           print(line.decode("utf-8"), end=' ')
   ```

Ahora ha implementado su modelo en un punto final de SageMaker IA y debería poder invocarlo para obtener respuestas. Para obtener más información sobre los puntos finales de la SageMaker IA en tiempo real, consulte. [Puntos de conexión de modelo único](realtime-single-model.md)

# Barreras de protección de implementación para actualizar modelos en producción
<a name="deployment-guardrails"></a>

Las barreras de protección de implementación son un conjunto de opciones de implementación de modelos en la inferencia de Amazon SageMaker AI para actualizar sus modelos de machine learning en producción. Con las opciones de implementación totalmente gestionadas, puede controlar el cambio del modelo actual en producción a uno nuevo. Los modos de cambio de tráfico en las implementaciones azul/verde, como el valor controlado y el lineal, le permiten controlar de forma pormenorizada el proceso de cambio de tráfico del modelo actual al nuevo durante la actualización. También hay protecciones integradas, como las reversiones automáticas, que le ayudan a detectar los problemas a tiempo y a tomar medidas correctivas automáticamente antes de que afecten significativamente a la producción.

Las barreras de protección de implementación proporcionan las siguientes ventajas:
+ **Seguridad de implementación al actualizar los entornos de producción.** Una actualización regresiva de un entorno de producción puede provocar tiempos de inactividad no planificados y afectar al negocio, como un aumento de la latencia del modelo y altas tasas de error. Las barreras de protección de implementación ayudan a mitigar esos riesgos al proporcionar las mejores prácticas y barreras de protección operativa integradas.
+ **Implementación totalmente gestionada.** SageMaker AI se encarga de configurar y orquestar estas implementaciones y las integra con los mecanismos de actualización de los puntos de conexión. No es necesario crear ni mantener mecanismos de orquestación, monitorización o reversión. Puede utilizar SageMaker AI para configurar y orquestar estas implementaciones y centrarse en aprovechar el machine learning para sus aplicaciones.
+ **Visibilidad.** Puede realizar un seguimiento del progreso de la implementación a través de la API [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) o de eventos de Amazon CloudWatch (para los [puntos de conexión compatibles](deployment-guardrails-exclusions.md)). Para obtener más información sobre los eventos en SageMaker AI, consulte la sección sobre el cambio de estado de implementación de los puntos de conexión en [Eventos que Amazon SageMaker AI envía a Amazon EventBridge](automating-sagemaker-with-eventbridge.md). Tenga en cuenta que si su dispositivo de punto de conexión utiliza alguna de las funciones de la página [Exclusiones](deployment-guardrails-exclusions.md), no podrá utilizar los eventos de CloudWatch.

**nota**  
Las barreras de protección de implementación solo se aplican a los tipos de puntos de conexión [Inferencia asíncrona](async-inference.md) y [Inferencia en tiempo real](realtime-endpoints.md).

## Cómo comenzar
<a name="deployment-guardrails-get-started"></a>

Admitimos dos tipos de implementación para actualizar los modelos en producción: las implementaciones azul/verde y las implementaciones continuas.
+ [Implementaciones azul/verde](deployment-guardrails-blue-green.md): puede cambiar el tráfico de su flota anterior (flota azul) a una flota nueva (flota verde) con las actualizaciones. Las implementaciones azul/verde ofrecen [múltiples modos de cambio de tráfico](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green.html). Un modo de cambio de tráfico es una configuración que especifica cómo SageMaker AI dirige el tráfico de puntos de conexión a una nueva flota que contiene sus actualizaciones. Los siguientes modos de cambio de tráfico le proporcionan diferentes niveles de control sobre el proceso de actualización de los puntos de conexión:
  + [Uso de cambio de tráfico todo a la vez](deployment-guardrails-blue-green-all-at-once.md) pasa todo el tráfico de puntos de conexión de la flota azul a la flota verde. Una vez que el tráfico pasa a la flota verde, las alarmas de Amazon CloudWatch preespecificadas comienzan a monitorizar la flota verde durante un período de tiempo determinado (*período de cocción*). Si no se activa ninguna alarma durante el período de cocción, SageMaker AI cancelará la flota azul.
  + [Uso de cambio de tráfico de canario](deployment-guardrails-blue-green-canary.md) pasa una pequeña parte de su tráfico (un *valor controlado*) a la flota verde y la monitoriza durante un período de cocción. Si el valor controlado tiene éxito en la flota verde, SageMaker AI desplazará el resto del tráfico de la flota azul a la verde antes de dar por finalizada la flota azul.
  + [Uso de cambio de tráfico lineal](deployment-guardrails-blue-green-linear.md) ofrece una personalización aún mayor en cuanto al número de pasos de cambio de tráfico y el porcentaje de tráfico que se debe cambiar en cada paso. Si bien el cambio de sentido vertical le permite desplazar el tráfico en dos pasos, el cambio lineal lo amplía a *n* pasos espaciados linealmente.
+ [Uso de implementaciones continuas](deployment-guardrails-rolling.md): puede actualizar su punto de conexión a medida que SageMaker AI aprovisione la capacidad de forma incremental y desplace el tráfico a una nueva flota en pasos del tamaño de lote que especifique. Las instancias de la nueva flota se actualizan con la nueva configuración de implementación y, si no se activa ninguna alarma de CloudWatch durante el período de cocción, SageMaker AI limpia las instancias de la flota anterior. Esta opción le proporciona un control pormenorizado sobre el número de instancias o el porcentaje de capacidad que se modifica en cada paso.

Puede crear y gestionar su despliegue mediante las API de SageMaker [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) y [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html), así como los comandos AWS Command Line Interface. Consulte las páginas de implementación individuales para obtener más información sobre cómo configurar su implementación. Tenga en cuenta que si su punto de conexión utiliza alguna de las funciones enumeradas en la página [Exclusiones](deployment-guardrails-exclusions.md), no podrá utilizar las barreras de protección de implementación.

Para seguir los ejemplos guiados que muestran cómo utilizar las barreras de protección de implementación, consulte nuestros ejemplos de [cuadernos de Jupyter](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails) para los modos de cambio de tráfico valor controlado y lineal.

# Configuración y monitorización de la reversión automática
<a name="deployment-guardrails-configuration"></a>

 CloudWatch Las alarmas de Amazon son un requisito previo para utilizar los períodos de cocción en las barandillas de despliegue. Solo puede utilizar la función de reversión automática en las barandillas de despliegue si configura CloudWatch alarmas que puedan supervisar un punto final. Si alguna de sus alarmas se activa durante el período de monitoreo especificado, la SageMaker IA inicia una reversión completa al punto final anterior para proteger su aplicación. Si no tiene ninguna CloudWatch alarma configurada para supervisar su punto final, la funcionalidad de reversión automática no funcionará durante la implementación.

Para obtener más información sobre Amazon CloudWatch, consulta [¿Qué es Amazon CloudWatch?](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html) en la *Guía del CloudWatch usuario de Amazon*.

**nota**  
Asegúrese de que su rol de ejecución de IAM tenga permiso para realizar la acción `cloudwatch:DescribeAlarms` en las alarmas de reversión automática que especifique.

## Ejemplos de alarmas
<a name="deployment-guardrails-configuration-alarm-examples"></a>

Para ayudarle a empezar, le ofrecemos los siguientes ejemplos para demostrar las capacidades de las CloudWatch alarmas. Además de usar o modificar los siguientes ejemplos, puede crear sus propias alarmas y configurarlas para monitorizar diversas métricas en las flotas especificadas durante un período de tiempo determinado. Para ver más métricas y dimensiones de la SageMaker IA que puede añadir a sus alarmas, consulte[Métricas de Amazon SageMaker AI en Amazon CloudWatch](monitoring-cloudwatch.md).

**Topics**
+ [Monitorice los errores de invocación tanto en las flotas antiguas como en las nuevas](#deployment-guardrails-configuration-alarm-examples-errors-both)
+ [Monitoriza la latencia del modelo en la nueva flota](#deployment-guardrails-configuration-alarm-examples-latency-new)

### Monitorice los errores de invocación tanto en las flotas antiguas como en las nuevas
<a name="deployment-guardrails-configuration-alarm-examples-errors-both"></a>

La siguiente CloudWatch alarma monitorea la tasa de error promedio de un punto final. Puede utilizar esta alarma con cualquier tipo de barreras de protección de implementación que cambien el tráfico para proporcionar una monitorización general tanto de las flotas antiguas como de las nuevas. Si la alarma se activa, la SageMaker IA inicia una reversión a la flota anterior.

Los errores de invocación procedentes tanto de la flota antigua como de la nueva contribuyen a la tasa de error media. Si la tasa de error media supera el umbral especificado, se activa la alarma. En este ejemplo concreto, se monitorizan los errores 4xx (errores del cliente) tanto en la flota antigua como en la nueva durante la implementación. También puede monitorizar los errores 5xx (errores de servidor) utilizando la métrica `Invocation5XXErrors`.

**nota**  
En el caso de este tipo de alarma, si tu flota antigua activa la alarma durante el despliegue, la SageMaker IA interrumpe el despliegue. Por lo tanto, si su flota de producción actual ya causa errores, considere la posibilidad de utilizar o modificar uno de los siguientes ejemplos, que solo supervisa la nueva flota para detectar errores.

```
#Applied deployment type: all types
{
    "AlarmName": "EndToEndDeploymentHighErrorRateAlarm",
    "AlarmDescription": "Monitors the error rate of 4xx errors",
    "MetricName": "Invocation4XXErrors",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        }
    ],
    "Period": 600,
    "EvaluationPeriods": 2,
    "Threshold": 1,
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

En el ejemplo anterior, anote los valores de los siguientes campos:
+ En `AlarmName` y `AlarmDescription`, introduzca el nombre y la descripción que elija para la alarma.
+ En `MetricName`, utilice el valor `Invocation4XXErrors` para monitorizar errores 4xx en el punto de conexión
+ En `Namespace`, utilice el valor `AWS/SageMaker`. También puede especificar su propia métrica personalizada, si corresponde.
+ En `Statistic`, utilice `Average`. Esto significa que la alarma toma la tasa de error promedio durante los períodos de evaluación al calcular si la tasa de error ha superado el umbral.
+ En la dimensión `EndpointName`, utilice como valor el nombre del punto de conexión que está actualizando.
+ En la dimensión `VariantName`, utilice el valor `AllTraffic` para especificar todo el tráfico de puntos de conexión.
+ En `Period`, utilice `600`. Esto establece los períodos de evaluación de la alarma en 10 minutos.
+ En `EvaluationPeriods`, utilice `2`. Este valor indica a la alarma que tenga en cuenta los dos períodos de evaluación más recientes al determinar el estado de la alarma.

### Monitoriza la latencia del modelo en la nueva flota
<a name="deployment-guardrails-configuration-alarm-examples-latency-new"></a>

El siguiente ejemplo de CloudWatch alarma monitorea la latencia del modelo de la nueva flota durante el despliegue. Puede usar esta alarma para monitorizar solo la flota nueva y excluir la antigua. La alarma dura todo la implementación. Este ejemplo proporciona un end-to-end seguimiento exhaustivo de la nueva flota e inicia una reversión a la flota anterior si la nueva flota tiene algún problema de tiempo de respuesta.

CloudWatch publica las métricas con la dimensión una `EndpointConfigName:{New-Ep-Config}` vez que la nueva flota comience a recibir tráfico, y estas métricas se mantienen incluso después de que se complete el despliegue.

Puede utilizar el siguiente ejemplo de alarma con cualquier tipo de implementación.

```
#Applied deployment type: all types
{
    "AlarmName": "NewEndpointConfigVersionHighModelLatencyAlarm",
    "AlarmDescription": "Monitors the model latency on new fleet",
    "MetricName": "ModelLatency",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        },
        {
            "Name": "EndpointConfigName",
            "Value": <your-config-name>
    ],
    "Period": 300,
    "EvaluationPeriods": 2,
    "Threshold": 100000, # 100ms
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

En el ejemplo anterior, anote los valores de los siguientes campos:
+ En `MetricName`, utilice el valor `ModelLatency` para monitorizar el tiempo de respuesta del modelo.
+ En `Namespace`, utilice el valor `AWS/SageMaker`. También puede especificar su propia métrica personalizada, si corresponde.
+ En la dimensión `EndpointName`, utilice como valor el nombre del punto de conexión que está actualizando.
+ En la dimensión `VariantName`, utilice el valor `AllTraffic` para especificar todo el tráfico de puntos de conexión.
+ En la dimensión `EndpointConfigName`, el valor debe hacer referencia al nombre de configuración del punto de conexión para su punto de conexión nuevo o actualizado.

**nota**  
Si desea monitorizar su flota anterior en lugar de la nueva, puede cambiar la dimensión `EndpointConfigName` para especificar el nombre de la configuración de la flota anterior.

# Implementaciones azul/verde
<a name="deployment-guardrails-blue-green"></a>

Al actualizar su punto de conexión, Amazon SageMaker AI utiliza automáticamente una implementación azul/verde para maximizar la disponibilidad de sus puntos de conexión. En una implementación azul/verde, SageMaker AI aprovisiona una nueva flota con las actualizaciones (flota verde). A continuación, SageMaker AI desplaza el tráfico de la flota antigua (flota azul) a la flota verde. Una vez que la flota verde empiece a funcionar sin problemas durante un período de evaluación establecido (denominado período de cocción), SageMaker AI pondrá fin a la flota azul. Con las capacidades adicionales de las implementaciones azul/verde, puede utilizar los modos de cambio de tráfico y la monitorización de la reversión automática para proteger su punto de conexión de un impacto significativo en la producción.

La siguiente lista describe las características clave de las implementaciones azul/verde en SageMaker AI:
+ **Modos de cambio de tráfico.** Los modos de cambio de tráfico para las barreras de protección de implementación le permiten controlar el volumen de tráfico y el número de pasos que se desplazan entre la flota azul y la flota verde. Esta capacidad le permite evaluar progresivamente el rendimiento de la flota verde sin tener que comprometerse totalmente con un cambio de tráfico al 100 %.
+ **Período de cocción.** El período de cocción es un período de tiempo establecido para monitorizar la flota verde antes de pasar a la siguiente fase de implementación. Si alguna de las alarmas preespecificadas se activa durante un período de cocción, todo el tráfico de los puntos de conexión se transfiere a la flota azul. El período de cocción le ayuda a aumentar la confianza en su actualización antes de hacer que el cambio de tráfico sea permanente.
+ **Reversiones automáticas.** Puede especificar las alarmas de Amazon CloudWatch que SageMaker AI utiliza para monitorizar la flota verde. Si un problema con el código actualizado activa alguna de las alarmas, SageMaker AI inicia una reversión automática a la flota azul para mantener la disponibilidad y minimizar así el riesgo.

## Modos de cambio de tráfico
<a name="deployment-guardrails-blue-green-traffic-modes"></a>

Los distintos modos de cambio de tráfico de las implementaciones azul/verde le ofrecen un control más detallado de los cambios de tráfico entre la flota azul y la flota verde. Los modos de cambio de tráfico disponibles para las implementaciones azul/verde son simultáneas, valor controlado y lineales. La siguiente tabla muestra una comparación entre las diferentes opciones.

**importante**  
En el caso de las implementaciones azul/verde que impliquen cambios de tráfico o períodos de interrupción en varias etapas, se le facturará por ambas flotas durante la actualización, independientemente del tráfico que llegue a la flota. Esto contrasta con las implementaciones azul/verde en las que el tráfico cambia al mismo tiempo y no hay períodos de espera, donde solo se le factura una flota durante el proceso de actualización.


| Nombre | ¿Qué es? | Ventajas | Desventajas | Recomendación | 
| --- | --- | --- | --- | --- | 
| Todo a la vez | Cambia todo el tráfico a la nueva flota en un solo paso. | Minimiza la duración total de la actualización. | Las actualizaciones regresivas afectan al 100 % del tráfico. | Utilice esta opción para minimizar el tiempo y el costo de las actualizaciones. | 
| Valor controlado | El tráfico cambia en dos pasos. El primer paso (valor controlado) desplaza una pequeña parte del tráfico, seguido del segundo paso, que desplaza el resto del tráfico. | Limita el radio de expansión de las actualizaciones regresivas únicamente a la flota de valor controlado. | Ambas flotas funcionan en paralelo durante todo la implementación. | Utilice esta opción para lograr un equilibrio entre minimizar el radio de expansión de las actualizaciones regresivas y minimizar el tiempo de funcionamiento de dos flotas. | 
| Lineal | Una parte fija del tráfico se desplaza en un número predeterminado de pasos equidistantes. | Minimiza el riesgo de actualizaciones regresivas al desplazar el tráfico en varios pasos. | La duración y el costo de la actualización son proporcionales al número de pasos. | Utilice esta opción para minimizar el riesgo distribuyendo la implementación en varios pasos. | 

## Introducción
<a name="deployment-guardrails-blue-green-get-started"></a>

Una vez que especifique la configuración de implementación deseada, SageMaker AI se encargará de aprovisionar nuevas instancias, terminar las antiguas y cambiar el tráfico por usted. Puede crear y gestionar su implementación mediante las API de SageMaker existentes [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) y [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html), así como los comandos AWS Command Line Interface. Tenga en cuenta que si su punto de conexión utiliza alguna de las funciones enumeradas en la página [Exclusiones](deployment-guardrails-exclusions.md), no podrá utilizar las barreras de protección de implementación. Consulte las páginas de implementación individuales para obtener más información sobre cómo configurar su implementación:
+ [Actualización azul/verde con cambios de tráfico de una sola vez](deployment-guardrails-blue-green-all-at-once.md)
+ [Actualización azul/verde con cambios de tráfico de valor controlado](deployment-guardrails-blue-green-canary.md)
+ [Actualización azul/verde con cambio lineal de tráfico](deployment-guardrails-blue-green-linear.md)

Para seguir los ejemplos guiados que muestran cómo utilizar las barreras de protección de implementación, consulte nuestros ejemplos de [cuadernos de Jupyter](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails) para los modos de cambio de tráfico lineal y de valor controlado.

# Uso de cambio de tráfico todo a la vez
<a name="deployment-guardrails-blue-green-all-at-once"></a>

Dado que el tráfico cambia todo a la vez, puede implementar rápidamente una actualización de punto de conexión utilizando las barreras de protección de una implementación azul/verde. Puede utilizar esta opción de cambio de tráfico para minimizar la duración de la actualización y, al mismo tiempo, aprovechar las garantías de disponibilidad de las implementaciones azul/verde. La función de período de cocción le ayuda a monitorizar el rendimiento y la funcionalidad de las nuevas instancias antes de cerrar las antiguas, lo que garantiza que su nueva flota esté en pleno funcionamiento.

El siguiente diagrama muestra cómo los cambios de tráfico gestionan simultáneamente las flotas antiguas y nuevas.

![\[Un cambio correcto del 100 % del tráfico de la flota antigua a la nueva.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/deployment-guardrails-blue-green-all-at-once.png)


Cuando utiliza el cambio de tráfico todo a la vez, SageMaker AI enruta el 100 % del tráfico a la nueva flota (flota verde). Una vez que la flota verde comienza a recibir tráfico, comienza el período de cocción. El período de cocción es un período de tiempo establecido en el que las alarmas preespecificadas de Amazon CloudWatch supervisan el rendimiento de la flota verde. Si no se activa ninguna alarma durante el período de cocción, SageMaker AI cancela la flota anterior (flota azul). Si alguna alarma se activa durante el período de cocción, se inicia una reversión automática y el 100 % del tráfico vuelve a la flota azul.

## Requisitos previos
<a name="deployment-guardrails-blue-green-all-at-once-prereqs"></a>

Antes de configurar una implementación con un cambio de tráfico todo a la vez, debe crear alarmas de Amazon CloudWatch para observar las métricas desde su punto de conexión. Si alguna de las alarmas se activa durante el período de cocción, el tráfico vuelve a su flota azul. Para obtener información acerca de cómo configurar las alarmas de CloudWatch en un punto de conexión, consulte la página de requisitos previos [Configuración y monitorización de la reversión automática](deployment-guardrails-configuration.md). Para obtener más información acerca de la creación de alarmas de CloudWatch, consulte [Uso de las alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del usuario de Amazon CloudWatch*.

## Configurar cambio de tráfico todo a la vez
<a name="deployment-guardrails-blue-green-all-at-once-configure"></a>

Cuando esté preparado para la implementación y haya configurado las alarmas de CloudWatch para su punto de conexión, puede utilizar la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) de SageMaker AI o el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) en AWS Command Line Interface para iniciar la implementación.

**Topics**
+ [Cómo actualizar un punto de conexión (API)](#deployment-guardrails-blue-green-all-at-once-configure-api-update)
+ [Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente](#deployment-guardrails-blue-green-all-at-once-configure-api-existing)
+ [Cómo actualizar un punto de conexión (CLI)](#deployment-guardrails-blue-green-all-at-once-configure-cli-update)

### Cómo actualizar un punto de conexión (API)
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-update"></a>

El siguiente ejemplo muestra cómo actualizar su punto de conexión con un cambio de tráfico todo a la vez mediante [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) en la API de Amazon SageMaker.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "ALL_AT_ONCE"
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        }
    }
)
```

Para configurar la opción de cambio de tráfico todo a la vez, haga lo siguiente:
+ En `EndpointName`, utilice el nombre del punto de conexión existente que quiera actualizar.
+ En `EndpointConfigName`, utilice el nombre de la configuración de punto de conexión que quiera utilizar.
+ En `DeploymentConfig` y `BlueGreenUpdatePolicy`, in `TrafficRoutingConfiguration`, establezca el parámetro `Type` en `ALL_AT_ONCE`. Esto especifica que la implementación utiliza el modo de cambio de tráfico todo a la vez.
+ En `TerminationWaitInSeconds`, utilice `600`. Este parámetro indica a SageMaker AI que espere el tiempo especificado (en segundos) después de que la flota verde esté completamente activa antes de finalizar las instancias de la flota azul. En este ejemplo, SageMaker AI espera 10 minutos después del último período de cocción antes de cerrar la flota azul.
+ En `MaximumExecutionTimeoutInSeconds`, utilice `1800`. Este parámetro establece el período máximo de tiempo durante el cual puede ejecutarse la implementación antes de que transcurra el tiempo de espera. En el ejemplo anterior, la implementación tiene un límite de 30 minutos para finalizar.
+ En `AutoRollbackConfiguration`, dentro del campo `Alarms`, puede añadir sus alarmas de CloudWatch por nombre. Cree una entrada `AlarmName: <your-cw-alarm>` para cada alarma que quiera utilizar.

### Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-existing"></a>

Cuando utilice la API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) para crear un punto de conexión, puede especificar, si lo desea, una configuración de implementación para reutilizarla en futuras actualizaciones del punto de conexión. Puede usar las mismas opciones de `DeploymentConfig` que en el ejemplo anterior de la API UpdateEndpoint. No hay cambios en el comportamiento de la API CreateEndpoint. Al especificar la configuración de implementación, no se realiza automáticamente ninguna actualización azul/verde en el punto de conexión.

La opción de usar una configuración de implementación anterior se produce cuando se usa la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) para actualizar el punto de conexión. Al actualizar el punto de conexión, puede utilizar la opción `RetainDeploymentConfig` para conservar la configuración de implementación que haya especificado al crear el punto de conexión.

Al llamar a la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), establezca `RetainDeploymentConfig` en `True` para mantener las opciones `DeploymentConfig` de la configuración de su punto de conexión original.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Cómo actualizar un punto de conexión (CLI)
<a name="deployment-guardrails-blue-green-all-at-once-configure-cli-update"></a>

Si utiliza el AWS CLI, en el siguiente ejemplo se muestra cómo iniciar una implementación azul/verde todo a la vez mediante el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name> 
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "ALL_AT_ONCE"},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Para configurar la opción de cambio de tráfico todo a la vez, haga lo siguiente:
+ En `endpoint-name`, use el nombre del punto de conexión que quiera actualizar.
+ En `endpoint-config-name`, utilice el nombre de la configuración del punto de conexión que quiera utilizar.
+ En `deployment-config`, utilice un objeto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**nota**  
Si prefiere guardar el objeto JSON en un archivo, consulte [Generación de parámetros esquemáticos AWS CLI y de entrada](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) en la Guía del usuario de AWS CLI.

# Uso de cambio de tráfico de canario
<a name="deployment-guardrails-blue-green-canary"></a>

Con el cambio de tráfico de valor controlado, puede probar una parte del tráfico de puntos de conexión en la nueva flota, mientras que la antigua flota presta servicio al resto del tráfico. Este paso de prueba es una barrera de seguridad que valida la funcionalidad de la nueva flota antes de transferir todo el tráfico a la nueva flota. Aún tienes las ventajas de una implementación azul/verde, y la función de canalización añadida le permite asegurarse de que su nueva flota (verde) puede hacer inferencias antes de dejar que gestione el 100 % del tráfico.

La parte de su flota verde que se activa para recibir tráfico se denomina valor controlado y puede elegir el tamaño de dicho valor controlado. Tenga en cuenta que el tamaño del valor controlado debe ser inferior o igual al 50 % de la capacidad de la flota nueva. Cuando finaliza el período de cocción y no se activa ninguna alarma de Amazon CloudWatch previamente especificada, el resto del tráfico pasa de la flota antigua (azul) a la flota verde. El cambio de tráfico en el valor controlado le proporciona más seguridad durante la implementación, ya que cualquier problema con el modelo actualizado solo afecta al valor controlado.

El siguiente diagrama muestra cómo el cambio de tráfico de valor controlado gestiona la distribución del tráfico entre las flotas azul y verde.

![\[Un exitoso cambio de tráfico de valor controlado de dos pasos de la flota antigua a la flota nueva.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/deployment-guardrails-blue-green-canary.png)


Una vez que SageMaker AI aprovisiona la flota verde, dirige una parte del tráfico entrante (por ejemplo, el 25 %) al canario. A continuación, comienza el período de cocción, durante el cual las alarmas de CloudWatch supervisan el rendimiento de la flota verde. Durante este tiempo, tanto la flota azul como la verde están parcialmente activas y reciben tráfico. Si alguna de las alarmas se activa durante el período de inactividad, SageMaker AI inicia una reversión y todo el tráfico vuelve a la flota azul. Si ninguna de las alarmas se activa, todo el tráfico pasa a la flota verde y se produce un último período de inactividad. Si el último período de cocción finaliza sin que se active ninguna alarma, la flota verde atiende a todo el tráfico y SageMaker AI pone fin a la flota azul.

## Requisitos previos
<a name="deployment-guardrails-blue-green-canary-prereqs"></a>

Antes de configurar una implementación con el cambio de tráfico de valor controlado, debe crear alarmas de Amazon CloudWatch para monitorizar las métricas desde su punto de conexión. Las alarmas están activas durante el período de cocción y, si alguna alarma se activa, todo el tráfico de los puntos de conexión se transfiere a la flota azul. Para obtener más información acerca de cómo configurar las alarmas de CloudWatch en un punto de conexión, consulte la página de requisitos previos [Configuración y monitorización de la reversión automática](deployment-guardrails-configuration.md). Para obtener más información acerca de la creación de alarmas de CloudWatch, consulte [Uso de las alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del usuario de Amazon CloudWatch*.

## Configurar cambio de tráfico de valor controlado
<a name="deployment-guardrails-blue-green-canary-configure"></a>

Cuando lo tenga todo preparado para la implementación y haya configurado las alarmas de Amazon CloudWatch para su punto de conexión, puede utilizar la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) de Amazon SageMaker AI o el [comando update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) en el AWS CLI para iniciar la implementación.

**Topics**
+ [Cómo actualizar un punto de conexión (API)](#deployment-guardrails-blue-green-canary-configure-api-update)
+ [Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente](#deployment-guardrails-blue-green-canary-configure-api-existing)
+ [Cómo actualizar un punto de conexión (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### Cómo actualizar un punto de conexión (API)
<a name="deployment-guardrails-blue-green-canary-configure-api-update"></a>

El siguiente ejemplo de la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) muestra cómo se puede actualizar un punto final con cambios de tráfico de valor controlado.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "CANARY",
                "CanarySize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 30
                },
                "WaitIntervalInSeconds": 600
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Para configurar la opción de cambio de tráfico de valor controlado, haga lo siguiente:
+ En `EndpointName`, utilice el nombre del punto de conexión existente que quiera actualizar.
+ En `EndpointConfigName`, utilice el nombre de la configuración de punto de conexión que quiera utilizar.
+ En `DeploymentConfig` y `BlueGreenUpdatePolicy`, en `TrafficRoutingConfiguration`, establezca el parámetro `Type` en `CANARY`. Esto especifica que la implementación utiliza el cambio de tráfico de valor controlado.
+ En el campo `CanarySize`, puede cambiar el tamaño del valor controlado modificando los parámetros `Type` y `Value`. En `Type`, utilice `CAPACITY_PERCENT`, es decir, el porcentaje de su flota verde que quiera usar como valor controlado y, a continuación, establezca `Value` en `30`. En este ejemplo, utilizas el 30% de la capacidad de la flota verde como valor controlado. Tenga en cuenta que el tamaño del valor controlado debe ser igual o inferior al 50 % de la capacidad de la flota verde.
+ En `WaitIntervalInSeconds`, utilice `600`. El parámetro indica a SageMaker AI que espere el período de tiempo especificado (en segundos) entre cada cambio de intervalo. Este intervalo es la duración del período de cocción de los valores controlados. En el ejemplo anterior, SageMaker AI espera 10 minutos después del turno del canario y, a continuación, completa el segundo y último cambio de tráfico.
+ En `TerminationWaitInSeconds`, utilice `600`. Este parámetro indica a SageMaker AI que espere el tiempo especificado (en segundos) después de que la flota verde esté completamente activa antes de finalizar las instancias de la flota azul. En este ejemplo, SageMaker AI espera 10 minutos después del último período de cocción antes de cerrar la flota azul.
+ En `MaximumExecutionTimeoutInSeconds`, utilice `1800`. Este parámetro establece el período máximo de tiempo durante el cual puede ejecutarse la implementación antes de que transcurra el tiempo de espera. En el ejemplo anterior, la implementación tiene un límite de 30 minutos para finalizar.
+ En `AutoRollbackConfiguration`, dentro del campo `Alarms`, puede añadir sus alarmas de CloudWatch por nombre. Cree una entrada `AlarmName: <your-cw-alarm>` para cada alarma que quiera utilizar.

### Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente
<a name="deployment-guardrails-blue-green-canary-configure-api-existing"></a>

Cuando utilice la API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) para crear un punto de conexión, puede especificar, si lo desea, una configuración de implementación para reutilizarla en futuras actualizaciones del punto de conexión. Puede usar las mismas opciones de `DeploymentConfig` que en el ejemplo anterior de la API UpdateEndpoint. No hay cambios en el comportamiento de la API CreateEndpoint. Al especificar la configuración de implementación, no se realiza automáticamente ninguna actualización azul/verde en el punto de conexión.

La opción de usar una configuración de implementación anterior se produce cuando se usa la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) para actualizar el punto de conexión. Al actualizar el punto de conexión, puede utilizar la opción `RetainDeploymentConfig` para conservar la configuración de implementación que haya especificado al crear el punto de conexión.

Al llamar a la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), establezca `RetainDeploymentConfig` en `True` para mantener las opciones `DeploymentConfig` de la configuración de su punto de conexión original.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Cómo actualizar un punto de conexión (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

Si está utilizando el AWS CLI, el siguiente ejemplo muestra cómo iniciar una implementación de valor controlado azul/verde mediante el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "CANARY",
    "CanarySize": {"Type": "CAPACITY_PERCENT", "Value": 30}, "WaitIntervalInSeconds": 600},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Para configurar la opción de cambio de tráfico de valor controlado, haga lo siguiente:
+ En `endpoint-name`, utilice el nombre del punto de conexión que quiera actualizar.
+ En `endpoint-config-name`, utilice el nombre de la configuración del punto de conexión que quiera utilizar.
+ En `deployment-config`, utilice un objeto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**nota**  
Si prefiere guardar el objeto JSON en un archivo, consulte [Generación de parámetros esquemáticos AWS CLI y de entrada](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) en la Guía del usuario de AWS CLI.

# Uso de cambio de tráfico lineal
<a name="deployment-guardrails-blue-green-linear"></a>

El cambio lineal del tráfico le permite transferir gradualmente el tráfico de su flota anterior (flota azul) a su nueva flota (flota verde). Con el cambio de tráfico lineal, puede desplazar el tráfico en varios pasos, lo que minimiza la posibilidad de que se produzca una interrupción en su punto de conexión. Esta opción de implementación azul/verde le brinda el control más detallado sobre los cambios de tráfico.

Puede elegir el número de instancias o el porcentaje de la capacidad de la flota verde que se activará en cada paso. Cada paso lineal solo debe representar entre el 10 y el 50 % de la capacidad de la flota verde. Para cada paso, hay un período de espera durante el cual las alarmas de Amazon CloudWatch preespecificadas supervisan las métricas de la flota verde. Cuando finalice el período de cocción y no se active ninguna alarma, la parte activa de su flota verde seguirá recibiendo tráfico y comenzará un nuevo paso. Si las alarmas se activan durante alguno de los períodos de cocción, el 100 % del tráfico de los puntos de conexión se transfiere a la flota azul.

El siguiente diagrama muestra cómo el tráfico lineal desvía el tráfico hacia las flotas azul y verde.

![\[Un exitoso cambio de tráfico lineal de tres pasos de la flota antigua a la flota nueva.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/deployment-guardrails-blue-green-linear.png)


Una vez que SageMaker AI aprovisiona la nueva flota, la primera parte de la flota verde se enciende y recibe tráfico. SageMaker AI desactiva una parte del mismo tamaño de la flota azul y comienza el período de cocción. Si se activa alguna alarma, todo el tráfico de los puntos de conexión se transfiere a la flota azul. Al finalizar el período de cocción, comienza el siguiente paso. Otra parte de la flota verde se activa y recibe tráfico, otra parte de la flota azul se desactiva y comienza otro período de cocción. El mismo proceso se repite hasta que la flota azul esté completamente desactivada y la flota verde esté completamente activa y reciba todo el tráfico. Si se activa una alarma en cualquier momento, SageMaker AI finaliza el proceso de cambio y el 100 % del tráfico vuelve a la flota azul.

## Requisitos previos
<a name="deployment-guardrails-blue-green-linear-prereqs"></a>

Antes de configurar una implementación con un cambio de tráfico lineal, debe crear alarmas de CloudWatch para monitorizar las métricas de su punto de conexión. Las alarmas están activas durante el período de cocción y, si alguna alarma se activa, todo el tráfico de los puntos de conexión se transfiere a la flota azul. Para obtener más información acerca de cómo configurar las alarmas de CloudWatch en un punto de conexión, consulte la página de requisitos previos [Configuración y monitorización de la reversión automática](deployment-guardrails-configuration.md). Para obtener más información acerca de la creación de alarmas de CloudWatch, consulte [Uso de las alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del usuario de Amazon CloudWatch*.

## Configurar el cambio de tráfico lineal
<a name="deployment-guardrails-blue-green-linear-configure"></a>

Cuando esté preparado para la implementación y haya configurado las alarmas de CloudWatch para su punto de conexión, puede utilizar la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) de Amazon SageMaker AI o el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) para iniciar en la AWS CLI para iniciar la implementación.

**Topics**
+ [Cómo actualizar un punto de conexión (API)](#deployment-guardrails-blue-green-linear-configure-api-update)
+ [Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente](#deployment-guardrails-blue-green-linear-configure-api-existing)
+ [Cómo actualizar un punto de conexión (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### Cómo actualizar un punto de conexión (API)
<a name="deployment-guardrails-blue-green-linear-configure-api-update"></a>

El siguiente ejemplo de la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) muestra cómo se puede actualizar un punto de conexión con un cambio de tráfico lineal.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "LINEAR",
                "LinearStepSize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 20
                },
                "WaitIntervalInSeconds": 300
            },
            "TerminationWaitInSeconds": 300,
            "MaximumExecutionTimeoutInSeconds": 3600
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Para configurar la opción de cambio de tráfico lineal, haga lo siguiente:
+ En `EndpointName`, utilice el nombre del punto de conexión existente que quiera actualizar.
+ En `EndpointConfigName`, utilice el nombre de la configuración de punto de conexión que quiera utilizar.
+ En `DeploymentConfig` y `BlueGreenUpdatePolicy`, en `TrafficRoutingConfiguration`, establezca el parámetro `Type` en `LINEAR`. Esto especifica que la implementación utiliza el desplazamiento lineal del tráfico.
+ En el campo `LinearStepSize`, puede cambiar el tamaño de los pasos modificando los parámetros `Type` y `Value`. En `Type`, utilice `CAPACITY_PERCENT`, es decir, el porcentaje de su flota verde que quiera utilizar como tamaño de paso y, a continuación, establezca `Value` en `20`. En este ejemplo, se activa el 20 % de la capacidad de la flota verde para cada paso de cambio de tráfico. Tenga en cuenta que, al personalizar el tamaño de su paso lineal, solo debe usar pasos que ocupen entre el 10 y el 50 % de la capacidad de la flota verde.
+ En `WaitIntervalInSeconds`, utilice `300`. El parámetro indica a SageMaker AI que espere el período de tiempo especificado (en segundos) entre cada cambio de tráfico. Este intervalo es la duración del período de cocción entre cada paso lineal. En el ejemplo anterior, SageMaker AI espera 5 minutos entre cada cambio de tráfico.
+ En `TerminationWaitInSeconds`, utilice `300`. Este parámetro indica a SageMaker AI que espere el tiempo especificado (en segundos) después de que la flota verde esté completamente activa antes de finalizar las instancias de la flota azul. En este ejemplo, SageMaker AI espera 5 minutos después del último período de cocción antes de cerrar la flota azul.
+ En `MaximumExecutionTimeoutInSeconds`, utilice `3600`. Este parámetro establece el período máximo de tiempo durante el cual puede ejecutarse la implementación antes de que transcurra el tiempo de espera. En el ejemplo anterior, la implementación tiene un límite de 1 hora para finalizar.
+ En `AutoRollbackConfiguration`, dentro del campo `Alarms`, puede añadir sus alarmas de CloudWatch por nombre. Cree una entrada `AlarmName: <your-cw-alarm>` para cada alarma que quiera utilizar.

### Cómo actualizar un punto de conexión con una política de actualización (API) azul/verde existente
<a name="deployment-guardrails-blue-green-linear-configure-api-existing"></a>

Cuando utilice la API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) para crear un punto de conexión, puede especificar, si lo desea, una configuración de implementación para reutilizarla en futuras actualizaciones del punto de conexión. Puede usar las mismas opciones de `DeploymentConfig` que en el ejemplo anterior de la API UpdateEndpoint. No hay cambios en el comportamiento de la API CreateEndpoint. Al especificar la configuración de implementación, no se realiza automáticamente ninguna actualización azul/verde en el punto de conexión.

La opción de usar una configuración de implementación anterior se produce cuando se usa la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) para actualizar el punto de conexión. Al actualizar el punto de conexión, puede utilizar la opción `RetainDeploymentConfig` para conservar la configuración de implementación que haya especificado al crear el punto de conexión.

Al llamar a la API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), establezca `RetainDeploymentConfig` en `True` para mantener las opciones `DeploymentConfig` de la configuración de su punto de conexión original.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Cómo actualizar un punto de conexión (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

Si utiliza el AWS CLI, en el siguiente ejemplo se muestra cómo iniciar una implementación lineal azul/verde mediante el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '{"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "LINEAR",
    "LinearStepSize": {"Type": "CAPACITY_PERCENT", "Value": 20}, "WaitIntervalInSeconds": 300},
    "TerminationWaitInSeconds": 300, "MaximumExecutionTimeoutInSeconds": 3600},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Para configurar la opción de cambio de tráfico lineal, haga lo siguiente:
+ En `endpoint-name`, utilice el nombre del punto de conexión que quiera actualizar.
+ En `endpoint-config-name`, utilice el nombre de la configuración del punto de conexión que quiera utilizar.
+ En `deployment-config`, utilice un objeto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**nota**  
Si prefiere guardar el objeto JSON en un archivo, consulte [Generación de parámetros esquemáticos AWS CLI y de entrada](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) en la Guía del usuario de AWS CLI.

# Uso de implementaciones continuas
<a name="deployment-guardrails-rolling"></a>

Cuando actualiza su punto de conexión, puede especificar una implementación continua para cambiar gradualmente el tráfico de su flota anterior a una flota nueva. Puede controlar el tamaño de los pasos del cambio de tráfico, así como especificar un período de evaluación para monitorizar las nuevas instancias en busca de problemas antes de cerrar las instancias de la flota anterior. Con las implementaciones sucesivas, las instancias de la flota anterior se limpian después de cada cambio de tráfico a la nueva flota, lo que reduce la cantidad de instancias adicionales necesarias para actualizar el punto de conexión. Esto resulta especialmente útil para las instancias aceleradas que tienen una gran demanda.

Las implementaciones sucesivas sustituyen gradualmente la implementación anterior de la versión del modelo por la nueva versión mediante la actualización del punto de conexión en tamaños de lote configurables. El comportamiento de cambio de tráfico de las implementaciones continuas es similar al [modo de cambio de tráfico lineal](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green-linear.html) de blue/green las implementaciones, pero las implementaciones continuas ofrecen la ventaja de reducir los requisitos de capacidad en comparación con las implementaciones. blue/green Con las implementaciones continuas, hay menos instancias activas a la vez y usted tiene un control más detallado sobre el número de instancias que desea actualizar en la nueva flota. Debería considerar la posibilidad de utilizar una implementación continua en lugar de una blue/green implementación si tiene modelos grandes o un terminal grande con muchas instancias.

En la siguiente lista se describen las características clave de las implementaciones sucesivas en Amazon SageMaker AI:
+ **Período de cocción.**El período de cocción es un período de tiempo establecido para monitorizar la nueva flota antes de pasar a la siguiente fase de implementación. Si alguna de las alarmas preespecificadas se activa durante un período de inactividad, todo el tráfico de los puntos de conexión se transfiere a la flota anterior. El período de cocción le ayuda a aumentar la confianza en su actualización antes de hacer que el cambio de tráfico sea permanente.
+ **Tamaño del lote continuo.** Tiene control granular sobre el tamaño de cada lote para el cambio de tráfico o la cantidad de instancias que desea actualizar en cada lote. Este número puede oscilar entre el 5 y el 50 % del tamaño de su flota. Puede especificar el tamaño del lote como un número de instancias o como el porcentaje total de su flota.
+ **Reversiones automáticas. **Puedes especificar CloudWatch las alarmas de Amazon que la SageMaker IA utilizará para monitorizar la nueva flota. Si un problema con el código actualizado activa alguna de las alarmas, la SageMaker IA inicia una reversión automática a la flota anterior para mantener la disponibilidad y minimizar así el riesgo.

**nota**  
Si su punto de conexión utiliza alguna de las características enumeradas en la página [Exclusiones](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html), no podrá utilizar implementaciones continuas.

## Funcionamiento
<a name="deployment-guardrails-rolling-how-it-works"></a>

Durante un despliegue continuo, la SageMaker IA proporciona la infraestructura necesaria para transferir el tráfico de la flota antigua a la nueva sin tener que aprovisionar todas las instancias nuevas a la vez. SageMaker La IA sigue los siguientes pasos para transferir el tráfico:

1. SageMaker La IA aprovisiona el primer lote de instancias de la nueva flota.

1. Una parte del tráfico se desplaza de las instancias antiguas al primer lote de instancias nuevas.

1. Tras el periodo de cocción, si no se CloudWatch activa ninguna alarma de Amazon, la SageMaker IA limpia un lote de instancias antiguas.

1. SageMaker La IA continúa aprovisionando, desplazando y limpiando las instancias por lotes hasta que se complete la implementación.

Si se activa una alarma durante uno de los períodos de espera, el tráfico vuelve a la flota anterior en lotes del tamaño que usted especifique. Como alternativa, puede especificar la implementación continua para que el 100 % del tráfico vuelva a la flota anterior en caso de que se active una alarma.

El siguiente diagrama muestra la progresión de una implementación continua correcta, tal y como se describe en los pasos anteriores.

![\[Los pasos del cambio de tráfico de una implementación continua de la flota antigua a la flota nueva.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/deployment-guardrails-rolling-diagram.png)


Para crear una implementación continua, solo tiene que especificar la configuración de la implementación que desee. Luego, la SageMaker IA se encarga del aprovisionamiento de nuevas instancias, la cancelación de las antiguas y el traslado del tráfico por usted. Puede crear y administrar su implementación a través de la [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)y AWS Command Line Interface los comandos existentes.

## Requisitos previos
<a name="deployment-guardrails-prereqs"></a>

Antes de configurar una implementación continua, debes crear CloudWatch alarmas de Amazon para ver las métricas de tu punto final. Si alguna de las alarmas se activa durante el período de cocción, el tráfico empezará a repercutir en su flota anterior. Para obtener información sobre cómo configurar CloudWatch las alarmas en un punto final, consulte la página de requisitos previos: [configuración y supervisión de la reversión automática](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-configuration.html). Para obtener más información sobre CloudWatch las alarmas, consulta [Uso de CloudWatch las alarmas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del CloudWatch usuario de Amazon*.

Además, consulte la página [Exclusiones](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html) para asegurarse de que su punto de conexión cumple con los requisitos para una implementación continua.

## Determine el tamaño del lote continuo
<a name="deployment-guardrails-rolling-batch-size"></a>

Antes de actualizar el punto de conexión, determine el tamaño del lote que quiera utilizar para transferir el tráfico de forma gradual a la nueva flota.

En las implementaciones continuas, puede especificar un tamaño de lote que represente entre el 5 y el 50 % de la capacidad de su flota. Si elige un tamaño de lote grande, la implementación se completa más rápidamente. Sin embargo, tenga en cuenta que el punto de conexión requiere más capacidad durante la actualización, aproximadamente la sobrecarga del tamaño del lote. Si elige un tamaño de lote más pequeño, la implementación tardará más, pero utilizará menos capacidad durante la implementación.

## Configurar una implementación continua
<a name="deployment-guardrails-rolling-configure"></a>

Cuando esté listo para la implementación y haya configurado CloudWatch las alarmas para su terminal, puede utilizar la [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API de SageMaker IA o el comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) AWS Command Line Interface para iniciar la implementación.

**¿Cómo actualizar un punto de conexión?**

En el siguiente ejemplo, se muestra cómo puede actualizar su terminal mediante un despliegue continuo mediante el método [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html) del cliente de IA Boto3. SageMaker 

Para configurar una implementación continua, utilice el ejemplo y los campos siguientes:
+ En `EndpointName`, utilice el nombre del punto de conexión existente que quiera actualizar.
+ En `EndpointConfigName`, utilice el nombre de la configuración de punto de conexión que quiera utilizar.
+ En el `AutoRollbackConfiguration` objeto, dentro del `Alarms` campo, puede añadir sus CloudWatch alarmas por nombre. Cree una entrada `AlarmName: <your-cw-alarm>` para cada alarma que quiera utilizar.
+ En `DeploymentConfig`, para el objeto `RollingUpdatePolicy`, especifique los siguientes campos:
  + `MaximumExecutionTimeoutInSeconds`: el límite de tiempo para la implementación total. Si se supera este límite, el tiempo de espera se agota. El valor máximo que puede especificar para este campo es de 28800 segundos u 8 horas.
  + `WaitIntervalInSeconds`— La duración del período de cocción, durante el cual la SageMaker IA monitorea las alarmas de cada lote de la nueva flota.
  + `MaximumBatchSize`: especifique el `Type` del lote que quiera utilizar (el número de instancias o el porcentaje total de su flota) y el `Value` o tamaño de cada lote.
  + `RollbackMaximumBatchSize`: utilice este objeto para especificar la estrategia de reversión en caso de que se active una alarma. Especifique el `Type` del lote que quiera utilizar (número de instancias o porcentaje total de su flota) y el `Value` o tamaño de cada lote. Si no especificas estos campos o si blue/green estableces el valor en el 100% del punto final, la SageMaker IA utiliza una estrategia de reducción y devuelve todo el tráfico a la flota anterior cuando se activa una alarma.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        },
        "RollingUpdatePolicy": { 
            "MaximumExecutionTimeoutInSeconds": number,
            "WaitIntervalInSeconds": number,
            "MaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
            "RollbackMaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
        }  
    }
)
```

Tras actualizar el dispositivo, es posible que desee comprobar el estado de su implementación continua y comprobar el estado de su punto de conexión. Puedes revisar el estado de tu terminal en la consola de SageMaker IA o puedes revisar el estado de tu punto final mediante la [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API.

En el objeto `VariantStatus` devuelto por la API `DescribeEndpoint`, el campo `Status` indica el estado actual de implementación o funcionamiento de su dispositivo de punto de conexión. Para obtener más información sobre los posibles estados y su significado, consulte [ProductionVariantStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantStatus.html).

Si ha intentado realizar una implementación continua y el estado de su punto de conexión es `UpdateRollbackFailed`, consulte la siguiente sección para obtener ayuda con la solución de problemas.

## Administración de errores
<a name="deployment-guardrails-rolling-failures"></a>

Si las implementaciones continuas fallan y la reversión automática también falla, el punto de conexión puede quedarse con el estado de `UpdateRollbackFailed`. Este estado significa que se han implementado diferentes configuraciones de punto de conexión en las instancias situadas detrás de su punto de conexión y que este está en servicio con una combinación de configuraciones de punto de conexión antiguas y nuevas.

Puede realizar otra llamada a la [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API para devolver el punto final a un estado correcto. Especifique la configuración del punto de conexión y la configuración de implementación que quiera (ya sea una implementación continua, una implementación azul/verde o ninguna de las dos) para actualizar su punto de conexión.

Puedes llamar a la [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API para comprobar de nuevo el estado de tu punto final, que se devuelve en el `VariantStatus` objeto como `Status` campo. Si la actualización se realiza correctamente, el `Status` del punto de conexión devolverá `InService`.

# Exclusiones
<a name="deployment-guardrails-exclusions"></a>

Al realizar una implementación azul/verde o continua, la nueva configuración de punto final debe tener el mismo nombre de variante que la configuración de punto final anterior. También hay exclusiones basadas en funciones que hacen que su punto de conexión sea incompatible con las barreras de protección de implementación en este momento. Si su punto de conexión utiliza alguna de las siguientes características, no podrá utilizar las barreras de protección de implementación en su punto de conexión, por lo que volverá a utilizar una implementación azul/verde, en la que el tráfico se desplazará al mismo tiempo y no tendrá un período de espera final:
+ Contenedores de Marketplace
+ Puntos de conexión que utilizan instancias Inf1 (basadas en inferencia)

Si va a realizar una implementación progresiva, hay exclusiones adicionales basadas en características:
+ Terminales de conexión de inferencias sin servidor
+ Puntos de conexión de inferencia con múltiples variantes

# Pruebas de sombra
<a name="shadow-tests"></a>

 Con Amazon SageMaker AI, puede evaluar cualquier cambio en la infraestructura de servicio de modelos comparando su rendimiento con el de la infraestructura implementada actualmente. Esta práctica se conoce como pruebas de sombra. Las pruebas de sombra pueden ayudarle a detectar posibles errores de configuración y problemas de rendimiento antes de que afecten a los usuarios finales. Con SageMaker AI, no necesita invertir en la creación de la infraestructura de pruebas de sombra, por lo que puede centrarse en el desarrollo de modelos. 

 Puede utilizar esta capacidad para validar los cambios en cualquier componente de la variante de producción, es decir, el modelo, el contenedor o la instancia, sin que ello afecte al usuario final. Es útil en situaciones que incluyen, entre otras, las siguientes: 
+  Se está planteando promocionar un nuevo modelo que se ha validado fuera de línea para su puesta en producción, pero desea evaluar las métricas de rendimiento operativo, como, por ejemplo, la latencia y la tasa de errores, antes de tomar esta decisión. 
+  Se está planteando realizar cambios en el contenedor de la infraestructura de servicio, como, por ejemplo, aplicación de parches a vulnerabilidades o actualizar a versiones más recientes, y desea evaluar el impacto de estos cambios antes de pasar a la fase de producción. 
+  Se está planteando cambiar la instancia de ML y desea evaluar el rendimiento de la nueva instancia con las solicitudes de inferencia en tiempo real. 

 La consola de SageMaker AI proporciona una experiencia guiada para administrar el flujo de trabajo de las pruebas de sombra. Puede configurar las pruebas de sombra durante un período de tiempo predefinido, supervisar el progreso de las pruebas a través de un panel en directo, limpiarlas una vez finalizadas y actuar en función de los resultados. Seleccione una variante de producción con la que desee realizar la prueba, y SageMaker AI implementará automáticamente la nueva variante en modo de sombra y le enviará una copia de las solicitudes de inferencia en tiempo real en el mismo punto de conexión. Solo las respuestas de la variante de producción se devuelven a la aplicación que realiza la llamada. Puede optar por descartar o registrar las respuestas de la variante de sombra para compararlas. Para obtener más información sobre las variantes de producción y sombra, consulte [Validación de modelos en producción](model-validation.md). 

 Consulte [Creación de una prueba de sombra](shadow-tests-create.md) para obtener instrucciones sobre cómo crear una prueba de sombra. 

**nota**  
 Determinadas características de los puntos de conexión pueden hacer que el punto de conexión no sea compatible con las pruebas de sombra. Si el punto de conexión utiliza alguna de las siguientes características, no podrá utilizar pruebas de sombra en el punto de conexión, por lo que la solicitud de configurar pruebas de sombra provocará errores de validación.   
Inferencia sin servidor
Inferencia asíncrona
Contenedores de Marketplace
Puntos de conexión con varios contenedores
Puntos de conexión multimodelo
Puntos de conexión que utilizan instancias Inf1 (basadas en inferencia)

# Creación de una prueba de sombra
<a name="shadow-tests-create"></a>

 Puede crear una prueba de sombra para comparar el rendimiento de una variante de sombra con el de una variante de producción. Puede ejecutar la prueba en un punto de conexión existente que atienda solicitudes de inferencia o puede crear un nuevo punto de conexión en el que ejecutar la prueba. 

 Para crear pruebas de sombra, debe especificar lo siguiente: 
+  Una *variante de producción* que recibe y responde al 100 % las solicitudes de inferencia entrantes. 
+  Una *variante de sombra* que recibe un porcentaje de las solicitudes entrantes, replicadas desde la variante de producción, pero que no devuelve ninguna respuesta. 

 Para cada variante, puede usar la SageMaker IA para controlar el modelo, el tipo de instancia y el recuento de instancias. Puedes configurar el porcentaje de solicitudes entrantes, conocido como porcentaje de muestreo de tráfico, que deseas replicar en tu variante oculta. SageMaker La IA gestiona la replicación de las solicitudes en tu variante oculta y puedes modificar el porcentaje de muestreo de tráfico cuando la prueba esté programada o en ejecución. Si lo desea, también puede activar la captura de datos para registrar las solicitudes y respuestas de las variantes de producción y de sombra. 

**nota**  
 SageMaker La IA admite un máximo de una variante oculta por punto final. Para un punto de conexión con una variante de sombra, puede haber un máximo de una variante de producción. 

 Puede programar la prueba para que comience en cualquier momento y continuar durante un tiempo determinado. El valor predeterminado es de siete días y el máximo es de 30 días. Una vez finalizada la prueba, el punto de conexión vuelve al estado en el que se encontraba antes de comenzar la prueba. Esto garantiza que no tenga que limpiar los recursos manualmente una vez finalizada la prueba. 

 Puedes supervisar una prueba que se esté ejecutando a través de un panel de control en la consola de SageMaker IA. El panel proporciona una comparación paralela de las métricas de invocación y de instancia entre las variantes de producción y de sombra, además de una vista tabular con las estadísticas de métricas relevantes. Este panel también está disponible para las pruebas completadas. Una vez que haya revisado las métricas, puede elegir entre promocionar la variante de sombra para convertirla en la nueva variante de producción o conservar la variante de producción existente. Una vez que promocione la variante de sombra, esta responde a todas las solicitudes entrantes. Para obtener más información, consulte [Promover una variante de sombra](shadow-tests-complete.md#shadow-tests-complete-promote). 

 El siguiente procedimiento describe cómo crear una prueba paralela a través de la consola de SageMaker IA. Existen variaciones en el flujo de trabajo en función de si desea utilizar un punto de conexión existente o crear uno nuevo para la prueba de sombra. 

**Topics**
+ [Requisitos previos](#shadow-tests-create-prerequisites)
+ [Introducción de detalles de la prueba de sombra](#shadow-tests-create-console-shadow-test-details)
+ [Introducción de pruebas de sombra](#shadow-tests-create-console-shadow-test-settings)

## Requisitos previos
<a name="shadow-tests-create-prerequisites"></a>

 Antes de crear una prueba paralela con la consola de SageMaker IA, debes tener un modelo de SageMaker IA listo para su uso. Para obtener más información sobre cómo crear un modelo de SageMaker IA, consulte[Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md). 

 Puedes empezar con las pruebas paralelas con un punto final existente con una variante de producción y una variante oculta, un punto final existente con solo una variante de producción o solo con los modelos de SageMaker IA que quieras comparar. Las pruebas de sombra permiten crear un punto de conexión y añadir variantes antes de que comience la prueba. 

**nota**  
 Determinadas características de los puntos de conexión pueden hacer que el punto de conexión no sea compatible con las pruebas de sombra. Si el punto de conexión utiliza alguna de las siguientes características, no podrá utilizar pruebas de sombra en el punto de conexión, por lo que la solicitud de configurar pruebas de sombra provocará errores de validación.   
Inferencia sin servidor
Inferencia asíncrona
Contenedores de Marketplace
Puntos de conexión con varios contenedores
Puntos de conexión multimodelo
Puntos de conexión que utilizan instancias Inf1 (basadas en inferencia)

## Introducción de detalles de la prueba de sombra
<a name="shadow-tests-create-console-shadow-test-details"></a>

 Para empezar a crear una prueba de sombra, complete la página **Ingresar los detalles de la prueba de sombra** de la siguiente manera: 

1.  Abre la [consola de SageMaker IA](https://console.aws.amazon.com/sagemaker/). 

1.  En el panel de navegación de la izquierda, elija **Inferencia** y luego **Pruebas de sombra**. 

1.  Seleccione **Crear prueba de sombra**. 

1.  En **Nombre**, escriba un nombre para la prueba. 

1.  (Opcional) En **Descripción**, introduzca una descripción para la prueba. 

1.  (Opcional) Especifique **Etiquetas** mediante los pares de **Clave** y **Valor**. 

1.  Elija **Siguiente**. 

## Introducción de pruebas de sombra
<a name="shadow-tests-create-console-shadow-test-settings"></a>

 Tras completar la página **Ingresar los detalles de la prueba de sombra**, complete la página **Ingresar la configuración de la prueba de sombra**. Si ya tiene un punto final de inferencia de SageMaker IA y una variante de producción, siga el flujo de trabajo **Utilizar un punto final existente**. Si aún no dispone de un punto de conexión, siga el flujo de trabajo **Crear un nuevo punto de conexión**. 

------
#### [ Use an existing endpoint ]

 Si desea utilizar un punto de conexión existente para la prueba, complete la página **Ingresar la configuración de la prueba de sombra** de la siguiente manera: 

1.  Elija un rol que tenga asociada la política de IAM `AmazonSageMakerFullAccess`. 

1.  Seleccione **Usar un punto de conexión existente** y luego elija uno de los puntos de conexión disponibles. 

1.  (Opcional) Para cifrar el volumen de almacenamiento del punto de conexión, elija una clave de KMS existente o seleccione **Especifique el ARN de una clave de KMS** en la lista desplegable en **Clave de cifrado**. Si elige la segunda opción, aparecerá un campo para introducir el ARN de la clave de KMS. Introduzca el ARN de la clave de KMS en dicho campo. 

1.  Si tiene varias variantes de producción detrás de ese punto de conexión, elimine las que no desee usar para la prueba. Para eliminar una variante del modelo, selecciónela y, a continuación, elija **Eliminar**. 

1.  Si aún no tiene una variante de sombra, añádala. Para añadir una variante de sombra, haga lo siguiente: 

   1.  Elija **Añadir**. 

   1.  Elija **Variante de sombra**. 

   1.  En el cuadro de diálogo **Agregar modelo**, elija el modelo que desea utilizar para la variante de sombra. 

   1.  Seleccione **Save**. 

1.  (Opcional) En el paso anterior se añade la variante de sombra con la configuración predeterminada. Para modificar esta configuración, seleccione la variante de sombra y elija **Editar**. Aparecerá el cuadro de diálogo **Editar variante de sombra**. Para obtener más información sobre cómo completar este cuadro de diálogo, consulte [Edición de una prueba de sombra](shadow-tests-view-monitor-edit-individual.md). 

1.  En la sección **Programación**, introduzca la duración de la prueba de la siguiente manera: 

   1.  Seleccione el cuadro situado en **Duración**. Aparecerá un calendario emergente. 

   1.  Seleccione las fechas de inicio y finalización en el calendario o introduzca las fechas de inicio y finalización en los campos **Fecha de inicio** y **Fecha de finalización**, respectivamente. 

   1.  (Opcional) En los campos **Hora de inicio** y **Hora de finalización**, introduzca las horas de inicio y finalización, respectivamente, en el formato de 24 horas. 

   1.  Seleccione **Aplicar**. 

    La duración mínima es de una hora y la máxima es de 30 días. 

1.  (Opcional) Active la opción **Habilitar captura de datos** para guardar la información de solicitudes y respuestas de inferencia del punto de conexión en un bucket de Amazon S3 y, a continuación, introduzca la ubicación del bucket de Amazon S3. 

1.  Seleccione **Crear prueba de sombra**. 

------
#### [ Create a new endpoint ]

 Si no tiene un punto de conexión existente, o desea crear uno nuevo para la prueba, complete la página **Ingresar la configuración de la prueba de sombra** de la siguiente manera: 

1.  Elija un rol que tenga asociada la política de IAM `AmazonSageMakerFullAccess`. 

1.  Seleccione **Crear un nuevo punto de conexión**. 

1.  En **Nombre**, escriba un nombre para el punto de conexión. 

1.  Añada una variante de producción y una variante de sombra al punto de conexión: 
   +  Para añadir una variante de producción, seleccione **Agregar** y luego **Variante de producción**. En el cuadro de diálogo **Agregar modelo**, elija el modelo que desee utilizar para la variante de producción y, a continuación, seleccione **Guardar**. 
   +  Para añadir una variante de sombra, seleccione **Agregar** y luego **Variante de sombra**. En el cuadro de diálogo **Agregar modelo**, elija el modelo que desee utilizar para la variante de sombra y, a continuación, seleccione **Guardar**. 

1.  (Opcional) En el paso anterior se añade la variante de sombra con la configuración predeterminada. Para modificar esta configuración, seleccione la variante de sombra y elija **Editar**. Aparecerá el cuadro de diálogo **Editar variante de sombra**. Para obtener más información sobre cómo completar este cuadro de diálogo, consulte [Edición de una prueba de sombra](shadow-tests-view-monitor-edit-individual.md). 

1.  En la sección **Programación**, introduzca la duración de la prueba de la siguiente manera: 

   1.  Seleccione el cuadro situado en **Duración**. Aparecerá un calendario emergente. 

   1.  Seleccione las fechas de inicio y finalización en el calendario o introduzca las fechas de inicio y finalización en **Fecha de inicio** y **Fecha de finalización**, respectivamente. 

   1.  (Opcional) En **Hora de inicio** y **Hora de finalización**, introduzca las horas de inicio y finalización, respectivamente, en el formato de 24 horas. 

   1.  Seleccione **Aplicar**. 

    La duración mínima es de una hora y la máxima es de 30 días. 

1.  (Opcional) Active la opción **Habilitar captura de datos** para guardar la información de solicitudes y respuestas de inferencia del punto de conexión en un bucket de Amazon S3 y, a continuación, introduzca la ubicación del bucket de Amazon S3. 

1.  Seleccione **Crear prueba de sombra**. 

------

 Tras completar los procedimientos anteriores, debería tener una prueba programada para que comience en la fecha y hora de inicio especificadas. Puede ver el progreso de la prueba en un panel. Para obtener más información sobre cómo ver la prueba y las acciones que puede realizar, consulte [Cómo ver, supervisar y editar las pruebas de sombra](shadow-tests-view-monitor-edit.md). 

# Cómo ver, supervisar y editar las pruebas de sombra
<a name="shadow-tests-view-monitor-edit"></a>

 Puede ver los estados de las pruebas de sombra, supervisar su progreso en un panel y realizar acciones, como, por ejemplo, iniciar o detener una prueba antes de tiempo o eliminarla. En los temas siguientes se muestra cómo puede ver y modificar las pruebas de sombra mediante la consola de SageMaker AI. 

**Topics**
+ [Visualización de pruebas de sombra](shadow-tests-view-monitor-edit-list.md)
+ [Supervisión de una prueba de sombra](shadow-tests-view-monitor-edit-dashboard.md)
+ [Inicio de una prueba de sombra de forma anticipada](shadow-tests-view-monitor-edit-start.md)
+ [Eliminación de una prueba de sombra](shadow-tests-view-monitor-edit-delete.md)
+ [Edición de una prueba de sombra](shadow-tests-view-monitor-edit-individual.md)

# Visualización de pruebas de sombra
<a name="shadow-tests-view-monitor-edit-list"></a>

 Puede ver los estados de todas las pruebas de sombra en la página **Pruebas de sombra** de la consola de SageMaker AI. 

 Para ver las pruebas en la consola, haga lo siguiente: 

1.  Abra la [consola de SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

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

1.  Seleccione **Pruebas de sombra** para ver la página en la que se muestran todas las pruebas de sombra. La página debería tener un aspecto similar al de la captura de pantalla siguiente, con todas las pruebas enumeradas en la sección **Prueba de sombra**.   
![\[Lista de todas las pruebas de sombra\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/juxtaposer/shadow-test-landing-page.png)

 Para ver el estado de una prueba en la consola en la página **Pruebas de sombra**, seleccione el campo **Estado** de la prueba. 

 Estos son los posibles estados de una prueba: 
+  `Creating`: SageMaker AI está creando la prueba. 
+  `Created`: SageMaker AI ha terminado de crear la prueba y empezará a la hora programada. 
+  `Updating`: al realizar cambios en la prueba, esta indicará que se está actualizando. 
+  `Starting`: SageMaker AI está empezando la prueba. 
+  `Running`: la prueba está en curso. 
+  `Stopping`: SageMaker AI está deteniendo la prueba. 
+  `Completed`: la prueba se ha completado. 
+  `Cancelled`: al finalizar la prueba antes de tiempo, está indicará que se ha cancelado. 

# Supervisión de una prueba de sombra
<a name="shadow-tests-view-monitor-edit-dashboard"></a>

 Puede ver los detalles de una prueba de sombra y supervisarla mientras está en curso o una vez completada. SageMaker AI presenta un panel en directo que compara las métricas operativas, como, por ejemplo, la latencia del modelo y la tasa de error agregada, de las variantes de producción y de sombra. 

 Para ver los detalles de una prueba individual en la consola, haga lo siguiente: 

1.  Seleccione la prueba que desee supervisar en la sección **Prueba de sombra** de la página **Pruebas de sombra**. 

1.  En la lista desplegable **Acciones**, seleccione **Ver**. Aparecerá una página de información general con los detalles de la prueba y un panel de métricas. 

En la página de información general se incluyen las siguientes tres secciones.

**Resumen**  
 En esta sección se resumen el progreso y el estado de la prueba. También se muestran las estadísticas de resumen de la métrica elegida en la lista desplegable **Seleccionar métrica** de la subsección **Métricas**. En la siguiente captura de pantalla se muestra esta sección.   

![\[Sección Resumen de la página de información general\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/juxtaposer/shadow-test-summary.png)

 En la captura de pantalla anterior, las pestañas **Configuración** y **Detalles** muestran la configuración que ha seleccionado y los detalles que ha introducido al crear la prueba. 

**Análisis**  
 En esta sección se muestra un panel de métricas con gráficos independientes para las siguientes métricas:   
+ `Invocations`
+ `InvocationsPerInstance`
+ `ModelLatency`
+ `Invocation4XXErrors`
+ `Invocation5XXErrors`
+ `InvocationModelErrors`
+ `CPUUtilization`
+ `MemoryUtilization`
+ `DiskUtilization`
 Las tres últimas métricas supervisan el uso de los recursos en tiempo de ejecución del contenedor del modelo. El resto son métricas de CloudWatch que puede utilizar para analizar el rendimiento de la variante. Por lo general, un menor número de errores indica un modelo más estable. Una latencia menor indica un modelo o una infraestructura más rápidos. Para obtener más información acerca de las métricas de CloudWatch, consulte [SageMaker Métricas de invocación de puntos finales de IA](monitoring-cloudwatch.md#cloudwatch-metrics-endpoint-invocation). En la siguiente captura de pantalla se muestra el panel de métricas.   

![\[Panel de análisis de métricas\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/juxtaposer/shadow-test-analysis.png)


**Entorno**  
 En esta sección se muestran las variantes que ha comparado en la prueba. Si le satisface el rendimiento de la variante de sombra, en función de las métricas anteriores, puede promocionar la variante de sombra a producción. Para ello, seleccione **Desplegar variante de sombra**. Para obtener más información sobre cómo implementar una variante de sombra, consulte [Promover una variante de sombra](shadow-tests-complete.md#shadow-tests-complete-promote). También puede cambiar el porcentaje de muestreo de tráfico y continuar con las pruebas. Para ello, seleccione **Editar tráfico**. Para obtener más información sobre la edición de una variante de sombra, consulte [Edición de una prueba de sombra](shadow-tests-view-monitor-edit-individual.md). En la siguiente captura de pantalla se muestra esta sección.   

![\[Sección Entorno de la página de información general\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/juxtaposer/shadow-test-environment.png)


# Inicio de una prueba de sombra de forma anticipada
<a name="shadow-tests-view-monitor-edit-start"></a>

 Puede comenzar la prueba antes de la hora de inicio programada. Si la nueva duración de la prueba supera los 30 días, SageMaker AI establecerá automáticamente el final de la prueba 30 días después de la nueva hora de inicio. Esta acción iniciará la prueba de forma inmediata. Si desea cambiar la hora de inicio o finalización de la prueba, consulte [Edición de una prueba de sombra](shadow-tests-view-monitor-edit-individual.md). 

 Para iniciar la prueba de forma inmediata, antes de la hora de inicio programada, a través de la consola, haga lo siguiente: 

1.  Seleccione la prueba que desee iniciar en la sección **Prueba de sombra** de la página **Pruebas de sombra**. 

1.  En la lista desplegable **Acciones**, seleccione **Iniciar**. Aparecerá el cuadro de diálogo **Iniciar prueba de sombra**. 

1.  Elija **Iniciar ahora**. 

# Eliminación de una prueba de sombra
<a name="shadow-tests-view-monitor-edit-delete"></a>

 Puede eliminar una prueba que ya no necesite. Al eliminar la prueba, solo se eliminarán los metadatos de la prueba y no el punto de conexión, las variantes ni los datos capturados en Amazon S3. Si desea que el punto de conexión deje de ejecutarse, debe eliminarlo. Para obtener más información sobre cómo eliminar un punto de conexión, consulte [Eliminar puntos de conexión y recursos](realtime-endpoints-delete-resources.md). 

 Para eliminar una prueba a través de la consola, haga lo siguiente: 

1.  Seleccione la prueba que desee eliminar en la sección **Prueba de sombra** de la página **Pruebas de sombra**. 

1.  En el menú desplegable **Acciones**, elija **Eliminar**. Aparecerá el cuadro de diálogo **Eliminar prueba de sombra**. 

1.  En el cuadro de texto **Para confirmar la eliminación, escriba *eliminar* en el campo**, introduzca **delete**. 

1.  Elija **Eliminar**. 

# Edición de una prueba de sombra
<a name="shadow-tests-view-monitor-edit-individual"></a>

 Puede modificar tanto las pruebas programadas como las que están en curso. Antes de que comience la prueba, puede cambiar la descripción, la configuración de la variante de sombra, la fecha de inicio y la fecha de finalización de la prueba. También puede activar o desactivar la captura de datos. 

 Una vez que comience la prueba, solo podrá cambiar la descripción, el porcentaje de muestreo de tráfico para la variante de sombra y la fecha de finalización. 

 Para editar los detalles de la prueba a través de la consola, haga lo siguiente: 

1.  Seleccione la prueba que desee editar en la sección **Prueba de sombra** de la página **Pruebas de sombra**. 

1.  En la lista desplegable de **Acciones**, elija **Editar**. Aparecerá la página **Ingresar los detalles de la prueba de sombra**. 

1.  (Opcional) En **Descripción**, introduzca una descripción para la prueba. 

1.  Elija **Siguiente**. Aparecerá la página **Ingresar la configuración de la prueba de sombra**. 

1.  (Opcional) Para editar la variante de sombra, haga lo siguiente: 

   1.  Seleccione la variante de sombra y elija **Editar**. Aparecerá el cuadro de diálogo **Editar variante de sombra**. Si la prueba ya ha comenzado, solo puede cambiar el porcentaje de muestreo de tráfico. 

   1.  (Opcional) En **Nombre**, introduzca el nombre nuevo para reemplazar el anterior. 

   1.  (Opcional) En **Ejemplo de tráfico**, introduzca el nuevo porcentaje de muestreo de tráfico para reemplazar el anterior. 

   1.  (Opcional) En **Tipo de instancia**, seleccione el nuevo tipo de instancia en la lista desplegable. 

   1.  (Opcional) En **Recuento de instancias**, introduzca el nuevo recuento de instancias para reemplazar el anterior. 

   1.  Seleccione **Aplicar**. 

    No puede cambiar el modelo en la variante de sombra mediante el procedimiento anterior. Si desea cambiar el modelo, elimine primero la variante de sombra. Para ello, selecciónela y elija **Eliminar**. A continuación, añada una nueva variante de sombra. 

1.  (Opcional) Para editar la duración de la prueba, haga lo siguiente: 

   1.  Seleccione el cuadro situado en **Duración** en la sección **Programación**. Aparecerá un calendario emergente. 

   1.  Si la prueba aún no ha comenzado, puede cambiar las fechas de inicio y finalización. Seleccione las nuevas fechas de inicio y finalización en el calendario o introduzca las nuevas fechas de inicio y finalización en **Fecha de inicio** y **Fecha de finalización**, respectivamente. 

       Si la prueba ya ha comenzado, solo puede cambiar la fecha de finalización. Introduzca la nueva fecha de finalización en **Fecha de finalización**. 

   1.  (Opcional) Si la prueba aún no ha comenzado, puede cambiar las fechas de inicio y finalización. Introduzca las nuevas horas de inicio y finalización en **Hora de inicio** y **Hora de finalización**, respectivamente, en el formato de 24 horas. 

       Si la prueba ya ha comenzado, solo puede cambiar la hora de finalización. Introduzca la nueva hora de finalización en **Hora de finalización**, en el formato de 24 horas. 

   1.  Seleccione **Aplicar**. 

1.  (Opcional) Active o desactive **Habilitar captura de datos**. 

1.  Seleccione **Actualizar prueba de sombra**. 

# Completar pruebas de sombra
<a name="shadow-tests-complete"></a>

 Su prueba se completa automáticamente al final de la duración programada, o bien puede detener antes una prueba en progreso. Una vez completada la prueba, el estado de la prueba en la sección **Pruebas de sombra** de la página **Pruebas de sombra** aparecerá como **Completada**. A continuación, podrá revisar y analizar las métricas finales de la prueba. 

 Puede usar el panel de métricas para decidir si desea promover la variante de sombra en la producción. Para obtener más información sobre cómo analizar el panel de métricas de su prueba, consulte [Supervisión de una prueba de sombra](shadow-tests-view-monitor-edit-dashboard.md). 

 Para obtener instrucciones sobre cómo completar la prueba antes de que finalice el tiempo de finalización programado, consulte [Completar una prueba de sombra antes de tiempo](#shadow-tests-complete-early). 

 Para obtener instrucciones sobre cómo promocionar su variante de sombras en la producción, consulte [Promover una variante de sombra](#shadow-tests-complete-promote). 

## Completar una prueba de sombra antes de tiempo
<a name="shadow-tests-complete-early"></a>

 Una de las razones por las que quizás quiera completar una prueba paralela en curso es porque ha decidido que las métricas de su variante de sombra son buenas y quiere promocionarla para su fase de producción. También puede decidir completar la prueba si una o más de las variantes no tienen un buen rendimiento. 

 Para completar la prueba antes de la fecha de finalización programada, haga lo siguiente: 

1.  Seleccione la prueba que quiera marcar como completada en la sección **Pruebas de sombra** de la página **Pruebas de sombra**. 

1.  En la lista desplegable **Acciones**, seleccione **Completar** y aparecerá el cuadro de diálogo **Completar prueba de sombras**. 

1.  En el cuadro de diálogo, seleccione una de las acciones siguientes: 
   + **Sí, implementar la variante de sombra**
   + **No, eliminar la variante de sombra**

1.  (Opcional) En el cuadro de texto **Comentario**, introduzca el motivo por el que ha completado la prueba antes de la hora de finalización programada. 

1. 

   1.  Si ha decidido implementar la variante de sombra, seleccione **Completar y proceder con la implementación**. Aparecerá la página **Implementar variante de sombra**. Para obtener instrucciones sobre cómo completar esta página, consulte [Promover una variante de sombra](#shadow-tests-complete-promote). 

   1.  Si decide eliminar la variante de sombra, seleccione **Confirmar**. 

## Promover una variante de sombra
<a name="shadow-tests-complete-promote"></a>

 Si ha decidido sustituir su variante de producción por la variante de sombra, puede actualizar su punto de conexión y promocionar su variante de sombra para responder a las solicitudes de inferencia. De este modo, se elimina la variante de producción actual y se sustituye por la variante de sombra. 

 Si su prueba de sombras aún está en curso, primero deberá completarla. Para completar la prueba de sombras antes de su finalización programada, siga las instrucciones indicadas en [Completar una prueba de sombra antes de tiempo](#shadow-tests-complete-early) antes de continuar con esta sección. 

 Al promocionar una variante de sombra a producción, dispone de las siguientes opciones para el recuento de instancias de la variante de sombra. 
+  Puede conservar el número y el tipo de instancias de la variante de producción. Si selecciona esta opción, su variante de sombra se lanzará en producción con el recuento de instancias actual, asegurándose así de que su modelo pueda seguir procesando el tráfico de solicitudes a la misma escala. 
+  Puede conservar el número de instancias y el tipo de su variante de sombras. Si quiere usar esta opción, le recomendamos que realice una prueba paralela con un muestreo de tráfico del 100 % para asegurarse de que la variante de sombra pueda procesar el tráfico de solicitudes en la escala actual. 
+  Puede usar valores personalizados para el número y el tipo de instancias. Si quiere usar esta opción, le recomendamos que realice una prueba paralela con un muestreo de tráfico del 100 % para asegurarse de que la variante de sombra pueda procesar el tráfico de solicitudes en la escala actual. 

 A menos que esté validando el tipo o el recuento de instancias o ambos de la variante de sombra, le recomendamos encarecidamente que mantenga el recuento y el tipo de instancias de la variante de producción cuando promocione su variante de sombra. 

 Para promover la variante de sombra, haga lo siguiente: 

1.  Si la prueba se ha completado, haga lo siguiente: 

   1.  Seleccione la prueba en la sección de **pruebas de sombra** en la página de **pruebas de sombra**. 

   1.  En la lista desplegable **Acciones**, seleccione **Ver**. Aparecerá el panel de control. 

   1.  Seleccione la **variante Implementar sombra** en la sección **Entorno**. Aparecerá la página **Implementar variante de sombra**. 

    Si la prueba no se ha completado, consulte [Completar una prueba de sombra antes de tiempo](#shadow-tests-complete-early) para completarla. 

1.  En la sección **Configuración de variantes**, seleccione una de las siguientes opciones: 
   + **Conservar configuración de producción**
   + **Conservar configuración de sombras**
   + **Configuración de instancias personalizadas**

    Si ha seleccionado **Configuración de instancias personalizadas**, haga lo siguiente: 

   1.  En la lista desplegable **Tipo de instancia**, elija un tipo de instancia. 

   1.  En **Recuento de instancias**, escriba el número de instancias. 

1.  En el cuadro de texto **Introduzca «implementar» para confirmar la implementación**, introduzca **deploy**. 

1.  Elija la **variante Implementar sombra**. 

 El punto de conexión de la inferencia de SageMaker AI usa ahora la variante de sombra como variante de producción y la variante de producción se ha eliminado del punto de conexión. 

# Prácticas recomendadas
<a name="shadow-tests-best-practices"></a>

 Al crear un experimento de inferencia, debe tener en cuenta lo siguiente: 
+  **Porcentaje de muestreo de tráfico**: el muestreo del 100 % de las solicitudes de inferencia le permitirá validar que su variante de sombra puede manejar el tráfico de producción cuando se promueva. Puede empezar con un porcentaje de muestreo de tráfico más bajo e ir aumentando el número a medida que vaya ganando confianza en su variante, pero le recomendamos que se asegure de aumentar el tráfico al 100 % antes de la promoción. 
+  **Tipo de instancia**: a menos que utilice variantes ocultas para evaluar tipos o tamaños de instancias alternativos, te recomendamos que utilice el mismo tipo, tamaño y número de instancias para asegurarse de que su variante oculta puede gestionar el volumen de solicitudes de inferencia después de promocionarla. 
+  **Escalado automático**: para garantizar que su variante oculta pueda responder a los picos en el número de solicitudes de inferencia o a los cambios en los patrones de las solicitudes de inferencia, le recomendamos encarecidamente que configure el escalado automático en sus variantes ocultas. Para saber cómo configurar el autoescalado, consulte [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md). Si ha configurado el autoescalado, también puede validar los cambios en las políticas del autoescalado sin que ello afecte a los usuarios. 
+  **Supervisión de las métricas**: después de iniciar un experimento paralelo y tener suficientes invocaciones, supervise el panel de métricas para asegurarse de que las métricas, como la latencia y la tasa de errores, estén dentro de los límites aceptables. Esto le ayuda a detectar los errores de configuración de forma temprana y a tomar medidas correctivas. Para obtener información sobre cómo supervisar las métricas de un experimento de inferencia en curso, consulte [Cómo ver, supervisar y editar las pruebas de sombra](shadow-tests-view-monitor-edit.md). 

# Acceso a contenedores a través de SSM
<a name="ssm-access"></a>

 Amazon SageMaker AI le permite conectarse de forma segura a los contenedores Docker en los que se implementan sus modelos para realizar inferencias mediante AWS Systems Manager (SSM). Esto te da acceso al contenedor a nivel de shell para que puedas depurar los procesos que se ejecutan dentro del contenedor y registrar los comandos y las respuestas con Amazon CloudWatch. También puede configurar una AWS PrivateLink conexión con las instancias de aprendizaje automático que alojan sus contenedores para acceder a los contenedores a través de SSM de forma privada. 

**aviso**  
 El hecho de habilitar el acceso de SSM puede afectar al rendimiento de su punto de conexión. Recomendamos utilizar esta características con los puntos de conexión de desarrollo o prueba y no con los puntos de conexión de producción. Además, la SageMaker IA aplica automáticamente los parches de seguridad y reemplaza o cierra las instancias de punto final defectuosas en 10 minutos. Sin embargo, en el caso de los puntos finales con variantes de producción compatibles con SSM, la SageMaker IA retrasa un día la aplicación de los parches de seguridad y la sustitución o finalización de las instancias de puntos finales defectuosas para poder realizar la depuración. 

 En las siguientes secciones, se detalla cómo puede utilizar esta característica. 

## Lista de permisos
<a name="ssm-access-allowlist"></a>

 Para utilizar esta característica, debe ponerse en contacto con el servicio de atención al cliente e incluir su cuenta en la lista de permitidos. No puede crear un punto de conexión con el acceso de SSM habilitado si su cuenta no está en la lista de permitidos para este acceso. 

## Habilitación del acceso de SSM
<a name="ssm-access-enable"></a>

 Para habilitar el acceso de SSM para un contenedor existente en un punto de conexión, actualice el punto de conexión con una nueva configuración de punto de conexión, con el parámetro `EnableSSMAccess` establecido en `true`. A continuación se incluye un ejemplo de una configuración de punto de conexión. 

```
{
    "EndpointConfigName": "endpoint-config-name",
    "ProductionVariants": [
        {
            "InitialInstanceCount": 1,
            "InitialVariantWeight": 1.0,
            "InstanceType": "ml.t2.medium",
            "ModelName": model-name,
            "VariantName": variant-name,
            "EnableSSMAccess": true,
        },
    ]
}
```

 [Para obtener más información sobre cómo habilitar el acceso al SSM, consulte Habilitar. SSMAccess](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html#API_EnableSSMAccess) 

## Configuración de IAM
<a name="ssm-access-iam"></a>

### Permisos de IAM de puntos de conexión
<a name="ssm-access-iam-endpoint"></a>

 Si ha habilitado el acceso SSM para una instancia de punto final, la SageMaker IA inicia y administra el [agente SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) cuando inicia la instancia de punto final. Para permitir que el agente de SSM se comunique con los servicios de SSM, añada la siguiente política al rol de ejecución en el que se ejecuta el punto de conexión. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	             
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"    
        }
    ]
 }
```

------

### Permisos de IAM de usuario
<a name="ssm-access-iam-user"></a>

 Añada la siguiente política para conceder a un usuario de IAM permisos de sesión de SSM para conectarse a un destino de SSM. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	             
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:TerminateSession"
            ],
            "Resource": "*"    
        }
    ]
}
```

------

 Puede restringir los puntos de conexión a los que se puede conectar un usuario de IAM con la siguiente política. Sustituya *italicized placeholder text* por su propia información. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:sagemaker:us-east-2:111122223333:endpoint/endpoint-name"    
        }
    ]
}
```

------

## Acceda por SSM con AWS PrivateLink
<a name="ssm-access-privatelink"></a>

 Si sus puntos de conexión se ejecutan en una nube privada virtual (VPC) que no está conectada a la Internet pública, puede AWS PrivateLink utilizarlos para habilitar SSM. AWS PrivateLink restringe todo el tráfico de red entre sus instancias de punto final, SSM y Amazon EC2 a la red de Amazon. Para obtener más información sobre cómo configurar el acceso de SSM con AWS PrivateLink, consulte [Configurar un punto de conexión de VPC para Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html). 

## Iniciar sesión con Amazon CloudWatch Logs
<a name="ssm-access-logging"></a>

 En el caso de los puntos de enlace con acceso SSM, puede registrar los errores del agente SSM en Amazon Logs. CloudWatch Para obtener más información sobre cómo registrar los errores con los CloudWatch registros, consulte Registrar la actividad de la [sesión](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging.html). El registro está disponible en el flujo de registro de SSM, `variant-name/ec2-instance-id/ssm`, en el grupo de registro de punto de conexión `/aws/sagemaker/endpoints/endpoint-name`. Para obtener más información sobre cómo ver el registro, consulte [Ver los datos de registro enviados a CloudWatch los registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData). 

 Las variantes de producción detrás del punto de conexión pueden tener varios contenedores de modelos. El registro de cada contenedor de modelos se realiza en el flujo de registro. Cada registro va precedido de `[sagemaker ssm logs][container-name]`, donde `container-name` puede ser el nombre que le haya dado al contenedor o el nombre predeterminado, como `container_0` y `container_1`. 

## Acceso a contenedores de modelos
<a name="ssm-access-container"></a>

 Para acceder a un contenedor de modelos en la instancia de punto de conexión, necesita su ID de destino. El ID de destino presenta uno de los siguientes formatos: 
+  `sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id` para contenedores en puntos de conexión de un solo contenedor 
+  `sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id_container-name` para contenedores en puntos de conexión de un varios contenedores 

 En el siguiente ejemplo, se muestra cómo se puede utilizar AWS CLI para acceder a un contenedor modelo con su ID de destino. 

```
aws ssm start-session --target sagemaker-endpoint:prod-image-classifier_variant1_i-003a121c1b21a90a9_container_1
```

 Si habilita el registro, como se menciona en[Iniciar sesión con Amazon CloudWatch Logs](#ssm-access-logging), podrá encontrar el destino IDs de todos los contenedores que aparecen al principio del flujo de registro de SSM. 

**nota**  
 MarketPlace Con SSM, no puede conectarse a contenedores de algoritmos 1P ni a contenedores de modelos obtenidos de la SageMaker IA. Sin embargo, puede conectarse a los contenedores de aprendizaje profundo (DLCs) proporcionados por él AWS o a cualquier contenedor personalizado de su propiedad. 
 Si ha habilitado el aislamiento de red para un contenedor de modelos que le impide realizar llamadas de red salientes, no podrá iniciar una sesión de SSM para ese contenedor. 
 Solo puede acceder a un contenedor de una sesión de SSM. Para acceder a otro contenedor, incluso si está detrás del mismo punto de conexión, inicie una nueva sesión de SSM con el ID de destino de ese punto de conexión. 

# Servidores de modelos para la implementación de modelos con Amazon SageMaker AI
<a name="deploy-model-frameworks"></a>

Puede utilizar servidores de modelos populares TorchServe, como DJL Serving y Triton Inference Server, para implementar sus modelos en IA. SageMaker En los siguientes temas se explica cómo hacerlo.

**Topics**
+ [Implemente modelos con TorchServe](deploy-models-frameworks-torchserve.md)
+ [Implementar modelos con DJL Serving](deploy-models-frameworks-djl-serving.md)
+ [Implementación de modelos con Triton Inference Server](deploy-models-frameworks-triton.md)

# Implemente modelos con TorchServe
<a name="deploy-models-frameworks-torchserve"></a>

TorchServe es el modelo de servidor recomendado PyTorch, ya que viene preinstalado en el contenedor de aprendizaje AWS PyTorch profundo (DLC). Esta poderosa herramienta ofrece a los clientes una experiencia uniforme y fácil de usar, y ofrece un alto rendimiento al implementar varios PyTorch modelos en varias AWS instancias, incluidas la CPU, la GPU, Neuron y Graviton, independientemente del tamaño o la distribución del modelo.

TorchServe admite una amplia gama de funciones avanzadas, como el procesamiento dinámico por lotes, el microprocesamiento, las A/B pruebas de modelos, la transmisión, el torch XLA, TensorRT, ONNX e IPEX. Además, integra a la perfección la solución para modelos grandes, Pi, lo PyTorch que permite un manejo eficiente de modelos grandes. PPy Además, TorchServe amplía su soporte a bibliotecas populares de código abierto DeepSpeed, como Accelerate y Fast Transformers, entre otras, lo que amplía aún más sus capacidades. Con TorchServe ella, AWS los usuarios pueden implementar y utilizar sus PyTorch modelos con confianza, aprovechando su versatilidad y rendimiento optimizado en diversas configuraciones de hardware y tipos de modelos. [Para obtener información más detallada, puede consultar la [PyTorchdocumentación](https://pytorch.org/serve/) y demásTorchServe. GitHub](https://github.com/pytorch/serve)

En la siguiente tabla se enumeran las AWS PyTorch DLCs compatibles con TorchServe.


| Tipo de instancia | SageMaker Enlace PyTorch DLC de AI | 
| --- | --- | 
| CPU y GPU | [SageMaker Contenedores de IA PyTorch ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) | 
| Neuron | [PyTorch Contenedores Neuron](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers) | 
| Graviton | [SageMaker Contenedores AI PyTorch Graviton](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-graviton-containers-sm-support-only) | 

En las siguientes secciones se describe la configuración para compilar y probar PyTorch DLCs en Amazon SageMaker AI.

## Introducción
<a name="deploy-models-frameworks-torchserve-prereqs"></a>

Antes de comenzar, compruebe que cumple los siguientes requisitos previos:

1. Asegúrese de tener acceso a una AWS cuenta. Configure su entorno para que AWS CLI pueda acceder a su cuenta a través de un usuario de AWS IAM o un rol de IAM. Recomendamos utilizar un rol de IAM. Para realizar pruebas en su cuenta personal, puede asociar las siguientes políticas de permisos gestionados al rol de IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AWS ServiceRoleForAmazonEKSNodegroup](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSServiceRoleForAmazonEKSNodegroup)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. Configure sus dependencias de forma local, como se muestra en el siguiente ejemplo.

   ```
   from datetime import datetime
       import os
       import json
       import logging
       import time
       
       # External Dependencies:
       import boto3
       from botocore.exceptions import ClientError
       import sagemaker
       
       sess = boto3.Session()
       sm = sess.client("sagemaker")
       region = sess.region_name
       account = boto3.client("sts").get_caller_identity().get("Account")
       
       smsess = sagemaker.Session(boto_session=sess)
       role = sagemaker.get_execution_role()
       
       # Configuration:
       bucket_name = smsess.default_bucket()
       prefix = "torchserve"
       output_path = f"s3://{bucket_name}/{prefix}/models"
       print(f"account={account}, region={region}, role={role}")
   ```

1. Recupera la imagen del PyTorch DLC, como se muestra en el siguiente ejemplo.

   SageMaker Las imágenes del PyTorch DLC de IA están disponibles en todas las AWS regiones. Para obtener más información, consulte la [lista de imágenes de contenedores de DLC](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only).

   ```
   baseimage = sagemaker.image_uris.retrieve(
           framework="pytorch",
           region="<region>",
           py_version="py310",
           image_scope="inference",
           version="2.0.1",
           instance_type="ml.g4dn.16xlarge",
       )
   ```

1. Crear un espacio de trabajo local.

   ```
   mkdir -p workspace/
   ```

## Añadir un paquete
<a name="deploy-models-frameworks-torchserve-package"></a>

En las siguientes secciones se describe cómo añadir y preinstalar paquetes a una imagen de PyTorch DLC.

**Casos de uso de BYOC**

En los pasos siguientes se describe cómo añadir un paquete a la imagen de PyTorch DLC. Para obtener más información sobre la personalización del contenedor, consulte [Creación de imágenes personalizadas de AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

1. Supongamos que quieres añadir un paquete a la imagen del docker del PyTorch DLC. Cree un Dockerfile en el directorio de `docker`, como se muestra en el siguiente ejemplo:

   ```
   mkdir -p workspace/docker
       cat workspace/docker/Dockerfile
       
       ARG BASE_IMAGE
       
       FROM $BASE_IMAGE
       
       #Install any additional libraries
       RUN pip install transformers==4.28.1
   ```

1. Cree y publique la imagen de Docker personalizada mediante el siguiente script: [build\$1and\$1push.sh](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/docker/build_and_push.sh).

   ```
   # Download script build_and_push.sh to workspace/docker
       ls workspace/docker
       build_and_push.sh  Dockerfile
       
       # Build and publish your docker image
       reponame = "torchserve"
       versiontag = "demo-0.1"
       
       ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}
   ```

**SageMaker Casos de uso de preinstalación de IA**

En el siguiente ejemplo, se muestra cómo preinstalar un paquete en el contenedor de contenido PyTorch descargable. Debe crear un archivo `requirements.txt` localmente en el directorio `workspace/code`.

```
mkdir -p workspace/code
    cat workspace/code/requirements.txt
    
    transformers==4.28.1
```

## Crea artefactos modelo TorchServe
<a name="deploy-models-frameworks-torchserve-artifacts"></a>

En el siguiente ejemplo, utilizamos el modelo MNIST [ previamente entrenado](https://github.com/pytorch/serve/tree/master/examples/image_classifier/mnist). Creamos un directorio`workspace/mnist`, implementamos [mnist\$1handler.py](https://github.com/pytorch/serve/blob/master/examples/image_classifier/mnist/mnist_handler.py) siguiendo las [instrucciones de servicio TorchServe personalizadas](https://github.com/pytorch/serve/blob/master/docs/custom_service.md#custom-service) y [configuramos los parámetros del modelo (como el](https://github.com/pytorch/serve/tree/master/model-archiver#config-file) tamaño del lote y los trabajadores) en [model-config.yaml](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/lama/model-config.yaml). A continuación, utilizamos la TorchServe herramienta `torch-model-archiver` para crear los artefactos del modelo y subirlos a Amazon S3.

1. Configure los parámetros del modelo en `model-config.yaml`.

   ```
   ls -al workspace/mnist-dev
       
       mnist.py
       mnist_handler.py
       mnist_cnn.pt
       model-config.yaml
       
       # config the model
       cat workspace/mnist-dev/model-config.yaml
       minWorkers: 1
       maxWorkers: 1
       batchSize: 4
       maxBatchDelay: 200
       responseTimeout: 300
   ```

1. Cree los artefactos del modelo utilizando [torch-model-archiver ](https://github.com/pytorch/serve/tree/master/model-archiver#torch-model-archiver-for-torchserve).

   ```
   torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz
   ```

   Si desea preinstalar un paquete, debe incluir el directorio `code` en el archivo `tar.gz`.

   ```
   cd workspace
       torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive
       
       cd mnist
       mv ../code .
       tar cvzf mnist.tar.gz .
   ```

1. Suba `mnist.tar.gz` a Amazon S3.

   ```
   # upload mnist.tar.gz to S3
       output_path = f"s3://{bucket_name}/{prefix}/models"
       aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz
   ```

## Uso de puntos finales de un solo modelo para realizar la implementación TorchServe
<a name="deploy-models-frameworks-torchserve-single-model"></a>

El siguiente ejemplo muestra cómo crear un [punto final de inferencia en tiempo real de un solo modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html), implementar el modelo en el punto final y probar el punto final mediante el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/).

```
from sagemaker.model import Model
    from sagemaker.predictor import Predictor
    
    # create the single model endpoint and deploy it on SageMaker AI
    model = Model(model_data = f'{output_path}/mnist.tar.gz', 
                  image_uri = baseimage,
                  role = role,
                  predictor_cls = Predictor,
                  name = "mnist",
                  sagemaker_session = smsess)
                  
    endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
    predictor = model.deploy(instance_type='ml.g4dn.xlarge',
                             initial_instance_count=1,
                             endpoint_name = endpoint_name,
                             serializer=JSONSerializer(),
                             deserializer=JSONDeserializer())  
                             
    # test the endpoint
    import random
    import numpy as np
    dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
    
    res = predictor.predict(dummy_data)
```

## Uso de puntos de enlace multimodelo con los que realizar la implementación TorchServe
<a name="deploy-models-frameworks-torchserve-multi-model"></a>

Los [puntos de conexión multimodelo](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) son una solución escalable y rentable para alojar una gran cantidad de modelos detrás de un punto de conexión. Mejoran la utilización de los puntos de conexión al compartir la misma flota de recursos y servir contenedores para alojar todos sus modelos. También reducen la sobrecarga de despliegue, ya que la SageMaker IA gestiona de forma dinámica los modelos de carga y descarga, además de escalar los recursos en función de los patrones de tráfico. Los puntos de conexión multimodelo son especialmente útiles para el aprendizaje profundo y los modelos de IA generativa que requieren una potencia de cálculo acelerada.

Al utilizarlos TorchServe en terminales multimodelo de SageMaker IA, puede acelerar su desarrollo utilizando una pila de servidores con la que esté familiarizado y, al mismo tiempo, aprovechar el intercambio de recursos y la gestión simplificada de modelos que ofrecen los puntos finales multimodelo de SageMaker IA.

El siguiente ejemplo muestra cómo crear un punto final multimodelo, implementar el modelo en el punto final y probar el punto final mediante el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/). Puede encontrar más detalles en este [ejemplo de cuaderno](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/torchserve_multi_model_endpoint.ipynb).

```
from sagemaker.multidatamodel import MultiDataModel
    from sagemaker.model import Model
    from sagemaker.predictor import Predictor
    
    # create the single model endpoint and deploy it on SageMaker AI
    model = Model(model_data = f'{output_path}/mnist.tar.gz', 
                  image_uri = baseimage,
                  role = role,
                  sagemaker_session = smsess)
                  
    endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
    mme = MultiDataModel(
        name = endpoint_name,
        model_data_prefix = output_path,
        model = model,
        sagemaker_session = smsess)
    
    mme.deploy(
        initial_instance_count = 1,
        instance_type = "ml.g4dn.xlarge",
        serializer=sagemaker.serializers.JSONSerializer(),
        deserializer=sagemaker.deserializers.JSONDeserializer())
    
    # list models
    list(mme.list_models())
    
    # create mnist v2 model artifacts
    cp mnist.tar.gz mnistv2.tar.gz
    
    # add mnistv2
    mme.add_model(mnistv2.tar.gz)
    
    # list models
    list(mme.list_models())
    
    predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess)
                             
    # test the endpoint
    import random
    import numpy as np
    dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
    
    res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")
```

## Métricas
<a name="deploy-models-frameworks-torchserve-metrics"></a>

TorchServe admite métricas tanto a nivel de sistema como a nivel de modelo. Puede habilitar las métricas en el modo de formato de registro o en el modo Prometheus a través de la variable de entorno `TS_METRICS_MODE`. Puede usar el archivo de configuración de métricas TorchServe central `metrics.yaml` para especificar los tipos de métricas que se van a rastrear, como el recuento de solicitudes, la latencia, el uso de la memoria, el uso de la GPU, etc. Al consultar este archivo, puede obtener información sobre el rendimiento y el estado de los modelos implementados y supervisar de forma eficaz el comportamiento del TorchServe servidor en tiempo real. Para obtener información más detallada, consulte la [documentación sobre TorchServe métricas](https://github.com/pytorch/serve/blob/master/docs/metrics.md#torchserve-metrics).

Puedes acceder a los registros de TorchServe métricas similares al formato StatsD a través del filtro de CloudWatch registros de Amazon. El siguiente es un ejemplo de registro de TorchServe métricas:

```
CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185
    DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185
```

# Implementar modelos con DJL Serving
<a name="deploy-models-frameworks-djl-serving"></a>

DJL Serving es una solución de servidor de modelos independiente y universal de alto rendimiento. Toma un modelo de aprendizaje profundo, varios modelos o flujos de trabajo y los hace disponibles a través de un punto de conexión HTTP.

Puede utilizar uno de los DJL Serving [Deep Learning Containers (DLCs)](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) para servir sus modelos. AWS Para obtener más información sobre los tipos de modelos y marcos compatibles, consulte el repositorio de [DJL Serving GitHub.](https://github.com/deepjavalibrary/djl-serving)

DJL Serving ofrece muchas funciones que le ayudan a implementar sus modelos con un alto rendimiento:
+ Facilidad de uso: DJL Serving puede funcionar con la mayoría de los modelos sin ninguna modificación. Usted trae los artefactos de sus modelos y DJL Serving puede alojarlos.
+ Compatibilidad con varios dispositivos y aceleradores: DJL Serving admite la implementación de modelos en CPUs GPUs, e Inferentia. AWS 
+ Rendimiento: DJL Serving ejecuta inferencias multiproceso en una sola máquina virtual Java (JVM) para aumentar el rendimiento.
+ Procesamiento dinámico por lotes: DJL Serving admite el procesamiento por lotes dinámico para aumentar el rendimiento.
+ Escalado automático: DJL Serving amplía o reduce automáticamente el número de trabajadores en función de la carga de tráfico.
+ Soporte multimotor: DJL Serving puede alojar modelos simultáneamente utilizando diferentes marcos (por ejemplo, y). PyTorch TensorFlow
+ Modelos de conjunto y flujo de trabajo: DJL Serving permite implementar flujos de trabajo complejos compuestos por varios modelos y puede ejecutar partes del flujo de trabajo CPUs y otras partes. GPUs Los modelos de un flujo de trabajo pueden sacar provecho de diferentes marcos.

En las siguientes secciones se describe cómo configurar un terminal con DJL Serving on SageMaker AI.

## Introducción
<a name="deploy-models-frameworks-djl-prereqs"></a>

Antes de comenzar, compruebe que cumple los siguientes requisitos previos:

1. Asegúrese de tener acceso a una AWS cuenta. Configure su entorno para que AWS CLI pueda acceder a su cuenta a través de un usuario de AWS IAM o un rol de IAM. Recomendamos utilizar un rol de IAM. Para realizar pruebas en su cuenta personal, puede asociar las siguientes políticas de permisos gestionados al rol de IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. Asegúrese de tener el cliente [Docker](https://docs.docker.com/get-docker/) configurado en su sistema.

1. Inicie sesión en Amazon Elastic Container Registry y configure las siguientes variables de entorno:

   ```
   export ACCOUNT_ID=<your_account_id>
   export REGION=<your_region>
   aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
   ```

1. Extraiga la imagen de Docker.

   ```
   docker pull 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
   ```

   Para ver todas las imágenes de los contenedores de DJL Serving disponibles, consulte los [contenedores de inferencia de modelos grandes](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) y los [contenedores de inferencia de CPU de DJL Serving](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#djl-cpu-full-inference-containers). Al elegir una imagen de las tablas de los enlaces anteriores, sustituya la AWS región de la columna URL de ejemplo por la región en la que se encuentra. DLCs Están disponibles en las regiones que figuran en la tabla situada en la parte superior de la página de [imágenes de Available Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

## Personalice su contenedor
<a name="deploy-models-frameworks-djl-byoc"></a>

Puede añadir paquetes a las imágenes base del DLC para personalizar su contenedor. Supongamos que quiere añadir un paquete a la imagen de Docker `763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118`. Debe crear un dockerfile con la imagen que desee como imagen base, añadir los paquetes necesarios y enviar la imagen a Amazon ECR.

Para crear un paquete, siga los pasos que se describen a continuación:

1. Especifique las instrucciones para ejecutar las bibliotecas o paquetes que quiera en el dockerfile de la imagen base.

   ```
   FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
                           
   ## add custom packages/libraries
   RUN git clone https://github.com/awslabs/amazon-sagemaker-examples
   ```

1. Cree la imagen de Docker desde el Dockerfile. Especifique su repositorio de Amazon ECR, el nombre de la imagen base y una etiqueta para la imagen. Si no dispone de ningún repositorio de Amazon ECR, consulte [Uso de Amazon ECR con el AWS CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) en la *Guía del usuario de Amazon ECR* para obtener instrucciones sobre cómo crear uno.

   ```
   docker build -f Dockerfile -t <registry>/<image_name>:<image_tag>
   ```

1. Envíe la imagen de Docker a su repositorio de Amazon ECR.

   ```
   docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/<image_name>:<image_tag>
   ```

Ahora debería disponer de una imagen de contenedor personalizada que pueda utilizar para servir modelos. Para ver más ejemplos de cómo personalizar su contenedor, consulte [Creación de imágenes personalizadas de AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

## Preparación de los artefactos de su modelo
<a name="deploy-models-frameworks-djl-artifacts"></a>

Antes de implementar el modelo en la SageMaker IA, debe empaquetar los artefactos del modelo en un `.tar.gz` archivo. DJL Serving acepta los siguientes artefactos en su archivo:
+ Punto de control de modelos: archivos que almacenan los pesos del modelo.
+ `serving.properties`: un archivo de configuración que puede añadir para cada modelo. Coloque `serving.properties` en el mismo directorio que el archivo del modelo.
+ `model.py`: el código del controlador de inferencias. Esto solo es aplicable cuando se utiliza el modo Python. Si no especifica `model.py`, djl-serving utiliza uno de los controladores predeterminados.

A continuación se muestra un ejemplo de la estructura de `model.tar.gz`.

```
 - model_root_dir # root directory
    - serving.properties            
    - model.py # your custom handler file for Python, if you choose not to use the default handlers provided by DJL Serving
    - model binary files # used for Java mode, or if you don't want to use option.model_id and option.s3_url for Python mode
```

DJL Serving es compatible con motores Java impulsados por motores DJL o Python. No se requieren todos los artefactos anteriores; los artefactos necesarios varían según el modo que elija. Por ejemplo, en el modo Python, solo necesita especificar `option.model_id` en el archivo `serving.properties`; no necesita especificar el punto de control del modelo dentro de los contenedores de LMI. En el modo Java, debe empaquetar el punto de control del modelo. Para obtener más información sobre cómo configurar `serving.properties` y operar con diferentes motores, consulte [Modos de funcionamiento de DJL Serving](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md).

## Utilice terminales de un solo modelo para realizar la implementación con DJL Serving
<a name="deploy-models-frameworks-djl-single-model"></a>

Tras preparar los artefactos del modelo, puede implementarlo en un punto final de SageMaker IA. En esta sección se describe cómo implementar un único modelo en un punto de conexión con DJL Serving. Si va a implementar varios modelos, omita esta sección y vaya a [Utilice puntos de conexión multimodelo para realizar la implementación con DJL Serving](#deploy-models-frameworks-djl-mme).

El siguiente ejemplo muestra un método para crear un objeto modelo mediante el SDK de Amazon SageMaker Python. Deberá especificar los siguientes campos:
+ `image_uri`: puede recuperar una de las imágenes base de DJL Serving, como se muestra en este ejemplo, o puede especificar una imagen de Docker personalizada de su repositorio de Amazon ECR, si ha seguido las instrucciones que se indican en [Personalice su contenedor](#deploy-models-frameworks-djl-byoc).
+ `model_s3_url`: debe ser un URI de Amazon S3 que apunte a su archivo`.tar.gz`.
+ `model_name`: especifique un nombre para el objeto de modelo.

```
import boto3
 import sagemaker
from sagemaker.model import Model
from sagemaker import image_uris, get_execution_role

aws_region = "aws-region"
sagemaker_session = sagemaker.Session(boto_session=boto3.Session(region_name=aws_region))
role = get_execution_role()

def create_model(model_name, model_s3_url):
    # Get the DJL DeepSpeed image uri
    image_uri = image_uris.retrieve(
        framework="djl-deepspeed",
        region=sagemaker_session.boto_session.region_name,
        version="0.20.0"
    )
    model = Model(
        image_uri=image_uri,
        model_data=model_s3_url,
        role=role,
        name=model_name,
        sagemaker_session=sagemaker_session,
    )
    return model
```

## Utilice puntos de conexión multimodelo para realizar la implementación con DJL Serving
<a name="deploy-models-frameworks-djl-mme"></a>

Si desea implementar varios modelos en un punto final, la SageMaker IA ofrece puntos finales multimodelo, que son una solución escalable y rentable para implementar un gran número de modelos. DJL Serving también permite cargar varios modelos simultáneamente y ejecutar inferencias en cada uno de los modelos de forma simultánea. Los contenedores DJL Serving cumplen con los contratos de puntos finales multimodelo de SageMaker IA y se pueden utilizar para implementar puntos finales multimodelo.

Cada artefacto modelo individual debe empaquetarse de la misma manera que se describe en la anterior sección [Preparación de los artefactos de su modelo](#deploy-models-frameworks-djl-artifacts). Puede establecer configuraciones específicas del modelo en el archivo `serving.properties` y el código del controlador de inferencias específico del modelo en `model.py`. Para un punto de conexión multimodelo, los modelos deben organizarse de la siguiente manera:

```
 root_dir
        |-- model_1.tar.gz
        |-- model_2.tar.gz
        |-- model_3.tar.gz
            .
            .
            .
```

El SDK de Amazon SageMaker Python usa el [MultiDataModel](https://sagemaker.readthedocs.io/en/stable/api/inference/multi_data_model.html)objeto para crear una instancia de un punto final multimodelo. El URI de Amazon S3 para el directorio raíz debe pasarse como argumento `model_data_prefix` al constructor `MultiDataModel`.

DJL Serving también proporciona varios parámetros de configuración para gestionar los requisitos de memoria del modelo, como `required_memory_mb` y `reserved_memory_mb`, que pueden configurarse para cada modelo del archivo [serving.properties.](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties) Estos parámetros son útiles para gestionar los errores de falta de memoria de forma más eficaz. Para ver todos los parámetros configurables, consulte [OutofMemory handling](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/out_of_memory_management.md) in djl-serving.

La característica de escalado automático de DJL Serving ayuda a garantizar que los modelos se escalen adecuadamente para el tráfico entrante. De forma predeterminada, DJL Serving determina el número máximo de trabajadores que puede soportar un modelo en función del hardware disponible (por ejemplo, núcleos de CPU o dispositivos de GPU). Puede establecer límites inferiores y superiores para cada modelo para garantizar que siempre se pueda atender un nivel de tráfico mínimo y que un solo modelo no consuma todos los recursos disponibles. Puede establecer las siguientes propiedades en el archivo [serving.properties](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties):
+ `gpu.minWorkers`: Número mínimo de trabajadores para. GPUs
+ `gpu.maxWorkers`: Número máximo de trabajadores para GPUs.
+ `cpu.minWorkers`: Número mínimo de trabajadores para CPUs.
+ `cpu.maxWorkers`: Número máximo de trabajadores para CPUs.

[Para ver un end-to-end ejemplo de cómo implementar un terminal multimodelo en la SageMaker IA mediante un contenedor de DJL Serving, consulte el cuaderno de ejemplo Multi-model-Inference-Demo.ipynb.](https://github.com/deepjavalibrary/djl-demo/blob/master/aws/sagemaker/Multi-Model-Inference-Demo.ipynb)

# Implementación de modelos con Triton Inference Server
<a name="deploy-models-frameworks-triton"></a>

[Servidor de inferencia Triton](https://github.com/triton-inference-server/server) es un software de servidor de inferencias de código abierto que optimiza la inferencia de IA. Con Triton, puede implementar cualquier modelo creado con múltiples marcos de aprendizaje profundo y aprendizaje automático, incluidos TensorRT,, ONNX TensorFlow, OpenVINO PyTorch, Python, RAPIDS FIL y más.

Los contenedores Triton de SageMaker IA le ayudan a implementar el servidor de inferencia Triton en la plataforma SageMaker AI Hosting para ofrecer modelos entrenados en producción. Es compatible con los diferentes modos en los que SageMaker opera la IA. Para ver una lista de los contenedores del servidor de inferencia Triton disponibles en SageMaker IA, consulte los contenedores de [inferencia Triton de NVIDIA (solo compatibles con SM)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only). 

[Para ver ejemplos de end-to-end cuadernos, te recomendamos que consultes el repositorio. amazon-sagemaker-examples ](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-triton)

## Modos de alojamiento
<a name="deploy-models-frameworks-triton-modes"></a>

Los contenedores Triton admiten los siguientes modos de alojamiento de SageMaker IA:
+ Puntos de conexión de modelo único
  + Este es el modo de funcionamiento predeterminado de la SageMaker IA. En este modo, el contenedor Triton puede cargar un solo modelo o un solo modelo de conjunto.
  + El nombre del modelo debe pasarse como una propiedad del entorno del contenedor, que forma parte de la llamada a la API de `CreateModel` SageMaker IA. La variable de entorno que se utiliza para pasar el nombre del modelo es `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Puntos de conexión de modelo único con conjunto
  + El servidor de inferencia Triton admite un *conjunto*, que es una canalización, o un DAG (gráfico acíclico dirigido) de modelos. Aunque técnicamente un conjunto se compone de varios modelos, en el modo de punto final predeterminado para un solo modelo, la SageMaker IA puede tratar el *conjunto propiamente dicho* (el metamodelo que representa la canalización) como el modelo principal a cargar y, posteriormente, cargar los modelos asociados.
  + Se debe utilizar el nombre del modelo del propio conjunto para cargar el modelo. Debe transferirse como una propiedad del entorno del contenedor, que forma parte de la llamada a la `CreateModel` SageMaker API. La variable de entorno que se utiliza para pasar el nombre del modelo es `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Puntos de conexión multimodelo
  + En este modo, la SageMaker IA puede ofrecer varios modelos en un único punto final. Para usar este modo, especifique la variable de entorno `‘MultiModel’: true` como una propiedad del entorno del contenedor, que forma parte de la llamada a la `CreateModel` SageMaker API.
  + De forma predeterminada, no se carga ningún modelo cuando se inicia la instancia. Para ejecutar una solicitud de inferencia en un modelo concreto, especifica el `*.tar.gz` archivo del modelo correspondiente como argumento de la `TargetModel` propiedad de la llamada a la `InvokeEndpoint` SageMaker API.
+ Puntos de conexión multimodelo con conjunto
  + En este modo, la SageMaker IA funciona como se describe para los puntos finales multimodelo. Sin embargo, el contenedor Triton de SageMaker AI puede cargar varios modelos de conjuntos, lo que significa que se pueden ejecutar múltiples canalizaciones de modelos en la misma instancia. SageMaker La IA trata cada conjunto como un modelo, y se puede invocar el conjunto propio de cada modelo especificando el `*.tar.gz` archivo correspondiente como. `TargetModel`
  + Para una mejor gestión de la memoria durante la memoria dinámica `LOAD` y `UNLOAD`, le recomendamos que mantenga el tamaño del conjunto pequeño.

## Tipos de carga de inferencia
<a name="deploy-models-frameworks-triton-payloads"></a>

Triton admite dos métodos para enviar una carga útil de inferencia a través de la red `json` y `binary+json` (o json codificado en binario). En ambos casos, la carga útil de JSON incluye el tipo de datos, la forma y el tensor real de la solicitud de inferencia. El tensor de solicitud debe ser un tensor binario.

Con el formato `binary+json`, debe especificar la longitud de los metadatos de la solicitud en el encabezado para que Triton pueda analizar correctamente la carga binaria. En el contenedor SageMaker AI Triton, esto se hace mediante un `Content-Type` encabezado personalizado:`application/vnd.sagemaker-triton.binary+json;json-header-size={}`. Esto es diferente a usar el `Inference-Header-Content-Length` encabezado en un servidor de inferencia Triton independiente porque los encabezados personalizados no están permitidos en AI. SageMaker 

## Uso de config.pbtxt para establecer la configuración del modelo
<a name="deploy-models-frameworks-triton-config"></a>

En el caso de los servidores de inferencia Triton SageMaker basados en IA, cada modelo debe incluir un `config.pbtxt` archivo que especifique, como mínimo, las siguientes configuraciones del modelo:
+ `name`: Si bien esto es opcional para los modelos que se ejecutan fuera de la SageMaker IA, le recomendamos que siempre proporcione un nombre para los modelos que se ejecutarán en Triton en la IA. SageMaker 
+ [`platform` y/o `backend`](https://github.com/triton-inference-server/backend/blob/main/README.md#backends): configurar un backend es esencial para especificar el tipo de modelo. Algunos backends tienen una clasificación adicional, como `tensorflow_savedmodel` o ` tensorflow_graphdef`. Es posible especificar estas opciones como parte de la clave `platform` además de la clave `backend`. Los backends más comunes son `tensorrt`, `onnxruntime`, `tensorflow`, `pytorch`, `python`, `dali`, `fil` y `openvino`.
+ `input`: especifique tres atributos para la entrada: `name`, `data_type` y `dims` (la forma).
+ `output`: especifique tres atributos para la salida: `name`, `data_type` y `dims` (la forma).
+ `max_batch_size`: establezca el tamaño del lote en un valor mayor o igual a 1 que indique el tamaño máximo de lote que Triton debe utilizar con el modelo.

[Para obtener más información sobre la configuración`config.pbtxt`, consulta el repositorio de GitHub Triton.](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) Triton proporciona varias configuraciones para ajustar el comportamiento del modelo. Algunas de las opciones de configuración más comunes e importantes son:
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups): los grupos de instancias ayudan a especificar el número y la ubicación de un modelo determinado. Tienen los atributos `count`, `kind`, y `gpus` (usados cuando `kind` es `KIND_GPU`). El atributo `count` equivale a la cantidad de trabajadores. Para el servicio de modelos normal, cada trabajador tiene su propia copia de modelo. Del mismo modo, en Triton, el `count` especifica el número de copias del modelo por dispositivo. Por ejemplo, si el tipo `instance_group` es `KIND_CPU`, entonces la CPU tiene el número `count` de copias del modelo.
**nota**  
En una instancia de GPU, la configuración `instance_group` se aplica a cada dispositivo de GPU. Por ejemplo, se coloca el número `count` de copias del modelo en cada dispositivo de GPU, a menos que especifique explícitamente qué dispositivos de GPU deben cargar el modelo.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher) y [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models): el procesamiento por lotes dinámico se usa para los modelos sin estado y el procesamiento por lotes secuencial se usa para los modelos con estado (en los que se desea enrutar una solicitud a la misma instancia del modelo cada vez). Los programadores de procesamiento por lotes permiten una cola por modelo, lo que ayuda a aumentar el rendimiento, en función de la configuración del procesamiento por lotes.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models): un modelo de conjunto representa una *canalización* de uno o más modelos y la conexión de los tensores de entrada y salida entre esos modelos. Es posible configurarlo especificando `platform` como`ensemble`. La configuración del conjunto es solo una representación de la canalización del modelo. En el caso de la SageMaker IA, todos los modelos de un conjunto se consideran dependientes del modelo de conjunto y se cuentan como un modelo único para las métricas de la SageMaker IA, por ejemplo. `LoadedModelCount`

## Publicar las métricas predeterminadas de Triton en Amazon CloudWatch
<a name="deploy-models-frameworks-triton-metrics"></a>

El contenedor de inferencias Triton de NVIDIA expone las métricas en el puerto 8002 (configurable) para los distintos modelos y GPUs que se utilizan en el servidor de inferencia Triton. [Para obtener todos los detalles de las métricas predeterminadas disponibles, consulte la GitHub página de las métricas del servidor de inferencia Triton.](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/metrics.md) Estas métricas están en formato Prometheus y pueden extraerse mediante una configuración de scraper de Prometheus.

A partir de la versión 23.07 en adelante, el contenedor SageMaker AI Triton permite publicar estas métricas en Amazon CloudWatch especificando algunas variables de entorno. Para analizar las métricas de Prometheus, el contenedor Triton de IA aprovecha SageMaker el agente de Amazon. CloudWatch 

Las variables de entorno obligatorias que debe especificar para recopilar las métricas son las siguientes:


| Variable de entorno | Description (Descripción) | Ejemplo de valor | 
| --- | --- | --- | 
|  `SAGEMAKER_TRITON_ALLOW_METRICS`  |  Especifique esta opción para permitir que Triton publique métricas en su punto final de Prometheus.  | "true" | 
|  `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH`  |  Especifica esta opción para iniciar las comprobaciones previas necesarias para publicar las métricas en Amazon CloudWatch.  | "true" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP`  |  Especifique esta opción para apuntar al grupo de registros en el que se escriben las métricas.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE`  |  Especifique esta opción para apuntar al espacio de nombres de las métricas en el que quiera ver y trazar las métricas.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" | 
|  `SAGEMAKER_TRITON_METRICS_PORT`  |  Especifique esto como 8002 o cualquier otro puerto. Si SageMaker AI no ha bloqueado el puerto especificado, se utiliza. De lo contrario, se elige automáticamente otro puerto no bloqueado.  | "8002" | 

Al publicar métricas con Triton on SageMaker AI, tenga en cuenta las siguientes limitaciones:
+ Si bien puedes generar métricas personalizadas a través de la C-API y el backend de Python (a partir de la versión 23.05), actualmente no se admiten para su publicación en Amazon. CloudWatch
+ En el modo de puntos finales multimodelo (MME) de SageMaker IA, Triton se ejecuta en un entorno que requiere que se habilite el espacio de nombres de los modelos, ya que cada modelo (excepto los modelos de conjunto) se trata como si estuviera en su propio repositorio de modelos. En la actualidad, esto crea una limitación para las métricas. Cuando el espaciado de nombres de los modelos está activado, Triton no distingue las métricas entre dos modelos con el mismo nombre que pertenecen a conjuntos diferentes. Como solución alternativa, asegúrese de que cada modelo que se esté implementando tenga un nombre único. Esto también facilita la búsqueda de las métricas. CloudWatch

## Variables de entorno
<a name="deploy-models-frameworks-triton-variables"></a>

En la siguiente tabla se enumeran las variables de entorno compatibles con Triton on SageMaker AI.


| Variable de entorno | Description (Descripción) | Tipo | Valores posibles | 
| --- | --- | --- | --- | 
| `SAGEMAKER_MULTI_MODEL` | Permite que Triton funcione en el modo de puntos finales multimodelo de SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME` | Especifique el modelo que se va a cargar en el modo de modelo único de SageMaker IA (predeterminado). Para el modo conjunto, especifique el nombre del propio conjunto. | Cadena | *<model\$1name>*como se especifica en config.pbtxt | 
| `SAGEMAKER_TRITON_PING_MODE` | `'ready'`es el modo predeterminado en el modo de modelo único de la SageMaker IA y `'live'` es el predeterminado en el modo de puntos finales multimodelo de la SageMaker IA. | Cadena | `ready`, `live` | 
| `SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING` | En el contenedor SageMaker AI Triton, está configurado de forma predeterminada. `true` | Booleano | `true`, `false` | 
| `SAGEMAKER_BIND_TO_PORT` | En SageMaker AI, el puerto predeterminado es el 8080. Puede personalizarlo para un puerto diferente en escenarios con varios contenedores. | Cadena | *<port\$1number>* | 
| `SAGEMAKER_SAFE_PORT_RANGE` | Esto lo establece la plataforma de SageMaker IA cuando se utiliza el modo de contenedores múltiples. | Cadena | *<port\$11>*–*<port\$12>* | 
| `SAGEMAKER_TRITON_ALLOW_GRPC` | Si bien la SageMaker IA no es compatible con el GRPC actualmente, si utilizas Triton frente a un proxy inverso personalizado, puedes optar por habilitar el GRPC. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_GRPC_PORT` | El puerto predeterminado del GRPC es el 8001, pero puede cambiarlo. | Cadena | *<port\$1number>* | 
| `SAGEMAKER_TRITON_THREAD_COUNT` | Puede establecer el número de subprocesos predeterminados del controlador de solicitudes HTTP. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_LOG_VERBOSE` | `true`de forma predeterminada en la SageMaker IA, pero puedes desactivar esta opción de forma selectiva. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_INFO` | `false`de forma predeterminada en la SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_WARNING` | `false`de forma predeterminada en SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_ERROR` | `false`de forma predeterminada en SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE` | Especifique el tamaño de shm para el backend de Python (en bytes). El valor predeterminado es 16 MB, pero se puede aumentar. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE` | Especifique el tamaño de crecimiento de shm para el backend de Python (en bytes). El valor predeterminado es 1 MB, pero se puede aumentar para permitir mayores incrementos. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_TENSORFLOW_VERSION` | El valor predeterminado es `2`. Triton ya no es compatible con Tensorflow 2 desde la versión 23.04 de Triton. Puede configurar esta variable para versiones anteriores. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT` | Restrinja el porcentaje máximo de memoria de la GPU que se utiliza para cargar los modelos y permitir que el resto se utilice para las solicitudes de inferencia. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_ALLOW_METRICS` | `false`de forma predeterminada en SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_METRICS_PORT` | El puerto predeterminado es 8002. | Cadena | *<number>* | 
| `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH` | `false`de forma predeterminada en SageMaker IA. Defina esta variable para `true` permitir enviar las métricas predeterminadas de Triton a Amazon CloudWatch. Si esta opción está habilitada, serás responsable de CloudWatch los costes cuando se publiquen las métricas en tu cuenta. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP` | Es obligatorio si has activado la publicación de métricas en CloudWatch. | Cadena | *<cloudwatch\$1log\$1group\$1name>* | 
| `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE` | Obligatorio si has activado la publicación de métricas en CloudWatch. | Cadena | *<cloudwatch\$1metric\$1namespace>* | 
| `SAGEMAKER_TRITON_ADDITIONAL_ARGS` | Añade cualquier argumento adicional al iniciar el servidor Triton. | Cadena | *<additional\$1args>* | 

# Modele la implementación en la periferia con Edge Manager SageMaker
<a name="edge"></a>

**aviso**  
 SageMaker Edge Manager se suspenderá el 26 de abril de 2024. Para obtener más información sobre cómo seguir implementando sus modelos en dispositivos periféricos, consulte [SageMaker Fin de la vida útil de Edge Manager](edge-eol.md). 

Amazon SageMaker Edge Manager proporciona administración de modelos para dispositivos periféricos para que pueda optimizar, proteger, supervisar y mantener los modelos de aprendizaje automático en flotas de dispositivos periféricos, como cámaras inteligentes, robots, ordenadores personales y dispositivos móviles.

## ¿Por qué usar Edge Manager?
<a name="edge-what-it-is"></a>

Muchos casos de uso de machine learning (ML) requieren la ejecución de modelos de ML en una flota de dispositivos periféricos, lo que permite obtener predicciones en tiempo real, preserva la privacidad de los usuarios finales y reduce el costo de conectividad de red. Con la creciente disponibilidad de hardware periférico de bajo consumo diseñado para ML, ahora es posible ejecutar varios modelos de redes neuronales complejos en dispositivos periféricos. 

Sin embargo, utilizar modelos de ML en dispositivos periféricos es todo un desafío, ya que los dispositivos, a diferencia de las instancias en la nube, tienen recursos de cálculo, memoria y conectividad limitados. Una vez implementado el modelo, es necesario supervisarlo de forma continua, ya que la desviación del modelo puede provocar que la calidad de éste disminuya con el tiempo. Supervisar los modelos en todas las flotas de dispositivos es difícil porque es necesario escribir un código personalizado para recopilar muestras de datos del dispositivo y reconocer los sesgos en las predicciones. Además, los modelos suelen tener una codificación rígida en la aplicación. Para actualizar el modelo, debe reconstruir y actualizar todo el firmware de la aplicación o dispositivo, lo que puede interrumpir sus operaciones.

Con SageMaker Edge Manager, puede optimizar, ejecutar, supervisar y actualizar los modelos de aprendizaje automático en todas las flotas de dispositivos periféricos.

## ¿Cómo funciona?
<a name="edge-how-it-works"></a>

En términos generales, el flujo de trabajo de SageMaker Edge Manager consta de cinco componentes principales: compilar modelos con SageMaker Neo, empaquetar los modelos compilados con Neo, implementar modelos en sus dispositivos, ejecutar modelos en el motor de inferencia de SageMaker IA (agente de Edge Manager) y mantener los modelos en los dispositivos.

![\[Los cinco componentes principales del flujo de trabajo de SageMaker Edge Manager.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/smith_overview.png)


SageMaker Edge Manager utiliza SageMaker Neo para optimizar los modelos para el hardware de destino con un solo clic y, a continuación, firmar criptográficamente los modelos antes de su implementación. Con SageMaker Edge Manager, puede muestrear los datos de entrada y salida del modelo de los dispositivos periféricos y enviarlos a la nube para su supervisión y análisis, además de ver un panel de control que rastrea e informa visualmente sobre el funcionamiento de los modelos implementados en la consola de SageMaker IA.

SageMaker Edge Manager extiende las capacidades que antes solo estaban disponibles en la nube a la periferia, de modo que los desarrolladores puedan mejorar continuamente la calidad de los modelos mediante Amazon SageMaker Model Monitor para la detección de desviaciones, luego volver a etiquetar los datos con SageMaker AI Ground Truth y volver a entrenar los modelos en SageMaker IA.

## ¿Cómo utilizo SageMaker Edge Manager?
<a name="edge-how-to-use"></a>

Si es la primera vez que utiliza SageMaker Edge Manager, le recomendamos que haga lo siguiente:

1. **Lea la sección [Primeros pasos](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manager-getting-started.html)**: en esta sección se explica cómo configurar su primer trabajo de empaquetado periférico y cómo crear su primera flota.

1. **Explore los ejemplos de cuadernos Jupyter de Edge Manager: los cuadernos** [de ejemplo se almacenan en el [amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub repositorio, en la carpeta sagemaker\$1edge\$1manager.](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker_edge_manager)

# Primeros pasos con Amazon SageMaker AI Edge Manager
<a name="edge-manager-getting-started"></a>

Esta guía muestra cómo completar los pasos necesarios para registrar, implementar y administrar una flota de dispositivos, y cómo cumplir los requisitos previos de Amazon SageMaker AI Edge Manager. 

**Topics**
+ [Configuración](edge-getting-started-step1.md)
+ [Preparación del modelo para la implementación](edge-getting-started-step2.md)
+ [Registro y autenticación de la flota de dispositivos](edge-getting-started-step3.md)
+ [Descargue y configure Edge Manager](edge-getting-started-step4.md)
+ [Ejecutar agente](edge-getting-started-step5.md)

# Configuración
<a name="edge-getting-started-step1"></a>

Antes de empezar a utilizar SageMaker Edge Manager para gestionar los modelos de sus flotas de dispositivos, primero debe crear funciones de IAM para AI y. SageMaker AWS IoT También querrá crear al menos un depósito de Amazon S3 en el que almacenar su modelo previamente entrenado, el resultado de su trabajo de compilación de SageMaker Neo y los datos de entrada de sus dispositivos periféricos.

## Inscríbase para obtener una Cuenta de AWS
<a name="sign-up-for-aws"></a>

Si no tiene uno Cuenta de AWS, complete los siguientes pasos para crearlo.

**Para suscribirse a una Cuenta de AWS**

1. Abrir [https://portal.aws.amazon.com/billing/registro](https://portal.aws.amazon.com/billing/signup).

1. Siga las instrucciones que se le indiquen.

   Parte del procedimiento de registro consiste en recibir una llamada telefónica o mensaje de texto e indicar un código de verificación en el teclado del teléfono.

   Cuando te registras en un Cuenta de AWS, *Usuario raíz de la cuenta de AWS*se crea un. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar [Tareas que requieren acceso de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS te envía un correo electrónico de confirmación una vez finalizado el proceso de registro. En cualquier momento, puede ver la actividad de su cuenta actual y administrarla accediendo a [https://aws.amazon.com/](https://aws.amazon.com/)y seleccionando **Mi cuenta**.

## Creación de un usuario con acceso administrativo
<a name="create-an-admin"></a>

Después de crear un usuario administrativo Cuenta de AWS, asegúrelo Usuario raíz de la cuenta de AWS AWS IAM Identity Center, habilite y cree un usuario administrativo para no usar el usuario root en las tareas diarias.

**Proteja su Usuario raíz de la cuenta de AWS**

1.  Inicie sesión [Consola de administración de AWS](https://console.aws.amazon.com/)como propietario de la cuenta seleccionando el **usuario root** e introduciendo su dirección de Cuenta de AWS correo electrónico. En la siguiente página, escriba su contraseña.

   Para obtener ayuda para iniciar sesión con el usuario raíz, consulte [Iniciar sesión como usuario raíz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) en la *Guía del usuario de AWS Sign-In *.

1. Active la autenticación multifactor (MFA) para el usuario raíz.

   Para obtener instrucciones, consulte [Habilitar un dispositivo MFA virtual para el usuario Cuenta de AWS raíz (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) en la Guía del usuario de *IAM*.

**Creación de un usuario con acceso administrativo**

1. Activar IAM Identity Center.

   Consulte las instrucciones en [Activar AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. En IAM Identity Center, conceda acceso administrativo a un usuario.

   Para ver un tutorial sobre su uso Directorio de IAM Identity Center como fuente de identidad, consulte [Configurar el acceso de los usuarios con la configuración predeterminada Directorio de IAM Identity Center en la](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) Guía del *AWS IAM Identity Center usuario*.

**Inicio de sesión como usuario con acceso de administrador**
+ Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.

  Para obtener ayuda para iniciar sesión con un usuario del Centro de identidades de IAM, consulte [Iniciar sesión en el portal de AWS acceso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) en la *Guía del AWS Sign-In usuario*.

**Concesión de acceso a usuarios adicionales**

1. En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.

   Para conocer las instrucciones, consulte [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.

   Para conocer las instrucciones, consulte [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) en la *Guía del usuario de AWS IAM Identity Center *.

## Cree roles y almacenamiento
<a name="edge-getting-started-step1-create-role"></a>

SageMaker Edge Manager necesita acceder a la URI de su bucket de Amazon S3. Para facilitar esto, cree un rol de IAM que pueda ejecutar SageMaker IA y que tenga permiso para acceder a Amazon S3. Con esta función, la SageMaker IA puede ejecutarse en tu cuenta y acceder a tu bucket de Amazon S3.

Puede crear un rol de IAM mediante la consola de IAM, el AWS SDK para Python (Boto3) o. AWS CLI A continuación, se muestra un ejemplo de cómo crear un rol de IAM, asociar las políticas necesarias a la consola de IAM y crear un bucket de Amazon S3.

1. **Cree un rol de IAM para Amazon SageMaker AI.**

   1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

   1. En el panel de navegación de la consola de IAM, seleccione **Roles** y, a continuación, seleccione **Crear rol**.

   1. En **Seleccionar el tipo de entidad de confianza**, elija ** servicio de AWS **.

   1. Elija el servicio que desea permitir que asuma este rol. En este caso, elige **SageMaker AI**. A continuación, elija **Siguiente: Permisos)**.
      + Esto crea automáticamente una política de IAM que concede acceso a servicios relacionados, como Amazon S3, Amazon ECR y CloudWatch Logs.

   1. Elija **Siguiente: Etiquetas**.

   1. De manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información acerca del uso de etiquetas en IAM, consulte [Etiquetado de los recursos de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Elija **Siguiente: revisar**.

   1. Escriba un **Nombre de rol**. 

   1. Si es posible, escriba un nombre de rol o un sufijo de nombre de rol. Los nombres de los roles deben ser únicos en su cuenta. AWS No se distingue por caso. Por ejemplo, no puede crear funciones denominado tanto `PRODROLE` como `prodrole`. Como otros AWS recursos pueden hacer referencia al rol, no puede editar el nombre del rol una vez creado.

   1. (Opcional) En **Descripción de rol**, escriba una descripción para el nuevo rol.

   1. Revise el rol y, a continuación, seleccione **Crear rol**.

      Tenga en cuenta el ARN del rol de SageMaker IA, que utiliza para crear un trabajo de compilación con SageMaker Neo y un trabajo de empaquetado con Edge Manager. Para averiguar el ARN de rol mediante la consola, haga lo siguiente:

      1. Ve a: IAMconsole [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Seleccione **Roles**.

      1. Busque el rol que acaba de crear escribiendo el nombre del rol en el campo de búsqueda.

      1. Seleccione el rol.

      1. El ARN del rol se encuentra en la parte superior de la página de **Resumen**.

1. **Cree un rol de IAM para AWS IoT.**

   El rol de AWS IoT IAM que cree se utiliza para autorizar sus objetos de objetos. También utiliza el ARN del rol de IAM para crear y registrar flotas de dispositivos con SageMaker un objeto de cliente de IA.

   Configura una función de IAM en tu AWS cuenta para que el proveedor de credenciales la asuma en nombre de los dispositivos de tu flota de dispositivos. A continuación, adjunta una política que autorice a tus dispositivos a interactuar con AWS IoT los servicios.

   Cree un rol mediante programación AWS IoT o con la consola de IAM, similar a lo que hizo cuando creó un rol para la IA. SageMaker 

   1. Inicie sesión en la consola de Consola de administración de AWS IAM y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

   1. En el panel de navegación de la consola de IAM, seleccione **Roles** y, a continuación, seleccione **Crear rol**.

   1. En **Seleccionar el tipo de entidad de confianza**, elija ** servicio de AWS **.

   1. Elija el servicio que desea permitir que asuma este rol. En este caso, seleccione **IoT**. Seleccione **IoT** como **caso de uso**.

   1. Elija **Siguiente: Permisos**.

   1. Elija **Siguiente: Etiquetas**.

   1. De manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información acerca del uso de etiquetas en IAM, consulte [Etiquetado de los recursos de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Elija **Siguiente: revisar**.

   1. Escriba un **Nombre de rol**. El nombre del rol debe empezar por `SageMaker AI`.

   1. (Opcional) En **Descripción de rol**, escriba una descripción para el nuevo rol.

   1. Revise el rol y, a continuación, seleccione **Crear rol**.

   1. Una vez creado el rol, elija **Roles** en la consola de IAM. Busque el rol que acaba de crear escribiendo el nombre del rol en el campo de **Búsqueda**.

   1. Elija su rol.

   1. A continuación, seleccione **Asociar políticas**.

   1. Buscar `AmazonSageMakerEdgeDeviceFleetPolicy` en el campo de **Búsqueda**. Seleccione `AmazonSageMakerEdgeDeviceFleetPolicy`.

   1. Elija **Asociar política**.

   1. Agregue la siguiente declaración de política a la relación de confianza:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
              "Effect": "Allow",
              "Principal": {"Service": "credentials.iot.amazonaws.com"},
              "Action": "sts:AssumeRole"
            },
            {
              "Effect": "Allow",
              "Principal": {"Service": "sagemaker.amazonaws.com"},
              "Action": "sts:AssumeRole"
            }
        ]
      }
      ```

------

      Una política de confianza es un [documento de política JSON](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_grammar) en el que define las entidades principales en las que confía para asumir el rol. Para obtener más información sobre políticas de confianza, consulte [Términos y conceptos de roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html).

   1. Tenga en cuenta el AWS IoT ARN del rol. El ARN del AWS IoT rol se utiliza para crear y registrar la flota de dispositivos. Para buscar el ARN del rol de IAM con la consola:

      1. Vaya a la consola de IAM: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Elija **Roles**.

      1. Busque el rol que acaba de crear escribiendo el nombre del rol en el campo de **Búsqueda**.

      1. Seleccione el rol.

      1. El ARN del rol se encuentra en la página Resumen.

1. **Crear un bucket de Amazon S3**.

   SageMaker Neo y Edge Manager acceden a su modelo precompilado y al modelo compilado desde un bucket de Amazon S3. Edge Manager también almacena datos de muestra de su flota de dispositivos en Amazon S3.

   1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Elija **Crear bucket**.

   1. En **Nombre del bucket**, escriba un nombre para el bucket.

   1. En **Región**, elija la AWS región en la que desea que resida el depósito.

   1. En **Configuración del bucket para Block Public Access**, elija la configuración que desee aplicar al bucket.

   1. Elija **Crear bucket**.

   Para obtener más información sobre creación de buckets de Amazon S3, consulte [Introducción a Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html).

# Preparación del modelo para la implementación
<a name="edge-getting-started-step2"></a>

En esta sección, creará objetos de AWS IoT cliente y de SageMaker IA, descargará un modelo de aprendizaje automático previamente entrenado, cargará su modelo en su bucket de Amazon S3, compilará su modelo para su dispositivo de destino con SageMaker Neo y empaquetará su modelo para que pueda implementarse con el agente Edge Manager.

1. **Importar bibliotecas y crear objetos de cliente.**

   En este tutorial se utiliza AWS SDK para Python (Boto3) para crear clientes que interactúen con SageMaker AI, Amazon S3 y AWS IoT.

   Importe Boto3, especifique su Región e inicie los objetos de cliente que necesite, como se muestra en el siguiente ejemplo:

   ```
   import boto3
   import json
   import time
   
   AWS_REGION = 'us-west-2'# Specify your Region
   bucket = 'bucket-name'
   
   sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)
   iot_client = boto3.client('iot', region_name=AWS_REGION)
   ```

   Defina las variables y asígneles el rol ARN que creó para la SageMaker IA y AWS IoT como cadenas:

   ```
   # Replace with the role ARN you created for SageMaker
   sagemaker_role_arn = "arn:aws:iam::<account>:role/*"
   
   # Replace with the role ARN you created for AWS IoT. 
   # Note: The name must start with 'SageMaker'
   iot_role_arn = "arn:aws:iam::<account>:role/SageMaker*"
   ```

1. **Formación de un modelo de machine learning.**

   Consulta [Train a Model with Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) para obtener más información sobre cómo entrenar un modelo de aprendizaje automático mediante SageMaker IA. Si lo desea, puede cargar su modelo formado a nivel local directamente en un bucket de URI de Amazon S3.

   Si aún no tiene un modelo, puede usar un modelo previamente formado para los siguientes pasos de este tutorial. Por ejemplo, puedes guardar los modelos MobileNet V2 del TensorFlow marco. MobileNet V2 es un modelo de clasificación de imágenes optimizado para aplicaciones móviles. Para obtener más información sobre la MobileNet V2, consulte el [MobileNet GitHub archivo README.](https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet)

   Escriba lo siguiente en su Jupyter Notebook para guardar el modelo V2 previamente MobileNet entrenado:

   ```
   # Save the MobileNet V2 model to local storage
      import tensorflow as tf
      model = tf.keras.applications.MobileNetV2()
      model.save(“mobilenet_v2.h5”)
   ```
**nota**  
Si no lo tiene TensorFlow instalado, puede hacerlo ejecutando `pip install tensorflow=2.4`
Utilice TensorFlow la versión 2.4 o inferior para este tutorial.

   El modelo se guardará en el archivo `mobilenet_v2.h5`. Antes de empaquetar el modelo, primero tendrá que compilarlo con SageMaker Neo. Consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge.md) para comprobar si su versión de TensorFlow (u otro marco de su elección) es compatible actualmente con SageMaker Neo.

   SageMaker Neo requiere que los modelos se almacenen como un archivo TAR comprimido. Vuelva a empaquetarlo como archivo TAR comprimido (\$1.tar.gz):

   ```
   # Package MobileNet V2 model into a TAR file 
      import tarfile
      
      tarfile_name='mobilenet-v2.tar.gz'
      
      with tarfile.open(tarfile_name, mode='w:gz') as archive:
          archive.add('mobilenet-v2.h5')
   ```

1. **Cargar sus archivos en Amazon S3.**

   Una vez que tenga un modelo de machine learning, guárdelo en un bucket de Amazon S3. En el siguiente ejemplo, se utiliza un AWS CLI comando para cargar el modelo en el bucket de Amazon S3 que creó anteriormente en un directorio denominado *models*. Escribe lo siguiente en su cuaderno de Jupyter:

   ```
   !aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
   ```

1. **Compila tu modelo con SageMaker Neo.**

   Compila tu modelo de aprendizaje automático con SageMaker Neo para crear un dispositivo periférico. Debe conocer el URI del bucket de Amazon S3 en el que almacenó el modelo formado, el marco de machine learning que utilizó para formar al modelo, la forma de entrada del modelo y el dispositivo de destino.

   Para el modelo MobileNet V2, utilice lo siguiente:

   ```
   framework = 'tensorflow'
   target_device = 'jetson_nano'
   data_shape = '{"data":[1,3,224,224]}'
   ```

   SageMaker Neo requiere una forma de entrada y un formato de modelo específicos en función del marco de aprendizaje profundo que utilice. Para obtener más información sobre cómo guardar su modelo, consulte [¿Qué formas de datos de entrada espera SageMaker Neo?](neo-compilation-preparing-model.md#neo-job-compilation-expected-inputs). Para obtener más información acerca de dispositivos y marcos compatibles con Neo, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge.md).

   Usa la `CreateCompilationJob` API para crear un trabajo de compilación con SageMaker Neo. Proporcione un nombre al trabajo de compilación, el ARN del rol de SageMaker IA, el URI de Amazon S3 donde se almacena el modelo, la forma de entrada del modelo, el nombre del marco, el URI de Amazon S3 en el que desea que SageMaker AI almacene el modelo compilado y el destino del dispositivo perimetral.

   ```
   # Specify the path where your model is stored
   model_directory = 'models'
   s3_model_uri = 's3://{}/{}/{}'.format(bucket, model_directory, tarfile_name)
   
   # Store compiled model in S3 within the 'compiled-models' directory
   compilation_output_dir = 'compiled-models'
   s3_output_location = 's3://{}/{}/'.format(bucket, compilation_output_dir)
   
   # Give your compilation job a name
   compilation_job_name = 'getting-started-demo'
   
   sagemaker_client.create_compilation_job(CompilationJobName=compilation_job_name,
                                           RoleArn=sagemaker_role_arn,
                                           InputConfig={
                                               'S3Uri': s3_model_uri,
                                               'DataInputConfig': data_shape,
                                               'Framework' : framework.upper()},
                                           OutputConfig={
                                               'S3OutputLocation': s3_output_location,
                                               'TargetDevice': target_device},
                                           StoppingCondition={'MaxRuntimeInSeconds': 900})
   ```

1. **Empaquete su modelo compilado.**

   Los trabajos de empaquetado SageMaker utilizan modelos compilados con NEO y realizan los cambios necesarios para implementar el modelo con el motor de inferencia, el agente Edge Manager. Para empaquetar su modelo, cree un trabajo de empaquetado perimetral con la `create_edge_packaging` API o la SageMaker consola de IA.

   Debe proporcionar el nombre que utilizó para el trabajo de compilación de Neo, un nombre para el trabajo de empaquetado, un ARN de rol (consulte la sección [Configuración](edge-getting-started-step1.md)), un nombre para el modelo, una versión del modelo y el URI del bucket de Amazon S3 para el resultado del trabajo de empaquetado. Tenga en cuenta que los nombres de los trabajos de empaquetado de Edge Manager distinguen entre mayúsculas y minúsculas. Aquí hay un ejemplo de cómo crear un trabajo de empaquetado mediante la API.

   ```
   edge_packaging_name='edge-packaging-demo'
   model_name="sample-model"
   model_version="1.1"
   ```

   Defina el URI de Amazon S3 en el que desea almacenar el modelo empaquetado.

   ```
   # Output directory where you want to store the output of the packaging job
   packaging_output_dir = 'packaged_models'
   packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)
   ```

   Utilice `CreateEdgePackagingJob` para empaquetar su modelo compilado en NEO. Proporcione un nombre para el trabajo de empaquetado periférico y el nombre que proporcionó para el trabajo de compilación (en este ejemplo, se almacenó en la variable `compilation_job_name`). Indique también un nombre para el modelo, una versión del modelo (esto se utiliza para ayudarle a realizar un seguimiento de la versión del modelo que está utilizando) y el URI de S3 en el que desea que SageMaker AI almacene el modelo empaquetado.

   ```
   sagemaker_client.create_edge_packaging_job(
                       EdgePackagingJobName=edge_packaging_name,
                       CompilationJobName=compilation_job_name,
                       RoleArn=sagemaker_role_arn,
                       ModelName=model_name,
                       ModelVersion=model_version,
                       OutputConfig={
                           "S3OutputLocation": packaging_s3_output
                           }
                       )
   ```

# Registro y autenticación de la flota de dispositivos
<a name="edge-getting-started-step3"></a>

En esta sección, crearás tu AWS IoT objeto, crearás una flota de dispositivos, registrarás tu flota de dispositivos para que pueda interactuar con la nube, crearás certificados X.509 para autenticar tus dispositivos AWS IoT Core, asociarás el alias de rol al AWS IoT que se generó cuando creaste tu flota, obtendrás el punto de enlace AWS específico de tu cuenta para el proveedor de credenciales, obtendrás un archivo de CA raíz oficial de Amazon y subirás el archivo de Amazon CA a Amazon S3.

1. **Crea cosas. AWS IoT **

   SageMaker Edge Manager aprovecha los AWS IoT Core servicios para facilitar la conexión entre los dispositivos periféricos y los puntos finales de la AWS nube. Puede aprovechar las AWS IoT funciones existentes después de configurar sus dispositivos para que funcionen con Edge Manager.

   Para conectar su dispositivo AWS IoT, debe crear *objetos, AWS IoT crear* y registrar un certificado de cliente con AWS IoT y crear y configurar la función de IAM para sus dispositivos.

   En primer lugar, cree AWS IoT objetos tipo objeto con el AWS IoT cliente (`iot_client`) que creó anteriormente con Boto3. En el ejemplo siguiente se muestra cómo crear dos objetos de cosa:

   ```
   iot_thing_name = 'sample-device'
   iot_thing_type = 'getting-started-demo'
   
   iot_client.create_thing_type(
       thingTypeName=iot_thing_type
   )
   
   # Create an AWS IoT thing objects
   iot_client.create_thing(
       thingName=iot_thing_name,
       thingTypeName=iot_thing_type
   )
   ```

1. **Crear su flota de dispositivos.**

   Cree una flota de dispositivos con el objeto cliente de SageMaker IA definido en un paso anterior. También puedes usar la consola de SageMaker IA para crear una flota de dispositivos.

   ```
   import time
   device_fleet_name="demo-device-fleet" + str(time.time()).split('.')[0]
   device_name="sagemaker-edge-demo-device" + str(time.time()).split('.')[0]
   ```

   Especifique el ARN de su rol de IoT. Esto permite AWS IoT conceder credenciales temporales a los dispositivos.

   ```
   device_model_directory='device_output'
   s3_device_fleet_output = 's3://{}/{}'.format(bucket, device_model_directory)
   
   sagemaker_client.create_device_fleet(
       DeviceFleetName=device_fleet_name,
       RoleArn=iot_role_arn, # IoT Role ARN specified in previous step
       OutputConfig={
           'S3OutputLocation': s3_device_fleet_output
       }
   )
   ```

   Al crear una flota de dispositivos, se crea un alias de AWS IoT rol. Este alias de rol se asocia al AWS IoT uso del `iot_client` objeto en un paso posterior.

1. **Registrar su flota de dispositivos.**

   Para interactuar con la nube, debe registrar su dispositivo en SageMaker Edge Manager. En este ejemplo, registra un único dispositivo con la flota que ha creado. Para registrar el dispositivo, debe proporcionar un nombre de dispositivo y el nombre de la cosa AWS IoT , tal y como se muestra en el siguiente ejemplo:

   ```
   # Device name should be 36 characters
   device_name = "sagemaker-edge-demo-device" + str(time.time()).split('.')[0]
   
   sagemaker_client.register_devices(
       DeviceFleetName=device_fleet_name,
       Devices=[
           {
               "DeviceName": device_name,
               "IotThingName": iot_thing_name
           }
       ]
   )
   ```

1. **Crear certificados X.509.**

   Tras crear el objeto AWS IoT objeto, debe crear un certificado de dispositivo X.509 para el objeto objeto objeto. Este certificado autentica su dispositivo en AWS IoT Core.

   Utilice lo siguiente para crear una clave privada, una clave pública y un archivo de certificado X.509 utilizando el comando AWS IoT client defined (`iot_client`) anteriormente.

   ```
   # Creates a 2048-bit RSA key pair and issues an X.509 # certificate 
   # using the issued public key.
   create_cert = iot_client.create_keys_and_certificate(
       setAsActive=True 
   )
   
   # Get certificate from dictionary object and save in its own
   with open('./device.pem.crt', 'w') as f:
       for line in create_cert['certificatePem'].split('\n'):
           f.write(line)
           f.write('\n')
   # Get private key from dictionary object and save in its own 
   with open('./private.pem.key', 'w') as f:
       for line in create_cert['keyPair']['PrivateKey'].split('\n'):
           f.write(line)
           f.write('\n')
   # Get a private key from dictionary object and save in its own 
   with open('./public.pem.key', 'w') as f:
       for line in create_cert['keyPair']['PublicKey'].split('\n'):
           f.write(line)
           f.write('\n')
   ```

1. **Asocie el alias del rol a AWS IoT.**

   Cuando creas una flota de dispositivos con SageMaker AI (`sagemaker_client.create_device_fleet()`), se genera un alias de rol para ti. Un alias de AWS IoT rol proporciona un mecanismo para que los dispositivos conectados se autentiquen AWS IoT mediante certificados X.509 y, a continuación, obtengan AWS credenciales efímeras de un rol de IAM asociado a un alias de rol. AWS IoT El alias de rol le permite cambiar el rol del dispositivo sin tener que actualizarlo. Utilice `DescribeDeviceFleet` para obtener el nombre del alias y el ARN del rol.

   ```
   # Print Amazon Resource Name (ARN) and alias that has access 
   # to AWS Internet of Things (IoT).
   sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)
   
   # Store iot role alias string in a variable
   # Grabs role ARN
   full_role_alias_name = sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)['IotRoleAlias']
   start_index = full_role_alias_name.find('SageMaker') # Find beginning of role name  
   role_alias_name = full_role_alias_name[start_index:]
   ```

   Úselo `iot_client` para facilitar la asociación del alias de rol generado al crear la flota de dispositivos con: AWS IoT

   ```
   role_alias = iot_client.describe_role_alias(
                       roleAlias=role_alias_name)
   ```

   Para obtener más información sobre el alias de rol de IAM, consulte [Alias de rol permite el acceso a servicios no utilizados](https://docs.aws.amazon.com/iot/latest/developerguide/audit-chk-role-alias-unused-svcs.html).

   Creó y registró un certificado AWS IoT anteriormente para autenticar correctamente su dispositivo. Ahora, debe crear y asociar una política al certificado para autorizar la solicitud del token de seguridad.

   ```
   alias_policy = {
     "Version": "2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Action": "iot:AssumeRoleWithCertificate",
       "Resource": role_alias['roleAliasDescription']['roleAliasArn']
     }
   }
   
   policy_name = 'aliaspolicy-'+ str(time.time()).split('.')[0]
   aliaspolicy = iot_client.create_policy(policyName=policy_name,
                                          policyDocument=json.dumps(alias_policy))
   
   # Attach policy
   iot_client.attach_policy(policyName=policy_name,
                               target=create_cert['certificateArn'])
   ```

1. **Obtenga el punto de conexión AWS específico de su cuenta para el proveedor de credenciales.**

   Los dispositivos periféricos necesitan un punto de conexión para poder asumir las credenciales. Obtenga el punto de conexión específico de su cuenta AWS para el proveedor de credenciales.

   ```
   # Get the unique endpoint specific to your AWS account that is making the call.
   iot_endpoint = iot_client.describe_endpoint(
       endpointType='iot:CredentialProvider'
   )
   
   endpoint="https://{}/role-aliases/{}/credentials".format(iot_endpoint['endpointAddress'],role_alias_name)
   ```

1. **Obtenga el archivo Amazon root CA oficial y cárguelo en el bucket de Amazon S3.**

   Usa lo siguiente en tu Jupyter Notebook o AWS CLI (si usas tu terminal), quita el símbolo «\$1» función mágica):

   ```
   !wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

   Utilice el punto de conexión para realizar una solicitud HTTPS al proveedor de credenciales para devolver un token de seguridad. El ejemplo de comando siguiente utiliza `curl`, pero puede utilizar cualquier cliente HTTP.

   ```
   !curl --cert device.pem.crt --key private.pem.key --cacert AmazonRootCA1.pem $endpoint
   ```

   Si el certificado está verificado, suba las claves y el certificado al URI de su bucket de Amazon S3:

   ```
   !aws s3 cp private.pem.key s3://{bucket}/authorization-files/
   !aws s3 cp device.pem.crt s3://{bucket}/authorization-files/
   !aws s3 cp AmazonRootCA1.pem s3://{bucket}/authorization-files/
   ```

   Limpie su directorio de trabajo moviendo las claves y el certificado a un directorio distinto:

   ```
   # Optional - Clean up working directory
   !mkdir authorization-files
   !mv private.pem.key device.pem.crt AmazonRootCA1.pem authorization-files/
   ```

# Descargue y configure Edge Manager
<a name="edge-getting-started-step4"></a>

El agente de Edge Manager es un motor de inferencia para sus dispositivos periféricos. Utilice el agente para realizar predicciones con los modelos cargados en sus dispositivos periféricos. El agente también recopila las métricas del modelo y captura los datos a intervalos específicos.



En esta sección, configurará su dispositivo con el agente. Para ello, primero copie un artefacto de versión y un certificado raíz de firma del bucket de versión de forma local en su máquina. Después de haber descomprimido el artefacto de versión, cárguelo en Amazon S3. A continuación, defina y guarde un archivo de configuración para el agente. Se proporciona una plantilla para que la copie y pegue. Por último, copie los artefactos de versión, el archivo de configuración y las credenciales en su dispositivo.

1. **Descarga el agente de SageMaker Edge Manager.**

   El agente se publica en formato binario para los sistemas operativos compatibles. En este ejemplo, se realiza una inferencia en un Jetson Nano que utiliza un sistema operativo Linux y tiene una ARM64 arquitectura. Para obtener más información sobre el sistema operativo y la arquitectura que utilizan los dispositivos compatibles, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge-devices.md).

   Obtenga la última versión de los binarios del paquete de versiones de SageMaker Edge Manager de la región us-west-2.

   ```
   !aws s3 ls s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/ | sort -r
   ```

   Esto muestra los artefactos de versión ordenados por su correspondiente.

   ```
                              PRE 1.20210512.96da6cc/
                              PRE 1.20210305.a4bc999/
                              PRE 1.20201218.81f481f/
                              PRE 1.20201207.02d0e97/
   ```

   La versión tiene el siguiente formato: `<MAJOR_VERSION>.<YYYY-MM-DD>.<SHA-7>`. Consta de tres componentes:
   + `<MAJOR_VERSION>`: Versión de lanzamiento. La versión de lanzamiento está configurada actualmente en `1`.
   + `<YYYY-MM-DD>`: La marca de tiempo de versión del artefacto.
   + <SHA-7>: El ID de confirmación del repositorio a partir del cual se creó la versión.

   Copie el archivo TAR comprimido localmente o directamente en su dispositivo. En el siguiente ejemplo se muestra cómo copiar el artefacto de versión más reciente en el momento de publicación de este documento.

   ```
   !aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/1.20201218.81f481f/1.20201218.81f481f.tgz ./
   ```

   Una vez que tenga el artefacto, descomprima el archivo TAR. Lo siguiente descomprime el archivo TAR y lo almacena en un directorio llamado `agent_demo`:

   ```
   !mkdir agent_demo
   !tar -xvzf 1.20201218.81f481f.tgz -C ./agent_demo
   ```

   Cargue los artefactos de versión del agente en su bucket de Amazon S3. El siguiente ejemplo de código copia el contenido que `agent_demo` contiene y lo carga en un directorio de su bucket de Amazon S3 llamado `agent_demo`:

   ```
   !aws s3 cp --recursive ./agent_demo s3://{bucket}/agent_demo
   ```

   También necesitas los certificados raíz de firma del bucket de versiones:

   ```
   !aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Certificates/us-west-2/us-west-2.pem ./
   ```

   Cargue el certificado raíz de firma en su bucket de Amazon S3:

   ```
   !aws s3 cp us-west-2.pem s3://{bucket}/authorization-files/
   ```

1. **Defina un archivo de configuración SageMaker del agente de Edge Manager.**

   En primer lugar, defina el archivo de configuración del agente de la siguiente manera:

   ```
   sagemaker_edge_config = {
       "sagemaker_edge_core_device_name": "device_name",
       "sagemaker_edge_core_device_fleet_name": "device_fleet_name",
       "sagemaker_edge_core_capture_data_buffer_size": 30,
       "sagemaker_edge_core_capture_data_push_period_seconds": 4,
       "sagemaker_edge_core_folder_prefix": "demo_capture",
       "sagemaker_edge_core_region": "us-west-2",
       "sagemaker_edge_core_root_certs_path": "/agent_demo/certificates",
       "sagemaker_edge_provider_aws_ca_cert_file": "/agent_demo/iot-credentials/AmazonRootCA1.pem",
       "sagemaker_edge_provider_aws_cert_file": "/agent_demo/iot-credentials/device.pem.crt",
       "sagemaker_edge_provider_aws_cert_pk_file": "/agent_demo/iot-credentials/private.pem.key",
       "sagemaker_edge_provider_aws_iot_cred_endpoint": "endpoint",
       "sagemaker_edge_provider_provider": "Aws",
       "sagemaker_edge_provider_s3_bucket_name": bucket,
       "sagemaker_edge_core_capture_data_destination": "Cloud"
   }
   ```

   Sustituya lo siguiente:
   + `"device_name"` por el nombre de su dispositivo (esta cadena se almacenó en un paso anterior en una variable denominada `device_name`).
   + `"device_fleet_name`“ por el nombre de su flota de dispositivos (esta cadena se almacenó en un paso anterior en una variable denominada `device_fleet_name`)
   + `"endpoint"`con el punto final AWS específico de su cuenta para el proveedor de credenciales (esta cadena se almacenó en un paso anterior en una variable denominada`endpoint`).

   A continuación, guárdela como un archivo JSON:

   ```
   edge_config_file = open("sagemaker_edge_config.json", "w")
   json.dump(sagemaker_edge_config, edge_config_file, indent = 6)
   edge_config_file.close()
   ```

   Cargue el archivo de configuración en su bucket de Amazon S3:

   ```
   !aws s3 cp sagemaker_edge_config.json s3://{bucket}/
   ```

1. **Copie los artefactos de versión, el archivo de configuración y las credenciales en su dispositivo.**

   Las siguientes instrucciones se llevan a cabo en el propio dispositivo periférico.
**nota**  
Primero debe instalar Python AWS SDK para Python (Boto3), el y el AWS CLI en su dispositivo perimetral. 

   Abra un terminal en su dispositivo. Cree una carpeta para almacenar los artefactos de versión, sus credenciales y el archivo de configuración.

   ```
   mkdir agent_demo
   cd agent_demo
   ```

   Copie en su dispositivo el contenido de los artefactos de versión que ha almacenado en su bucket de Amazon S3:

   ```
   # Copy release artifacts 
   aws s3 cp s3://<bucket-name>/agent_demo/ ./ --recursive
   ```

   (El contenido del artefacto de versión se almacenó en un directorio llamado `agent_demo` en un paso anterior). Sustituya `<bucket-name>` y `agent_demo` por el nombre del bucket de Amazon S3 y la ruta del archivo a los artefactos de versión, respectivamente.

   Desplácese al directorio `/bin` y haga que los archivos binarios sean ejecutables:

   ```
   cd bin
   
   chmod +x sagemaker_edge_agent_binary
   chmod +x sagemaker_edge_agent_client_example
   
   cd agent_demo
   ```

   Cree un directorio para almacenar sus AWS IoT credenciales y cópielas desde su bucket de Amazon S3 a su dispositivo perimetral (utilice el mismo que defina en la variable`bucket`:

   ```
   mkdir iot-credentials
   cd iot-credentials
   
   aws s3 cp s3://<bucket-name>/authorization-files/AmazonRootCA1.pem ./
   aws s3 cp s3://<bucket-name>/authorization-files/device.pem.crt ./
   aws s3 cp s3://<bucket-name>/authorization-files/private.pem.key ./
   
   cd ../
   ```

   Cree un directorio para almacenar los certificados raíz de firma de su modelo:

   ```
   mkdir certificates
   
   cd certificates
   
   aws s3 cp s3://<bucket-name>/authorization-files/us-west-2.pem ./
   
   cd agent_demo
   ```

   Copie el archivo de configuración en su dispositivo:

   ```
   #Download config file from S3
   aws s3 cp s3://<bucket-name>/sagemaker_edge_config.json ./
   
   cd agent_demo
   ```

   El directorio `agent_demo` del dispositivo periférico tendrá un aspecto semejante al siguiente:

   ```
   ├──agent_demo
   |    ├── bin
   |        ├── sagemaker_edge_agent_binary
   |        └── sagemaker_edge_agent_client_example
   |    ├── sagemaker_edge_config.json
   |    ├── certificates
   |        └──us-west-2.pem
   |    ├── iot-credentials
   |        ├── AmazonRootCA1.pem
   |        ├── device.pem.crt
   |        └── private.pem.key
   |    ├── docs
   |        ├── api
   |        └── examples
   |    ├── ATTRIBUTIONS.txt
   |    ├── LICENSE.txt  
   |    └── RELEASE_NOTES.md
   ```

# Ejecutar agente
<a name="edge-getting-started-step5"></a>

En esta sección, ejecutará el agente como un binario mediante gRPC y comprobará que tanto el dispositivo como la flota funcionan y recopilan datos de muestra.

1. **Lanzar el agente.**

   El agente de SageMaker Edge Manager se puede ejecutar como un proceso independiente en forma de archivo binario ejecutable y enlazable (ELF) o se puede vincular como un objeto compartido dinámico (.dll). El modo preferido es ejecutarlo como archivo binario ejecutable independiente y es compatible con Linux.

   En este ejemplo, se utiliza gRPC para ejecutar el agente. gRPC es un marco de llamadas a procedimientos remotos (RPC) de código abierto y alto rendimiento que se puede ejecutar en cualquier entorno. Para obtener más información acerca de gRPC, consulte la [documentación de gRPC](https://grpc.io/docs/).

   Para utilizar gRPC, siga estos pasos: 

   1. Defina un servicio en un archivo .proto.

   1. Genere código de servidor y cliente mediante el compilador de búferes de protocolos.

   1. Use la API gRPC de Python (u otros lenguajes compatibles con gRPC) para escribir el servidor de su servicio.

   1. Use la API gRPC de Python (u otros lenguajes compatibles con gRPC) para escribir un cliente de su servicio. 

   El artefacto de versión que haya descargado contiene una aplicación gRPC lista para que ejecute el agente. El ejemplo se encuentra en el directorio `/bin` del artefacto de versión. El ejecutable binario `sagemaker_edge_agent_binary` se encuentra en este directorio.

   Para ejecutar el agente con este ejemplo, proporcione la ruta al archivo socket (.sock) y al archivo JSON .config:

   ```
   ./bin/sagemaker_edge_agent_binary -a /tmp/sagemaker_edge_agent_example.sock -c sagemaker_edge_config.json
   ```

1. **Comprobar su dispositivo.**

   Compruebe que el dispositivo esté conectado y que esté tomando muestras de datos. Realizar comprobaciones periódicas, de forma manual o automática, le permite comprobar que su dispositivo o flota funcionan correctamente.

   Proporcione el nombre de la flota a la que pertenece el dispositivo y el identificador único del dispositivo. Ejecute el siguiente comando desde el equipo local:

   ```
   sagemaker_client.describe_device(
       DeviceName=device_name,
       DeviceFleetName=device_fleet_name
   )
   ```

   Para el modelo dado, puede ver el nombre, la versión del modelo, el momento de la última muestra y la fecha en que se hizo la última inferencia.

   ```
   { 
     "DeviceName": "sample-device",
     "DeviceFleetName": "demo-device-fleet",
     "IoTThingName": "sample-thing-name-1",
     "RegistrationTime": 1600977370,
     "LatestHeartbeat": 1600977370,
     "Models":[
       {
           "ModelName": "mobilenet_v2.tar.gz", 
           "ModelVersion": "1.1",
           "LatestSampleTime": 1600977370,
           "LatestInference": 1600977370 
       }
     ]
   }
   ```

   La marca de tiempo proporcionada por `LastetHeartbeat` indica la última señal que se recibió del dispositivo. `LatestSampleTime` y `LatestInference` describen la marca de tiempo de la última muestra de datos y de la última inferencia, respectivamente.

1. **Comprobar su flota.**

   Compruebe si su flota funciona con `GetDeviceFleetReport`. Proporcione el nombre de la flota a la que pertenece el dispositivo.

   ```
   sagemaker_client.get_device_fleet_report(
       DeviceFleetName=device_fleet_name
   )
   ```

   Para el modelo dado, puede ver el nombre, la versión del modelo, el momento de la última muestra y la fecha en que se hizo la última inferencia, junto con el URI del bucket de Amazon S3 donde se almacenan las muestras de datos.

   ```
   # Sample output
   {
    "DeviceFleetName": "sample-device-fleet",
    "DeviceFleetArn": "arn:aws:sagemaker:us-west-2:9999999999:device-fleet/sample-fleet-name",
    "OutputConfig": {
                 "S3OutputLocation": "s3://fleet-bucket/package_output",
     },
    "AgentVersions":[{"Version": "1.1", "AgentCount": 2}]}
    "DeviceStats": {"Connected": 2, "Registered": 2}, 
    "Models":[{
               "ModelName": "sample-model", 
               "ModelVersion": "1.1",
               "OfflineDeviceCount": 0,
               "ConnectedDeviceCount": 2,
               "ActiveDeviceCount": 2, 
               "SamplingDeviceCount": 100
               }]
   }
   ```

# Configuración de dispositivos y flotas en Edge Manager SageMaker
<a name="edge-device-fleet"></a>

Las flotas son conjuntos de dispositivos agrupados de forma lógica que se pueden utilizar para recopilar y analizar datos. Puede usar SageMaker Edge Manager para operar modelos de aprendizaje automático en una flota de cámaras inteligentes, altavoces inteligentes, robots y otros dispositivos periféricos.

Crea una flota y registra tus dispositivos mediante programación AWS SDK para Python (Boto3) o a través de la consola de SageMaker IA.

**Topics**
+ [Creación de una flota](edge-device-fleet-create.md)
+ [Registrar un dispositivo](edge-device-fleet-register.md)
+ [Comprobaciones de estado](edge-device-fleet-check-status.md)

# Creación de una flota
<a name="edge-device-fleet-create"></a>

[Puedes crear una flota mediante programación con la consola de IA /sagemaker AWS SDK para Python (Boto3) o a través de SageMaker ella. https://console.aws.amazon.com](https://console.aws.amazon.com/sagemaker/)

## Creación de una flota (Boto3)
<a name="edge-device-fleet-create-boto3"></a>

Use la API `CreateDeviceFleet` para crear una flota. Especifique un nombre para la flota, el ARN de su AWS IoT rol para el `RoleArn` campo y un URI de Amazon S3 en el que desee que el dispositivo almacene los datos de muestra.

Si lo desea, puede incluir una descripción de la flota, etiquetas y un identificador AWS KMS clave.

```
import boto3

# Create SageMaker client so you can interact and manage SageMaker resources
sagemaker_client = boto3.client("sagemaker", region_name="aws-region")

sagemaker_client.create_device_fleet(
    DeviceFleetName="sample-fleet-name",
    RoleArn="arn:aws:iam::999999999:role/rolename", # IoT Role ARN
    Description="fleet description",
    OutputConfig={
        S3OutputLocation="s3://bucket/",
        KMSKeyId: "1234abcd-12ab-34cd-56ef-1234567890ab",
    },
        Tags=[
        {
            "Key": "string", 
            "Value" : "string"
         }
     ],
)
```

Al crear una flota de dispositivos, se crea un alias de AWS IoT rol. El alias de AWS IoT rol proporciona un mecanismo para que los dispositivos conectados se autentiquen AWS IoT mediante certificados X.509 y, a continuación, obtengan AWS credenciales efímeras de un rol de IAM asociado al alias del rol. AWS IoT 

Utilice `DescribeDeviceFleet` para obtener el nombre del alias y el ARN del rol.

```
# Print Amazon Resource Name (ARN) and alias that has access 
# to AWS Internet of Things (IoT).
sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)['IotRoleAlias']
```

Utilice la API `DescribeDeviceFleet` para obtener una descripción de las flotas creadas.

```
sagemaker_client.describe_device_fleet(
    DeviceFleetName="sample-fleet-name"
)
```

De forma predeterminada, devuelve el nombre de la flota, el ARN de la flota de dispositivos, el URI del bucket de Amazon S3, el rol de IAM, el alias del rol creado en AWS IoT, una marca de tiempo de cuándo se creó la flota y una marca de tiempo de cuándo se modificó la flota por última vez.

```
{ "DeviceFleetName": "sample-fleet-name",
  "DeviceFleetArn": "arn:aws:sagemaker:us-west-2:9999999999:device-fleet/sample-fleet-name",
  "IAMRole": "arn:aws:iam::999999999:role/rolename",
  "Description": "this is a sample fleet",
  "IoTRoleAlias": "arn:aws:iot:us-west-2:9999999999:rolealias/SagemakerEdge-sample-fleet-name"
  "OutputConfig": {
              "S3OutputLocation": "s3://bucket/folder",
              "KMSKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
   },
   "CreationTime": "1600977370",
   "LastModifiedTime": "1600977370"}
```

## Creación de una flota (consola)
<a name="edge-device-fleet-create-console"></a>

Puede crear un trabajo de empaquetado de Edge Manager mediante la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker](https://console.aws.amazon.com/sagemaker/).

1. En la consola SageMaker AI, elija **Edge Manager** y, a continuación, elija Flotas de **dispositivos Edge**.

1. Seleccione **Crear flota de dispositivos**.  
![\[Ubicación de la opción Crear flota de dispositivos en la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-device-button-edited.png)

1. Introduzca un nombre para la flota de dispositivos en el campo **Nombre de flota de dispositivos**. Elija **Siguiente**.  
![\[Ubicación del botón Siguiente en la sección Propiedades de la flota de dispositivos de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-device-fleet-filled.png)

1. En la página **Configuración de salida**, especifique el URI del bucket de Amazon S3 en el que desea almacenar los datos de muestra de su flota de dispositivos. Si lo desea, también puede añadir una clave de cifrado seleccionando una AWS KMS clave existente de la lista desplegable o introduciendo el ARN de una clave. Seleccione **Enviar**.  
![\[Ejemplo de la página Configuración de salida de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-device-fleet-output-filled.png)

1. Elija el nombre de su flota de dispositivos para que se le redirija a los detalles de la misma. Esta página muestra el nombre de la flota de dispositivos, el ARN, la descripción (si la ha proporcionado), la fecha de creación de la flota, la última vez que se modificó la flota, el URI del bucket de Amazon S3, el ID de clave AWS KMS (si se proporcionó), el alias AWS IoT (si se proporcionó) y el rol de IAM. Si ha añadido etiquetas, aparecerán en la sección **Etiquetas de la flota de dispositivos**.

# Registrar un dispositivo
<a name="edge-device-fleet-register"></a>

**importante**  
Es necesario registrar el dispositivo para usar cualquier parte de SageMaker Edge Manager.

[Puede crear una flota mediante programación con la consola de SageMaker IA en AWS SDK para Python (Boto3) /sagemaker o a través de ella. https://console.aws.amazon.com](https://console.aws.amazon.com/sagemaker/)

## Registrar un dispositivo (Boto3)
<a name="edge-device-fleet-register-boto3"></a>

Para registrar su dispositivo, primero cree y registre un objeto y configure un AWS IoT rol de IAM. SageMaker Edge Manager aprovecha los AWS IoT Core servicios para facilitar la conexión entre los dispositivos periféricos y la nube. Puede aprovechar las AWS IoT funciones existentes después de configurar sus dispositivos para que funcionen con Edge Manager.

Para conectar tu dispositivo, AWS IoT necesitas crear objetos, AWS IoT crear y registrar un certificado de cliente con AWS IoTél y crear y configurar la función de IAM para tus dispositivos.

Consulte la [Guía de introducción](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manager-getting-started.html) para ver un ejemplo detallado o el [tutorial práctico Explore AWS IoT Core services in](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs-first-thing.html).

Use la API `RegisterDevices` para registrar su dispositivo. Proporcione el nombre de la flota de la que quiere que formen parte los dispositivos, así como un nombre para el dispositivo. Si lo desea, puede añadir una descripción al dispositivo, las etiquetas y AWS IoT el nombre del elemento asociados al dispositivo.

```
sagemaker_client.register_devices(
    DeviceFleetName="sample-fleet-name",
    Devices=[
        {          
            "DeviceName": "sample-device-1",
            "IotThingName": "sample-thing-name-1",
            "Description": "Device #1"
        }
     ],
     Tags=[
        {
            "Key": "string", 
            "Value" : "string"
         }
     ],
)
```

## Registrar un dispositivo (consola)
<a name="edge-device-fleet-register-console"></a>

Puedes registrar tu dispositivo mediante la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker](https://console.aws.amazon.com/sagemaker/).

1. **En la consola de SageMaker IA, selecciona **Edge Inference** y, a continuación, elige dispositivos Edge.**

1. Elija **Registrar dispositivos**.  
![\[Ubicación de la opción Registrar dispositivos en la sección Dispositivos de borde de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/register-device-button.png)

1. En la sección **Propiedades del dispositivo**, introduzca el nombre de la flota a la que pertenece el dispositivo en el campo **Nombre de flota de dispositivos**. Elija **Siguiente**.  
![\[Sección Propiedades del dispositivo de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/register-devices-empty.png)

1. En la sección **Fuente del dispositivo**, agregue sus dispositivos uno por uno. Debe incluir un **Nombre de dispositivo** para cada dispositivo de su flota. Si lo desea, puede proporcionar una descripción (en el campo **Descripción**) y un nombre de objeto de Internet de las cosas (IoT) (en el campo **Nombre de IoT**). Seleccione **Enviar** una vez que haya agregado todos sus dispositivos.  
![\[Sección Origen del dispositivo de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/register-devices-device-source.png)

   La página **Dispositivos** muestra el nombre del dispositivo que has añadido, la flota a la que pertenece, cuándo se registró, el último latido y la descripción y el AWS IoT nombre, si los has proporcionado.

   Elija un dispositivo para ver los detalles del mismo, incluidos el nombre del dispositivo, flota, ARN, descripción, nombre de cosa IoT, momento de registro del dispositivo y último latido.

# Comprobaciones de estado
<a name="edge-device-fleet-check-status"></a>

Compruebe que el dispositivo o flota estén conectados y que estén tomando muestras de datos. Realizar comprobaciones periódicas, de forma manual o automática, le permite comprobar que su dispositivo o flota funcionan correctamente.

Utilice la consola Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)para seleccionar de forma interactiva una flota para comprobar su estado. También puede utilizar la AWS SDK para Python (Boto3). A continuación se describen las opciones diferentes a las APIs del Boto3 que puede utilizar para comprobar el estado de su dispositivo o flota. Utilice la API que mejor se adapte a su caso de uso.
+ **Compruebe un dispositivo individual.**

  Para comprobar el estado de un dispositivo individual, use la API `DescribeDevice`. Si se ha implementado uno o más modelos en el dispositivo, se proporciona una lista con uno o más modelos.

  ```
  sagemaker_client.describe_device(
      DeviceName="sample-device-1",
      DeviceFleetName="sample-fleet-name"
  )
  ```

  Al ejecutar `DescribeDevice` aparece:

  ```
  { "DeviceName": "sample-device".
    "Description": "this is a sample device",
    "DeviceFleetName": "sample-device-fleet",
    "IoTThingName": "SampleThing",
    "RegistrationTime": 1600977370,
    "LatestHeartbeat": 1600977370,
    "Models":[
          {
           "ModelName": "sample-model", 
           "ModelVersion": "1.1",
           "LatestSampleTime": 1600977370,
           "LatestInference": 1600977370 
          }
     ]
  }
  ```
+ **Comprobar una flota de dispositivos.**

  Use la API `GetDeviceFleetReport` para comprobar el estado de la flota. Proporcione el nombre de la flota de dispositivos para obtener un resumen de ésta.

  ```
  sagemaker_client.get_device_fleet_report(
      DeviceFleetName="sample-fleet-name"
  )
  ```
+ **Comprobar latidos.**

  Cada dispositivo de una flota genera periódicamente una señal o “latido”. El latido se puede utilizar para comprobar que el dispositivo se está comunicando con Edge Manager. Si la marca de tiempo del último latido no se actualiza, es posible que el dispositivo esté fallando.

  Compruebe el último latido realizado por un dispositivo con la API `DescribeDevice`. Proporcione el nombre del dispositivo y la flota a la que pertenece el dispositivo periférico.

  ```
  sagemaker_client.describe_device(
      DeviceName="sample-device-1",
      DeviceFleetName="sample-fleet-name"
  )
  ```

# Cómo empaquetar un modelo
<a name="edge-packaging-job"></a>

SageMaker Los trabajos de empaquetado de Edge Manager toman modelos SageMaker compilados por Amazon NEO y realizan los cambios necesarios para implementar el modelo con el motor de inferencia, el agente Edge Manager.

**Topics**
+ [Cómo completar los requisitos previos de](edge-packaging-job-prerequisites.md)
+ [Package a model (Amazon SageMaker AI Console)](edge-packaging-job-console.md)
+ [Empaquetar un modelo (Boto3)](edge-packaging-job-boto3.md)

# Cómo completar los requisitos previos de
<a name="edge-packaging-job-prerequisites"></a>

Para empaquetar un modelo, debe hacer lo siguiente:

1. **Compila tu modelo de aprendizaje automático con SageMaker AI Neo.**

   Si aún no lo ha hecho, compile su modelo con SageMaker Neo. Para obtener más información sobre cómo compilar un modelo, consulte [Compilar e implementar modelos con Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). Si es la primera vez que utilizas SageMaker Neo, consulta la sección [Cómo empezar con los dispositivos Neo Edge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html).

1. **Obtenga el nombre de su trabajo de compilación.**

   Indique el nombre del trabajo de compilación que utilizó al compilar el modelo con SageMaker Neo. Abre la consola de SageMaker IA en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)y selecciona **Trabajos de compilación** para encontrar una lista de las compilaciones que se han enviado a tu AWS cuenta. Los nombres de los trabajos de compilación enviados se encuentran en la columna **Nombre**.

1. **Obtenga su ARN de IAM.**

   Necesitas un nombre de recurso de Amazon (ARN) para un rol de IAM que puedas usar para descargar y cargar el modelo y ponerte en contacto con Neo. SageMaker 

   Utilice uno de los siguientes métodos para obtener el ARN de IAM:
   + **Programáticamente con el SDK de SageMaker Python para IA**

     ```
     import sagemaker
     
     # Initialize SageMaker Session object so you can interact with AWS resources
     sess = sagemaker.Session()
     
     # Get the role ARN 
     role = sagemaker.get_execution_role()
     
     print(role)
     >> arn:aws:iam::<your-aws-account-id>:role/<your-role-name>
     ```

     Para obtener más información sobre el uso del SDK de SageMaker Python, consulta la [API del SDK de Python de SageMaker AI](https://sagemaker.readthedocs.io/en/stable/index.html).
   + **Uso de la AWS Identity and Access Management consola (IAM)**

     Vaya a la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). En la sección **Recursos** de IAM, elija **Roles** para ver una lista de los roles de su cuenta AWS . Seleccione o cree un rol que tenga `AmazonSageMakerFullAccess`, `AWSIoTFullAccess` y `AmazonS3FullAccess`.

     Para obtener más información, consulte [¿Qué es IAM?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)

1. **Disponer de un URI de bucket de S3.**

   Debe tener al menos un URI de bucket de Amazon Simple Storage Service (Amazon S3) para almacenar el modelo compilado en NEO, el resultado del trabajo de empaquetado de Edge Manager y los datos de muestra de su flota de dispositivos.

   Utilice uno de los siguientes métodos para crear un bucket de Amazon S3:
   + **Programáticamente con el SDK de SageMaker Python para IA**

     Puede usar el bucket de Amazon S3 predeterminado durante una sesión. Se crea un bucket predeterminado en función del siguiente formato: `sagemaker-{region}-{aws-account-id}`. Para crear un bucket predeterminado con el SDK de SageMaker Python, usa lo siguiente:

     ```
     import sagemaker
     
     session=sagemaker.create_session()
     
     bucket=session.default_bucket()
     ```
   + **Uso de la consola de Amazon S3**

     Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)y consulte [¿Cómo puedo crear un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) para step-by-step obtener instrucciones.

# Package a model (Amazon SageMaker AI Console)
<a name="edge-packaging-job-console"></a>

Puede crear un trabajo de empaquetado de SageMaker Edge Manager mediante la consola de SageMaker IA de [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/). Antes de continuar, asegúrese de haber cumplido los [Cómo completar los requisitos previos de](edge-packaging-job-prerequisites.md).

1. En la consola de SageMaker IA, selecciona **Edge Inference** y, a continuación, selecciona **Crear trabajos de embalaje perimetral**, como se muestra en la siguiente imagen.  
![\[Ubicación de la opción Crear trabajo de empaquetado de Edge en la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/pre-edge-packaging-button-edited.png)

1. En la página de **Propiedades del trabajo**, introduzca un nombre para su trabajo de empaquetado en **Nombre del trabajo de empaquetado de Edge**. Tenga en cuenta que los nombres de los trabajos de empaquetado de Edge Manager distinguen entre mayúsculas y minúsculas. Asigne un nombre a su modelo y asígnele una versión: introdúzcala en **Nombre del modelo** y **Versión del modelo**, respectivamente.

1. A continuación, seleccione un **Rol de IAM**. Puede elegir un rol o dejar que AWS cree uno para usted. Si lo desea, puede especificar un **ARN de clave de recurso** y **etiquetas de trabajo**.

1. Elija **Siguiente**.   
![\[Ejemplo de la sección Propiedades del trabajo de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-edge-packaging-job-filled.png)

1. Especifique el nombre del trabajo de compilación que utilizó al compilar el modelo con SageMaker Neo en el campo **Nombre del trabajo de compilación**. Elija **Siguiente**.  
![\[Ejemplo de la sección Origen del modelo de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-edge-packaging-job-model-source-filled.png)

1. En la página de **Configuración de salida**, introduzca el URI del bucket de Amazon S3 en el que desea almacenar el resultado del trabajo de empaquetado.  
![\[Ejemplo de la página Configuración de salida de la consola\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/smith/create-device-fleet-output-filled.png)

   La columna **Estado** de la página de trabajos de **empaquetado periféricos** debe indicar **EN CURSO**. Una vez que se complete el trabajo de empaquetado, el estado se actualizará a **COMPLETADO**.

   Al seleccionar un trabajo de empaquetado, accederá a la configuración de ese trabajo. La sección **Configuración del trabajo** muestra el nombre del trabajo, ARN, estado, hora de creación, hora de última modificación, duración del trabajo de empaquetado y ARN del rol.

   La sección de **Configuración de entrada** muestra la ubicación de los artefactos del modelo, la configuración de entrada de datos y el marco de machine learning del modelo.

   La sección de **Configuración de salida** muestra la ubicación de salida del trabajo de empaquetado, el dispositivo de destino para el que se compiló el modelo y cualquier etiqueta que haya creado.

1. Elija el nombre de su flota de dispositivos para que se le redirija a los detalles de la misma. Esta página muestra el nombre de la flota de dispositivos, el ARN, la descripción (si la ha proporcionado), la fecha de creación de la flota, la última vez que se modificó la flota, el URI del bucket de Amazon S3, el ID de clave AWS KMS (si se proporcionó), el alias AWS IoT (si se proporcionó) y el rol de IAM. Si ha añadido etiquetas, aparecerán en la sección **Etiquetas de la flota de dispositivos**.

# Empaquetar un modelo (Boto3)
<a name="edge-packaging-job-boto3"></a>

Puede crear un trabajo de empaquetado de SageMaker Edge Manager con AWS SDK para Python (Boto3). Antes de continuar, asegúrese de haber cumplido los [Cómo completar los requisitos previos de](edge-packaging-job-prerequisites.md).

Para solicitar un trabajo de empaquetado periférico, utilice `CreateEdgePackagingJob`. Debe proporcionar un nombre a su trabajo de embalaje perimetral, el nombre de su trabajo de compilación de SageMaker Neo, su función, el nombre del recurso de Amazon (ARN), un nombre para su modelo, una versión para su modelo y el URI del bucket de Amazon S3 en el que desea almacenar el resultado de su trabajo de embalaje. Tenga en cuenta que los nombres de los trabajos de empaquetado de Edge Manager y los nombres de los trabajos de compilación de SageMaker Neo distinguen mayúsculas de minúsculas.

```
# Import AWS SDK for Python (Boto3)
import boto3

# Create Edge client so you can submit a packaging job
sagemaker_client = boto3.client("sagemaker", region_name='aws-region')

sagemaker_client.create_edge_packaging_job(
    EdgePackagingJobName="edge-packaging-name",
    CompilationJobName="neo-compilation-name",
    RoleArn="arn:aws:iam::99999999999:role/rolename",
    ModelName="sample-model-name",
    ModelVersion="model-version",
    OutputConfig={
        "S3OutputLocation": "s3://your-bucket/",
    }
)
```

Puede comprobar el estado de un trabajo de empaquetado periférico utilizando `DescribeEdgePackagingJob` y proporcionando el nombre del trabajo de empaquetado periférico, con distinción entre mayúsculas y minúsculas:

```
response = sagemaker_client.describe_edge_packaging_job(
                                    EdgePackagingJobName="edge-packaging-name")
```

Esto muestra un diccionario que se puede utilizar para sondear el estado del trabajo de empaquetado:

```
# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_edge_packaging_job(
                                         EdgePackagingJobName="edge-packaging-name")
    
    if response['EdgePackagingJobStatus'] == 'Completed':
        break
    elif response['EdgePackagingJobStatus'] == 'Failed':
        raise RuntimeError('Packaging job failed')
    print('Packaging model...')
    time.sleep(30)
print('Done!')
```

Para obtener una lista de trabajos de empaquetado, utilice `ListEdgePackagingJobs`. Puede utilizar esta API para buscar un trabajo de empaquetado específico. Proporcione un nombre parcial para filtrar los nombres de los trabajos de empaquetado para `NameContains` y un nombre parcial para `ModelNameContains` para filtrar los trabajos en los que el nombre del modelo contiene el nombre que usted haya facilitado. Especifique también con qué columna se va a ordenar `SortBy` y en qué dirección se va a ordenar `SortOrder` (`Ascending`o bien `Descending`).

```
sagemaker_client.list_edge_packaging_jobs(
    "NameContains": "sample",
    "ModelNameContains": "sample",
    "SortBy": "column-name",
    "SortOrder": "Descending"
)
```

Para detener un trabajo de empaquetado, utilice `StopEdgePackagingJob` y proporcione el nombre del trabajo de empaquetado periférico.

```
sagemaker_client.stop_edge_packaging_job(
        EdgePackagingJobName="edge-packaging-name"
)
```

Para obtener una lista completa de Edge Manager APIs, consulte la documentación de [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html).

# El agente de Edge Manager
<a name="edge-device-fleet-about"></a>

El agente de Edge Manager es un motor de inferencia para sus dispositivos periféricos. Utilice el agente para realizar predicciones con los modelos cargados en sus dispositivos periféricos. El agente también recopila las métricas del modelo y captura los datos a intervalos específicos. Los datos de muestra se almacenan en el bucket de Amazon S3.

Existen dos métodos para instalar e implementar el agente de Edge Manager en sus dispositivos periféricos:

1. Descargar el agente como un archivo binario desde el bucket de versiones de Amazon S3. Para obtener más información, consulte [Descargar y configurar el agente de Edge Manager manualmente](edge-device-fleet-manual.md).

1. Utilice la consola AWS IoT Greengrass V2 o la AWS CLI para realizar la implementación. `aws.greengrass.SageMakerEdgeManager` Consulte [Cree los componentes de la V2 AWS IoT Greengrass](edge-greengrass-custom-component.md).

# Descargar y configurar el agente de Edge Manager manualmente
<a name="edge-device-fleet-manual"></a>

Descargue el agente de Edge Manager en función del sistema operativo, la arquitectura y la región AWS . El agente se actualiza periódicamente, por lo que tiene la opción de elegir su agente en función de las fechas de lanzamiento y las versiones. Una vez que tenga el agente, cree un archivo de configuración JSON. Especifique el nombre del dispositivo IoT, el nombre de la flota, las credenciales del dispositivo y otros pares clave-valor. Consulte [Ejecutar el agente de Edge Manager](#edge-device-fleet-running-agent) para obtener la lista completa de claves que debe especificar en el archivo de configuración. Puede ejecutar el agente como un archivo binario ejecutable o vincularlo a él como objeto compartido dinámico (DSO).

## Cómo funciona el agente
<a name="edge-device-fleet-how-agent-works"></a>

El agente se ejecuta en la CPU de sus dispositivos. El agente realiza inferencias sobre la estructura y el hardware del dispositivo de destino especificado durante el trabajo de compilación. Por ejemplo, si compiló el modelo para Jetson Nano, el agente es compatible con la GPU en el [Deep Learning Runtime](https://github.com/neo-ai/neo-ai-dlr) (DLR) proporcionado.

El agente se publica en formato binario para los sistemas operativos compatibles. Compruebe que su sistema operativo sea compatible y cumpla los requisitos mínimos de sistema operativo de la siguiente tabla:

------
#### [ Linux ]

**Versión:** Ubuntu 18.04

**Formatos binarios compatibles:** x86-64 bits (binario ELF) y ARMv8 64 bits (binario ELF)

------
#### [ Windows ]

**Versión:** Windows 10 versión 1909

**Formatos binarios compatibles:** x86-32 bits (DLL) y x86-64 bits (DLL)

------

## Instalación del agente de Edge Manager
<a name="edge-device-fleet-installation"></a>

Para usar el agente de Edge Manager, primero debe obtener los artefactos de versión y un certificado raíz. Los artefactos de versión se almacenan en un bucket de Amazon S3 en la región `us-west-2`. Para descargar los artefactos, especifique su sistema operativo (`<OS>`) y la `<VERSION>`.

En función del sistema operativo, sustituya `<OS>` por uno de los siguientes elementos:


| Windows de 32 bits | Windows de 64 bits | Linux x86-64 | Linux ARMv8 | 
| --- | --- | --- | --- | 
| Windows x86 | windows-x64 | Linux x64 | linux-armv8 | 

La `VERSION` se divide en tres componentes: `<MAJOR_VERSION>.<YYYY-MM-DD>-<SHA-7>`, donde:
+ `<MAJOR_VERSION>`: Versión de lanzamiento. La versión de lanzamiento está configurada actualmente en `1`.
+ `<YYYY-MM-DD>`: La marca de tiempo de versión de los artefactos.
+ `<SHA-7>`: El ID de confirmación del repositorio a partir del cual se creó la versión.

Debe proporcionar la `<MAJOR_VERSION>` y la marca de tiempo en formato `YYYY-MM-DD`. Le sugerimos que utilice la última marca de tiempo de versión del artefacto.

Ejecute lo siguiente en su línea de comandos para obtener la última marca de tiempo. Sustituya `<OS>` por su sistema operativo:

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-<OS>/Releases/ | sort -r
```

Por ejemplo, si tiene un sistema operativo Windows de 32 bits, ejecute:

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/ | sort -r
```

Esto muestra:

```
2020-12-01 23:33:36 0 

                    PRE 1.20201218.81f481f/
                    PRE 1.20201207.02d0e97/
```

El resultado que aparece en este ejemplo muestra dos artefactos de versión. El archivo de artefactos de la primera versión indica que la versión publicada tiene una versión principal de`1`, una marca de tiempo `20201218` (en YYYY-MM-DD formato) y un identificador de confirmación de `81f481f` SHA-7.

**nota**  
El comando anterior supone que ha configurado AWS Command Line Interface. Para obtener más información sobre cómo configurar los ajustes con los AWS CLI que interactúa AWS, consulte [Configuración de la AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/cli-chap-configure.html).

Según el sistema operativo, utilice los siguientes comandos para instalar los artefactos:

------
#### [ Windows 32-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Windows 64-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux x86-64 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux ARMv8 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/sha256_hex.shasum .
```

------

También debe descargar un certificado raíz. Este certificado valida los artefactos del modelo firmados por ellos AWS antes de cargarlos en los dispositivos perimetrales.

Sustituya el `<OS>` correspondiente a su plataforma de la lista de sistemas operativos compatibles y sustituya `<REGION>` por su región AWS .

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-<OS>/Certificates/<REGION>/<REGION>.pem .
```

## Ejecutar el agente de Edge Manager
<a name="edge-device-fleet-running-agent"></a>

Puede ejecutar el agente SageMaker AI Edge Manager como un proceso independiente en forma de archivo binario ejecutable y enlazable (ELF), o bien puede crear un enlace con él como un objeto compartido dinámico (.dll). Linux admite su ejecución como binario ejecutable independiente, siendo éste el modo preferido. Windows admite su ejecución como un objeto compartido (.dll).

En Linux, se recomienda ejecutar el binario a través de un servicio que forme parte de su sistema de inicialización (`init`). Si desea ejecutar el binario directamente, puede hacerlo en un terminal como se muestra en el siguiente ejemplo. Si tiene un sistema operativo moderno, no es necesario realizar ninguna otra instalación antes de ejecutar el agente, ya que todos los requisitos están integrados de forma estática en el ejecutable. Esto le da flexibilidad para ejecutar el agente en la terminal, como servicio o dentro de un contenedor.

Para ejecutar el agente, cree un archivo de configuración JSON. Especifique los siguientes pares clave-valor:
+ `sagemaker_edge_core_device_name`: el nombre del dispositivo. El nombre de este dispositivo debe registrarse junto con la flota de dispositivos en la consola de SageMaker Edge Manager.
+ `sagemaker_edge_core_device_fleet_name`: el nombre de la flota a la que pertenece el dispositivo.
+ `sagemaker_edge_core_region`: la AWS región asociada al dispositivo, la flota y los depósitos de Amazon S3. Esto corresponde a la región en la que está registrado el dispositivo y en la que se creó el bucket de Amazon S3 (está previsto que sean iguales). Los propios modelos se pueden compilar con SageMaker Neo en una región diferente; esta configuración no está relacionada con la región de compilación de modelos.
+ `sagemaker_edge_core_root_certs_path`: la ruta absoluta de la carpeta a certificados raíz. Se utiliza para validar el dispositivo con la AWS cuenta correspondiente.
+ `sagemaker_edge_provider_aws_ca_cert_file`: La ruta absoluta al certificado Amazon Root CA (AmazonRootCA1.pem). Se utiliza para validar el dispositivo con la cuenta correspondiente AWS . `AmazonCA`es un certificado propiedad de AWS.
+ `sagemaker_edge_provider_aws_cert_file`: La ruta absoluta para AWS IoT firmar el certificado raíz (`*.pem.crt`).
+ `sagemaker_edge_provider_aws_cert_pk_file`: La ruta absoluta a la clave AWS IoT privada. (`*.pem.key`).
+ `sagemaker_edge_provider_aws_iot_cred_endpoint`: El punto final de AWS IoT las credenciales (*identifier*.iot. *region*.amazonaws.com). Este punto de conexión se utiliza para la validación de credenciales. Consulte [Conexión de dispositivos a AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-devices.html) para obtener más información.
+ `sagemaker_edge_provider_provider`: esto indica la implementación de la interfaz de proveedor que se está utilizando. La interfaz de proveedor se comunica con los servicios de red finales para cargas, latidos y validación de registros. De forma predeterminada, se establece en `"Aws"`. Permitimos implementaciones personalizadas de la interfaz de proveedor. Se puede configurar en `None` para ningún proveedor o `Custom` para una implementación personalizada con la ruta de objetos compartidos correspondiente proporcionada.
+ `sagemaker_edge_provider_provider_path`: proporciona la ruta absoluta al objeto compartido de implementación del proveedor (archivo .so o .dll). El archivo .dll o .so de proveedor `"Aws"` se suministra con la versión del agente. Este campo es obligatorio.
+ `sagemaker_edge_provider_s3_bucket_name`: el nombre del bucket de Amazon S3 (no el URI del bucket de Amazon S3). El bucket debe tener una cadena `sagemaker` en su nombre.
+ `sagemaker_edge_log_verbose` (Booleano): opcional. Esto configura el registro de depuración. Seleccione `True` o `False`.
+ `sagemaker_edge_telemetry_libsystemd_path`: solo para Linux, `systemd` implementa la métrica del contador de bloqueos del agente. Configure la ruta absoluta de libsystemd para activar la métrica del contador de bloqueos. Puede encontrar la ruta predeterminada de libsystemd ejecutando `whereis libsystemd` en el terminal del dispositivo.
+ `sagemaker_edge_core_capture_data_destination`: el destino para cargar los datos de captura. Elija `"Cloud"` o `"Disk"`. El valor predeterminado se establece en `"Disk"`. Si lo configura en `"Disk"` escribe los tensores de entrada y salida y los datos auxiliares en el sistema de archivos local, en la ubicación que prefiera. Al escribir en `"Cloud"` para usar el nombre del bucket de Amazon S3 proporcionado en la configuración `sagemaker_edge_provider_s3_bucket_name`.
+ `sagemaker_edge_core_capture_data_disk_path`: establezca la ruta absoluta en el sistema de archivos local, en el que se escriben los archivos de datos de captura cuando `"Disk"` es el destino. Este campo no se utiliza cuando `"Cloud"` se especifica como destino.
+ `sagemaker_edge_core_folder_prefix`: el prefijo principal en Amazon S3 donde se almacenan los datos capturados cuando se especifica `"Cloud"` como destino de los datos de captura (`sagemaker_edge_core_capture_data_disk_path)`. Los datos capturados se almacenan en una subcarpeta de `sagemaker_edge_core_capture_data_disk_path` si `"Disk"` se establece como destino de datos.
+ `sagemaker_edge_core_capture_data_buffer_size` (Valor entero): tamaño del búfer circular de datos de captura. Indica el número máximo de solicitudes almacenadas en el búfer.
+ `sagemaker_edge_core_capture_data_batch_size` (Valor entero): tamaño del lote de datos de captura. Indica el tamaño de un lote de solicitudes que se gestionan desde el búfer. Este valor debe ser inferior a `sagemaker_edge_core_capture_data_buffer_size`. Se recomienda un máximo de la mitad del tamaño del búfer para el tamaño del lote.
+ `sagemaker_edge_core_capture_data_push_period_seconds` (Valor entero): el período de inserción de datos de captura en segundos. Un lote de solicitudes en el búfer se gestiona cuando hay solicitudes del tamaño de un lote en el búfer o cuando se ha completado este período de tiempo (lo que ocurra primero). Esta configuración establece ese período de tiempo.
+ `sagemaker_edge_core_capture_data_base64_embed_limit`: el límite para cargar los datos de captura en bytes. Valor entero.

El archivo de configuración debe ser similar al siguiente ejemplo (con sus valores específicos especificados). En este ejemplo se utiliza el AWS proveedor predeterminado (`"Aws"`) y no se especifica una carga periódica.

```
{
    "sagemaker_edge_core_device_name": "device-name",
    "sagemaker_edge_core_device_fleet_name": "fleet-name",
    "sagemaker_edge_core_region": "region",
    "sagemaker_edge_core_root_certs_path": "<Absolute path to root certificates>",
    "sagemaker_edge_provider_provider": "Aws",
    "sagemaker_edge_provider_provider_path" : "/path/to/libprovider_aws.so",
    "sagemaker_edge_provider_aws_ca_cert_file": "<Absolute path to Amazon Root CA certificate>/AmazonRootCA1.pem",
    "sagemaker_edge_provider_aws_cert_file": "<Absolute path to AWS IoT signing root certificate>/device.pem.crt",
    "sagemaker_edge_provider_aws_cert_pk_file": "<Absolute path to AWS IoT private key.>/private.pem.key",
    "sagemaker_edge_provider_aws_iot_cred_endpoint": "https://<AWS IoT Endpoint Address>",
    "sagemaker_edge_core_capture_data_destination": "Cloud",
    "sagemaker_edge_provider_s3_bucket_name": "sagemaker-bucket-name",
    "sagemaker_edge_core_folder_prefix": "Amazon S3 folder prefix",
    "sagemaker_edge_core_capture_data_buffer_size": 30,
    "sagemaker_edge_core_capture_data_batch_size": 10,
    "sagemaker_edge_core_capture_data_push_period_seconds": 4000,
    "sagemaker_edge_core_capture_data_base64_embed_limit": 2,
    "sagemaker_edge_log_verbose": false
}
```

El artefacto de versión incluye un ejecutable binario llamado `sagemaker_edge_agent_binary` en el directorio `/bin`. Para ejecutar el binario, utilice la marca `-a` para crear un descriptor de archivo de socket (.sock) en el directorio que elija y especifique la ruta del archivo de configuración JSON del agente que creó con la marca `-c`.

```
./sagemaker_edge_agent_binary -a <ADDRESS_TO_SOCKET> -c <PATH_TO_CONFIG_FILE>
```

En el siguiente ejemplo, se muestra el fragmento de código con una ruta de archivo y un directorio especificados:

```
./sagemaker_edge_agent_binary -a /tmp/sagemaker_edge_agent_example.sock -c sagemaker_edge_config.json
```

En este ejemplo, se crea un descriptor de archivo de socket denominado `sagemaker_edge_agent_example.sock` en el directorio `/tmp` y apunta a un archivo de configuración que se encuentra en el mismo directorio de trabajo del agente denominado `sagemaker_edge_config.json`.

# Implementación de Model Package y Edge Manager Agent con AWS IoT Greengrass
<a name="edge-greengrass"></a>

SageMaker Edge Manager integra la AWS IoT Greengrass versión 2 para simplificar el acceso, el mantenimiento y la implementación del agente y el modelo de Edge Manager en sus dispositivos. Sin AWS IoT Greengrass la versión 2, la configuración de sus dispositivos y flotas para usar SageMaker Edge Manager requiere que copie manualmente el agente de Edge Manager de un paquete de versiones de Amazon S3. Utilice el agente para realizar predicciones con los modelos cargados en sus dispositivos periféricos. Con la integración de AWS IoT Greengrass V2 y SageMaker Edge Manager, puede utilizar los componentes de la AWS IoT Greengrass V2. Los componentes son módulos de software prediseñados que pueden conectar sus dispositivos periféricos a AWS servicios o servicios de terceros a través AWS IoT Greengrass de ellos.

Debe instalar el software AWS IoT Greengrass Core en sus dispositivos si quiere usar la AWS IoT Greengrass versión 2 para implementar el agente Edge Manager y su modelo. Para obtener más información sobre los requisitos de los dispositivos y cómo configurarlos, consulte [Configuración de los dispositivos AWS IoT Greengrass principales](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html) en la AWS IoT Greengrass documentación.

Para implementar el agente de Edge Manager, utilice los tres componentes siguientes:
+ *Un componente público prediseñado*: la SageMaker IA mantiene el componente público de Edge Manager.
+ *Un componente privado generado automáticamente*: el componente privado se genera automáticamente al empaquetar el modelo de machine learning con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html) y especificar `GreengrassV2Component` para el campo API de Edge Manager `PresetDeploymentType`.
+ *Un componente personalizado*: se trata de la aplicación de inferencias que se encarga de preprocesar y realizar inferencias en el dispositivo. Debe crear este componente. Consulte la documentación de SageMaker Edge Manager o [Crear AWS IoT Greengrass componentes personalizados](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html) en la AWS IoT Greengrass documentación para obtener más información sobre cómo crear componentes personalizados. [Crear un componente personalizado de Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how)

# Cómo completar los requisitos previos para implementar el agente del Administrador de periféricos
<a name="edge-greengrass-prerequisites"></a>

SageMaker Edge Manager utiliza la AWS IoT Greengrass versión 2 para simplificar la implementación del agente de Edge Manager, sus modelos de aprendizaje automático y su aplicación de inferencia en sus dispositivos mediante el uso de componentes. Para facilitar el mantenimiento de sus funciones de AWS IAM, Edge Manager le permite reutilizar el alias de su AWS IoT función actual. Si aún no tiene uno, Edge Manager genera un alias de rol como parte del trabajo de empaquetado de Edge Manager. Ya no necesitas asociar a tu rol un alias de rol generado a partir del trabajo de empaquetado de SageMaker Edge Manager. AWS IoT 

Antes de comenzar, debe cumplir los siguientes requisitos previos:

1. Instale el software AWS IoT Greengrass Core. Para obtener información detallada, consulte [Instalación del software AWS IoT Greengrass principal](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#install-greengrass-v2).

1. Configure la AWS IoT Greengrass V2. Para obtener más información, consulte [Instalar el software AWS IoT Greengrass principal con aprovisionamiento manual de recursos](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html).
**nota**  
Asegúrese de que el nombre de la AWS IoT cosa esté todo en minúsculas y no contenga caracteres excepto (opcionalmente) guiones (). `‐`
El rol de IAM debe empezar por `SageMaker*`

1. Adjunte la siguiente política de permisos y en línea al rol de IAM creado durante la configuración de la V2. AWS IoT Greengrass 
   + Navegue hasta la consola de IAM. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)
   + Busque el rol creado escribiendo el nombre del rol en el campo de **Búsqueda**.
   + Elija su rol.
   + A continuación, seleccione **Asociar políticas**.
   + Busque la opción **AmazonSageMakerEdgeDeviceFleetPolicy**.
   + Seleccione **AmazonSageMakerFullAccess**(este es un paso opcional que le facilita la reutilización de esta función de IAM en la compilación y el empaquetado de modelos).
   + Añada los permisos necesarios a la política de permisos de un rol, no asocie políticas integradas a usuarios de IAM.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
           {
             "Sid":"GreengrassComponentAccess",
             "Effect":"Allow",
             "Action":[
                 "greengrass:CreateComponentVersion",
                 "greengrass:DescribeComponent"
             ],
             "Resource":"*"
            }
         ]
     }
     ```

------
   + Elija **Asociar política**.
   + Seleccione **Relaciones de confianza**.
   + Elija **Editar relación de confianza**.
   + Sustituya el contenido por lo siguiente.

------
#### [ JSON ]

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Service": "credentials.iot.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
         },
         {
           "Effect": "Allow",
           "Principal": {
             "Service": "sagemaker.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
         }
       ]
     }
     ```

------

1. Cree una flota de dispositivos de Edge Manager. Para obtener información sobre cómo crear una flota , consulte [Configuración de dispositivos y flotas en Edge Manager SageMaker](edge-device-fleet.md).

1. Registre el dispositivo con el mismo nombre AWS IoT que el nombre que creó durante la configuración de la AWS IoT Greengrass V2.

1. Crea al menos un AWS IoT Greengrass componente privado personalizado. Este componente es la aplicación que ejecuta la inferencia en el dispositivo. Para obtener más información, consulte [Crear un componente personalizado de Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how)

**nota**  
El SageMaker Edge Manager y AWS IoT Greengrass la integración solo funcionan para la AWS IoT Greengrass versión 2.
Tanto el AWS IoT nombre del dispositivo como el nombre del dispositivo Edge Manager deben coincidir.
SageMaker Edge Manager no carga AWS IoT los certificados locales y llama directamente al punto de conexión del proveedor de AWS IoT credenciales. En su lugar, SageMaker Edge Manager usa la AWS IoT Greengrass versión 2 TokenExchangeService y obtiene una credencial temporal de un punto final de TES.

# Cree los componentes de la V2 AWS IoT Greengrass
<a name="edge-greengrass-custom-component"></a>

AWS IoT Greengrass utiliza *componentes*, un módulo de software que se implementa y se ejecuta en un dispositivo AWS IoT Greengrass principal. Necesita (como mínimo) tres componentes:

1. *Un AWS IoT Greengrass componente público del agente de Edge Manager* que implementa el binario del agente de Edge Manager.

1. *Un componente de modelo* que se genera automáticamente al empaquetar el modelo de aprendizaje automático con la AWS SDK para Python (Boto3) API o con la consola de IA. SageMaker Para obtener información, consulte [Crear un componente generado automáticamente](#edge-greengrass-autogenerate-component-how).

1. *Un componente privado y personalizado* para implementar la aplicación cliente del agente de Edge Manager y realizar cualquier procesamiento previo y posterior de los resultados de la inferencia. Para obtener más información sobre cómo crear un componente personalizado, consulta [Crear un componente generado automáticamente](#edge-greengrass-autogenerate-component-how) o [Crear AWS IoT Greengrass componentes personalizados](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html).

## Crear un componente generado automáticamente
<a name="edge-greengrass-autogenerate-component-how"></a>

Genere el componente del modelo con la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html)API y especifique `GreengrassV2Component` el campo API del trabajo de empaquetado de SageMaker Edge Manager`PresetDeploymentType`. Cuando llamas a la `CreateEdgePackagingJob` API, Edge Manager toma tu modelo compilado con SageMaker AI NEO en Amazon S3 y crea un componente de modelo. El componente del modelo se almacena automáticamente en su cuenta. Puede ver cualquiera de sus componentes navegando a la consola. AWS IoT [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/) Seleccione **Greengrass** y, a continuación, seleccione Dispositivos **principales**. La página contiene una lista de los dispositivos AWS IoT Greengrass principales asociados a tu cuenta. Si no se especifica el nombre de un componente del modelo en `PresetDeploymentConfig`, el nombre predeterminado generado será `"SagemakerEdgeManager"` y el nombre del trabajo de empaquetado del agente de Edge Manager. En el siguiente ejemplo, se muestra cómo especificar a Edge Manager la creación de un componente AWS IoT Greengrass V2 con la `CreateEdgePackagingJob` API.

```
import sagemaker
import boto3

# Create a SageMaker client object to make it easier to interact with other AWS services.
sagemaker_client = boto3.client('sagemaker', region=<YOUR_REGION>)

# Replace with your IAM Role ARN
sagemaker_role_arn = "arn:aws:iam::<account>:role/*"

# Replace string with the name of your already created S3 bucket.
bucket = 'amzn-s3-demo-bucket-edge-manager'

# Specify a name for your edge packaging job.
edge_packaging_name = "edge_packag_job_demo" 

# Replace the following string with the name you used for the SageMaker Neo compilation job.
compilation_job_name = "getting-started-demo" 

# The name of the model and the model version.
model_name = "sample-model" 
model_version = "1.1"

# Output directory in S3 where you want to store the packaged model.
packaging_output_dir = 'packaged_models' 
packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

# The name you want your Greengrass component to have.
component_name = "SagemakerEdgeManager" + edge_packaging_name

sagemaker_client.create_edge_packaging_job(
                    EdgePackagingJobName=edge_packaging_name,
                    CompilationJobName=compilation_job_name,
                    RoleArn=sagemaker_role_arn,
                    ModelName=model_name,
                    ModelVersion=model_version,
                    OutputConfig={
                        "S3OutputLocation": packaging_s3_output,
                        "PresetDeploymentType":"GreengrassV2Component",
                        "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}"
                        }
                    )
```

También puede crear el componente generado automáticamente con la consola SageMaker AI. Siga los pasos del 1 al 6 en [Package a model (Amazon SageMaker AI Console)](edge-packaging-job-console.md)

Introduzca el URI del bucket de Amazon S3 en el que desea almacenar el resultado del trabajo de empaquetado y la clave de cifrado opcional.

Complete lo siguiente para crear el componente del modelo:

1. Seleccione **Implementación preestablecida**.

1. Especifique el nombre del componente en el campo **Nombre del componente**.

1. Si lo desea, proporcione una descripción del componente, una versión del componente, el sistema operativo de la plataforma o la arquitectura de la plataforma para la **Descripción del componente**, **Versión del componente**, **Sistema operativo de la plataforma** y **Arquitectura de la plataforma**, respectivamente.

1. Seleccione **Enviar**.

## Crear un componente personalizado de Hello World
<a name="edge-greengrass-create-custom-component-how"></a>

El componente de aplicación personalizado se utiliza para realizar inferencias en el dispositivo periférico. El componente se encarga de cargar los modelos en SageMaker Edge Manager, de invocar al agente de Edge Manager para realizar inferencias y de descargar el modelo cuando el componente está apagado. Antes de crear el componente, asegúrese de que el agente y la aplicación puedan comunicarse con Edge Manager. Para ello, configure [gRPC](https://grpc.io/). El agente de Edge Manager utiliza los métodos definidos en los búferes de Protobuf y el servidor gRPC para establecer la comunicación con la aplicación cliente en el dispositivo periférico y en la nube.

Para usar gRPC, debe:

1. Crear un código auxiliar de gRPC con el archivo .proto que se proporciona al descargar el agente de Edge Manager del bucket de versiones de Amazon S3.

1. Escribir el código del cliente en el idioma que prefiera.

No es necesario definir el servicio en un archivo .proto. Los archivos .proto del servicio se incluyen en el archivo TAR comprimido al descargar el binario de la versión del agente de Edge Manager del bucket de versiones de Amazon S3.

Instalar gRPC y otras herramientas necesarias en su máquina host y cree los stubs `agent_pb2_grpc.py` y `agent_pb2.py` de gRP en Python. Asegúrese de tener `agent.proto` en su directorio local.

```
%%bash
pip install grpcio
pip install grpcio-tools
python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto
```

El código anterior genera las interfaces de cliente y servidor gRPC a partir de la definición de servicio .proto. Es decir, crea el modelo gRPC en Python. El directorio de la API contiene la especificación Protobuf para comunicarse con el agente.

A continuación, use la API gRPC para escribir un cliente y un servidor para su servicio (2). El siguiente script de ejemplo, `edge_manager_python_example.py`, usa Python para cargar, enumerar y descargar un modelo `yolov3` en el dispositivo periférico.

```
import grpc
from PIL import Image
import agent_pb2
import agent_pb2_grpc
import os


model_path = '<PATH-TO-SagemakerEdgeManager-COMPONENT>' 
                    
agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock'

agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),))

agent_client = agent_pb2_grpc.AgentStub(agent_channel)


def list_models():
    return agent_client.ListModels(agent_pb2.ListModelsRequest())


def list_model_tensors(models):
    return {
        model.name: {
            'inputs': model.input_tensor_metadatas,
            'outputs': model.output_tensor_metadatas
        }
        for model in list_models().models
    }


def load_model(model_name, model_path):
    load_request = agent_pb2.LoadModelRequest()
    load_request.url = model_path
    load_request.name = model_name
    return agent_client.LoadModel(load_request)


def unload_model(name):
    unload_request = agent_pb2.UnLoadModelRequest()
    unload_request.name = name
    return agent_client.UnLoadModel(unload_request)


def predict_image(model_name, image_path):
    image_tensor = agent_pb2.Tensor()
    image_tensor.byte_data = Image.open(image_path).tobytes()
    image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0]
    image_tensor.tensor_metadata.name = image_tensor_metadata.name
    image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type
    for shape in image_tensor_metadata.shape:
        image_tensor.tensor_metadata.shape.append(shape)
    predict_request = agent_pb2.PredictRequest()
    predict_request.name = model_name
    predict_request.tensors.append(image_tensor)
    predict_response = agent_client.Predict(predict_request)
    return predict_response

def main():
    try:
        unload_model('your-model')
    except:
        pass
  
    print('LoadModel...', end='')
    try:
        load_model('your-model', model_path)
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('Model already loaded!')
        
    print('ListModels...', end='')
    try:
        print(list_models())
        print('done.')
        
    except Exception as e:
        print()
        print(e)
        print('List model failed!')
       
    print('Unload model...', end='')
    try:
        unload_model('your-model')
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('unload model failed!')

if __name__ == '__main__':
    main()
```

Asegúrese de que `model_path` apunta al nombre del AWS IoT Greengrass componente que contiene el modelo si utiliza el mismo ejemplo de código de cliente.

Puedes crear tu componente Hello World AWS IoT Greengrass V2 una vez que hayas generado tus stubs de gRPC y tengas listo tu código de Hello World. Para ello:
+ Suba sus `edge_manager_python_example.py`, `agent_pb2_grpc.py` y `agent_pb2.py` a su bucket de Amazon S3 y anote su ruta de Amazon S3.
+ Crea un componente privado en la consola AWS IoT Greengrass V2 y define la receta para tu componente. Especifique el URI de Amazon S3 para su aplicación Hello World y su stub de gRPC en la siguiente fórmula.

  ```
  ---
  RecipeFormatVersion: 2020-01-25
  ComponentName: com.sagemaker.edgePythonExample
  ComponentVersion: 1.0.0
  ComponentDescription: Sagemaker Edge Manager Python example
  ComponentPublisher: Amazon Web Services, Inc.
  ComponentDependencies:
    aws.greengrass.SageMakerEdgeManager:
      VersionRequirement: '>=1.0.0'
      DependencyType: HARD
  Manifests:
    - Platform:
        os: linux
        architecture: "/amd64|x86/"
      Lifecycle:
        install: |-
          apt-get install python3-pip
          pip3 install grpcio
          pip3 install grpcio-tools
          pip3 install protobuf
          pip3 install Pillow
        run:
          script: |- 
            python3 {artifacts:path}/edge_manager_python_example.py
      Artifacts:
        - URI: <code-s3-path>
        - URI: <pb2-s3-path>
        - URI: <pb2-grpc-s3-path>
  ```

Para obtener información detallada sobre cómo crear una receta de Hello World, consulte [Crear su primer componente](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#create-first-component) en la AWS IoT Greengrass documentación.

# Implemente los componentes en su dispositivo
<a name="edge-greengrass-deploy-components"></a>

Implemente sus componentes con la AWS IoT consola o con el AWS CLI.

## Para implementar sus componentes (consola)
<a name="collapsible-section-gg-deploy-console"></a>

Implemente sus AWS IoT Greengrass componentes con la AWS IoT consola.

1. En la AWS IoT Greengrass consola, en el menú de [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/)navegación, selecciona **Implementaciones.**

1. En la página **Componentes**, en la pestaña **Componentes públicos**, elija `aws.greengrass.SageMakerEdgeManager`.

1. En la página `aws.greengrass.SageMakerEdgeManager`, elija **Implementar**.

1. De `Add to deployment`, elija una de las siguientes opciones:

   1. Para combinar este componente con una implementación existente en el dispositivo de destino, elija **Agregar a la implementación existente** y, a continuación, seleccione la implementación que desee revisar.

   1. Para crear una nueva implementación en el dispositivo de destino, elija **Crear nueva implementación**. Si tiene una implementación existente en su dispositivo, al elegir este paso se reemplaza la implementación existente.

1. En la página **Especificar detalles**, haga lo siguiente:

   1. En **Información de implementación**, introduzca o modifique el nombre descriptivo de su implementación.

   1. En **Objetivos de implementación**, seleccione un objetivo para su implementación y elija **Siguiente**. No puede cambiar el objetivo de implementación si está revisando una implementación existente.

1. En la página **Seleccionar componentes**, en **Mis componentes**, elija:
   + com. *<CUSTOM-COMPONENT-NAME>*
   + `aws.greengrass.SageMakerEdgeManager`
   + SagemakerEdgeManager.*<YOUR-PACKAGING-JOB>*

1. En la página **Configurar componentes**, elija **com.greengrass. SageMakerEdgeManager**y haga lo siguiente.

   1. Seleccione **Configurar componente**.

   1. En **Actualización de la configuración**, en **Configuración para fusionar**, introduzca la siguiente configuración.

      ```
      {
          "DeviceFleetName": "device-fleet-name",
          "BucketName": "bucket-name"
      }
      ```

      Sustituya *`device-fleet-name`* por el nombre de la flota de dispositivos periféricos que ha creado y sustituya *`bucket-name`* por el nombre del bucket de Amazon S3 asociado a su flota de dispositivos.

   1. Seleccione **Confirmar** y, a continuación, elija **Siguiente**.

1. En la página **Configurar ajustes avanzados**, mantenga los ajustes de configuración predeterminados y seleccione **Siguiente**.

1. En la página **Revisar**, elija **Implementar**.

## Para implementar sus componentes (AWS CLI)
<a name="collapsible-section-gg-deploy-cli"></a>

1. Cree un ` deployment.json` archivo para definir la configuración de implementación de los componentes de SageMaker Edge Manager. Este archivo debería ser igual al siguiente ejemplo.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.SageMakerEdgeManager": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
           "merge": {
             "DeviceFleetName": "device-fleet-name",
             "BucketName": "bucket-name"
           }
         }
       },
       "com.greengrass.SageMakerEdgeManager.ImageClassification": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
       "com.greengrass.SageMakerEdgeManager.ImageClassification.Model": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
     }
   }
   ```
   + En el campo `targetArn`, sustituya *`targetArn`* por el nombre de recurso de Amazon (ARN) de la cosa o grupo de cosas a la que apunte la implementación, en el siguiente formato:
     + Cosa: `arn:aws:iot:region:account-id:thing/thingName`
     + Grupo de cosas: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + En el campo `merge`, sustituya *`device-fleet-name`* por el nombre de la flota de dispositivos periféricos que ha creado y sustituya *`bucket-name`* por el nombre del bucket de Amazon S3 asociado a su flota de dispositivos.
   + Sustituya las versiones de cada componente por la última versión disponible.

1. Ejecute el siguiente comando para implementar los componentes en el dispositivo:

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

La implementación puede tardar varios minutos en completarse. En el siguiente paso, compruebe el registro de componentes para comprobar que la implementación se ha completado correctamente y para ver los resultados de la inferencia.

Para obtener más información sobre la implementación de componentes en dispositivos individuales o grupos de dispositivos, consulte [Implementar AWS IoT Greengrass componentes en dispositivos](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html).

# Implemente el Model Package directamente con la API de implementación de SageMaker Edge Manager
<a name="edge-deployment-plan-api"></a>

SageMaker Edge Manager proporciona una API de implementación que puede usar para implementar modelos en dispositivos de destino sin ella AWS IoT Greengrass. Resulta útil en situaciones en las que desee actualizar los modelos independientemente de las actualizaciones del firmware o de los mecanismos de implementación de las aplicaciones. Puede usar la API para integrar sus implementaciones perimetrales en un CI/CD flujo de trabajo para implementar modelos automáticamente una vez que haya validado la precisión del modelo. La API también cuenta con cómodas opciones de reversión y despliegue gradual para garantizar que los modelos funcionen bien en un entorno concreto antes de una implementación más amplia.

Para usar la API de implementación de Edge Manager, primero compile y empaquete su modelo. Para obtener información sobre cómo compilar y empaquetar el modelo, consulte [Preparación del modelo para la implementación](edge-getting-started-step2.md). En las siguientes secciones de esta guía, se muestra cómo crear despliegues perimetrales mediante la SageMaker API, después de haber compilado y empaquetado los modelos.

**Topics**
+ [Crear un plan de implementación periférica](#create-edge-deployment-plan)
+ [Reinicie la implementación periférica](#start-edge-deployment-stage)
+ [Comprobar el estado de la implementación](#describe-edge-deployment-status)

## Crear un plan de implementación periférica
<a name="create-edge-deployment-plan"></a>

Puede crear un plan de implementación periférica con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentPlan.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentPlan.html). El plan de implementación puede tener varias etapas. Puede configurar cada etapa para desarrollar la implementación en un subconjunto de dispositivos periféricos (por porcentaje o por nombre de dispositivo). También puede configurar cómo se gestionan los errores de implementación en cada etapa.

El siguiente fragmento de código muestra cómo se puede crear un plan de implementación periférica con una etapa para implementar un modelo compilado y empaquetado en 2 dispositivos periféricos específicos:

```
import boto3

client = boto3.client("sagemaker")

client.create_edge_deployment_plan(
    EdgeDeploymentPlanName="edge-deployment-plan-name",
    DeviceFleetName="device-fleet-name",
    ModelConfigs=[
        {
            "EdgePackagingJobName": "edge-packaging-job-name",
            "ModelHandle": "model-handle"
        }
    ],
    Stages=[
        {
            "StageName": "stage-name",
            "DeviceSelectionConfig": {
                "DeviceSubsetType": "SELECTION",
                "DeviceNames": ["device-name-1", "device-name-2"]
            },
            "DeploymentConfig": {
                "FailureHandlingPolicy": "ROLLBACK_ON_FAILURE"
            }
        }
    ]
)
```

En lugar de dispositivos específicos, si desea implementar el modelo en un porcentaje de dispositivos de su flota, defina el valor de `DeviceSubsetType` en `"PERCENTAGE"` y sustituya `"DeviceNames": ["device-name-1", "device-name-2"]` por `"Percentage": desired-percentage` en el ejemplo anterior.

Las etapas se pueden añadir una vez creado el plan de despliegue con la [CreateEdgeDeploymentStage](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentStage.html)API, por si quieres empezar a implementar nuevas etapas tras validar el éxito de la implementación de las pruebas. [Para obtener más información sobre las etapas de despliegue, consulte. DeploymentStage](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeploymentStage.html)

## Reinicie la implementación periférica
<a name="start-edge-deployment-stage"></a>

Tras crear el plan y las etapas de implementación, puede iniciar la implementación con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartEdgeDeploymentStage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartEdgeDeploymentStage.html).

```
client.start_edge_deployment_stage(
    EdgeDeploymentPlanName="edge-deployment-plan-name",
    StageName="stage-name"
)
```

## Comprobar el estado de la implementación
<a name="describe-edge-deployment-status"></a>

Puede comprobar el estado de la implementación perimetral con la [DescribeEdgeDeploymentPlan](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEdgeDeploymentPlan.html)API.

```
client.describe_edge_deployment_plan(
    EdgeDeploymentPlanName="edge-deployment-plan-name"
)
```

# Gestionar el modelo
<a name="edge-manage-model"></a>

El agente de Edge Manager puede cargar varios modelos a la vez y hacer inferencias con los modelos cargados en dispositivos periféricos. La cantidad de modelos que el agente puede cargar viene determinada por la memoria disponible en el dispositivo. El agente valida la firma del modelo y carga en la memoria todos los artefactos producidos por el trabajo de empaquetado periférico. Este paso requiere que se instalen todos los certificados necesarios descritos en los pasos anteriores junto con el resto de la instalación binaria. Si no se puede validar la firma del modelo, se produce un error al cargar el modelo con el código de retorno y el motivo correspondientes.

SageMaker El agente Edge Manager proporciona una lista de los sistemas de gestión de modelos APIs que implementan el plano de control y APIs el plano de datos en los dispositivos periféricos. Junto con esta documentación, recomendamos revisar el ejemplo de implementación del cliente, que muestra el uso canónico de lo que se describe a continuación. APIs

El archivo `proto` está disponible como parte de los artefactos de versión (dentro del archivo tarball de la versión). En este documento, enumeramos y describimos el uso de los que APIs figuran en este `proto` archivo.

**nota**  
Están one-to-one mapeados APIs en la versión de Windows y se comparte un código de ejemplo para una aplicación implementada en C\$1 con los artefactos de la versión para Windows. A continuación se indican las instrucciones para ejecutar el agente como un proceso independiente, aplicable a los artefactos de versión para Linux.

Extraiga el archivo en función de su sistema operativo. Donde `VERSION` se divide en tres componentes: `<MAJOR_VERSION>.<YYYY-MM-DD>-<SHA-7>`. Consulte [Instalación del agente de Edge Manager](edge-device-fleet-manual.md#edge-device-fleet-installation) para obtener información sobre cómo obtener la versión de lanzamiento (`<MAJOR_VERSION>`), la marca de tiempo del artefacto de versión (`<YYYY-MM-DD>`) y el ID de confirmación del repositorio (`SHA-7`)

------
#### [ Linux ]

El archivo zip se puede extraer con el comando:

```
tar -xvzf <VERSION>.tgz
```

------
#### [ Windows ]

El archivo zip se puede extraer con la IU o el comando:

```
unzip <VERSION>.tgz
```

------

La jerarquía de artefactos de versión (después de extraer el archivo `tar/zip`) se muestra a continuación. El archivo `proto` del agente está disponible en `api/`.

```
0.20201205.7ee4b0b
├── bin
│         ├── sagemaker_edge_agent_binary
│         └── sagemaker_edge_agent_client_example
└── docs
├── api
│         └── agent.proto
├── attributions
│         ├── agent.txt
│         └── core.txt
└── examples
└── ipc_example
├── CMakeLists.txt
├── sagemaker_edge_client.cc
├── sagemaker_edge_client_example.cc
├── sagemaker_edge_client.hh
├── sagemaker_edge.proto
├── README.md
├── shm.cc
├── shm.hh
└── street_small.bmp
```

**Topics**
+ [Cargar modelo](#edge-manage-model-loadmodel)
+ [Descargar modelo](#edge-manage-model-unloadmodel)
+ [Enumerar modelos](#edge-manage-model-listmodels)
+ [Describir modelo](#edge-manage-model-describemodel)
+ [Capturar datos](#edge-manage-model-capturedata)
+ [Obtener estado de captura](#edge-manage-model-getcapturedata)
+ [Predecir](#edge-manage-model-predict)

## Cargar modelo
<a name="edge-manage-model-loadmodel"></a>

El agente de Edge Manager admite la carga de varios modelos. Esta API valida la firma del modelo y carga en la memoria todos los artefactos producidos por la operación `EdgePackagingJob`. Este paso requiere que se instalen todos los certificados necesarios junto con el resto de la instalación binaria de agente. Si no se puede validar la firma del modelo, se produce un error y aparecen en el registro el código de retorno y los mensajes de error pertinentes.

```
// perform load for a model
// Note:
// 1. currently only local filesystem paths are supported for loading models.
// 2. multiple models can be loaded at the same time, as limited by available device memory
// 3. users are required to unload any loaded model to load another model.
// Status Codes:
// 1. OK - load is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist at the url
// 5. ALREADY_EXISTS - model with the same name is already loaded
// 6. RESOURCE_EXHAUSTED - memory is not available to load the model
// 7. FAILED_PRECONDITION - model is not compiled for the machine.
//
rpc LoadModel(LoadModelRequest) returns (LoadModelResponse);
```

------
#### [ Input ]

```
//
// request for LoadModel rpc call
//
message LoadModelRequest {
  string url = 1;
  string name = 2;  // Model name needs to match regex "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
}
```

------
#### [ Output ]

```
//
//
// response for LoadModel rpc call
//
message LoadModelResponse {
  Model model = 1;
}

//
// Model represents the metadata of a model
//  url - url representing the path of the model
//  name - name of model
//  input_tensor_metadatas - TensorMetadata array for the input tensors
//  output_tensor_metadatas - TensorMetadata array for the output tensors
//
// Note:
//  1. input and output tensor metadata could empty for dynamic models.
//
message Model {
  string url = 1;
  string name = 2;
  repeated TensorMetadata input_tensor_metadatas = 3;
  repeated TensorMetadata output_tensor_metadatas = 4;
}
```

------

## Descargar modelo
<a name="edge-manage-model-unloadmodel"></a>

Descarga un modelo cargado anteriormente. Se identifica mediante el alias del modelo que se proporcionó durante `loadModel`. Si no se encuentra el alias o el modelo no está cargado, devuelve un error.

```
//
// perform unload for a model
// Status Codes:
// 1. OK - unload is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist
//
rpc UnLoadModel(UnLoadModelRequest) returns (UnLoadModelResponse);
```

------
#### [ Input ]

```
//
// request for UnLoadModel rpc call
//
message UnLoadModelRequest {
 string name = 1; // Model name needs to match regex "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
}
```

------
#### [ Output ]

```
//
// response for UnLoadModel rpc call
//
message UnLoadModelResponse {}
```

------

## Enumerar modelos
<a name="edge-manage-model-listmodels"></a>

Muestra todos los modelos cargados y sus alias.

```
//
// lists the loaded models
// Status Codes:
// 1. OK - unload is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
//
rpc ListModels(ListModelsRequest) returns (ListModelsResponse);
```

------
#### [ Input ]

```
//
// request for ListModels rpc call
//
message ListModelsRequest {}
```

------
#### [ Output ]

```
//
// response for ListModels rpc call
//
message ListModelsResponse {
 repeated Model models = 1;
}
```

------

## Describir modelo
<a name="edge-manage-model-describemodel"></a>

Describe un modelo que se carga en el agente.

```
//
// Status Codes:
// 1. OK - load is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist at the url
//
rpc DescribeModel(DescribeModelRequest) returns (DescribeModelResponse);
```

------
#### [ Input ]

```
//
// request for DescribeModel rpc call
//
message DescribeModelRequest {
  string name = 1;
}
```

------
#### [ Output ]

```
//
// response for DescribeModel rpc call
//
message DescribeModelResponse {
  Model model = 1;
}
```

------

## Capturar datos
<a name="edge-manage-model-capturedata"></a>

Permite a la aplicación cliente capturar los tensores de entrada y salida en el bucket de Amazon S3 y, opcionalmente, en el auxiliar. Se espera que la aplicación cliente transmita un ID de captura único junto con cada llamada a esta API. Esto se puede usar más adelante para consultar el estado de la captura.

```
//
// allows users to capture input and output tensors along with auxiliary data.
// Status Codes:
// 1. OK - data capture successfully initiated
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 5. ALREADY_EXISTS - capture initiated for the given capture_id
// 6. RESOURCE_EXHAUSTED - buffer is full cannot accept any more requests.
// 7. OUT_OF_RANGE - timestamp is in the future.
// 8. INVALID_ARGUMENT - capture_id is not of expected format.
//
rpc CaptureData(CaptureDataRequest) returns (CaptureDataResponse);
```

------
#### [ Input ]

```
enum Encoding {
 CSV = 0;
 JSON = 1;
 NONE = 2;
 BASE64 = 3;
}

//
// AuxilaryData represents a payload of extra data to be capture along with inputs and outputs of inference
// encoding - supports the encoding of the data
// data - represents the data of shared memory, this could be passed in two ways:
// a. send across the raw bytes of the multi-dimensional tensor array
// b. send a SharedMemoryHandle which contains the posix shared memory segment id and
// offset in bytes to location of multi-dimensional tensor array.
//
message AuxilaryData {
 string name = 1;
 Encoding encoding = 2;
 oneof data {
 bytes byte_data = 3;
 SharedMemoryHandle shared_memory_handle = 4;
 }
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
// tensor_metadata - represents metadata of the shared memory segment
// data_or_handle - represents the data of shared memory, this could be passed in two ways:
// a. send across the raw bytes of the multi-dimensional tensor array
// b. send a SharedMemoryHandle which contains the posix shared memory segment
// id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
 TensorMetadata tensor_metadata = 1; //optional in the predict request
 oneof data {
 bytes byte_data = 4;
 // will only be used for input tensors
 SharedMemoryHandle shared_memory_handle = 5;
 }
}

//
// request for CaptureData rpc call
//
message CaptureDataRequest {
 string model_name = 1;
 string capture_id = 2; //uuid string
 Timestamp inference_timestamp = 3;
 repeated Tensor input_tensors = 4;
 repeated Tensor output_tensors = 5;
 repeated AuxilaryData inputs = 6;
 repeated AuxilaryData outputs = 7;
}
```

------
#### [ Output ]

```
//
// response for CaptureData rpc call
//
message CaptureDataResponse {}
```

------

## Obtener estado de captura
<a name="edge-manage-model-getcapturedata"></a>

Según los modelos cargados, los tensores de entrada y salida pueden ser grandes (para muchos dispositivos periféricos). La captura en la nube puede llevar mucho tiempo. Por tanto, `CaptureData()` se implementa como una operación asíncrona. Un ID de captura es un identificador único que el cliente proporciona durante la llamada de captura de datos, este ID se puede utilizar para consultar el estado de la llamada asíncrona.

```
//
// allows users to query status of capture data operation
// Status Codes:
// 1. OK - data capture successfully initiated
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - given capture id doesn't exist.
//
rpc GetCaptureDataStatus(GetCaptureDataStatusRequest) returns (GetCaptureDataStatusResponse);
```

------
#### [ Input ]

```
//
// request for GetCaptureDataStatus rpc call
//
message GetCaptureDataStatusRequest {
  string capture_id = 1;
}
```

------
#### [ Output ]

```
enum CaptureDataStatus {
  FAILURE = 0;
  SUCCESS = 1;
  IN_PROGRESS = 2;
  NOT_FOUND = 3;
}

//
// response for GetCaptureDataStatus rpc call
//
message GetCaptureDataStatusResponse {
  CaptureDataStatus status = 1;
}
```

------

## Predecir
<a name="edge-manage-model-predict"></a>

La API `predict` realiza inferencias en un modelo cargado anteriormente. Acepta una solicitud en forma de tensor que se introduce directamente en la red neuronal. La salida es el tensor de salida (o escalar) del modelo. Esta es una llamada de bloqueo.

```
//
// perform inference on a model.
//
// Note:
// 1. users can chose to send the tensor data in the protobuf message or
// through a shared memory segment on a per tensor basis, the Predict
// method with handle the decode transparently.
// 2. serializing large tensors into the protobuf message can be quite expensive,
// based on our measurements it is recommended to use shared memory of
// tenors larger than 256KB.
// 3. SMEdge IPC server will not use shared memory for returning output tensors,
// i.e., the output tensor data will always send in byte form encoded
// in the tensors of PredictResponse.
// 4. currently SMEdge IPC server cannot handle concurrent predict calls, all
// these call will be serialized under the hood. this shall be addressed
// in a later release.
// Status Codes:
// 1. OK - prediction is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - when model not found
// 5. INVALID_ARGUMENT - when tenors types mismatch
//
rpc Predict(PredictRequest) returns (PredictResponse);
```

------
#### [ Input ]

```
// request for Predict rpc call
//
message PredictRequest {
string name = 1;
repeated Tensor tensors = 2;
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
//    tensor_metadata - represents metadata of the shared memory segment
//    data_or_handle - represents the data of shared memory, this could be passed in two ways:
//                        a. send across the raw bytes of the multi-dimensional tensor array
//                        b. send a SharedMemoryHandle which contains the posix shared memory segment
//                            id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
  TensorMetadata tensor_metadata = 1; //optional in the predict request
  oneof data {
    bytes byte_data = 4;
    // will only be used for input tensors
    SharedMemoryHandle shared_memory_handle = 5;
  }
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
//    tensor_metadata - represents metadata of the shared memory segment
//    data_or_handle - represents the data of shared memory, this could be passed in two ways:
//                        a. send across the raw bytes of the multi-dimensional tensor array
//                        b. send a SharedMemoryHandle which contains the posix shared memory segment
//                            id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
  TensorMetadata tensor_metadata = 1; //optional in the predict request
  oneof data {
    bytes byte_data = 4;
    // will only be used for input tensors
    SharedMemoryHandle shared_memory_handle = 5;
  }
}

//
// TensorMetadata represents the metadata for a tensor
//    name - name of the tensor
//    data_type  - data type of the tensor
//    shape - array of dimensions of the tensor
//
message TensorMetadata {
  string name = 1;
  DataType data_type = 2;
  repeated int32 shape = 3;
}

//
// SharedMemoryHandle represents a posix shared memory segment
//    offset - offset in bytes from the start of the shared memory segment.
//    segment_id - shared memory segment id corresponding to the posix shared memory segment.
//    size - size in bytes of shared memory segment to use from the offset position.
//
message SharedMemoryHandle {
  uint64 size = 1;
  uint64 offset = 2;
  uint64 segment_id = 3;
}
```

------
#### [ Output ]

**nota**  
El `PredictResponse` solo devuelve `Tensors` y no `SharedMemoryHandle`.

```
// response for Predict rpc call
//
message PredictResponse {
   repeated Tensor tensors = 1;
}
```

------

# SageMaker Fin de la vida útil de Edge Manager
<a name="edge-eol"></a>

 A partir del 26 de abril de 2024, ya no podrá acceder a Amazon SageMaker Edge Manager a través de la consola de AWS administración, realizar tareas de embalaje perimetral ni gestionar flotas de dispositivos perimetrales. 

## FAQs
<a name="edge-eol-faqs"></a>

 Utilice las siguientes secciones para obtener respuestas a las preguntas más frecuentes sobre el final del SageMaker ciclo de vida (EOL) de Edge Manager. 

### P: ¿Qué pasará con mi Amazon SageMaker Edge Manager después de la fecha de fin de vida?
<a name="edge-eol-faqs-1"></a>

 R: Después del 26 de abril de 2024, todas las referencias a trabajos de empaquetado periférico, dispositivos y flotas de dispositivos se eliminarán del servicio Edge Manager. Ya no puede descubrir el servicio Edge Manager ni acceder a él desde su AWS consola, y las aplicaciones que utilizan el servicio Edge Manager ya APIs no funcionan. 

### P: ¿Se me facturarán los recursos de Edge Manager que queden en mi cuenta después de la fecha de final de vida útil?
<a name="edge-eol-faqs-2"></a>

 R: Los recursos creados por Edge Manager, como los paquetes perimetrales dentro de los buckets de Amazon S3, las cosas de AWS IoT y las funciones de AWS IAM, seguirán existiendo en sus servicios respectivos después del 26 de abril de 2024. Para evitar que se le facture una vez que Edge Manager deje de ser compatible, elimine sus recursos. Para obtener más información sobre eliminación de recursos, consulte [Eliminar recursos de Edge Manager](#edge-eol-delete-resources). 

### P: ¿Cómo elimino mis recursos de Amazon SageMaker Edge Manager?
<a name="edge-eol-faqs-3"></a>

 R: Los recursos creados por Edge Manager, como los paquetes perimetrales dentro de los buckets de Amazon S3, las cosas de AWS IoT y las funciones de AWS IAM, seguirán existiendo en sus servicios respectivos después del 26 de abril de 2024. Para evitar que se le facture una vez que Edge Manager deje de ser compatible, elimine sus recursos. Para obtener más información sobre eliminación de recursos, consulte [Eliminar recursos de Edge Manager](#edge-eol-delete-resources). 

### P: ¿Cómo puedo seguir implementando modelos en la periferia?
<a name="edge-eol-faqs-4"></a>

 R: Le sugerimos que pruebe una de las siguientes herramientas de machine learning. Para un tiempo de ejecución periférica multiplataforma, utilice [ONNX](https://onnxruntime.ai/). ONNX es una solución de código abierto popular y bien mantenida que traduce sus modelos en instrucciones que pueden ejecutar muchos tipos de hardware y es compatible con los marcos de ML más recientes. ONNX se puede integrar en sus flujos de trabajo de SageMaker IA como un paso automatizado para sus implementaciones periféricas. 

 Para despliegues periféricos y uso de monitorización. AWS IoT Greengrass V2 AWS IoT Greengrass V2 tiene un mecanismo de empaquetado e implementación extensible que puede adaptarse a los modelos y aplicaciones periféricos. Puede utilizar los canales MQTT integrados para devolver la telemetría del modelo a Amazon SageMaker Model Monitor o utilizar el sistema de permisos integrado para enviar los datos capturados del modelo a Amazon Simple Storage Service (Amazon S3). Si no lo usa o no puede usarlo AWS IoT Greengrass V2, le sugerimos que utilice MQTT e IoT Jobs (biblioteca C/C\$1\$1) para crear un mecanismo OTA ligero para entregar modelos. 

 Hemos preparado un [código de muestra disponible en este GitHub repositorio](https://github.com/aws-samples/ml-edge-getting-started) para ayudarte a realizar la transición a estas herramientas sugeridas. 

## Eliminar recursos de Edge Manager
<a name="edge-eol-delete-resources"></a>

 Los recursos creados por Edge Manager seguirán existiendo después del 26 de abril de 2024. Para evitar su facturación, elimine estos recursos. 

 Para eliminar AWS IoT Greengrass recursos, haz lo siguiente: 

1.  **En la AWS IoT Core consola, selecciona **Dispositivos Greengrass** en Administrar.** 

1.  Elija **Componentes**. 

1.  En **Mis componentes, los componentes** creados por Edge Manager tienen el formato * SageMaker AIEdge (EdgePackagingJobName).* Seleccione el componente que desea eliminar. 

1.  Elija **Eliminar versión**. 

 Para eliminar un alias de AWS IoT rol, haga lo siguiente: 

1.  En la AWS IoT Core consola, selecciona **Seguridad** en **Administrar**. 

1.  Elija **Alias de roles**. 

1.  Los alias de los roles creados por Edge Manager tienen el formato *SageMaker AIEdge- \$1DeviceFleetName\$1*. Seleccione el rol que desea eliminar. 

1.  Elija **Eliminar**. 

 Para eliminar trabajos de empaquetado en los bucket de Amazon S3, haga lo siguiente: 

1.  En la consola de SageMaker IA, selecciona **Edge Inference**. 

1.  Elija **trabajos de empaquetado periférico**. 

1.  Seleccione uno de los trabajos de empaquetado periférico. Copie el URI de Amazon S3 en **Artefacto de modelo** en la sección **Configuración de salida**. 

1.  En la consola de Amazon S3, navegue hasta la ubicación correspondiente y compruebe si necesita eliminar el modelo de artefacto. Para eliminar el modelo de artefacto, seleccione el objeto Amazon S3 y seleccione **Eliminar**. 

# Optimización del rendimiento de los modelos con SageMaker Neo
<a name="neo"></a>

Neo es una capacidad de Amazon SageMaker AI que permite que los modelos de machine learning se entrenen una vez y se ejecuten en cualquier lugar, tanto en la nube como en la periferia. 

Si es la primera vez que utiliza SageMaker Neo, le recomendamos que consulte la sección [Introducción a dispositivos periféricos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html) para obtener instrucciones paso a paso sobre cómo compilar e implementar en un dispositivo periférico. 

## ¿Qué es SageMaker Neo?
<a name="neo-what-it-is"></a>

Normalmente, la optimización de modelos de machine learning para inferencias en varias plataformas resulta extremadamente difícil ya que se tienen que ajustar a mano los modelos para la configuración específica de hardware y software de cada plataforma. Si desea obtener un rendimiento de nivel óptimo para una carga de trabajo determinada, tiene que conocer el conjunto de instrucciones de la arquitectura de hardware, los patrones de acceso de memoria y las formas de datos de entrada entre otros factores. Para el desarrollo de software tradicional, las herramientas tales como compiladores y perfiladores simplifican el proceso. Para el machine learning, la mayoría de las herramientas pertenecen específicamente al marco o al hardware. Esto le obliga a realizar un proceso manual de prueba y error que es poco fiable y productivo.

Neo optimiza automáticamente los modelos Gluon, Keras, MXNet, PyTorch, TensorFlow, TensorFlow-Lite y ONNX para la inferencia en máquinas Android, Linux y Windows basadas en procesadores de Ambarella, ARM, Intel, Nvidia, NXP, Qualcomm, Texas Instruments y Xilinx. Neo se prueba con modelos de visión por ordenador disponibles en las colecciones de modelos a través de los marcos. Sagemaker Neo admite la compilación e implementación en dos plataformas principales: instancias en la nube (incluida Inferentia) y dispositivos periféricos.

Para obtener más información sobre los marcos compatibles y los tipos de instancias de nube en los que puede realizar la implementación, consulte [Tipos de instancias y marcos compatibles](neo-supported-cloud.md) para instancias en la nube.

Para obtener más información sobre marcos compatibles, dispositivos periféricos, sistemas operativos, arquitecturas de chips y modelos de machine learning habituales probados por SageMaker AI Neo para dispositivos periféricos, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge.md) para dispositivos periféricos.

## Funcionamiento
<a name="neo-how-it-works"></a>

Neo se compone de un compilador y un tiempo de ejecución. Primero, la API de compilación de Neo lee los modelos exportados desde distintos marcos de trabajo. A continuación, convierte las operaciones y funciones específicas del marco de trabajo en una representación intermedia con independencia de este. Después, realiza una serie de optimizaciones. A continuación, genera código binario para las operaciones optimizadas, las escribe en una biblioteca de objetos compartidos y guarda la definición del modelo y los parámetros en archivos independientes. Neo también proporciona un tiempo de ejecución para cada plataforma de destino que carga y ejecuta el modelo compilado.

![\[Cómo funciona Neo en SageMaker AI.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/neo_how_it_works.png)


Puede crear un trabajo de compilación de Neo desde la consola de SageMaker AI, el AWS Command Line Interface (AWS CLI), un cuaderno de Python o el SDK de SageMaker AI. Para obtener información sobre cómo compilar un modelo, consulte [Compilación de modelos con Neo](neo-job-compilation.md). Con unos cuantos comandos de CLI, una invocación de la API o unos pocos clics, puede convertir un modelo para plataforma que prefiera. Puede implementar el modelo en un punto de conexión de SageMaker AI o en un dispositivo AWS IoT Greengrass rápidamente.

Neo puede optimizar modelos con parámetros ya sea en FP32 o cuantificados con un ancho de bits de INT8 o de FP16.

**Topics**
+ [¿Qué es SageMaker Neo?](#neo-what-it-is)
+ [Funcionamiento](#neo-how-it-works)
+ [Compilación de modelos con Neo](neo-job-compilation.md)
+ [Instancias en la nube](neo-cloud-instances.md)
+ [Dispositivos periféricos](neo-edge-devices.md)
+ [Errores de solución de problemas](neo-troubleshooting.md)

# Compilación de modelos con Neo
<a name="neo-job-compilation"></a>

En esta sección se muestra cómo crear, describir, detener y generar una lista de trabajos de compilación. Las siguientes opciones están disponibles en Amazon SageMaker Neo para gestionar los trabajos de compilación de los modelos de aprendizaje automático: la AWS Command Line Interface consola Amazon SageMaker AI o el Amazon SageMaker SDK. 

**Topics**
+ [Preparación del modelo para compilación](neo-compilation-preparing-model.md)
+ [Compilación de un modelo (AWS Command Line Interface)](neo-job-compilation-cli.md)
+ [Compilar un modelo (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Compilar un modelo (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Preparación del modelo para compilación
<a name="neo-compilation-preparing-model"></a>

SageMaker Neo requiere que los modelos de aprendizaje automático se adapten a formas de datos de entrada específicas. La forma de entrada necesaria para la compilación depende del marco de aprendizaje profundo que utilice. Una vez que la forma de entrada del modelo tenga el formato correcto, guarde el modelo de acuerdo con los requisitos que se indican a continuación. Una vez que haya guardado el modelo, comprima los artefactos del modelo.

**Topics**
+ [¿Qué formas de datos de entrada espera SageMaker Neo?](#neo-job-compilation-expected-inputs)
+ [Guardar modelos para SageMaker Neo](#neo-job-compilation-how-to-save-model)

## ¿Qué formas de datos de entrada espera SageMaker Neo?
<a name="neo-job-compilation-expected-inputs"></a>

Antes de compilar el modelo, asegúrese de que tiene el formato correcto. Neo espera el nombre y la forma de las entradas de datos previstas para su modelo formado con formato de diccionario JSON o formato de lista. Las entradas de datos previstas son específicas del marco. 

A continuación se muestran las formas de entrada que SageMaker Neo espera:

### Keras
<a name="collapsible-section-1"></a>

Especifique el nombre y la forma (formato NCHW) de las entradas de datos previstas usando un formato de diccionario para su modelo entrenado. Tenga en cuenta que, si bien los artefactos del modelo Keras deben cargarse en formato NHWC (último canal), DataInputConfig deben especificarse en formato NCHW (canal primero). Los formatos de diccionario necesarios son los siguientes: 
+ Para una entrada: `{'input_1':[1,3,224,224]}`
+ Para dos entradas: `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

### MXNet/ONNX
<a name="collapsible-section-2"></a>

Especifique el nombre y la forma (formato NCHW) de las entradas de datos previstas usando un formato de diccionario para su modelo entrenado. Los formatos de diccionario necesarios son los siguientes:
+ Para una entrada: `{'data':[1,3,1024,1024]}`
+ Para dos entradas: `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

### PyTorch
<a name="collapsible-section-3"></a>

En el caso de un PyTorch modelo, no es necesario proporcionar el nombre y la forma de las entradas de datos esperadas si se cumplen las dos condiciones siguientes:
+ Creó el archivo de definición del modelo con la PyTorch versión 2.0 o una versión posterior. Para obtener más información sobre cómo crear el archivo de definición, consulte la [PyTorch](#how-to-save-pytorch) sección sobre cómo *guardar modelos para SageMaker Neo*.
+ Está compilando el modelo para una instancia en la nube. Para obtener más información sobre los tipos de instancias compatibles con SageMaker Neo, consulte[Tipos de instancias y marcos compatibles](neo-supported-cloud.md).

Si cumples estas condiciones, SageMaker Neo obtiene la configuración de entrada del archivo de definición del modelo (.pt o .pth) con el que hayas creado. PyTorch

De lo contrario, tendrá que hacer lo siguiente:

Especifique el nombre y la forma (formato NCHW) de las entradas de datos previstas usando un formato de diccionario para su modelo entrenado. Como alternativa, puede especificar la forma únicamente mediante un formato de lista. Los formatos de diccionario necesarios son los siguientes:
+ Para una entrada en formato de diccionario: `{'input0':[1,3,224,224]}`
+ Para una entrada en formato de lista: `[[1,3,224,224]]`
+ Para dos entradas en formato de diccionario: `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Para dos entradas en formato de lista: `[[1,3,224,224], [1,3,224,224]]`

### TensorFlow
<a name="collapsible-section-4"></a>

Especifique el nombre y la forma (formato NHWC) de las entradas de datos previstas usando un formato de diccionario para su modelo entrenado. Los formatos de diccionario necesarios son los siguientes:
+ Para una entrada: `{'input':[1,1024,1024,3]}`
+ Para dos entradas: `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

### TFLite
<a name="collapsible-section-5"></a>

Especifique el nombre y la forma (formato NHWC) de las entradas de datos previstas usando un formato de diccionario para su modelo entrenado. Los formatos de diccionario necesarios son los siguientes:
+ Para una entrada: `{'input':[1,224,224,3]}`

**nota**  
SageMaker Neo solo es compatible con TensorFlow Lite para dispositivos periféricos. Para obtener una lista de los dispositivos SageMaker Neo edge compatibles, consulta la [Dispositivos](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) página de SageMaker Neo. Para ver una lista de los destinos de instancias en la nube de SageMaker Neo compatibles, consulta la [Tipos de instancias y marcos compatibles](neo-supported-cloud.md) página de SageMaker Neo.

### XGBoost
<a name="collapsible-section-6"></a>

No son necesarios el nombre y la forma de los datos de entrada.

## Guardar modelos para SageMaker Neo
<a name="neo-job-compilation-how-to-save-model"></a>

En los siguientes ejemplos de código se muestra cómo guardar el modelo para que sea compatible con Neo. Los modelos deben empaquetarse como archivos tar comprimidos (`*.tar.gz`).

### Keras
<a name="how-to-save-tf-keras"></a>

Los modelos de Keras requieren un archivo de definición de modelo (`.h5`).

Hay dos opciones para guardar tu modelo Keras y hacerlo compatible con SageMaker Neo:

1. Exporte a formato `.h5` con `model.save("<model-name>", save_format="h5")`.

1. Congele el archivo `SavedModel` después de exportarlo.

A continuación se muestra un ejemplo de cómo exportar un modelo `tf.keras` como un gráfico congelado (segunda opción):

```
import os
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras import backend

tf.keras.backend.set_learning_phase(0)
model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3), pooling='avg')
model.summary()

# Save as a SavedModel
export_dir = 'saved_model/'
model.save(export_dir, save_format='tf')

# Freeze saved model
input_node_names = [inp.name.split(":")[0] for inp in model.inputs]
output_node_names = [output.name.split(":")[0] for output in model.outputs]
print("Input names: ", input_node_names)
with tf.Session() as sess:
    loaded = tf.saved_model.load(sess, export_dir=export_dir, tags=["serve"]) 
    frozen_graph = tf.graph_util.convert_variables_to_constants(sess,
                                                                sess.graph.as_graph_def(),
                                                                output_node_names)
    tf.io.write_graph(graph_or_graph_def=frozen_graph, logdir=".", name="frozen_graph.pb", as_text=False)

import tarfile
tar = tarfile.open("frozen_graph.tar.gz", "w:gz")
tar.add("frozen_graph.pb")
tar.close()
```

**aviso**  
No exporte su modelo con clase `SavedModel` utilizando `model.save(<path>, save_format='tf')`. Este formato es adecuado para el entrenamiento, pero no para la inferencia.

### MXNet
<a name="how-to-save-mxnet"></a>

MXNet los modelos se deben guardar como un único archivo de símbolos `*-symbol.json` y un único parámetro`*.params files`.

------
#### [ Gluon Models ]

Defina la red neuronal mediante la Clase `HybridSequential`. Esto ejecutará el código al estilo de programación simbólica (a diferencia de programación imperativa).

```
from mxnet import nd, sym
from mxnet.gluon import nn

def get_net():
    net = nn.HybridSequential()  # Here we use the class HybridSequential.
    net.add(nn.Dense(256, activation='relu'),
            nn.Dense(128, activation='relu'),
            nn.Dense(2))
    net.initialize()
    return net

# Define an input to compute a forward calculation. 
x = nd.random.normal(shape=(1, 512))
net = get_net()

# During the forward calculation, the neural network will automatically infer
# the shape of the weight parameters of all the layers based on the shape of
# the input.
net(x)
                        
# hybridize model
net.hybridize()
net(x)

# export model
net.export('<model_name>') # this will create model-symbol.json and model-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")
for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

Para obtener más información sobre la hibridación de modelos, consulte la documentación sobre la [MXNet hibridación](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

------
#### [ Gluon Model Zoo (GluonCV) ]

Los modelos de zoológico modelo GluonCV vienen prehibridados. Así que puede simplemente exportarlos.

```
import numpy as np
import mxnet as mx
import gluoncv as gcv
from gluoncv.utils import export_block
import tarfile

net = gcv.model_zoo.get_model('<model_name>', pretrained=True) # For example, choose <model_name> as resnet18_v1
export_block('<model_name>', net, preprocess=True, layout='HWC')

tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------
#### [ Non Gluon Models ]

Todos los modelos que no son Gluon cuando se guardan en disco utilizan archivos `*-symbol` y `*.params`. Por lo tanto, ya están en el formato correcto para Neo.

```
# Pass the following 3 parameters: sym, args, aux
mx.model.save_checkpoint('<model_name>',0,sym,args,aux) # this will create <model_name>-symbol.json and <model_name>-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------

### PyTorch
<a name="how-to-save-pytorch"></a>

PyTorch los modelos deben guardarse como un archivo de definición (`.pt`o`.pth`) con un tipo de datos de entrada de. `float32`

Para guardar el modelo, utilice el método `torch.jit.trace` seguido del método `torch.save`. Este proceso guarda un objeto en un archivo de disco y, de forma predeterminada, usa python pickle (`pickle_module=pickle`) para guardar los objetos y algunos metadatos. A continuación, convierte el modelo guardado en un archivo tar comprimido.

```
import torchvision
import torch

model = torchvision.models.resnet18(pretrained=True)
model.eval()
inp = torch.rand(1, 3, 224, 224)
model_trace = torch.jit.trace(model, inp)

# Save your model. The following code saves it with the .pth file extension
model_trace.save('model.pth')

# Save as a compressed tar file
import tarfile
with tarfile.open('model.tar.gz', 'w:gz') as f:
    f.add('model.pth')
f.close()
```

Si guarda el modelo con la PyTorch versión 2.0 o posterior, SageMaker Neo obtiene la configuración de entrada del modelo (el nombre y la forma de su entrada) del archivo de definición. En ese caso, no es necesario especificar la configuración de entrada de datos para SageMaker AI al compilar el modelo.

Si quieres evitar que SageMaker Neo obtenga la configuración de entrada, puedes establecer el `_store_inputs` parámetro en. `torch.jit.trace` `False` Si lo hace, debe especificar la configuración de entrada de datos para SageMaker AI al compilar el modelo.

Para obtener más información sobre el `torch.jit.trace` método, consulte [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) en la documentación. PyTorch 

### TensorFlow
<a name="how-to-save-tf"></a>

TensorFlow requiere uno `.pb` o un `.pbtxt` archivo y un directorio de variables que contenga variables. Para modelos congelados, solo se necesita un archivo `.pb` o `.pbtxt`.

En el siguiente ejemplo de código se muestra cómo utilizar el comando tar de Linux para comprimir el modelo. Ejecute lo siguiente en su terminal o en un cuaderno de Jupyter (si utiliza un cuaderno de Jupyter, inserte el comando mágico `!` al principio de la instrucción):

```
# Download SSD_Mobilenet trained model
!wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# unzip the compressed tar file
!tar xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# Compress the tar file and save it in a directory called 'model.tar.gz'
!tar czvf model.tar.gz ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb
```

Los indicadores de comando utilizados en este ejemplo permiten lo siguiente:
+ `c`: crear un archivo
+ `z`: comprimir el archivo con gzip
+ `v`: mostrar el avance del archivo
+ `f`: especificar el nombre del archivo

### Estimadores integrados
<a name="how-to-save-built-in"></a>

Los estimadores integrados se crean mediante contenedores específicos del marco o contenedores específicos de un algoritmo. Los objetos del estimador, tanto para el algoritmo integrado como para el estimador específico del marco, guardan el modelo en el formato correcto cuando se entrena el modelo con el método integrado `.fit`.

Por ejemplo, puede usar `sagemaker.TensorFlow` a para definir un TensorFlow estimador:

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(entry_point='mnist.py',
                        role=role,  #param role can be arn of a sagemaker execution role
                        framework_version='1.15.3',
                        py_version='py3',
                        training_steps=1000, 
                        evaluation_steps=100,
                        instance_count=2,
                        instance_type='ml.c4.xlarge')
```

Luego forme al modelo con el método incorporado `.fit`:

```
estimator.fit(inputs)
```

Antes de compilar por último el modelo con el método incorporado `compile_model`:

```
# Specify output path of the compiled model
output_path = '/'.join(estimator.output_path.split('/')[:-1])

# Compile model
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5', 
                              input_shape={'data':[1, 784]},  # Batch size 1, 3 channels, 224x224 Images.
                              output_path=output_path,
                              framework='tensorflow', framework_version='1.15.3')
```

También puedes usar la `sagemaker.estimator.Estimator` clase para inicializar un objeto estimador para entrenar y compilar un algoritmo integrado con el método del SDK `compile_model` de Python: SageMaker 

```
import sagemaker
from sagemaker.image_uris import retrieve
sagemaker_session = sagemaker.Session()
aws_region = sagemaker_session.boto_region_name

# Specify built-in algorithm training image
training_image = retrieve(framework='image-classification', 
                          region=aws_region, image_scope='training')

training_image = retrieve(framework='image-classification', region=aws_region, image_scope='training')

# Create estimator object for training
estimator = sagemaker.estimator.Estimator(image_uri=training_image,
                                          role=role,  #param role can be arn of a sagemaker execution role
                                          instance_count=1,
                                          instance_type='ml.p3.8xlarge',
                                          volume_size = 50,
                                          max_run = 360000,
                                          input_mode= 'File',
                                          output_path=s3_training_output_location,
                                          base_job_name='image-classification-training'
                                          )
                                          
# Setup the input data_channels to be used later for training.                                          
train_data = sagemaker.inputs.TrainingInput(s3_training_data_location,
                                            content_type='application/x-recordio',
                                            s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3_validation_data_location,
                                                content_type='application/x-recordio',
                                                s3_data_type='S3Prefix')
data_channels = {'train': train_data, 'validation': validation_data}


# Train model
estimator.fit(inputs=data_channels, logs=True)

# Compile model with Neo                                                                                  
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5',
                                          input_shape={'data':[1, 3, 224, 224], 'softmax_label':[1]},
                                          output_path=s3_compilation_output_location,
                                          framework='mxnet',
                                          framework_version='1.7')
```

Para obtener más información sobre la compilación de modelos con el SDK de SageMaker Python, consulte[Compilar un modelo (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md).

# Compilación de un modelo (AWS Command Line Interface)
<a name="neo-job-compilation-cli"></a>

En esta sección se muestra cómo gestionar los trabajos de compilación de Amazon SageMaker Neo para modelos de aprendizaje automático mediante AWS Command Line Interface (CLI). Puede crear, describir, detener y generar una lista de los trabajos de compilación. 

1. Crear un trabajo de compilación

   Con la operación de la [CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API, puede especificar el formato de entrada de datos, el depósito de S3 en el que almacenar el modelo, el depósito de S3 en el que se escribirá el modelo compilado y el dispositivo o plataforma de hardware de destino.

   En la siguiente tabla se muestra cómo configurar la API `CreateCompilationJob` en función de si el objetivo es un dispositivo o una plataforma.

------
#### [ Device Example ]

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

   Si lo ha utilizado para entrenar su modelo y su dispositivo de destino es un `ml_* ` objetivo, también puede especificar la versión del PyTorch marco que utilizó con el [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion)campo.

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "PYTORCH",
           "FrameworkVersion": "1.6"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5",
           # When compiling for ml_* instances using PyTorch framework, use the "CompilerOptions" field in 
           # OutputConfig to provide the correct data type ("dtype") of the model’s input. Default assumed is "float32"
           "CompilerOptions": "{'dtype': 'long'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

**Notas:**  
Si guardó el modelo con la PyTorch versión 2.0 o posterior, el `DataInputConfig` campo es opcional. SageMaker AI Neo obtiene la configuración de entrada del archivo de definición del modelo con el que se crea PyTorch. Para obtener más información sobre cómo crear el archivo de definición, consulte la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) sección sobre cómo *guardar modelos para SageMaker AI Neo*.
Este campo de API solo es compatible con PyTorch.

------
#### [ Platform Example ]

   ```
   {
       "CompilationJobName": "neo-test-compilation-job",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target platform configuration example for a p3.2xlarge instance
           "TargetPlatform": {
               "Os": "LINUX",
               "Arch": "X86_64",
               "Accelerator": "NVIDIA"
           },
           "CompilerOptions": "{'cuda-ver': '10.0', 'trt-ver': '6.0.1', 'gpu-code': 'sm_70'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

------
**nota**  
Para el funcionamiento de la API `OutputConfig`, las operaciones de la API `TargetDevice` y `TargetPlatform` se excluyen mutuamente. Debe elegir una de las dos opciones.

   Para ver ejemplos de cadenas JSON de `DataInputConfig` que dependen de marcos, consulte [Qué formas de datos de entrada espera Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Para obtener más información sobre cómo configurar las configuraciones, consulta las operaciones de la [InputConfig[TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html)API y las operaciones de la API en la referencia de la SageMaker API. [OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)

1. Tras configurar el archivo JSON, ejecute el siguiente comando para crear el trabajo de compilación:

   ```
   aws sagemaker create-compilation-job \
   --cli-input-json file://job.json \
   --region us-west-2 
   
   # You should get CompilationJobArn
   ```

1. Describa el trabajo de compilación ejecutando el siguiente comando:

   ```
   aws sagemaker describe-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   ```

1. Detenga el trabajo de compilación ejecutando el siguiente comando:

   ```
   aws sagemaker stop-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   
   # There is no output for compilation-job operation
   ```

1. Enumere el trabajo de compilación ejecutando el siguiente comando:

   ```
   aws sagemaker list-compilation-jobs \
   --region us-west-2
   ```

# Compilar un modelo (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Puede crear un trabajo de compilación de Amazon SageMaker Neo en la consola Amazon SageMaker AI.

1. En la consola de **Amazon SageMaker AI**, selecciona **Trabajos de compilación** y, a continuación, selecciona **Crear trabajo de compilación**.  
![\[Crear un trabajo de compilación.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. En la página **Crear trabajo de compilación**, en **Nombre de trabajo**, escriba un nombre. Después seleccione un **rol de IAM**.  
![\[Página Crear trabajo de compilación\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Si no tiene un rol de IAM, elija **Crear nuevo rol**.  
![\[Ubicación de Crear rol de IAM\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. En la página **Crear un rol de IAM**, elija **Cualquier bucket de S3** y elija **Crear rol**.  
![\[Página Crear rol de IAM\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

------
#### [ Non PyTorch Frameworks ]

   En la sección de **Configuración de entrada**, escriba la ruta del URI del bucket de Amazon S3 que contiene los artefactos del modelo en el campo **Ubicación de artefactos del modelo**. Los artefactos del modelo deben estar en un formato de archivo tar comprimido (`.tar.gz`). 

   En el campo de **Configuración de entrada de datos**, introduzca la cadena JSON que especifica la forma de los datos de entrada.

   Para **Marco de machine learning**, elija el marco que prefiera.

![\[Página Configuración de entrada\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Para ver ejemplos de cadenas JSON de datos de entrada que dependen de marcos, consulte [Qué formas de datos de entrada espera Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

------
#### [ PyTorch Framework ]

   Se aplican instrucciones similares a la compilación de PyTorch modelos. Sin embargo, si ha entrenado con el modelo PyTorch y está intentando compilarlo para `ml_*` (excepto`ml_inf`) el objetivo, puede especificar, si lo desea, la versión PyTorch que ha utilizado.

![\[Ejemplo de la sección Configuración de entrada que muestra dónde elegir la opción Versión del marco\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Para ver ejemplos de cadenas JSON de datos de entrada que dependen de marcos, consulte [Qué formas de datos de entrada espera Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Notas**  
Si guardó el modelo con la PyTorch versión 2.0 o posterior, el **campo de configuración de entrada de datos** es opcional. SageMaker Neo obtiene la configuración de entrada del archivo de definición del modelo con el que se crea PyTorch. Para obtener más información sobre cómo crear el archivo de definición, consulte la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) sección sobre cómo *guardar modelos para SageMaker AI Neo*.
Al compilar `ml_*` instancias mediante un PyTorch framework, utilice el campo de **opciones del compilador** en la **configuración de salida** para proporcionar el tipo de datos correcto (`dtype`) de la entrada del modelo. El valor predeterminado se establece en `"float32"`. 

![\[Ejemplo de la sección Configuración de salida\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**aviso**  
 Si especifica una ruta del URI del bucket de Amazon S3 que lleva al archivo `.pth`, aparecerá el siguiente error después de iniciar la compilación: `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Vaya a la sección de **Configuración de salida**. Elija dónde desea implementar su modelo. Puede implementar su modelo en un **Dispositivo de destino** o en una **Plataforma de destino**. Los dispositivos de destino incluyen dispositivos periféricos y en la nube. Las plataformas de destino hacen referencia a sistemas operativos, arquitectura y aceleradores específicos en los que desea que se ejecute su modelo. 

    En **Ubicación de salida de S3**, escriba la ruta o al bucket de S3 o donde desee almacenar el modelo. Si lo desea, puede añadir opciones del compilador en formato JSON en la sección **Opciones del compilador**.   
![\[Página Configuración de salida\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Compruebe el estado del trabajo de compilación cuando se inicie. Este estado del trabajo se encuentra en la parte superior de la página del **Trabajo de compilación**, como se muestra en la siguiente captura de pantalla. También puede comprobar su estado en la columna **Estado**.  
![\[Estado del trabajo de compilación.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Compruebe el estado del trabajo de compilación cuando se haya completado. Puede comprobar el estado en la columna **Estado**, como se muestra en la siguiente captura de pantalla.  
![\[Estado del trabajo de compilación.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

# Compilar un modelo (Amazon SageMaker AI SDK)
<a name="neo-job-compilation-sagemaker-sdk"></a>

 Puede usar la [https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model)API del [SDK de Amazon SageMaker AI para Python](https://sagemaker.readthedocs.io/en/stable/) a fin de compilar un modelo entrenado y optimizarlo para un hardware de destino específico. La API debe invocarse en el objeto estimador utilizado durante el entrenamiento del modelo. 

**nota**  
Debe establecer la variable de `MMS_DEFAULT_RESPONSE_TIMEOUT` entorno en `500` al compilar el modelo con MXNet o PyTorch. La variable de entorno no es necesaria para TensorFlow. 

 El siguiente es un ejemplo de cómo se puede compilar un modelo con el objeto `trained_model_estimator`: 

```
# Replace the value of expected_trained_model_input below and
# specify the name & shape of the expected inputs for your trained model
# in json dictionary form
expected_trained_model_input = {'data':[1, 784]}

# Replace the example target_instance_family below to your preferred target_instance_family
compiled_model = trained_model_estimator.compile_model(target_instance_family='ml_c5',
        input_shape=expected_trained_model_input,
        output_path='insert s3 output path',
        env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'})
```

El código compila el modelo, guarda el modelo optimizado y crea un modelo de SageMaker IA que se puede implementar en un punto final. `output_path` 

# Instancias en la nube
<a name="neo-cloud-instances"></a>

Amazon SageMaker Neo admite marcos de machine learning de uso generalizado, como TensorFlow, PyTorchy MXNet, entre otros. Puede implementar su modelo compilado en instancias de nube e instancias de Inferentia AWS. Para obtener una lista completa de los marcos y tipos de instancias compatibles, consulte [Marcos y tipos de instancias compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html). 

Puede compilar el modelo de tres maneras: a través de AWS CLI, consola de SageMaker AI o el SDK de SageMaker AI para Python. Consulte [Uso de Neo para compilar un modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) para obtener más información. Una vez compilados, los artefactos del modelo se almacenan en el URI del bucket de Amazon S3 que haya especificado durante el trabajo de compilación. Puede implementar su modelo compilado en instancias de nube e instancias de Inferentia AWS mediante el SDK de SageMaker AI para Python, AWS SDK para Python (Boto3), AWS CLI o la consola AWS. 

Si implementa el modelo mediante AWS CLI, la consola o Boto3, debe seleccionar un URI de Amazon ECR de imagen de Docker para su contenedor principal. Consulte [Imágenes de contenedor de inferencias de Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) para obtener una lista de URI de Amazon ECR.

**Topics**
+ [Tipos de instancias y marcos compatibles](neo-supported-cloud.md)
+ [Implementación de un modelo](neo-deployment-hosting-services.md)
+ [Solicitudes de inferencia con un servicio implementado](neo-requests.md)
+ [Imágenes de contenedor de inferencias](neo-deployment-hosting-services-container-images.md)

# Tipos de instancias y marcos compatibles
<a name="neo-supported-cloud"></a>

Amazon SageMaker Neo es compatible con los marcos de aprendizaje profundo más populares tanto para la compilación como para la implementación. Puede implementar el modelo en las instancias de nubes o en los tipos de instancia de AWS Inferentia.

A continuación se describen los marcos compatibles con SageMaker Neo y las instancias de nube de destino en las que puede compilar e implementar. Para obtener información sobre cómo implementar su modelo compilado en una instancia de nube o de Inferentia, consulte [Implementación de un modelo con instancias de nube](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services.html).

## Instancias en la nube
<a name="neo-supported-cloud-instances"></a>

Sagemaker Neo es compatible con los siguientes marcos de aprendizaje profundo para las instancias de nube de CPU y GPU: 


| Marcos | Versión de marco | Versión del modelo | Modelos | Formatos de modelo (empaquetados en \$1.tar.gz) | Kits de herramientas | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8.0 | Compatible con 1.8.0 o versiones anteriores | Clasificación de imágenes, detección de objetos, segmentación semántica, estimación de poses, reconocimiento de actividades | Un archivo de símbolos (.json) y un archivo de parámetros (.params) | GluonCV v0.8.0 | 
| ONNX | 1.7.0 | Compatible con 1.7.0 o versiones anteriores | Clasificación de imágenes, SVM | Un archivo de modelos (.onnx) |  | 
| Keras | 2.2.4 | Compatible con 2.2.4 o versiones anteriores | Clasificación de imágenes | Un archivo de definición de modelo (.h5) |  | 
| PyTorch | 1.4, 1.5, 1.6, 1.7, 1.8, 1.12, 1.13 o 2.0 | Compatible con 1.4, 1.5, 1.6, 1.7, 1.8, 1.12, 1.13 y 2.0 |  Clasificación de imágenes Las versiones 1.13 y 2.0 son compatibles con detección de objetos, Vision Transformer y HuggingFace  | Un archivo de definición de modelo (.pt o.pth) con la entrada dtype de float32 |  | 
| TensorFlow | 1.15.3 o 2.9 | Compatible con 1.15.3 y 2.9 | Clasificación de imágenes | En el caso de los modelos guardados, un archivo .pb o .pbtxt y un directorio de variables que contiene variables En el caso de los modelos congelados, un solo archivo .pb o .pbtxt |  | 
| XGBoost | 1.3.3 | Compatible con 1.3.3 o versiones anteriores | Árboles de decisión | Un archivo de modelo de XGBoost (.model) en el que el número de nodos de un árbol es inferior a 2^31 |  | 

**nota**  
La “versión del modelo” es la versión del marco utilizada para formar y exportar el modelo. 

## Tipos de instancias
<a name="neo-supported-cloud-instances-types"></a>

 Puede implementar su modelo compilado de SageMaker AI en una de las instancias de nube que se indican a continuación: 


| instancia | Tipo de computación | 
| --- | --- | 
| `ml_c4` | Estándar | 
| `ml_c5` | Estándar | 
| `ml_m4` | Estándar | 
| `ml_m5` | Estándar | 
| `ml_p2` | Computación acelerada | 
| `ml_p3` | Computación acelerada | 
| `ml_g4dn` | Computación acelerada | 

 Para obtener información sobre vCPU, memoria y precio por hora disponibles para cada tipo de instancia, consulte los [precios de Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/). 

**nota**  
Al compilar instancias `ml_*` con el marco PyTorch, use el campo de **Opciones del compilador** en **Configuración de salida** para proporcionar el tipo de datos correcto (`dtype`) de la entrada del modelo.  
El valor predeterminado se establece en `"float32"`.

## Inferentia AWS
<a name="neo-supported-inferentia"></a>

 Sagemaker Neo es compatible con los siguientes marcos de aprendizaje profundo para Inf1: 


| Marcos | Versión de marco | Versión del modelo | Modelos | Formatos de modelo (empaquetados en \$1.tar.gz) | Kits de herramientas | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.5 o 1.8  | Compatible con 1.8, 1.5 y versiones anteriores | Clasificación de imágenes, detección de objetos, segmentación semántica, estimación de poses, reconocimiento de actividades | Un archivo de símbolos (.json) y un archivo de parámetros (.params) | GluonCV v0.8.0 | 
| PyTorch | 1.7, 1.8 o 1.9 | Compatible con 1.9 y versiones anteriores | Clasificación de imágenes | Un archivo de definición de modelo (.pt o.pth) con la entrada dtype de float32 |  | 
| TensorFlow | 1.15 o 2.5 | Compatible con 2.5, 1.15 y versiones anteriores | Clasificación de imágenes | En el caso de los modelos guardados, un archivo .pb o .pbtxt y un directorio de variables que contiene variables En el caso de los modelos congelados, un solo archivo .pb o .pbtxt |  | 

**nota**  
La “versión del modelo” es la versión del marco utilizada para formar y exportar el modelo.

Puede implementar su modelo compilado por Sagemaker NEO en instancias Inf1 de Amazon EC2 basadas en Inferencia AWS. AWS Inferentia es el primer chip de silicio personalizado de Amazon diseñado para acelerar el aprendizaje profundo. Actualmente, puede usar la instancia `ml_inf1` para implementar sus modelos compilados.

### Inferentia2 AWS y Trainium AWS
<a name="neo-supported-inferentia-trainium"></a>

Actualmente, puede implementar su modelo compilado por Sagemaker NEO en instancias Amazon EC2 Inf2 basadas en Inferentia2 AWS (en la región Este de EE. UU. (Ohio)) y en instancias Amazon EC2 Trn basadas en Trainium AWS (en la región Este de EE. UU. (Norte de Virginia)). Para obtener más información sobre los modelos compatibles con estas instancias, consulte las [ Pautas de ajuste de la arquitectura de modelos](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/model-architecture-fit.html) en la documentación de Neuron AWS y los ejemplos del [repositorio de Github de Neuron](https://github.com/aws-neuron/aws-neuron-sagemaker-samples).

# Implementación de un modelo
<a name="neo-deployment-hosting-services"></a>

Para implementar un modelo SageMaker compilado por Amazon NEO en un punto final HTTPS, debe configurar y crear el punto final para el modelo mediante los servicios de alojamiento de Amazon SageMaker AI. Actualmente, los desarrolladores pueden usar Amazon SageMaker APIs para implementar módulos en instancias ml.c5, ml.c4, ml.m5, ml.m4, ml.p3, ml.p2 y ml.inf1. 

Para las instancias [Inferentia](https://aws.amazon.com/machine-learning/inferentia/) y [Trainium](https://aws.amazon.com/machine-learning/trainium/), los modelos deben compilarse específicamente para dichas instancias. No se garantiza que los modelos compilados para otros tipos de instancia funcionen con instancias Inferentia o Trainium.

Cuando se implementa un modelo compilado, es preciso usar la misma instancia para el destino que utilizó para la compilación. Esto crea un punto final de IA que SageMaker puede usar para realizar inferencias. [Puede implementar un modelo compilado en NEO mediante cualquiera de las siguientes opciones: [Amazon SageMaker AI SDK for Python](https://sagemaker.readthedocs.io/en/stable/), [SDK for Python (Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)) y [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/)la consola AI. SageMaker ](https://console.aws.amazon.com/sagemaker)

**nota**  
Para implementar un modelo mediante AWS CLI la consola o Boto3, consulte [Neo Inference Container Images para seleccionar el URI de la imagen de inferencia para su contenedor](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) principal. 

**Topics**
+ [Requisitos previos](neo-deployment-hosting-services-prerequisites.md)
+ [Implemente un modelo compilado mediante el SDK SageMaker](neo-deployment-hosting-services-sdk.md)
+ [Implementa un modelo compilado con Boto3](neo-deployment-hosting-services-boto3.md)
+ [Implemente un modelo compilado mediante AWS CLI](neo-deployment-hosting-services-cli.md)
+ [Implementar un modelo compilado con la Consola](neo-deployment-hosting-services-console.md)

# Requisitos previos
<a name="neo-deployment-hosting-services-prerequisites"></a>

**nota**  
Siga las instrucciones de esta sección si compiló el modelo con AWS SDK para Python (Boto3) AWS CLI, o con la consola de IA. SageMaker 

Para crear un modelo SageMaker compilado en NEO, necesita lo siguiente:

1. Un URI de Amazon ECR de imagen de Docker. Puede seleccionar uno que se adapte a sus necesidades de [esta lista](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html). 

1. Un archivo de guión de punto de entrada:

   1. **Para PyTorch y MXNet modelos:**

      *Si entrenó su modelo con SageMaker IA*, el guion de entrenamiento debe implementar las funciones que se describen a continuación. El script de entrenamiento sirve como script de punto de entrada durante la inferencia. En el ejemplo detallado en [MNIST Training, Compilation and Deployment with MXNet Module y SageMaker Neo](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_neo_compilation_jobs/mxnet_mnist/mxnet_mnist_neo.html), el script de entrenamiento (`mnist.py`) implementa las funciones requeridas.

      *Si no entrenó su modelo con SageMaker IA*, debe proporcionar un archivo de script (`inference.py`) de punto de entrada que pueda usarse en el momento de la inferencia. Según el marco, MXNet o PyTorch la ubicación del script de inferencia debe ajustarse a la estructura de [directorios del modelo del SDK de SageMaker Python para MxNet o la estructura](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#model-directory-structure) de [directorios del modelo para PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#model-directory-structure). 

      Al utilizar imágenes de contenedor optimizadas para inferencias de Neo con **PyTorch**y **MXNet**sobre tipos de instancias de CPU y GPU, el script de inferencia debe implementar las siguientes funciones: 
      + `model_fn`: Carga el modelo. (Opcional)
      + `input_fn`: Convierte la carga útil de la solicitud entrante en una matriz numpy.
      + `predict_fn`: Realiza la predicción.
      + `output_fn`: Convierte el resultado de la predicción en la carga útil de respuesta.
      + Como alternativa, puede `transform_fn` definir la combinación `input_fn`, `predict_fn` y `output_fn`.

      A continuación, se muestran ejemplos de `inference.py` scripts dentro de un directorio denominado `code` (`code/inference.py`) for **PyTorch y MXNet (Gluon and Module**). Los ejemplos cargan primero el modelo y, a continuación, lo muestran en los datos de imagen de una GPU: 

------
#### [ MXNet Module ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      from collections import namedtuple
      
      Batch = namedtuple('Batch', ['data'])
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          sym, arg_params, aux_params = mx.model.load_checkpoint('compiled', 0)
          mod = mx.mod.Module(symbol=sym, context=ctx, label_names=None)
          exe = mod.bind(for_training=False,
                         data_shapes=[('data', (1,3,224,224))],
                         label_shapes=mod._label_shapes)
          mod.set_params(arg_params, aux_params, allow_missing=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          mod.forward(Batch([data]))
          return mod
      
      
      def transform_fn(mod, image, input_content_type, output_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
      
          # prediction/inference
          mod.forward(Batch([processed_input]))
      
          # post-processing
          prob = mod.get_outputs()[0].asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ MXNet Gluon ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          block = mx.gluon.nn.SymbolBlock.imports('compiled-symbol.json',['data'],'compiled-0000.params', ctx=ctx)
          
          # Hybridize the model & pass required options for Neo: static_alloc=True & static_shape=True
          block.hybridize(static_alloc=True, static_shape=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          warm_up = block(data)
          return block
      
      
      def input_fn(image, input_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
          return processed_input
      
      
      def predict_fn(processed_input_data, block):
          # prediction/inference
          prediction = block(processed_input_data)
          return prediction
      
      def output_fn(prediction, output_content_type):
          # post-processing
          prob = prediction.asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ PyTorch 1.4 and Older ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default model_fn available which will load the model
          compiled using SageMaker Neo. You can override it here.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "compiled.pt"
          model_path = os.path.join(model_dir, 'compiled.pt')
          with torch.neo.config(model_dir=model_dir, neo_runtime=True):
              model = torch.jit.load(model_path)
              device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
              model = model.to(device)
      
          # We recommend that you run warm-up inference during model load
          sample_input_path = os.path.join(model_dir, 'sample_input.pkl')
          with open(sample_input_path, 'rb') as input_file:
              model_input = pickle.load(input_file)
          if torch.is_tensor(model_input):
              model_input = model_input.to(device)
              model(model_input)
          elif isinstance(model_input, tuple):
              model_input = (inp.to(device) for inp in model_input if torch.is_tensor(inp))
              model(*model_input)
          else:
              print("Only supports a torch tensor or a tuple of torch tensors")
              return model
      
      
      def transform_fn(model, request_body, request_content_type,
                       response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
              transforms.Resize(256),
              transforms.CenterCrop(224),
              transforms.ToTensor(),
              transforms.Normalize(
                  mean=[
                      0.485, 0.456, 0.406], std=[
                      0.229, 0.224, 0.225]),
          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
      
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------
#### [ PyTorch 1.5 and Newer ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default_model_fn available, which will load the model
          compiled using SageMaker Neo. You can override the default here.
          The model_fn only needs to be defined if your model needs extra
          steps to load, and can otherwise be left undefined.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "model.pt"
          model_path = os.path.join(model_dir, 'model.pt')
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          model = torch.jit.load(model_path, map_location=device)
          model = model.to(device)
      
          return model
      
      
      def transform_fn(model, request_body, request_content_type,
                          response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
                                      transforms.Resize(256),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor(),
                                      transforms.Normalize(
                                          mean=[
                                              0.485, 0.456, 0.406], std=[
                                              0.229, 0.224, 0.225]),
                                          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------

   1.  **Para instancias inf1 o imágenes de contenedor onnx, xgboost o keras** 

      Para todos los demás tipos de instancias de inferencia o imágenes de contenedor optimizadas para inferencias de Neo, el guión de punto de entrada debe implementar las siguientes funciones para tiempo de ejecución de aprendizaje profundo de Neo: 
      + `neo_preprocess`: Convierte la carga útil de la solicitud entrante en una matriz numpy.
      + `neo_postprocess`: Convierte el resultado de la predicción de tiempo de ejecución de aprendizaje profundo de Neo en el cuerpo de la respuesta.
**nota**  
Las dos funciones anteriores no utilizan ninguna de las funcionalidades de MXNet, PyTorch, o TensorFlow.

      Para ver ejemplos de cómo utilizar estas funciones, consulte los [cuadernos de ejemplo de compilación de modelos de Neo](https://docs.aws.amazon.com//sagemaker/latest/dg/neo.html#neo-sample-notebooks). 

   1. **Para TensorFlow modelos**

      Si su modelo requiere una lógica personalizada de preprocesamiento y posprocesamiento antes de enviar los datos al modelo, debe especificar un archivo `inference.py` de guión de punto de entrada que pueda usarse en el momento de la inferencia. El script debe implementar un par de funciones `input_handler` y `output_handler` o una función de controlador único. 
**nota**  
Tenga en cuenta que si la función de controlador está implementada `input_handler` y `output_handler` se ignoran. 

      El siguiente es un ejemplo de código de un guión `inference.py` que se puede combinar con el modelo de compilación para realizar un procesamiento previo y posterior personalizado en un modelo de clasificación de imágenes. El cliente de SageMaker IA envía el archivo de imagen como un tipo de `application/x-image` contenido a la `input_handler` función, donde se convierte a JSON. A continuación, el archivo de imagen convertido se envía al [servidor de modelos de Tensorflow (TFX)](https://www.tensorflow.org/tfx/serving/api_rest) mediante la API de REST. 

      ```
      import json
      import numpy as np
      import json
      import io
      from PIL import Image
      
      def input_handler(data, context):
          """ Pre-process request input before it is sent to TensorFlow Serving REST API
          
          Args:
          data (obj): the request data, in format of dict or string
          context (Context): an object containing request and configuration details
          
          Returns:
          (dict): a JSON-serializable dict that contains request body and headers
          """
          f = data.read()
          f = io.BytesIO(f)
          image = Image.open(f).convert('RGB')
          batch_size = 1
          image = np.asarray(image.resize((512, 512)))
          image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
          body = json.dumps({"signature_name": "serving_default", "instances": image.tolist()})
          return body
      
      def output_handler(data, context):
          """Post-process TensorFlow Serving output before it is returned to the client.
          
          Args:
          data (obj): the TensorFlow serving response
          context (Context): an object containing request and configuration details
          
          Returns:
          (bytes, string): data to return to client, response content type
          """
          if data.status_code != 200:
              raise ValueError(data.content.decode('utf-8'))
      
          response_content_type = context.accept_header
          prediction = data.content
          return prediction, response_content_type
      ```

      Si no se realiza un procesamiento previo o posterior personalizado, el cliente de SageMaker IA convierte la imagen del archivo a JSON de forma similar antes de enviarla al punto final de la SageMaker IA. 

      Para obtener más información, consulte [Implementación en puntos finales de TensorFlow servicio en el SDK de SageMaker Python](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#providing-python-scripts-for-pre-pos-processing). 

1. El URI del bucket de Amazon S3 que contiene los artefactos del modelo compilado. 

# Implemente un modelo compilado mediante el SDK SageMaker
<a name="neo-deployment-hosting-services-sdk"></a>

Debe cumplir con la sección de [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si el modelo se compiló con AWS SDK para Python (Boto3) AWS CLI, o la consola Amazon SageMaker AI. Siga uno de los siguientes casos de uso para implementar un modelo compilado con SageMaker Neo en función de cómo compiló el modelo.

**Topics**
+ [Si compilaste tu modelo con el SageMaker SDK](#neo-deployment-hosting-services-sdk-deploy-sm-sdk)
+ [Si compiló el modelo utilizando MXNet o PyTorch](#neo-deployment-hosting-services-sdk-deploy-sm-boto3)
+ [Si compiló el modelo mediante Boto3, la SageMaker consola o la CLI para TensorFlow](#neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow)

## Si compilaste tu modelo con el SageMaker SDK
<a name="neo-deployment-hosting-services-sdk-deploy-sm-sdk"></a>

El identificador de objeto [sagemaker.Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model) del modelo compilado proporciona la función [deploy()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model#sagemaker.model.Model.deploy), que le permite crear un punto de conexión para atender solicitudes de inferencia. La función le permite establecer el número y el tipo de instancias que se utilizan para el punto de conexión. Tiene que elegir una instancia para la que haya compilado su modelo. Por ejemplo, en el trabajo compilado en la sección [Compilar un modelo (Amazon SageMaker SDK)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation-sagemaker-sdk.html), esto es`ml_c5`. 

```
predictor = compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.c5.4xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

## Si compiló el modelo utilizando MXNet o PyTorch
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3"></a>

Cree el modelo de SageMaker IA e impleméntelo mediante la API deploy () en el modelo específico del marco. APIs Para MXNet, es [MXNetModelo](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html?highlight=MXNetModel#mxnet-model) y para PyTorch, es. [ PyTorchModel](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html?highlight=PyTorchModel#sagemaker.pytorch.model.PyTorchModel) Al crear e implementar un modelo de SageMaker IA, debe establecer la variable de `MMS_DEFAULT_RESPONSE_TIMEOUT` entorno `500` y especificar el `entry_point` parámetro como el script de inferencia (`inference.py`) y el `source_dir` parámetro como la ubicación del directorio (`code`) del script de inferencia. Para preparar el script de inferencia (`inference.py`), siga el paso de Requisitos previos. 

El siguiente ejemplo muestra cómo utilizar estas funciones para implementar un modelo compilado mediante el SDK de SageMaker IA para Python: 

------
#### [ MXNet ]

```
from sagemaker.mxnet import MXNetModel

# Create SageMaker model and deploy an endpoint
sm_mxnet_compiled_model = MXNetModel(
    model_data='insert S3 path of compiled MXNet model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.8.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for MXNet',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_mxnet_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.4 and Older ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.4.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.5 and Newer ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.5',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------

**nota**  
Las políticas `AmazonSageMakerFullAccess` y `AmazonS3ReadOnlyAccess` deben asociarse al rol de IAM `AmazonSageMaker-ExecutionRole`. 

## Si compiló el modelo mediante Boto3, la SageMaker consola o la CLI para TensorFlow
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow"></a>

Construya un objeto `TensorFlowModel` y, a continuación, llame a deploy: 

```
role='AmazonSageMaker-ExecutionRole'
model_path='S3 path for model file'
framework_image='inference container arn'
tf_model = TensorFlowModel(model_data=model_path,
                framework_version='1.15.3',
                role=role, 
                image_uri=framework_image)
instance_type='ml.c5.xlarge'
predictor = tf_model.deploy(instance_type=instance_type,
                    initial_instance_count=1)
```

Consulte [Implementación directa a partir de artefactos del modelo](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts) para obtener más información. 

De [esta lista](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), puede seleccionar un URI de Amazon ECR de imagen de Docker que se adapte a sus necesidades. 

[Para obtener más información sobre cómo construir un `TensorFlowModel` objeto, consulte el SageMaker SDK.](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-serving-model) 

**nota**  
Su primera solicitud de inferencia puede tener una latencia alta si implementa el modelo en una GPU. Esto se debe a que en la primera solicitud de inferencia se crea un kernel de procesamiento optimizado. Le recomendamos que cree un archivo de calentamiento de las solicitudes de inferencia y lo almacene junto con el archivo de modelo antes de enviarlo a un TFX. Esto se conoce como “calentar” el modelo. 

El siguiente fragmento de código muestra cómo producir el archivo de calentamiento para el ejemplo de clasificación de imágenes de la sección de [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites): 

```
import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2
import numpy as np

with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer:       
    img = np.random.uniform(0, 1, size=[224, 224, 3]).astype(np.float32)
    img = np.expand_dims(img, axis=0)
    test_data = np.repeat(img, 1, axis=0)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'compiled_models'
    request.model_spec.signature_name = 'serving_default'
    request.inputs['Placeholder:0'].CopyFrom(tf.compat.v1.make_tensor_proto(test_data, shape=test_data.shape, dtype=tf.float32))
    log = prediction_log_pb2.PredictionLog(
    predict_log=prediction_log_pb2.PredictLog(request=request))
    writer.write(log.SerializeToString())
```

Para obtener más información sobre cómo «calentar» su modelo, consulte la [página TensorFlow TFX](https://www.tensorflow.org/tfx/serving/saved_model_warmup).

# Implementa un modelo compilado con Boto3
<a name="neo-deployment-hosting-services-boto3"></a>

Debe cumplir con la sección de [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si el modelo se compiló con AWS SDK para Python (Boto3) AWS CLI, o la consola Amazon SageMaker AI. Siga los pasos que se indican a continuación para crear e implementar un modelo SageMaker compilado en NEO mediante el [SDK de Amazon Web Services para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html). 

**Topics**
+ [Implementar el modelo](#neo-deployment-hosting-services-boto3-steps)

## Implementar el modelo
<a name="neo-deployment-hosting-services-boto3-steps"></a>

Una vez que haya cumplido con los [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilice las `create_model` teclas, y. `create_enpoint_config` `create_endpoint` APIs 

El siguiente ejemplo muestra cómo utilizarlos APIs para implementar un modelo compilado con Neo: 

```
import boto3
client = boto3.client('sagemaker')

# create sagemaker model
create_model_api_response = client.create_model(
                                    ModelName='my-sagemaker-model',
                                    PrimaryContainer={
                                        'Image': <insert the ECR Image URI>,
                                        'ModelDataUrl': 's3://path/to/model/artifact/model.tar.gz',
                                        'Environment': {}
                                    },
                                    ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
                            )

print ("create_model API response", create_model_api_response)

# create sagemaker endpoint config
create_endpoint_config_api_response = client.create_endpoint_config(
                                            EndpointConfigName='sagemaker-neomxnet-endpoint-configuration',
                                            ProductionVariants=[
                                                {
                                                    'VariantName': <provide your variant name>,
                                                    'ModelName': 'my-sagemaker-model',
                                                    'InitialInstanceCount': 1,
                                                    'InstanceType': <provide your instance type here>
                                                },
                                            ]
                                       )

print ("create_endpoint_config API response", create_endpoint_config_api_response)

# create sagemaker endpoint
create_endpoint_api_response = client.create_endpoint(
                                    EndpointName='provide your endpoint name',
                                    EndpointConfigName=<insert your endpoint config name>,
                                )

print ("create_endpoint API response", create_endpoint_api_response)
```

**nota**  
Las políticas `AmazonSageMakerFullAccess` y `AmazonS3ReadOnlyAccess` deben asociarse al rol de IAM `AmazonSageMaker-ExecutionRole`. 

Para ver la sintaxis completa de `create_model` `create_endpoint_config` `create_endpoint` APIs, y [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model), consulte [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config), y [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint), respectivamente. 

Si no entrenó el modelo con SageMaker IA, especifique las siguientes variables de entorno: 

------
#### [ MXNet and PyTorch ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region",
    "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
}
```

------
#### [ TensorFlow ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region"
}
```

------

 Si entrenó su modelo mediante SageMaker IA, especifique la variable de entorno `SAGEMAKER_SUBMIT_DIRECTORY` como el URI completo del bucket de Amazon S3 que contiene el script de entrenamiento. 

# Implemente un modelo compilado mediante AWS CLI
<a name="neo-deployment-hosting-services-cli"></a>

Debe cumplir con la sección de [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si el modelo se compiló con AWS SDK para Python (Boto3) AWS CLI, o la consola Amazon SageMaker AI. Siga los pasos que se indican a continuación para crear e implementar un modelo SageMaker compilado en NEO mediante. [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/) 

**Topics**
+ [Implementar el modelo](#neo-deploy-cli)

## Implementar el modelo
<a name="neo-deploy-cli"></a>

Una vez que haya cumplido los [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilice los comandos `create-model``create-enpoint-config`, y `create-endpoint` AWS CLI . Los siguientes pasos muestran cómo usar estos comandos para implementar un modelo compilado con Neo: 



### Creación de un modelo
<a name="neo-deployment-hosting-services-cli-create-model"></a>

En [Neo Inference Container Images](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), seleccione el URI de la imagen de inferencia y, a continuación, utilice la `create-model` API para crear un SageMaker modelo de IA. Para hacerlo, siga estos pasos: 

1. Cree un archivo `create_model.json`. En el archivo, especifique el nombre del modelo, el URI de la imagen, la ruta al `model.tar.gz` archivo en su bucket de Amazon S3 y su función de ejecución de SageMaker IA: 

   ```
   {
       "ModelName": "insert model name",
       "PrimaryContainer": {
           "Image": "insert the ECR Image URI",
           "ModelDataUrl": "insert S3 archive URL",
           "Environment": {"See details below"}
       },
       "ExecutionRoleArn": "ARN for AmazonSageMaker-ExecutionRole"
   }
   ```

   Si entrenó su modelo con SageMaker IA, especifique la siguiente variable de entorno: 

   ```
   "Environment": {
       "SAGEMAKER_SUBMIT_DIRECTORY" : "[Full S3 path for *.tar.gz file containing the training script]"
   }
   ```

   Si no entrenó el modelo con SageMaker IA, especifique las siguientes variables de entorno: 

------
#### [ MXNet and PyTorch ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region",
       "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
   }
   ```

------
#### [ TensorFlow ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region"
   }
   ```

------
**nota**  
Las políticas `AmazonSageMakerFullAccess` y `AmazonS3ReadOnlyAccess` deben asociarse al rol de IAM `AmazonSageMaker-ExecutionRole`. 

1. Use el siguiente comando:

   ```
   aws sagemaker create-model --cli-input-json file://create_model.json
   ```

   Para informarse de la sintaxis completa de la API de `create-model`, consulte [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html). 

### Crear una configuración de punto de conexión
<a name="neo-deployment-hosting-services-cli-create-endpoint-config"></a>

Tras crear un modelo de SageMaker IA, cree la configuración del punto final mediante la `create-endpoint-config` API. Para ello, cree un archivo JSON con las especificaciones de configuración de su punto de conexión. Por ejemplo, puede usar la siguiente plantilla de código y guardarla como `create_config.json`: 

```
{
    "EndpointConfigName": "<provide your endpoint config name>",
    "ProductionVariants": [
        {
            "VariantName": "<provide your variant name>",
            "ModelName": "my-sagemaker-model",
            "InitialInstanceCount": 1,
            "InstanceType": "<provide your instance type here>",
            "InitialVariantWeight": 1.0
        }
    ]
}
```

Ahora ejecute el siguiente AWS CLI comando para crear la configuración de su punto final: 

```
aws sagemaker create-endpoint-config --cli-input-json file://create_config.json
```

Para informarse de la sintaxis completa de la API de `create-endpoint-config`, consulte [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html). 

### Creación de un punto de conexión
<a name="neo-deployment-hosting-services-cli-create-endpoint"></a>

Una vez que haya creado la configuración de su punto de conexión, cree un punto de conexión mediante la API `create-endpoint`: 

```
aws sagemaker create-endpoint --endpoint-name '<provide your endpoint name>' --endpoint-config-name '<insert your endpoint config name>'
```

Para informarse de la sintaxis completa de la API de `create-endpoint`, consulte [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). 

# Implementar un modelo compilado con la Consola
<a name="neo-deployment-hosting-services-console"></a>

Debe cumplir con la sección de [requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si el modelo se compiló utilizando AWS SDK para Python (Boto3) la AWS CLI consola Amazon AI o la consola Amazon SageMaker AI. Siga los pasos que se indican a continuación para crear e implementar un modelo compilado con SageMaker IA NEO utilizando la consola de SageMaker IA o la IA [https://console.aws.amazon.com. SageMaker ](https://console.aws.amazon.com/sagemaker/)

**Topics**
+ [Implementar el modelo](#deploy-the-model-console-steps)

## Implementar el modelo
<a name="deploy-the-model-console-steps"></a>

 Una vez que haya cumplido los [ requisitos previos](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), siga los siguientes pasos para implementar un modelo compilado con Neo: 

1. Elija **Modelos** y, a continuación, seleccione **Crear modelos** en el grupo **Inferencia**. En la página **Crear modelo**, cumplimente los campos **Nombre del modelo**,** Rol de IAM** y, si es preciso, **VPC** (opcional).  
![\[Creación de un modelo de Neo para inferencia\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/create-pipeline-model.png)

1. Para agregar información sobre el contenedor utilizado para implementar el modelo, seleccione **Agregar contenedor** y haga clic en **Siguiente**. Complete los campos **Opciones de entrada del contenedor**, **Ubicación de la imagen del código de inferencia** y **Ubicación de los artefactos del modelo**; opcionalmente, también puede completar los campos **Nombre del host contenedor** y **Variables de entorno**.  
![\[Creación de un modelo de Neo para inferencia\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo-deploy-console-container-definition.png)

1. Para implementar modelos compilados por Neo, elija las opciones siguientes:
   + **Opciones de entrada del contenedor**: seleccione **Proporcionar artefactos de modelo e imágenes de inferencia**.
   + **Ubicación de la imagen del código de inferencia**: elija el URI de la imagen de inferencia de [Imágenes de contenedor de inferencias de Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), según la AWS región y el tipo de aplicación. 
   + **Ubicación de los artefactos del modelo**: introduzca el URI del bucket de S3 del artefacto del modelo compilado generado por la API de compilación de Neo.
   + **Variables de entorno**:
     + Deje este campo en blanco durante **SageMaker XGBoost**.
     + Si entrenó su modelo mediante SageMaker IA, especifique la variable de entorno `SAGEMAKER_SUBMIT_DIRECTORY` como el URI del bucket de Amazon S3 que contiene el script de entrenamiento. 
     + Si no entrenó el modelo con SageMaker IA, especifique las siguientes variables de entorno:     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/neo-deployment-hosting-services-console.html)

1. Confirme que la información para los contenedores es precisa y, a continuación, seleccione **Crear modelo**. **En la página de inicio para crear un modelo**, elija **Crear punto de conexión**.   
![\[Página de inicio de creación de modelos\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo-deploy-console-create-model-land-page.png)

1. En el diagrama **Crear y configurar punto de enlace**, especifique el **Nombre del punto de enlace**. Para **Asociar configuración de punto de conexión**, seleccione **Crear una nueva configuración de punto de conexión**.  
![\[Interfaz de usuario Crear y configurar punto de conexión de la consola de Neo.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo-deploy-console-config-endpoint.png)

1. En la página **Nueva configuración del punto de conexión**, especifique el **Nombre de configuración de punto de conexión**.   
![\[Interfaz de usuario de Nueva configuración de punto de conexión de la consola de Neo.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo-deploy-console-new-endpoint-config.png)

1. Seleccione **Editar** junto al nombre del modelo y especifique el **Tipo de instancia** correcto en la página **Editar variante de producción**. Es imprescindible que el valor del **Tipo de instancia** coincida con el valor especificado en el trabajo de compilación.  
![\[Interfaz de usuario de Nueva configuración de punto de conexión de la consola de Neo.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/neo-deploy-console-edit-production-variant.png)

1. Seleccione **Save**.

1. En la página de **Configuración de nuevo punto de conexión**, elija **Crear configuración de punto de conexión** y, a continuación, elija **Crear punto de conexión**. 

# Solicitudes de inferencia con un servicio implementado
<a name="neo-requests"></a>

Si has seguido las instrucciones[Implementación de un modelo](neo-deployment-hosting-services.md), deberías tener un punto final de SageMaker IA configurado y en funcionamiento. Independientemente de cómo haya implementado su modelo compilado por Neo, hay tres formas de enviar solicitudes de inferencia: 

**Topics**
+ [Solicitar inferencias desde un servicio implementado (Amazon SageMaker SDK)](neo-requests-sdk.md)
+ [Solicitud de inferencias desde un servicio implementado (Boto3)](neo-requests-boto3.md)
+ [Solicitar inferencias desde un servicio implementado (AWS CLI)](neo-requests-cli.md)

# Solicitar inferencias desde un servicio implementado (Amazon SageMaker SDK)
<a name="neo-requests-sdk"></a>

Utilice los siguientes ejemplos de código para solicitar inferencias del servicio implementado en función del marco que haya utilizado para formar su modelo. Los ejemplos de código para los distintos marcos son similares. La principal diferencia es que TensorFlow el tipo `application/json` de contenido es obligatorio. 

 

## PyTorch y MXNet
<a name="neo-requests-sdk-py-mxnet"></a>

 Si utiliza la **PyTorch versión 1.4 o posterior o** la **MXNet 1.7.0 o posterior** y tiene un punto de conexión Amazon SageMaker AI`InService`, puede realizar solicitudes de inferencia mediante el `predictor` paquete del SDK de SageMaker IA para Python. 

**nota**  
La API varía según la versión de SageMaker AI SDK para Python:  
Para la versión 1.x, utilice la API [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor) y [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict).
Para la versión 2.x, utilice la API [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor) y [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict).

El siguiente ejemplo de código muestra cómo utilizarlos APIs para enviar una imagen con fines de inferencia: 

------
#### [ SageMaker Python SDK v1.x ]

```
from sagemaker.predictor import RealTimePredictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()

predictor = RealTimePredictor(endpoint=endpoint, content_type='application/x-image')
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------
#### [ SageMaker Python SDK v2.x ]

```
from sagemaker.predictor import Predictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------

## TensorFlow
<a name="neo-requests-sdk-py-tf"></a>

El siguiente ejemplo de código muestra cómo usar la API del SDK de SageMaker Python para enviar una imagen con fines de inferencia: 

```
from sagemaker.predictor import Predictor
from PIL import Image
import numpy as np
import json

endpoint = 'insert the name of your endpoint here'

# Read image into memory
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=body)
print(inference_response)
```

# Solicitud de inferencias desde un servicio implementado (Boto3)
<a name="neo-requests-boto3"></a>

 Puedes enviar solicitudes de inferencia mediante el cliente [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)y la API del SDK for Python (Boto3) de SageMaker AI una vez que tengas un punto final de IA. SageMaker `InService` En el siguiente ejemplo de código se muestra cómo enviar una imagen a modo de inferencia: 

------
#### [ PyTorch and MXNet ]

```
import boto3

import json
 
endpoint = 'insert name of your endpoint here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
# Read image into memory
with open(image, 'rb') as f:
    payload = f.read()
# Send image via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='application/x-image', Body=payload)

# Unpack response
result = json.loads(response['Body'].read().decode())
```

------
#### [ TensorFlow ]

Para TensorFlow enviar una entrada `application/json` para el tipo de contenido. 

```
from PIL import Image
import numpy as np
import json
import boto3

client = boto3.client('sagemaker-runtime') 
input_file = 'path/to/image'
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
ioc_predictor_endpoint_name = 'insert name of your endpoint here'
content_type = 'application/json'   
ioc_response = client.invoke_endpoint(
    EndpointName=ioc_predictor_endpoint_name,
    Body=body,
    ContentType=content_type
 )
```

------
#### [ XGBoost ]

 En el caso de una XGBoost solicitud, debes enviar un texto CSV en su lugar: 

```
import boto3
import json
 
endpoint = 'insert your endpoint name here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
csv_text = '1,-1.0,1.0,1.5,2.6'
# Send CSV text via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='text/csv', Body=csv_text)
# Unpack response
result = json.loads(response['Body'].read().decode())
```

------

 Tenga en cuenta que BYOM permite el uso de un tipo de contenido personalizado. Para obtener más información, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html). 

# Solicitar inferencias desde un servicio implementado (AWS CLI)
<a name="neo-requests-cli"></a>

Las solicitudes de inferencia se pueden realizar con el punto final de Amazon AI [https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html)una vez que tenga un punto final `InService` de Amazon SageMaker AI. Puede realizar solicitudes de inferencia con AWS Command Line Interface (AWS CLI). En el siguiente ejemplo se muestra cómo enviar una imagen a modo de inferencia: 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://image.jpg --content-type=application/x-image output_file.txt
```

Si la inferencia se realizó correctamente, se crea un `output_file.txt` con información sobre sus solicitudes de inferencia. 

 Para TensorFlow enviar una entrada con `application/json` el tipo de contenido. 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://input.json --content-type=application/json output_file.txt
```

# Imágenes de contenedor de inferencias
<a name="neo-deployment-hosting-services-container-images"></a>

SageMaker Neo ahora proporciona información de URI de imagen de inferencia para `ml_*` los objetivos. Para obtener más información, consulte [DescribeCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCompilationJob.html#sagemaker-DescribeCompilationJob-response-InferenceImage).

Según su caso de uso, sustituya la parte resaltada de la plantilla URI de la imagen de inferencia que se proporciona a continuación por los valores adecuados. 

## Amazon SageMaker AI XGBoost
<a name="inference-container-collapse-xgboost"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/xgboost-neo:latest
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado.

## Keras
<a name="inference-container-collapse-keras"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-keras:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado.

Sustituya *fx\$1version* por `2.2.4`.

Sustituya *instance\$1type* por `cpu` o `gpu`.

## MXNet
<a name="inference-container-collapse-mxnet"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-mxnet:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado. 

Sustituya *fx\$1version* por `1.8.0`. 

Sustituya *instance\$1type* por `cpu` o `gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-mxnet:fx_version-instance_type-py3
```

Sustituya *aws\$1region* por `us-east-1` o `us-west-2`. 

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado. 

Sustituya *fx\$1version* por `1.5.1`. 

Sustituya *`instance_type`* por `inf`.

------

## ONNX
<a name="inference-container-collapse-onnx"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-onnx:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado.

Sustituya *fx\$1version* por `1.5.0`.

Sustituya *instance\$1type* por `cpu` o `gpu`.

## PyTorch
<a name="inference-container-collapse-pytorch"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-pytorch:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado. 

*fx\$1version*`1.4``1.5`Sustitúyalo `1.6` por`1.7`,`1.8`,`1.12`,,`1.13`, o`2.0`.

Sustituya *instance\$1type* por `cpu` o `gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-pytorch:fx_version-instance_type-py3
```

Sustituya *aws\$1region* por `us-east-1` o `us-west-2`. 

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado. 

Sustituya *fx\$1version* por `1.5.1`. 

Sustituya *`instance_type`* por `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/pytorch-inference-neuronx:1.13.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

*aws\$1region*Sustitúyase `us-east-2` por para Inferentia2 y `us-east-1` para Trainium1.

------

## TensorFlow
<a name="inference-container-collapse-tf"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-tensorflow:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el que hayas utilizado. *aws\$1region* 

Reemplace *fx\$1version* por `1.15.3` o `2.9`. 

Sustituya *instance\$1type* por `cpu` o `gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-tensorflow:fx_version-instance_type-py3
```

Sustitúyalo *aws\$1account\$1id* de la tabla al final de esta página según el *aws\$1region* que hayas utilizado. Tenga en cuenta que para el tipo de instancia `inf` solo `us-east-1` y `us-west-2` son compatibles.

Reemplace *fx\$1version* por `1.15.0`

Sustituya *instance\$1type* por `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/tensorflow-inference-neuronx:2.10.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

*aws\$1region*Sustitúyase `us-east-2` por para Inferentia2 y `us-east-1` para Trainium1.

------

La siguiente tabla se mapea con. *aws\$1account\$1id* *aws\$1region* Utilice esta tabla para encontrar el URI de imagen de inferencia correcto que necesita para su aplicación. 


| aws\$1account\$1id | aws\$1region | 
| --- | --- | 
| 785573368785 | us-east-1 | 
| 007439368137 | us-east-2 | 
| 710691900526 | us-west-1 | 
| 301217895009 | us-west-2 | 
| 802834080501 | eu-west-1 | 
| 205493899709 | eu-west-2 | 
| 254080097072 | eu-west-3 | 
| 601324751636 | eu-north-1 | 
| 966458181534 | eu-south-1 | 
| 746233611703 | eu-central-1 | 
| 110948597952 | ap-east-1 | 
| 763008648453 | ap-south-1 | 
| 941853720454 | ap-northeast-1 | 
| 151534178276 | ap-northeast-2 | 
| 925152966179 | ap-northeast-3 | 
| 324986816169 | ap-southeast-1 | 
| 355873309152 | ap-southeast-2 | 
| 474822919863 | cn-northwest-1 | 
| 472730292857 | cn-north-1 | 
| 756306329178 | sa-east-1 | 
| 464438896020 | ca-central-1 | 
| 836785723513 | me-south-1 | 
| 774647643957 | af-south-1 | 
| 275950707576 | il-central-1 | 

# Dispositivos periféricos
<a name="neo-edge-devices"></a>

Amazon SageMaker Neo admite marcos de machine learning de uso generalizado. Puede implementar sus dispositivos periféricos compilados en NEO, como Raspberry Pi 3, Sitara de Texas Instruments o Jetson TX1, entre otros. Para obtener una lista completa de los marcos y dispositivos periféricos compatibles, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

Debe configurar el dispositivo periférico para que pueda utilizar servicios AWS. Una forma de hacerlo consiste en instalar DLR y Boto3 en su dispositivo. Para ello, debe configurar las credenciales de autenticación. Consulte [Configuración de Boto3 AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) para obtener más información. Una vez compilado el modelo y configurado el dispositivo periférico, puede descargar el modelo de Amazon S3 a su dispositivo periférico. Desde allí, puede usar [Tiempo de ejecución de aprendizaje profundo (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) para leer el modelo compilado y hacer inferencias. 

Para los usuarios primerizos, le recomendamos que consulte la guía de [Introducción](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html). Esta guía explica cómo configurar las credenciales, compilar un modelo, implementar el modelo en Raspberry Pi 3 y hacer inferencias en imágenes. 

**Topics**
+ [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge.md)
+ [Implementación de modelos](neo-deployment-edge.md)
+ [Configuración de Neo en dispositivos periféricos](neo-getting-started-edge.md)

# Marcos, dispositivos, sistemas y arquitecturas compatibles
<a name="neo-supported-devices-edge"></a>

Amazon SageMaker Neo es compatible con los marcos de machine learning, dispositivos periféricos, sistemas operativos y arquitecturas de chips más comunes. Descubra si Neo es compatible con su estructura, dispositivo periférico, sistema operativo y arquitectura de chip seleccionando uno de los temas siguientes.

Encontrará una lista de los modelos que el equipo de Amazon SageMaker Neo ha probado en la sección [Modelos probados](neo-supported-edge-tested-models.md).

**nota**  
Los dispositivos Ambarella requieren que se incluyan archivos adicionales en el archivo TAR comprimido antes de enviarlo para su compilación. Para obtener más información, consulte [Solución de errores de Ambarella](neo-troubleshooting-target-devices-ambarella.md).
Se requiere TIM-VX (libtim-vx.so) para i.MX 8M Plus. Para obtener información sobre cómo compilar TIM-VX, consulte el [repositorio de TIM-VX en GitHub](https://github.com/VeriSilicon/TIM-VX).

**Topics**
+ [Marcos admitidos](neo-supported-devices-edge-frameworks.md)
+ [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge-devices.md)
+ [Modelos probados](neo-supported-edge-tested-models.md)

# Marcos admitidos
<a name="neo-supported-devices-edge-frameworks"></a>

Amazon SageMaker Neo es compatible con los siguientes marcos. 


| Marcos | Versión de marco | Versión del modelo | Modelos | Formatos de modelo (empaquetados en \$1.tar.gz) | Kits de herramientas | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | Compatible con 1.8 o versiones anteriores | Clasificación de imágenes, detección de objetos, segmentación semántica, estimación de poses, reconocimiento de actividades | Un archivo de símbolos (.json) y un archivo de parámetros (.params) | GluonCV v0.8.0 | 
| ONNX | 1.7 | Compatible con 1.7 o versiones anteriores | Clasificación de imágenes, SVM | Un archivo de modelos (.onnx) |  | 
| Keras | 2.2 | Compatible con 2.2 o versiones anteriores | Clasificación de imágenes | Un archivo de definición de modelo (.h5) |  | 
| PyTorch | 1.7, 1.8 | Compatible con 1.7, 1.8 o versiones anteriores | Clasificación de imágenes, detección de objetos | Un archivo de definición de modelo (.pth) |  | 
| TensorFlow | 1.15, 2.4, 2.5 (solo para instancias ml.inf1.\$1) | Compatible con 1.15, 2.4, 2.5 (solo para instancias ml.inf1.\$1) o versiones anteriores | Clasificación de imágenes, detección de objetos | \$1En el caso de los modelos guardados, un archivo .pb o .pbtxt y un directorio de variables que contiene variables. \$1En el caso de modelos congelados, solo un archivo .pb o .pbtxt |  | 
| TensorFlow-LITE | 1.15 | Compatible con 1.15 o versiones anteriores | Clasificación de imágenes, detección de objetos | Un archivo de búfer plano de definición de modelo (.tflite) |  | 
| XGBoost | 1.3 | Compatible con 1.3 o versiones anteriores | Árboles de decisión | Un archivo de modelo de XGBoost (.model) en el que el número de nodos de un árbol es inferior a 2^31 |  | 
| DARKNET |  |  | Clasificación de imágenes, detección de objetos (el modelo Yolo no es compatible) | Un archivo de configuración (.cfg) y un archivo de pesos (.weights) |  | 

# Marcos, dispositivos, sistemas y arquitecturas compatibles
<a name="neo-supported-devices-edge-devices"></a>

Amazon SageMaker Neo es compatible con los siguientes dispositivos, arquitecturas de chips y sistemas operativos.

## Dispositivos
<a name="neo-supported-edge-devices"></a>

Puede seleccionar un dispositivo mediante la lista desplegable de la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker) o especificando el `TargetDevice` en la configuración de salida de la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html).

Puede elegir uno de los siguientes dispositivos periféricos: 


| Lista de dispositivos | Sistema en un chip (SoC) | Sistema operativo | Arquitectura | Acelerador | Opciones de compilación de ejemplo | 
| --- | --- | --- | --- | --- | --- | 
| aisage | Ninguna | Linux | ARM64 | Mali | Ninguna | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | Ninguna | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | Ninguna | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | Ninguna | 
| coreml | Ninguna | iOS, macOS | Ninguna | Ninguna | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | Mx8 de NXP | Linux | ARM64 | Ninguna | Ninguna | 
| imx8mplus | i.MX 8M Plus | Linux | ARM64 | NPU | Ninguna | 
| jacinto\$1tda4vm | TDA4VM | Linux | ARM | TDA4VM | Ninguna | 
| jetson\$1nano | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '5.0.6', 'cuda-ver': '10.0'\$1Para `TensorFlow2`, `{'JETPACK_VERSION': '4.6', 'gpu_code': 'sm_72'}` | 
| jetson\$1tx1 | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | Ninguna | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | Ninguna | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | Linux | ARM\$1EABIHF | Ninguna | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | Ninguna | Ninguna | Ninguna | Ninguna | 
| rk3288 | Ninguna | Linux | ARM\$1EABIHF | Mali | Ninguna | 
| rk3399 | Ninguna | Linux | ARM64 | Mali | Ninguna | 
| sbe\$1c | Ninguna | Linux | x86\$164 | Ninguna | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | Linux | ARM64 | EVE y/o C66x DSP | Ninguna | 
| x86\$1win32 | Ninguna | Windows 10 | X86\$132 | Ninguna | Ninguna | 
| x86\$1win64 | Ninguna | Windows 10 | X86\$132 | Ninguna | Ninguna | 

Para obtener más información sobre las opciones del compilador clave-valor JSON para cada dispositivo de destino, consulte el campo `CompilerOptions` del tipo de datos de la [ API `OutputConfig`](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html).

## Arquitecturas de sistemas y chips
<a name="neo-supported-edge-granular"></a>

Las siguientes tablas de consulta proporcionan información sobre los sistemas operativos y las arquitecturas disponibles para los trabajos de compilación de modelos Neo. 

------
#### [ Linux ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 

------
#### [ Android ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 

------
#### [ Windows ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 

------

# Modelos probados
<a name="neo-supported-edge-tested-models"></a>

Las siguientes secciones plegables proporcionan información sobre los modelos de machine learning que probó el equipo de Amazon SageMaker Neo. Amplíe la sección plegable en función de su estructura para comprobar si se ha probado un modelo.

**nota**  
Esta no es una lista exhaustiva de los modelos que se pueden compilar con Neo.

Consulte [Marcos admitidos](neo-supported-devices-edge-frameworks.md) y [Operadores compatibles con SageMaker AI Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) para averiguar si puede compilar el modelo con SageMaker Neo.

## DarkNet
<a name="collapsible-section-01"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  |  |  |  |  |  |  |  | 
| Resnet 50 | X | X |  | X | X | X |  | X | X | 
| YoLoV2 |  |  |  | X | X | X |  | X | X | 
| YoloV2\$1Tiny | X | X |  | X | X | X |  | X | X | 
| Yolov3\$1416 |  |  |  | X | X | X |  | X | X | 
| Yolov3\$1Tiny | X | X |  | X | X | X |  | X | X | 

## MXNet
<a name="collapsible-section-02"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| Densenet 121 |  |  | X |  |  |  |  |  |  | 
| Densenet 201 | X | X | X | X | X | X |  | X | X | 
| Google Net | X | X |  | X | X | X |  | X | X | 
| Inception v3 |  |  |  | X | X | X |  | X | X | 
| MobileNet 0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet 1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNet V2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNet V2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNet V3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| Resest 50 |  |  |  | X | X |  |  | X | X | 
| ResNet18\$1v1 | X | X | X | X | X | X |  |  | X | 
| ResNet18\$1v2 | X | X |  | X | X | X |  |  | X | 
| ResNet50\$1v1 | X | X | X | X | X | X |  | X | X | 
| ResNet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| Resnext 101\$132x4D |  |  |  |  |  |  |  |  |  | 
| Resnext50\$132x4D | X |  | X | X | X |  |  | X | X | 
| Senet\$1154 |  |  |  | X | X | X |  | X | X | 
| SE\$1Resnext50\$132x4D | X | X |  | X | X | X |  | X | X | 
| SqueezeNet 1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet 1.1 | X | X | X | X | X | X |  | X | X | 
| VGG11 | X | X | X | X | X |  |  | X | X | 
| Xception | X | X | X | X | X | X |  | X | X | 
| darknet53 | X | X |  | X | X | X |  | X | X | 
| resnet18\$1v1b\$10.89 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.11 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.86 | X | X | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1coco | X |  | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1voc | X |  | X | X | X | X |  | X | X | 
| ssd\$1resnet50\$1v1 | X |  | X | X | X |  |  | X | X | 
| yolo3\$1darknet53\$1coco | X |  |  | X | X |  |  | X | X | 
| yolo3\$1mobilenet1.0\$1coco | X | X |  | X | X | X |  | X | X | 
| deeplab\$1resnet50 |  |  | X |  |  |  |  |  |  | 

## Keras
<a name="collapsible-section-03"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 121 | X | X | X | X | X | X |  | X | X | 
| densenet 201 | X | X | X | X | X | X |  |  | X | 
| inception\$1v3 | X | X |  | X | X | X |  | X | X | 
| mobilenet\$1v1 | X | X | X | X | X | X |  | X | X | 
| mobilenet\$1v2 | X | X | X | X | X | X |  | X | X | 
| resnet152\$1v1 |  |  |  | X | X |  |  |  | X | 
| resnet152\$1v2 |  |  |  | X | X |  |  |  | X | 
| resnet50\$1v1 | X | X | X | X | X |  |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| vgg16 |  |  | X | X | X |  |  | X | X | 

## ONNX
<a name="collapsible-section-04"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet 18 contra 1 | X |  |  | X | X |  |  |  | X | 
| resnet18 v2 | X |  |  | X | X |  |  |  | X | 
| resnet50 v1 | X |  | X | X | X |  |  | X | X | 
| resnet50 v2 | X |  | X | X | X |  |  | X | X | 
| resnet 152 v1 |  |  |  | X | X | X |  |  | X | 
| resnet 152 v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet 1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

## PyTorch (FP32)
<a name="collapsible-section-05"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 121 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 |  | X |  |  | X | X | X |  | X | X | 
| resnet152 |  |  |  |  | X | X | X |  |  | X | 
| resnet18 | X | X |  |  | X | X | X |  |  | X | 
| resnet50 | X | X | X | X | X | X |  |  | X | X | 
| squeezenet 1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet 1.1 | X | X | X | X | X | X | X |  | X | X | 
| yolov4 |  |  |  |  | X | X |  |  |  |  | 
| yolov5 |  |  |  | X | X | X |  |  |  |  | 
| fasterrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 
| maskrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 

## TensorFlow
<a name="collapsible-section-06"></a>

------
#### [ TensorFlow ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 201 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet100\$1v1 | X | X | X |  | X | X | X |  |  | X | 
| mobilenet100\$1v2.0 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet 130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet 140\$1v2 | X | X | X |  | X | X | X |  | X | X | 
| resnet50\$1v1.5 | X | X |  |  | X | X | X |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X | X |  | X | X | 
| SqueezeNet | X | X | X | X | X | X | X |  | X | X | 
| mask\$1rcnn\$1inception\$1resnet\$1v2 |  |  |  |  | X |  |  |  |  |  | 
| ssd\$1mobilenet\$1v2 |  |  |  |  | X | X |  |  |  |  | 
| faster\$1rcnn\$1resnet50\$1lowproposals |  |  |  |  | X |  |  |  |  |  | 
| rfcn\$1resnet101 |  |  |  |  | X |  |  |  |  |  | 

------
#### [ TensorFlow.Keras ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet 121  | X | X |  | X | X | X |  | X | X | 
| Densenet 201 | X | X |  | X | X | X |  |  | X | 
| Inception v3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNet V2 | X | X |  | X | X | X |  | X | X | 
| NASNetLarge |  |  |  | X | X |  |  | X | X | 
| NASNetMobile | X | X |  | X | X | X |  | X | X | 
| ResNet101 |  |  |  | X | X | X |  |  | X | 
| ResNet 101 v2 |  |  |  | X | X | X |  |  | X | 
| ResNet 152 |  |  |  | X | X |  |  |  | X | 
| Resnet 152 v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet 50 v2 | X | X |  | X | X | X |  | X | X | 
| VGG16 |  |  |  | X | X |  |  | X | X | 
| Xception | X | X |  | X | X | X |  | X | X | 

------

## TensorFlow-LITE
<a name="collapsible-section-07"></a>

------
#### [ TensorFlow-Lite (FP32) ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 
| inception\$1resnet\$1v2\$12018\$104\$127 |  |  |  | X | X | X |  |  | X |  | 
| inception\$1v3\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| inception\$1v4\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| mnasnet\$10.5\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.0\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.3\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1192 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  | X | X | X |  |  | X | X | 
| resnet\$1v2\$1101 |  |  |  | X | X | X |  |  | X |  | 
| squeezenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 

------
#### [ TensorFlow-Lite (INT8) ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| inception\$1v1 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v2 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v3 | X |  |  |  |  | X | X |  | X | X | 
| inception\$1v4\$1299 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| deeplab-v3\$1513 |  |  |  |  |  |  | X |  |  |  | 

------

# Implementación de modelos
<a name="neo-deployment-edge"></a>

Puede implementar el módulo de cálculo en dispositivos periféricos con recursos limitados: descargando el modelo compilado de Amazon S3 a su dispositivo y utilizando [DLR](https://github.com/neo-ai/neo-ai-dlr), o puede usar [IoT Greengrass AWS](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html).

Antes de continuar, asegúrate de que tu dispositivo edge sea compatible con SageMaker Neo. Consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html) para averiguar qué dispositivos periféricos lo son. Asegúrese de haber especificado el dispositivo periférico de destino al enviar el trabajo de compilación, consulte [Uso de Neo para compilar un modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html).

## Implementación de un modelo compilado (DLR)
<a name="neo-deployment-dlr"></a>

[DLR](https://github.com/neo-ai/neo-ai-dlr) es un tiempo de ejecución compacto y común para modelos de aprendizaje profundo y modelos de árboles de decisiones. El DLR utiliza el tiempo de ejecución [TVM](https://github.com/neo-ai/tvm), el tiempo de ejecución [Treelite](https://treelite.readthedocs.io/en/latest/install.html) y NVIDIA TensorRT™ y puede incluir otros tiempos de ejecución específicos del hardware. DLR proporciona Python/C\$1\$1 unificado APIs para cargar y ejecutar modelos compilados en varios dispositivos.

Puede instalar la última versión del paquete DLR mediante el siguiente comando pip:

```
pip install dlr
```

Para instalar DLR en destinos de GPU o dispositivos periféricos que no sean x86, consulte [Versiones](https://github.com/neo-ai/neo-ai-dlr/releases) para ver los binarios prediseñados o [Instalación de DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para compilar DLR desde el origen. Por ejemplo, para instalar DLR para Raspberry Pi 3, puede usar: 

```
pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
```

## Implemente un modelo (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) extiende las capacidades de la nube a los dispositivos locales. Permite que los dispositivos recopilen y analicen datos más cerca del origen de la información, reaccionen de forma autónoma a eventos locales y se comuniquen de forma segura entre sí en las redes locales. Con AWS IoT Greengrass, puede realizar inferencias de aprendizaje automático en el borde de los datos generados localmente mediante modelos entrenados en la nube. Actualmente, puede implementar modelos en todos los dispositivos AWS IoT Greengrass basados en los procesadores de las series ARM Cortex-A, Intel Atom y Nvidia Jetson. Para obtener más información sobre la implementación de una aplicación de inferencia Lambda para realizar inferencias de aprendizaje automático con AWS IoT Greengrass, [consulte Cómo configurar la inferencia de aprendizaje automático optimizada](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html) mediante la consola de administración. AWS 

# Configuración de Neo en dispositivos periféricos
<a name="neo-getting-started-edge"></a>

En esta guía para empezar a utilizar Amazon SageMaker Neo, se muestra cómo compilar un modelo, configurar el dispositivo y hacer inferencias en el dispositivo. La mayoría de los ejemplos de código utilizan Boto3. Proporcionamos los comandos que AWS CLI se utilizan cuando corresponde, así como instrucciones sobre cómo cumplir los requisitos previos de Neo. 

**nota**  
Puede ejecutar los siguientes fragmentos de código en su máquina local, en un SageMaker bloc de notas, en Amazon SageMaker Studio o (según el dispositivo perimetral) en su dispositivo perimetral. La configuración es similar; sin embargo, hay dos excepciones principales si ejecutas esta guía en una instancia de SageMaker notebook o en una sesión de SageMaker Studio:   
No es necesario instalar Boto3.
No es necesario añadir la política de IAM `‘AmazonSageMakerFullAccess’`

 En esta guía se supone que está ejecutando las siguientes instrucciones en su dispositivo periférico. 

# Requisitos previos
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo es una función que te permite entrenar modelos de aprendizaje automático una vez y ejecutarlos en cualquier lugar de la nube y en la periferia. Antes de compilar y optimizar los modelos con Neo, debe configurar algunos requisitos previos. Debe instalar las bibliotecas de Python necesarias, configurar sus AWS credenciales, crear un rol de IAM con los permisos necesarios y configurar un bucket de S3 para almacenar los artefactos del modelo. También debe tener preparado un modelo de machine learning entrenado. Los pasos siguientes le guiarán a través de la configuración:

1. **Instalación de Boto3**

   Si ejecuta estos comandos en su dispositivo periférico, debe instalar AWS SDK para Python (Boto3). En un entorno Python (preferiblemente un entorno virtual), ejecute lo siguiente localmente en el terminal de su dispositivo periférico o en una instancia de cuaderno de Jupyter: 

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  **Configure las credenciales AWS ** 

   Debe configurar las credenciales de Amazon Web Services en su dispositivo para ejecutar SDK for Python (Boto3). De forma predeterminada, las AWS credenciales deben almacenarse en el archivo `~/.aws/credentials` del dispositivo perimetral. En el archivo de credenciales, debe ver dos variables de entorno: `aws_access_key_id` y `aws_secret_access_key`. 

   En su terminal, ejecute: 

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = YOUR_ACCESS_KEY
   aws_secret_access_key = YOUR_SECRET_KEY
   ```

   La [ Guía de referencia general AWS](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) contiene instrucciones sobre cómo obtener las `aws_access_key_id` y `aws_secret_access_key` necesarias. Para obtener más información sobre cómo configurar las credenciales en su dispositivo, consulte la documentación de [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). 

1.  **Configure un rol de IAM y asocie políticas.** 

   Neo necesita acceder al URI del bucket de S3. Cree un rol de IAM que pueda ejecutar SageMaker IA y que tenga permiso para acceder al URI de S3. Puede crear un rol de IAM mediante el SDK para Python (Boto3), la consola o AWS CLI. El siguiente ejemplo ilustra cómo crear un rol de IAM mediante SDK for Python (Boto3): 

   ```
   import boto3
   
   AWS_REGION = 'aws-region'
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = 'role-name'
   ```

   Para obtener más información sobre cómo crear un rol de IAM con la consola o mediante la AWS API AWS CLI, consulte [Crear un usuario de IAM en](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api) su cuenta. AWS 

    Cree un diccionario que describa la política de IAM que va a asociar. Esta política se utiliza para crear un nuevo rol de IAM. 

   ```
   policy = {
       'Statement': [
           {
               'Action': 'sts:AssumeRole',
               'Effect': 'Allow',
               'Principal': {'Service': 'sagemaker.amazonaws.com'},
           }],  
        'Version': '2012-10-17		 	 	 '
   }
   ```

   Cree un nuevo rol de IAM con la política que definió anteriormente:

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Necesitará saber cuál es su nombre de recurso de Amazon (ARN) cuando cree un trabajo de compilación en un paso posterior, así que guárdelo también en una variable. 

   ```
   role_arn = new_role['Role']['Arn']
   ```

    Ahora que ha creado un nuevo rol, adjunte los permisos que necesita para interactuar con Amazon SageMaker AI y Amazon S3: 

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **Cree un bucket de Amazon S3 para almacenar los artefactos de sus modelos**

   SageMaker Neo accederá a los artefactos de sus modelos desde Amazon S3

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

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

   ```
   aws s3 mb s3://'name-of-your-bucket' --region specify-your-region 
   
   # Check your bucket exists
   aws s3 ls s3://'name-of-your-bucket'/
   ```

------

1. **Formación de un modelo de machine learning**

   Consulte [Entrenar un modelo con Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) para obtener más información sobre cómo entrenar un modelo de aprendizaje automático con Amazon SageMaker AI. Si lo desea, puede cargar su modelo formado a nivel local directamente en un bucket de URI de Amazon S3. 
**nota**  
 Asegúrese de que el modelo tenga el formato correcto en función del marco que haya utilizado. Consulte [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) 

   Si aún no tiene un modelo, utilice el `curl` comando para obtener una copia local TensorFlow del `coco_ssd_mobilenet` modelo en el sitio web. El modelo que acaba de copiar es un modelo de detección de objetos formado a partir del [conjunto de datos COCO](https://cocodataset.org/#home). Escribe lo siguiente en su cuaderno de Jupyter:

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   Tenga en cuenta que este ejemplo en particular se empaquetó en un archivo .zip. Descomprima este archivo y vuelva a empaquetarlo como un archivo tar comprimido (`.tar.gz`) antes de usarlo en pasos posteriores. Escribe lo siguiente en su cuaderno de Jupyter: 

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **Cargue el modelo formado en un bucket de S3**

   Una vez que tenga un modelo de machine learning, guárdelo en un bucket de Amazon S3. 

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

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

   Reemplace `your-model-filename` y `amzn-s3-demo-bucket` con el nombre de su bucket de S3. 

   ```
   aws s3 cp your-model-filename s3://amzn-s3-demo-bucket
   ```

------

# Compile el modelo.
<a name="neo-getting-started-edge-step1"></a>

Una vez que haya satisfecho los [requisitos previos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), podrá compilar el modelo con Amazon SageMaker AI Neo. Puede compilar su modelo mediante la AWS CLI consola o el [SDK de Amazon Web Services para Python (Boto3) (consulte [Use](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Neo to Compile a Model)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html). En este ejemplo, compilará su modelo con Boto3.

Para compilar un modelo, SageMaker Neo necesita la siguiente información:

1.  **El URI del bucket de Amazon S3 en el que guardó el modelo formado.** 

   Si ha seguido los requisitos previos, el nombre de su bucket se almacena en una variable denominada `bucket`. En el siguiente fragmento de código, se muestra cómo enumerar todos sus buckets mediante AWS CLI: 

   ```
   aws s3 ls
   ```

   Por ejemplo: 

   ```
   $ aws s3 ls
   2020-11-02 17:08:50 bucket
   ```

1.  **El URI del bucket de Amazon S3 en el que desea guardar el modelo compilado.** 

   El siguiente fragmento de código concatena el URI del bucket de Amazon S3 con el nombre de un directorio de salida denominado `output`: 

   ```
   s3_output_location = f's3://{bucket}/output'
   ```

1.  **El marco de machine learning que haya utilizado para formar a su modelo.** 

   Defina el marco que haya utilizado para formar a su modelo.

   ```
   framework = 'framework-name'
   ```

   Por ejemplo, si desea compilar un modelo que se haya entrenado con TensorFlow, puede usar `tflite` o`tensorflow`. `tflite`Úselo si desea utilizar una versión más ligera TensorFlow que utilice menos memoria de almacenamiento. 

   ```
   framework = 'tflite'
   ```

   Para obtener una lista completa de los marcos compatibles con Neo, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forma de la entrada de su modelo.** 

    Neo requiere el nombre y la forma del tensor de entrada. El nombre y la forma se pasan como pares de clave-valor. `value` es una lista de las dimensiones enteras de un tensor de entrada y `key` es el nombre exacto de un tensor de entrada en el modelo. 

   ```
   data_shape = '{"name": [tensor-shape]}'
   ```

   Por ejemplo:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**nota**  
Asegúrese de que el modelo tenga el formato correcto en función del marco que haya utilizado. Consulta [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La clave de este diccionario debe cambiarse por el nombre del nuevo tensor de entrada.

1.  **El nombre del dispositivo de destino para el que se va a compilar o los datos generales de la plataforma de hardware** 

   ```
   target_device = 'target-device-name'
   ```

   Por ejemplo, si desea realizar la implementación en una Raspberry Pi 3, utilice: 

   ```
   target_device = 'rasp3b'
   ```

   Puede encontrar la lista completa de dispositivos periféricos compatibles en [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Ahora que ha completado los pasos anteriores, puede enviar un trabajo de compilación a Neo. 

```
# Create a SageMaker client so you can submit a compilation job
sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)

# Give your compilation job a name
compilation_job_name = 'getting-started-demo'
print(f'Compilation job for {compilation_job_name} started')

response = sagemaker_client.create_compilation_job(
    CompilationJobName=compilation_job_name,
    RoleArn=role_arn,
    InputConfig={
        'S3Uri': s3_input_location,
        'DataInputConfig': data_shape,
        'Framework': framework.upper()
    },
    OutputConfig={
        'S3OutputLocation': s3_output_location,
        'TargetDevice': target_device 
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 900
    }
)

# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name)
    if response['CompilationJobStatus'] == 'COMPLETED':
        break
    elif response['CompilationJobStatus'] == 'FAILED':
        raise RuntimeError('Compilation failed')
    print('Compiling ...')
    time.sleep(30)
print('Done!')
```

Si desea información adicional para la depuración, incluya la siguiente declaración de impresión:

```
print(response)
```

Si el trabajo de compilación se realiza correctamente, el modelo compilado se almacena en el bucket de Amazon S3 de salida que haya especificado anteriormente (`s3_output_location`). Descargue su modelo compilado localmente: 

```
object_path = f'output/{model}-{target_device}.tar.gz'
neo_compiled_model = f'compiled-{model}.tar.gz'
s3_client.download_file(bucket, object_path, neo_compiled_model)
```

# Configure el dispositivo
<a name="neo-getting-started-edge-step2"></a>

Deberá instalar los paquetes en su dispositivo periférico para que su dispositivo pueda hacer inferencias. También debe instalar el núcleo de [IoT AWS Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) o [Tiempo de ejecución de aprendizaje profundo (DLR)](https://github.com/neo-ai/neo-ai-dlr). En este ejemplo, instalará los paquetes necesarios para hacer inferencias para el algoritmo de detección de objetos `coco_ssd_mobilenet` y utilizará el DLR.

1. **Instale paquetes adicionales**

   Además de Boto3, debe instalar determinadas bibliotecas en su dispositivo periférico. Las bibliotecas que vaya a instalar dependen de su caso de uso. 

   Por ejemplo, para el algoritmo de detección de `coco_ssd_mobilenet` objetos que descargó anteriormente, debe instalarlo [NumPy](https://numpy.org/)para la manipulación de datos y las estadísticas, [PIL](https://pillow.readthedocs.io/en/stable/) para cargar imágenes y [Matplotlib](https://matplotlib.org/) para generar gráficos. También necesitará una copia TensorFlow si quiere medir el impacto de compilar con Neo en comparación con una línea base. 

   ```
   !pip3 install numpy pillow tensorflow matplotlib 
   ```

1. **Instalar un motor de inferencia en su dispositivo**

   Para ejecutar su modelo compilado en NEO, instale [Tiempo de ejecución de aprendizaje profundo (DLR)](https://github.com/neo-ai/neo-ai-dlr) en su dispositivo. DLR es un tiempo de ejecución compacto y común para modelos de aprendizaje profundo y modelos de árboles de decisiones. En los destinos de CPU x86\$164 que ejecutan Linux, puede instalar la última versión del paquete DLR mediante el siguiente comando `pip`:

   ```
   !pip install dlr
   ```

   Para instalar DLR en destinos de GPU o dispositivos periféricos que no sean x86, consulte [Versiones](https://github.com/neo-ai/neo-ai-dlr/releases) para ver los binarios prediseñados o [Instalación de DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para compilar DLR desde el origen. Por ejemplo, para instalar DLR para Raspberry Pi 3, puede usar: 

   ```
   !pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
   ```

# Cómo hacer inferencias en el dispositivo
<a name="neo-getting-started-edge-step3"></a>

En este ejemplo, utilizará Boto3 para descargar el resultado de su trabajo de compilación en su dispositivo periférico. A continuación, importará el DLR, descargará un ejemplo de imágenes del conjunto de datos, cambiará el tamaño de esta imagen para que coincida con la entrada original del modelo y, a continuación, realizará una predicción.

1. **Descargue el modelo compilado de Amazon S3 a su dispositivo y extráigalo del archivo tar comprimido.** 

   ```
   # Download compiled model locally to edge device
   object_path = f'output/{model_name}-{target_device}.tar.gz'
   neo_compiled_model = f'compiled-{model_name}.tar.gz'
   s3_client.download_file(bucket_name, object_path, neo_compiled_model)
   
   # Extract model from .tar.gz so DLR can use it
   !mkdir ./dlr_model # make a directory to store your model (optional)
   !tar -xzvf ./compiled-detect.tar.gz --directory ./dlr_model
   ```

1. **Importe el DLR y un objeto `DLRModel` inicializado.**

   ```
   import dlr
   
   device = 'cpu'
   model = dlr.DLRModel('./dlr_model', device)
   ```

1. **Descargue una imagen para inferirla y formatéela en función de cómo se formó su modelo**.

   En el caso del ejemplo `coco_ssd_mobilenet`, puede descargar una imagen del [conjunto de datos COCO](https://cocodataset.org/#home) y, a continuación, reformarla a `300x300`: 

   ```
   from PIL import Image
   
   # Download an image for model to make a prediction
   input_image_filename = './input_image.jpg'
   !curl https://farm9.staticflickr.com/8325/8077197378_79efb4805e_z.jpg --output {input_image_filename}
   
   # Format image so model can make predictions
   resized_image = image.resize((300, 300))
   
   # Model is quantized, so convert the image to uint8
   x = np.array(resized_image).astype('uint8')
   ```

1. **Use el DLR para hacer inferencias**.

   Por último, puede usar el DLR para hacer una predicción sobre la imagen que acaba de descargar: 

   ```
   out = model.run(x)
   ```

[Para ver más ejemplos del uso del DLR para hacer inferencias a partir de un modelo compilado por NEO en un dispositivo perimetral, consulta el repositorio de Github. neo-ai-dlr ](https://github.com/neo-ai/neo-ai-dlr) 

# Errores de solución de problemas
<a name="neo-troubleshooting"></a>

Esta sección contiene información sobre cómo comprender y evitar errores habituales, los mensajes de error que generan y orientación sobre cómo solucionar estos errores. Antes de continuar, hágase las siguientes preguntas:

 **¿Encontró un error antes de implementar su modelo?** En caso afirmativo, consulte [Solución de errores de compilación en Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html). 

 **¿Se ha producido un error después de compilar el modelo?** En caso afirmativo, consulte [Solución de problemas de errores de inferencia de Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-inference.html). 

**¿Se ha producido un error al intentar compilar el modelo para los dispositivos Ambarella?** En caso afirmativo, consulte [Solución de errores de Ambarella](neo-troubleshooting-target-devices-ambarella.md).

## Tipos de clasificación de errores
<a name="neo-error-messages"></a>

En esta lista se clasifican los *errores de usuario* que puede recibir de Neo. Se incluyen los errores de acceso y de permiso, y los errores de carga para cada uno de los marcos compatibles. Todos los demás errores son *errores del sistema*.

### Error de permiso del cliente
<a name="neo-error-client-permission"></a>

 Error de permiso de cliente: Neo pasa los errores de este tipo directamente a través del servicio dependiente. 
+ *Acceso denegado* al llamar a sts: AssumeRole
+ *Cualquier error 400* que se produce al llamar a S3 para descargar o cargar un modelo de cliente.
+ Error *PassRole*

### Error de carga
<a name="collapsible-section-2"></a>

Si el compilador de Neo ha cargado correctamente .tar.gz desde Amazon S3, compruebe que tarball contenga los archivos necesarios para la compilación. Los criterios de comprobación son específicos del marco: 
+ **TensorFlow**: Solo espera el archivo protobuf (\$1.pb o\$1.pbtxt). Para los modelos guardados, espera una carpeta de variables. 
+ **Pytorch**: espere un único archivo pytorch (\$1.pth).
+ **MXNET**: espera solo un archivo de símbolos (\$1.json) y un archivo de parámetros (\$1.params).
+ **XGBoost**: Se espera un solo archivo de modelo (\$1.model). XGBoost El modelo de entrada tiene limitación de tamaño.

### Errores de compilación
<a name="neo-error-compilation"></a>

Se supone que el compilador de Neo ha cargado correctamente .tar.gz desde Amazon S3 y que tarball contenga los archivos necesarios para la compilación. Los criterios de comprobación son: 
+ **OperatorNotImplemented**: No se ha implementado ningún operador.
+ **OperatorAttributeNotImplemented**: No se ha implementado el atributo del operador especificado. 
+ **OperatorAttributeRequired**: Se requiere un atributo para un gráfico de símbolos interno, pero no aparece en el gráfico del modelo introducido por el usuario. 
+ **OperatorAttributeValueNotValid**: El valor del atributo en el operador específico no es válido. 

**Topics**
+ [Tipos de clasificación de errores](#neo-error-messages)
+ [Solución de errores de compilación de Neo](neo-troubleshooting-compilation.md)
+ [Solucionar errores de inferencia de Neo](neo-troubleshooting-inference.md)
+ [Solución de errores de Ambarella](neo-troubleshooting-target-devices-ambarella.md)

# Solución de errores de compilación de Neo
<a name="neo-troubleshooting-compilation"></a>

Esta sección contiene información sobre cómo comprender y evitar errores habituales, los mensajes de error que generan y orientación sobre cómo solucionar estos errores. 

**Topics**
+ [Cómo utilizar esta página](#neo-troubleshooting-compilation-how-to-use)
+ [Errores relacionados con el marco](#neo-troubleshooting-compilation-framework-related-errors)
+ [Errores relacionados con la infraestructura](#neo-troubleshooting-compilation-infrastructure-errors)
+ [Compruebe su registro de compilación](#neo-troubleshooting-compilation-logs)

## Cómo utilizar esta página
<a name="neo-troubleshooting-compilation-how-to-use"></a>

Intente resolver el error siguiendo estas secciones en el orden siguiente:

1. Compruebe que la entrada de su trabajo de compilación cumpla los requisitos de entrada. Consulte [¿Qué formas de datos de entrada espera SageMaker Neo?](neo-compilation-preparing-model.md#neo-job-compilation-expected-inputs)

1.  Compruebe los [errores comunes específicos del marco](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-framework-related-errors). 

1.  Compruebe si su error es un [error de infraestructura](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-infrastructure-errors). 

1. Compruebe su [registro de compilación](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-logs).

## Errores relacionados con el marco
<a name="neo-troubleshooting-compilation-framework-related-errors"></a>

### Keras
<a name="neo-troubleshooting-compilation-framework-related-errors-keras"></a>


| Error | Solución | 
| --- | --- | 
|   `InputConfiguration: No h5 file provided in <model path>`   |   Compruebe que el archivo h5 se encuentre en el URI de Amazon S3 especificado.  *O bien* Compruebe que el [archivo h5 esté formateado correctamente.](https://www.tensorflow.org/guide/keras/save_and_serialize#keras_h5_format)   | 
|   `InputConfiguration: Multiple h5 files provided, <model path>, when only one is allowed`   |  Compruebe que solo está proporcionando un `h5` archivo.  | 
|   `ClientError: InputConfiguration: Unable to load provided Keras model. Error: 'sample_weight_mode'`   |  Compruebe que la versión de Keras que haya especificado sea compatible. Consulte los marcos compatibles para [instancias en la nube](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html) y [dispositivos periféricos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).   | 
|   `ClientError: InputConfiguration: Input input has wrong shape in Input Shape dictionary. Input shapes should be provided in NCHW format. `   |   Compruebe que la entrada del modelo siga el formato NCHW. Consulte [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)   | 

### MXNet
<a name="neo-troubleshooting-compilation-framework-related-errors-mxnet"></a>


| Error | Solución | 
| --- | --- | 
|   `ClientError: InputConfiguration: Only one parameter file is allowed for MXNet model. Please make sure the framework you select is correct.`   |   SageMaker Neo seleccionará el primer archivo de parámetros proporcionado para su compilación.   | 

### TensorFlow
<a name="neo-troubleshooting-compilation-framework-related-errors-tensorflow"></a>


| Error | Solución | 
| --- | --- | 
|   `InputConfiguration: Exactly one .pb file is allowed for TensorFlow models.`   |  Asegúrese de proporcionar solo un archivo.pb o.pbtxt.  | 
|  `InputConfiguration: Exactly one .pb or .pbtxt file is allowed for TensorFlow models.`  |  Asegúrese de proporcionar solo un archivo.pb o.pbtxt.  | 
|   ` ClientError: InputConfiguration: TVM cannot convert <model zoo> model. Please make sure the framework you selected is correct. The following operators are not implemented: {<operator name>} `   |   Compruebe que el operador que ha elegido es compatible. Consulte [Marcos y operadores compatibles con SageMaker Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/).   | 

### PyTorch
<a name="neo-troubleshooting-compilation-framework-related-errors-pytorch"></a>


| Error | Solución | 
| --- | --- | 
|   `InputConfiguration: We are unable to extract DataInputConfig from the model due to input_config_derivation_error. Please override by providing a DataInputConfig during compilation job creation.`  |  Haga una de estas dos operaciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/neo-troubleshooting-compilation.html)  | 

## Errores relacionados con la infraestructura
<a name="neo-troubleshooting-compilation-infrastructure-errors"></a>


| Error | Solución | 
| --- | --- | 
|   `ClientError: InputConfiguration: S3 object does not exist. Bucket: <bucket>, Key: <bucket key>`   |  Compruebe la URI de Amazon S3 que ha proporcionado.  | 
|   ` ClientError: InputConfiguration: Bucket <bucket name> is in region <region name> which is different from AWS Sagemaker service region <service region> `   |   Cree un bucket de Amazon S3 que se encuentre en la misma región que el servicio.   | 
|   ` ClientError: InputConfiguration: Unable to untar input model. Please confirm the model is a tar.gz file `   |   Compruebe que el modelo de Amazon S3 esté comprimido en un archivo `tar.gz`.   | 

## Compruebe su registro de compilación
<a name="neo-troubleshooting-compilation-logs"></a>

1. Dirígete a Amazon CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Seleccione la región en la que creó el trabajo de compilación en la lista desplegable de **Región** situada en la parte superior derecha.

1. En el panel de navegación de Amazon CloudWatch, selecciona **Logs**. Seleccione **Grupo de registros**.

1. Busque el grupo de registros denominado `/aws/sagemaker/CompilationJobs`. Seleccione el grupo de registro.

1. Busque el flujo de registro que lleva el nombre del trabajo de compilación. Seleccione el flujo de registros.

# Solucionar errores de inferencia de Neo
<a name="neo-troubleshooting-inference"></a>

Esta sección contiene información sobre cómo prevenir y resolver algunos de los errores más comunes que se pueden producir al implementar and/or el dispositivo final. Esta sección se aplica a la **PyTorch versión 1.4.0 o posterior** y a la **MXNetversión 1.7.0** o posterior. 
+ Asegúrese de que la primera inferencia (inferencia de calentamiento) sobre un dato de entrada válido se haya realizado en `model_fn()`, si ha definido un `model_fn` en el guión de inferencia; de lo contrario, podría aparecer el siguiente mensaje de error en la terminal cuando se llame a [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict): 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."                
  ```
+ Establezca las variables de entorno como se muestra en la siguiente tabla. Si no están configurados, puede aparecer el siguiente mensaje de error: 

  **En la terminal:**

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (503) from <users-sagemaker-endpoint> with message "{ "code": 503, "type": "InternalServerException", "message": "Prediction failed" } ".
  ```

  ** CloudWatchEn:**

  ```
  W-9001-model-stdout com.amazonaws.ml.mms.wlm.WorkerLifeCycle - AttributeError: 'NoneType' object has no attribute 'transform'
  ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/neo-troubleshooting-inference.html)
+ Asegúrese de que la variable de `MMS_DEFAULT_RESPONSE_TIMEOUT` entorno esté establecida en 500 o un valor superior al crear el modelo Amazon SageMaker AI; de lo contrario, podría aparecer el siguiente mensaje de error en la terminal: 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."
  ```

# Solución de errores de Ambarella
<a name="neo-troubleshooting-target-devices-ambarella"></a>

SageMaker Neo requiere que los modelos estén empaquetados en un archivo TAR comprimido (`*.tar.gz`). Los dispositivos Ambarella requieren que se incluyan archivos adicionales en el archivo TAR comprimido antes de enviarlo para su compilación. Incluya los siguientes archivos en su archivo TAR comprimido si desea compilar un modelo para los objetivos de Ambarella con SageMaker Neo:
+ Un modelo entrenado que utiliza un marco compatible con Neo SageMaker 
+ Un archivo de configuración JSON
+ Imágenes de calibración

Por ejemplo, el contenido del archivo TAR comprimido tendrá un aspecto semejante al del siguiente ejemplo:

```
├──amba_config.json
├──calib_data
|    ├── data1
|    ├── data2
|    ├── .
|    ├── .
|    ├── .
|    └── data500
└──mobilenet_v1_1.0_0224_frozen.pb
```

El directorio está configurado de la siguiente manera:
+ `amba_config.json`: archivo de configuración
+ `calib_data`: carpeta que contiene imágenes de calibración
+ `mobilenet_v1_1.0_0224_frozen.pb`: TensorFlow modelo guardado como un gráfico congelado

Para obtener información sobre los marcos compatibles con SageMaker Neo, consulte[Marcos admitidos](neo-supported-devices-edge-frameworks.md).

## Configuración del archivo de configuración
<a name="neo-troubleshooting-target-devices-ambarella-config"></a>

El archivo de configuración proporciona la información requerida por la cadena de herramientas de Ambarella para compilar el modelo. El archivo de configuración debe guardarse como un archivo JSON y el nombre del archivo debe terminar por `*config.json`. A continuación se muestra el contenido del archivo de configuración.


| Key | Description (Descripción) | Ejemplo | 
| --- | --- | --- | 
| inputs | El diccionario mapea las capas de entrada al atributo. | <pre>{inputs:{"data":{...},"data1":{...}}}</pre> | 
| "data" | Nombre de capa de entrada. Nota: "data" es un ejemplo del nombre que puede utilizar para etiquetar la capa de entrada. | "data" | 
| Forma | Describe la forma de la entrada al modelo. Esto sigue las mismas convenciones que usa SageMaker Neo. | "shape": "1,3,224,224" | 
| filepath | Ruta relativa al directorio que contiene las imágenes de calibración. Pueden ser archivos binarios o de imagen, como JPG o PNG. | "filepath": "calib\$1data/" | 
| colorformat | Formato de color que espera el modelo. Se utilizará al convertir las imágenes a archivos binarios. Valores admitidos: [RGB, BGR]. El valor predeterminado es RGB. | "colorformat":"RGB" | 
| mean | Valor medio que debe restarse de la entrada. Puede ser un valor único o una lista de valores. Cuando la media se proporciona en forma de lista, el número de entradas debe coincidir con la dimensión del canal de la entrada. | "mean":128.0 | 
| escalar | Valor de escala que se utilizará para normalizar la entrada. Puede ser un valor único o una lista de valores. Cuando la escala se proporciona en forma de lista, el número de entradas debe coincidir con la dimensión del canal de la entrada. | "scale": 255.0 | 

A continuación se muestra un ejemplo de archivo de configuración: 

```
{
    "inputs": {
        "data": {
                "shape": "1, 3, 224, 224",
                "filepath": "calib_data/",
                "colorformat": "RGB",
                "mean":[128,128,128],
                "scale":[128.0,128.0,128.0]
        }
    }
}
```

## Imágenes de calibración
<a name="neo-troubleshooting-target-devices-ambarella-calibration-images"></a>

Cuantifique su modelo entrenado proporcionando imágenes de calibración. La cuantificación del modelo mejora el rendimiento del CVFlow motor en un sistema Ambarella en un chip (SoC). La cadena de herramientas de Ambarella utiliza las imágenes de calibración para determinar cómo se debe cuantificar cada capa del modelo para lograr un rendimiento y una precisión óptimos. Cada capa se cuantifica de forma independiente en uno o varios formatos. INT8 INT16 El modelo final tiene una mezcla de INT16 capas INT8 y capas después de la cuantificación.

**¿Cuántas imágenes debería usar?**

Se recomienda incluir entre 100 y 200 imágenes que sean representativas de los tipos de escenas que se espera que maneje el modelo. El tiempo de compilación del modelo aumenta linealmente en función del número de imágenes de calibración del archivo de entrada.

**¿Cuáles son los formatos de imagen recomendados?**

Las imágenes de calibración pueden estar en formato binario sin procesar o en formatos de imagen como JPG y PNG.

La carpeta de calibración puede contener una mezcla de imágenes y archivos binarios. Si la carpeta de calibración contiene imágenes y archivos binarios, la cadena de herramientas convierte primero las imágenes en archivos binarios. Una vez finalizada la conversión, utiliza los archivos binarios recién generados junto con los archivos binarios que estaban originalmente en la carpeta.

**¿Puedo convertir primero las imágenes a formato binario?**

Sí. Puede convertir las imágenes al formato binario con paquetes de código abierto como [OpenCV](https://opencv.org/) o [PIL](https://python-pillow.org/). Recorta y cambia el tamaño de las imágenes para que se adapten a la capa de entrada del modelo formado.



## Media y escala
<a name="neo-troubleshooting-target-devices-ambarella-mean-scale"></a>

Puede especificar las opciones de preprocesamiento de la media y la escala en la cadena de herramientas de Amberalla. Estas operaciones están integradas en la red y se aplican durante la inferencia en cada entrada. No proporcione datos procesados si especifica la media o la escala. Más específicamente, no proporcione datos de los que haya restado la media o a los que haya aplicado la escala.

## Compruebe su registro de compilación
<a name="neo-troubleshooting-target-devices-ambarella-compilation"></a>

Para obtener información sobre cómo comprobar el registro de compilación de los dispositivos Ambarella, consulte [Compruebe su registro de compilación](neo-troubleshooting-compilation.md#neo-troubleshooting-compilation-logs).

# Sesiones con estado con modelos de Amazon SageMaker AI
<a name="stateful-sessions"></a>

Cuando envíe solicitudes a un punto de conexión de inferencia de Amazon SageMaker AI, puede optar por enrutarlas a una *sesión con estado*. Durante una sesión con estado, se envían varias solicitudes de inferencia a la misma instancia de ML y la instancia facilita la sesión.

Normalmente, cuando se invoca un punto de conexión de inferencia, Amazon SageMaker AI enruta la solicitud a cualquier instancia de ML de entre las múltiples instancias que se alojan en el punto de conexión. Este comportamiento de enrutamiento ayuda a minimizar la latencia al distribuir de forma uniforme el tráfico de inferencia. Sin embargo, uno de los resultados del comportamiento de enrutamiento es que no se puede predecir qué instancia atenderá su solicitud. 

Esta imprevisibilidad constituye una limitación si desea enviar su solicitud a un *modelo con estado*. Un modelo con estado tiene un contenedor que almacena en caché los datos de contexto que recibe de las solicitudes de inferencia. Como los datos se almacenan en caché, puede interactuar con el contenedor enviando varias solicitudes y no es necesario que incluya todo el contexto de la interacción en cada solicitud. En cambio, el modelo extrae datos del contexto almacenado en caché para fundamentar su predicción. 

Los modelos con estado son ideales cuando los datos de contexto para la interacción son muy grandes, por ejemplo, cuando incluyen lo siguiente:
+ Archivos de texto de gran tamaño
+ Largos historiales de chat 
+ Datos multimedia (imágenes, vídeo y audio) para modelos multimodales

En estos casos, si pasa el contexto completo con cada petición, la latencia de red de las solicitudes se ralentiza y la capacidad de respuesta de la aplicación disminuye. 

Para que el punto de conexión de inferencia admita una sesión con estado, debe alojar un modelo con estado. Usted es el propietario de la implementación del modelo con estado. Amazon SageMaker AI le permite enrutar solicitudes a una sesión con estado, pero no proporciona modelos con estado que pueda implementar y utilizar. 

Para ver un ejemplo de cuaderno y contenedor de modelos que muestre cómo se implementan las interacciones con estado, consulte [Despliegue de ejemplo](#stateful-sessions-example-notebook).

Para obtener más información sobre la implementación de modelos con estado con TorchServe, consulte [Stateful Inference](https://github.com/pytorch/serve/tree/master/examples/stateful/sequence_continuous_batching) en el repositorio de GitHub de TorchServe. 

## Funcionamiento de las sesiones con estado
<a name="stateful-sessions-running"></a>

Durante una sesión con estado, la aplicación interactúa con el contenedor de modelos de las siguientes maneras. 

**Inicio de una sesión con estado**

1. Para iniciar una sesión con un modelo con estado alojado en Amazon SageMaker AI, el cliente envía una solicitud [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) con la API de SageMaker AI. Para el parámetro de la solicitud `SessionID`, el cliente indica a SageMaker AI que inicie una nueva sesión especificando el valor `NEW_SESSION`. En la carga útil de la solicitud, el cliente también indica al contenedor que inicie una nueva sesión. La sintaxis de esta instrucción varía en función de la implementación del contenedor. Depende del modo en que el código de contenedor gestione la carga útil de la solicitud.

   En el siguiente ejemplo, se inicia una sesión nueva mediante el SDK para Python (Boto3):

   ```
   import boto3
   import sagemaker
   import json
   
   payload = {
   "requestType":"NEW_SESSION"
   }
   payload = json.dumps(payload)
   
   smr = boto3.client(
       'sagemaker-runtime',
       region_name="region_name",
       endpoint_url="endoint_url")
   
   create_session_response = smr.invoke_endpoint(
       EndpointName="endpoint_name",
       Body=payload,
       ContentType="application/json",
       SessionId="NEW_SESSION")
   ```

1. El contenedor de modelos gestiona la solicitud del cliente iniciando una nueva sesión. Para la sesión, almacena en caché los datos que el cliente envía en la carga útil de la solicitud. También crea un ID de sesión y establece una marca de tiempo de periodo de vida (TTL). Esta marca de tiempo indica cuándo caduca la sesión. El contenedor debe proporcionar el ID de sesión y la marca de tiempo a Amazon SageMaker AI configurando el siguiente encabezado HTTP en la respuesta:

   ```
   X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
   ```

1. En la respuesta a la solicitud `InvokeEndpoint`, Amazon SageMaker AI proporciona el ID de sesión y la marca de tiempo TTL para el parámetro de respuesta `NewSessionID`.

   En el siguiente ejemplo, se extrae el ID de la sesión de la respuesta `invoke_endpoint`:

   ```
   session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
   ```

**Reanudación de una sesión con estado**
+ Para usar la misma sesión para una solicitud de inferencia posterior, el cliente envía otra solicitud `InvokeEndpoint`. Para el parámetro de solicitud `SessionID`, especifica el ID de la sesión. Con este ID, SageMaker AI enruta la solicitud a la misma instancia de ML en la que se inició la sesión. Como el contenedor ya ha almacenado en caché la carga útil de la solicitud original, el cliente no necesita pasar los mismos datos de contexto que estaban en la solicitud original.

  En el siguiente ejemplo, se reanuda una sesión pasando el ID de sesión con el parámetro de solicitud `SessionId`:

  ```
  smr.invoke_endpoint(
      EndpointName="endpoint_name",
      Body=payload,
      ContentType="application/json",
      SessionId=session_id)
  ```

**Cierre de una sesión con estado**

1. Para cerrar una sesión, el cliente envía una solicitud `InvokeEndpoint` final. Para el parámetro de solicitud `SessionID`, el cliente proporciona el ID de la sesión. En la carga útil del cuerpo de la solicitud, el cliente indica que el contenedor debe cerrar la sesión. La sintaxis de esta instrucción varía en función de la implementación del contenedor.

   En el siguiente ejemplo, se cierra una sesión:

   ```
   payload = {
       "requestType":"CLOSE"
   }
   payload = json.dumps(payload)
   
   closeSessionResponse = smr.invoke_endpoint(
       EndpointName="endpoint_name",
       Body=payload,
       ContentType="application/json",
       SessionId=session_id)
   ```

1. Cuando cierra la sesión, el contenedor devuelve el ID de sesión a SageMaker AI configurando el siguiente encabezado HTTP en la respuesta:

   ```
   X-Amzn-SageMaker-Closed-Session-Id: session_id
   ```

1. En la respuesta a la solicitud `InvokeEndpoint` del cliente, Amazon SageMaker AI proporciona el ID de sesión del parámetro de respuesta `ClosedSessionId`.

   En el siguiente ejemplo, se extrae el ID de la sesión cerrada de la respuesta `invoke_endpoint`:

   ```
   closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]
   ```

## Despliegue de ejemplo
<a name="stateful-sessions-example-notebook"></a>

En el siguiente cuaderno de ejemplo, se muestra cómo implementar el contenedor para un modelo con estado. También se muestra cómo una aplicación cliente inicia, continúa y cierra una sesión con estado.

[Inferencia con estado LLaVA con SageMaker AI](https://github.com/aws-samples/sagemaker-genai-hosting-examples/blob/main/LLava/torchserve/workspace/llava_stateful_deploy_infer.ipynb)

El cuaderno utiliza el modelo [LLaVA: Large Language and Vision Assistant](https://github.com/haotian-liu/LLaVA/tree/main), que acepta peticiones de texto e imágenes. El cuaderno carga una imagen en el modelo y, a continuación, hace preguntas sobre esa imagen sin tener que volver a enviarla para cada solicitud. El contenedor de modelos utiliza el marco de trabajo de TorchServe. Almacena en caché los datos de la imagen en la memoria de la GPU.

# Prácticas recomendadas
<a name="best-practices"></a>

Los siguientes temas proporcionan orientación sobre las prácticas recomendadas para implementar modelos de aprendizaje automático en Amazon SageMaker AI.

**Topics**
+ [Mejores prácticas para implementar modelos en los servicios de alojamiento de SageMaker IA](deployment-best-practices.md)
+ [Supervisión de prácticas recomendadas de seguridad](monitor-sec-best-practices.md)
+ [Inferencia en tiempo real de baja latencia con AWS PrivateLink](realtime-endpoints-privatelink.md)
+ [Migre la carga de trabajo de inferencias de x86 a Graviton AWS](realtime-endpoints-graviton.md)
+ [Solucionar problemas de implementación de modelos de Amazon SageMaker AI](deploy-model-troubleshoot.md)
+ [Prácticas recomendadas de optimización de costos de inferencia](inference-cost-optimization.md)
+ [Prácticas recomendadas para reducir al mínimo las interrupciones durante las actualizaciones de controladores de la GPU](inference-gpu-drivers.md)
+ [Mejores prácticas para la seguridad y la salud de los terminales con Amazon SageMaker AI](best-practice-endpoint-security.md)
+ [Actualización de los contenedores de inferencia para cumplir con el kit de herramientas de contenedores de NVIDIA](container-nvidia-compliance.md)

# Mejores prácticas para implementar modelos en los servicios de alojamiento de SageMaker IA
<a name="deployment-best-practices"></a>

Al alojar modelos mediante servicios de alojamiento de SageMaker IA, tenga en cuenta lo siguiente:
+ Por lo general, una aplicación cliente envía solicitudes al punto final HTTPS de la SageMaker IA para obtener inferencias a partir de un modelo implementado. También puede enviar solicitudes a este punto de conexión desde el cuaderno de Jupyter durante la prueba.
+ Puede implementar un modelo entrenado con SageMaker IA en su propio objetivo de despliegue. Para ello, necesita saber el formato específico del algoritmo de los artefactos del modelo que generó la capacitación de modelos. Para obtener más información sobre los formatos de salida, consulte la sección correspondiente al algoritmo que está usando en [Formatos de datos comunes para la capacitación](cdf-training.md). 
+ Puede implementar varias variantes de un modelo en el mismo punto final HTTPS de SageMaker IA. Esto resulta útil para las variaciones de prueba de un modelo en la producción. Por ejemplo, suponga que se ha implementado un modelo en producción. Desea probar una variación del modelo dirigiendo una pequeña cantidad de tráfico, como por ejemplo un 5 %, al nuevo modelo. Para ello, cree una configuración de punto de conexión que describa ambas variantes del modelo. Especifique `ProductionVariant` en su solicitud en `CreateEndPointConfig`. Para obtener más información, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). 
+ Puede configurar un `ProductionVariant` para utilizar Application Auto Scaling. Para obtener información sobre la configuración del escalado automático, consulte [Escalado automático de los modelos de Amazon SageMaker AI](endpoint-auto-scaling.md).
+ Puede modificar un punto de conexión sin tomar los modelos que ya se han implementado en la producción fuera de servicio. Por ejemplo, puede agregar nuevas variantes de modelos, actualizar las configuraciones de instancias de computación de ML de las variantes de modelos existentes o cambiar la distribución del tráfico entre las variantes de modelos. Para modificar un punto final, debe proporcionar una nueva configuración de punto final. SageMaker La IA implementa los cambios sin ningún tiempo de inactividad. Para obtener más información, consulte [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)y [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html). 
+ El cambio o eliminación de los artefactos de los modelos o la modificación del código de inferencia después de implementar un modelo generan resultados impredecibles. Si necesita cambiar o eliminar artefactos de modelos o cambiar el código de inferencias, modifique el punto de conexión proporcionando una nueva configuración de punto de conexión. Una vez que proporcione la nueva configuración de punto de conexión, podrá cambiar o eliminar los artefactos de modelo correspondientes a la configuración de punto de conexión antigua.
+ Si desea obtener inferencias en conjuntos de datos completos, considere la posibilidad de utilizar transformaciones por lotes como alternativa a los servicios de alojamiento. Para obtener información, consulte [Transformación por lotes para inferencias con Amazon AI SageMaker](batch-transform.md) 

## Implementación de varias instancias en diversas zonas de disponibilidad
<a name="deployment-best-practices-availability-zones"></a>

**Cree puntos finales sólidos al alojar su modelo.** SageMaker Los puntos finales de IA pueden ayudar a proteger su aplicación de las interrupciones en las [zonas de disponibilidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) y de los fallos en las instancias. Si se produce una interrupción o una instancia falla, SageMaker AI intentará distribuir automáticamente las instancias entre las zonas de disponibilidad. Por este motivo, recomendamos encarecidamente que implemente varias instancias para cada punto de conexión de producción. 

Si usa una [nube privada virtual (VPC) de Amazon](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html), configure la VPC con al menos dos [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VpcConfig.html#SageMaker-Type-VpcConfig-Subnets                     .html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VpcConfig.html#SageMaker-Type-VpcConfig-Subnets                     .html), cada una en una zona de disponibilidad distinta. Si se produce una interrupción o una instancia falla, Amazon SageMaker AI intentará distribuir automáticamente las instancias entre las zonas de disponibilidad. 

En general, para lograr un rendimiento de mayor confianza, use más [Tipos de instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) pequeños en diferentes zonas de disponibilidad para alojar sus puntos de conexión.

**Implementar componentes de inferencia para una alta disponibilidad.** Además de la recomendación anterior sobre los números de instancias, para lograr una disponibilidad del 99,95 %, asegúrese de que los componentes de inferencia estén configurados para tener más de dos copias. Además, en la política administrada de escalado automático, establezca también el número mínimo de instancias en dos.

# Supervisión de prácticas recomendadas de seguridad
<a name="monitor-sec-best-practices"></a>

Supervise su uso de la SageMaker IA en relación con las mejores prácticas de [AWS seguridad mediante Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html). Security Hub CSPM utiliza controles de seguridad para evaluar las configuraciones de los recursos y los estándares de seguridad para cumplir con varios marcos de conformidad. Para obtener más información sobre el uso de Security Hub CSPM para evaluar los recursos de SageMaker IA, consulte los [controles de Amazon SageMaker AI](https://docs.aws.amazon.com/securityhub/latest/userguide/sagemaker-controls.html) en la Guía del usuario de *AWS Security Hub CSPM*.

# Inferencia en tiempo real de baja latencia con AWS PrivateLink
<a name="realtime-endpoints-privatelink"></a>

 Amazon SageMaker AI proporciona baja latencia para inferencias en tiempo real y, al mismo tiempo, mantiene una alta disponibilidad y resiliencia mediante la implementación Multi-AZ. La latencia de la aplicación se compone de dos componentes principales: latencia de infraestructura o sobrecarga y latencia de inferencia del modelo. La reducción de latencia de sobrecarga abre nuevas posibilidades, como la implementación de modelos más complejos, profundos y precisos o la división de aplicaciones monolíticas en módulos de microservicios escalables y fáciles de mantener. Puede reducir la latencia de las inferencias en tiempo real con la SageMaker IA mediante una implementación. AWS PrivateLink Con AWS PrivateLink, puede acceder de forma privada a todas las operaciones de la SageMaker API desde su Virtual Private Cloud (VPC) de forma escalable mediante puntos de conexión de la VPC de interfaz. Un punto final de VPC de interfaz es una interfaz de red elástica en la subred con direcciones IP privadas que sirve como punto de entrada para todas SageMaker las llamadas a la API.

De forma predeterminada, un punto final de SageMaker IA con 2 o más instancias se implementa en al menos 2 zonas de AWS disponibilidad (AZs) y las instancias de cualquier zona de disponibilidad pueden procesar las invocaciones. Esto da como resultado uno o más “saltos” de AZ que contribuyen a la latencia de sobrecarga. Una implementación AWS PrivateLink con la opción `privateDNSEnabled` establecida como `true` mitiga esta situación al lograr dos objetivos:
+ Mantiene todo el tráfico de inferencias dentro de la VPC.
+ Mantiene el tráfico de invocación en la misma zona de disponibilidad que el cliente que lo originó al usar SageMaker Runtime. Esto evita los «saltos» entre la AZs reducción de la latencia de sobrecarga.

En las siguientes secciones de esta guía, se muestra cómo puede reducir la latencia de las inferencias en tiempo real durante la implementación AWS PrivateLink .

**Topics**
+ [Implemente AWS PrivateLink](#deploy-privatelink)
+ [Implemente un punto final de SageMaker IA en una VPC](#deploy-sagemaker-inference-endpoint)
+ [Invoca el punto final de la IA SageMaker](#invoke-sagemaker-inference-endpoint)

## Implemente AWS PrivateLink
<a name="deploy-privatelink"></a>

Para implementarlo AWS PrivateLink, primero cree un punto final de interfaz para la VPC desde el que se conecta a los puntos finales de SageMaker IA. Siga los pasos que se indican en [Acceder a un AWS servicio mediante un punto final de la VPC de la interfaz para crear el punto final](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) de la interfaz. Al crear el punto de conexión, seleccione los siguientes ajustes en la interfaz de la consola:
+ Seleccione la casilla **Habilitar nombre de DNS** en **Configuración adicional**
+ Seleccione los grupos de seguridad y las subredes adecuados que se utilizarán con los puntos finales de SageMaker IA.

Asegúrese también de que la VPC tenga activados los nombres de host DNS. Para obtener más información sobre cómo cambiar los atributos de DNS de una VPC, consulte [ Ver y actualizar los atributos de DNS de una VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating).

## Implemente un punto final de SageMaker IA en una VPC
<a name="deploy-sagemaker-inference-endpoint"></a>

Para lograr una latencia de sobrecarga baja, cree un punto final de SageMaker IA con las mismas subredes que especificó al implementar. AWS PrivateLink Estas subredes deben coincidir con las AZs de su aplicación cliente, como se muestra en el siguiente fragmento de código.

```
model_name = '<the-name-of-your-model>'

vpc = 'vpc-0123456789abcdef0'
subnet_a = 'subnet-0123456789abcdef0'
subnet_b = 'subnet-0123456789abcdef1'
security_group = 'sg-0123456789abcdef0'

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url
    },
    VpcConfig = {
        'SecurityGroupIds': [security_group],
        'Subnets': [subnet_a, subnet_b],
    },
)
```

En el fragmento de código mencionado anteriormente se presupone que ha seguido los pasos descritos en [Antes de empezar](realtime-endpoints-deploy-models.md#deploy-prereqs).

## Invoca el punto final de la IA SageMaker
<a name="invoke-sagemaker-inference-endpoint"></a>

Por último, especifique el cliente SageMaker Runtime e invoque el punto final de la SageMaker IA, tal y como se muestra en el siguiente fragmento de código.

```
endpoint_name = '<endpoint-name>'
  
runtime_client = boto3.client('sagemaker-runtime')
response = runtime_client.invoke_endpoint(EndpointName=endpoint_name, 
                                          ContentType='text/csv', 
                                          Body=payload)
```

Para obtener más información sobre configuración de puntos de conexión, consulte [Implementación de modelos para inferencia en tiempo real](realtime-endpoints-deploy-models.md).

# Migre la carga de trabajo de inferencias de x86 a Graviton AWS
<a name="realtime-endpoints-graviton"></a>

 [AWS Graviton](https://aws.amazon.com/ec2/graviton/) es una serie de procesadores basados en ARM diseñados por. AWS Son más eficientes desde el punto de vista energético que los procesadores basados en x86 y ofrecen una atractiva relación precio-rendimiento. Amazon SageMaker AI ofrece instancias basadas en Graviton para que pueda aprovechar estos procesadores avanzados para sus necesidades de inferencia. 

 Puede migrar sus cargas de trabajo de inferencias existentes de instancias basadas en x86 a instancias basadas en Graviton, utilizando imágenes de contenedor compatibles con ARM o imágenes de contenedor de múltiples arquitecturas. En esta guía se presupone que está utilizando [imágenes de contenedor de aprendizaje profundo AWS](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) o sus propias imágenes de contenedor compatibles con ARM. Para obtener más información sobre cómo crear sus propias imágenes, consulte [Crear su imagen](https://github.com/aws/deep-learning-containers#building-your-image). 

 A un nivel alto, la migración de la carga de trabajo de inferencias de instancias basadas en x86 a instancias basadas en Graviton es un proceso de cuatro pasos: 

1. Envía las imágenes de los contenedores a Amazon Elastic Container Registry (Amazon ECR), AWS un registro de contenedores gestionado.

1. Cree un modelo de SageMaker IA.

1. Crear una configuración de punto de conexión.

1. Crear un punto de conexión.

 En las siguientes secciones de esta guía se facilita más información sobre los pasos anteriores. Sustituya *user placeholder text* los ejemplos de código por su propia información. 

**Topics**
+ [Inserción de imágenes de contenedor en Amazon ECR](#realtime-endpoints-graviton-ecr)
+ [Cree un modelo de SageMaker IA](#realtime-endpoints-graviton-model)
+ [Creación de una configuración de punto de conexión](#realtime-endpoints-graviton-epc)
+ [Creación de un punto de conexión](#realtime-endpoints-graviton-ep)

## Inserción de imágenes de contenedor en Amazon ECR
<a name="realtime-endpoints-graviton-ecr"></a>

 Puede enviar las imágenes de su contenedor a Amazon ECR con el AWS CLI. Cuando utilice una imagen compatible con ARM, compruebe que sea compatible con la arquitectura ARM: 

```
docker inspect deep-learning-container-uri
```

 La respuesta `"Architecture": "arm64"` indica que la imagen es compatible con la arquitectura ARM. Puede enviarla a Amazon ECR con el comando `docker push`. Para obtener más información, compruebe [Insertar una imagen de Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html). 

 Las imágenes de contenedor de arquitecturas múltiples son, fundamentalmente, un conjunto de imágenes de contenedor compatibles con diferentes arquitecturas o sistemas operativos, a las que puedes hacer referencia con un nombre de manifiesto común. Si utiliza imágenes de contenedores de arquitecturas múltiples, además de enviar las imágenes a Amazon ECR, también tendrá que enviar una lista de manifiestos a Amazon ECR. Una lista de manifiestos permite incluir anidados de otros manifiestos de imágenes, donde cada imagen incluida se especifica por arquitectura, sistema operativo y otros atributos de plataforma. En el siguiente ejemplo, se crea una lista de manifiestos y se envía a Amazon ECR. 

1. Cree un archivo de manifiesto.

   ```
   docker manifest create aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \
     aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:amd64 \
   	aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:arm64 \
   ```

1.  Anote la lista de manifiestos para que identifique correctamente qué imagen corresponde a cada arquitectura. 

   ```
   docker manifest annotate --arch arm64 aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \
     aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository:arm64
   ```

1. Inserte el manifiesto.

   ```
   docker manifest push aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository
   ```

 Para obtener más información sobre la creación e inserción de listas de manifiestos en Amazon ECR, consulte [Introducir imágenes de contenedores de arquitecturas múltiples para Amazon ECR](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/) e [Insertar una imagen de arquitecturas múltiples](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-multi-architecture-image.html). 

## Cree un modelo de SageMaker IA
<a name="realtime-endpoints-graviton-model"></a>

 Cree un modelo de SageMaker IA llamando a la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API. 

```
import boto3
from sagemaker import get_execution_role


aws_region = "aws-region"
sagemaker_client = boto3.client("sagemaker", region_name=aws_region)

role = get_execution_role()

sagemaker_client.create_model(
    ModelName = "model-name",
    PrimaryContainer = {
        "Image": "deep-learning-container-uri",
        "ModelDataUrl": "model-s3-location",
        "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": "inference-script-s3-location",
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": aws_region,
        }
    },
    ExecutionRoleArn = role
)
```

## Creación de una configuración de punto de conexión
<a name="realtime-endpoints-graviton-epc"></a>

 Crea una configuración de punto de conexión llamando a la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Para obtener una lista de instancias basadas en Graviton, consulte [Instancias optimizadas para la computación](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/compute-optimized-instances.html). 

```
sagemaker_client.create_endpoint_config(
    EndpointConfigName = "endpoint-config-name",
    ProductionVariants = [
        {
            "VariantName": "variant-name",
            "ModelName": "model-name",
            "InitialInstanceCount": 1,
            "InstanceType": "ml.c7g.xlarge", # Graviton-based instance
       }
    ]
)
```

## Creación de un punto de conexión
<a name="realtime-endpoints-graviton-ep"></a>

 Cree un punto de conexión llamando a la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html). 

```
sagemaker_client.create_endpoint(
    EndpointName = "endpoint-name",
    EndpointConfigName = "endpoint-config-name"
)
```

# Solucionar problemas de implementación de modelos de Amazon SageMaker AI
<a name="deploy-model-troubleshoot"></a>

Si encuentra algún problema al implementar modelos de aprendizaje automático en Amazon SageMaker AI, consulte la siguiente guía.

**Topics**
+ [Errores de detección en la cuenta de la CPU activa](#deploy-model-troubleshoot-jvms)
+ [Problemas al implementar un archivo model.tar.gz](#deploy-model-troubleshoot-tarballs)
+ [El contenedor principal no superó las comprobaciones de estado de ping](#deploy-model-troubleshoot-ping)

## Errores de detección en la cuenta de la CPU activa
<a name="deploy-model-troubleshoot-jvms"></a>

Si despliega un modelo de SageMaker IA con una máquina virtual Java (JVM) de Linux, es posible que se produzcan errores de detección que impidan utilizar los recursos de CPU disponibles. Este problema afecta a algunos dispositivos JVMs compatibles con Java 8 y Java 9, y a la mayoría de los que admiten Java 10 y Java 11. Estos JVMs implementan un mecanismo que detecta y gestiona el número de CPU y la memoria máxima disponible cuando se ejecuta un modelo en un contenedor de Docker y, de manera más general, dentro de los `taskset` comandos o grupos de control (cgroups) de Linux. SageMaker Las implementaciones de IA aprovechan algunos de los ajustes que utiliza la JVM para administrar estos recursos. Actualmente, esto hace que el contenedor detecte incorrectamente el número de disponibles. CPUs 

SageMaker La IA no limita el acceso CPUs a una instancia. Sin embargo, es posible que la JVM detecte el recuento de CPU `1` cuando haya más CPU CPUs disponibles para el contenedor. Como resultado, la JVM se ajusta toda la configuración interna para que se ejecute como si solo `1` núcleo de CPU está disponible. Esta configuración afecta a la recopilación de elementos no utilizados, bloqueos, subprocesos de compilador y otros elementos internos de la JVM que afectan negativamente a la simultaneidad, rendimiento y latencia del contenedor.

Como ejemplo de detección errónea, en un contenedor configurado para SageMaker IA que se implementa con una JVM basada en Java8\$1191 y que tiene cuatro disponibles en la instancia, ejecuta el siguiente CPUs comando para iniciar la JVM:

```
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version
```

Esto genera la salida siguiente:

```
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
```

Muchos de los JVMs afectados por este problema tienen la opción de deshabilitar este comportamiento y restablecer el acceso total a todos los componentes de la instancia. CPUs Deshabilite este comportamiento no deseado y establezca un acceso total a todas CPUs las instancias incluyendo el `-XX:-UseContainerSupport` parámetro al iniciar las aplicaciones Java. Por ejemplo, ejecute el comando `java` para iniciar su JVM tal y como se indica a continuación:

```
java -XX:-UseContainerSupport -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version
```

Esto genera la salida siguiente:

```
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
```

Compruebe si la JVM que se usa en el contenedor es compatible con el parámetro `-XX:-UseContainerSupport`. En caso afirmativo, pase el parámetro siempre al iniciar la JVM. Esto proporciona acceso a todas CPUs las instancias. 

También es posible que te encuentres con este problema cuando utilices indirectamente una JVM en contenedores de SageMaker IA. Por ejemplo, cuando se utiliza una JVM para admitir SparkML Scala. El parámetro `-XX:-UseContainerSupport` también afecta a la salida que devuelve la API `Runtime.getRuntime().availableProcessors()` de Java ``. 

## Problemas al implementar un archivo model.tar.gz
<a name="deploy-model-troubleshoot-tarballs"></a>

Al implementar un modelo mediante un archivo `model.tar.gz`, el tarball del modelo no debe incluir ningún symlink. Los symlinks provocan un error en la creación del modelo. Además, recomendamos que no incluya ningún archivo innecesario en el tarball.

## El contenedor principal no superó las comprobaciones de estado de ping
<a name="deploy-model-troubleshoot-ping"></a>

 Si el contenedor principal no supera las comprobaciones de estado de ping y aparece el siguiente mensaje de error, esto indica que hay un problema con el contenedor o el script: 

```
The primary container for production variant beta did not pass the ping health check. Please check CloudWatch Logs logs for this endpoint.
```

 Para solucionar este problema, deberías comprobar los CloudWatch registros de registro del terminal en cuestión para comprobar si hay algún error o problema que impida que el contenedor responda a `/ping` o. `/invocations` Los registros pueden incluir un mensaje de error que podría indicar el problema. Una vez que haya identificado el error y el motivo del mismo, debe resolverlo. 

 También es una buena práctica probar la implementación local del modelo antes de crear un punto de conexión. 
+  Usa el modo local del SageMaker SDK para imitar el entorno hospedado implementando el modelo en un punto final local. Para obtener más información, consulte [Modo local](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode). 
+  Usa los comandos vanilla docker para probar si el contenedor responde a /ping e /invocations. Para obtener más información, consulte [local\$1test](https://github.com/aws/amazon-sagemaker-examples/tree/main/advanced_functionality/scikit_bring_your_own/container/local_test). 

# Prácticas recomendadas de optimización de costos de inferencia
<a name="inference-cost-optimization"></a>

El siguiente contenido proporciona técnicas y consideraciones para optimizar el costo de puntos de conexión. Puede utilizar estas recomendaciones para optimizar el costo de puntos de conexión nuevos y existentes.

## Prácticas recomendadas
<a name="inference-cost-optimization-list"></a>

Para optimizar sus costes de inferencia de SageMaker IA, siga estas prácticas recomendadas.

### Elija la mejor opción de inferencia para el trabajo.
<a name="collapsible-1"></a>

SageMaker La IA ofrece 4 opciones de inferencia diferentes para proporcionar la mejor opción de inferencia para el trabajo. Es posible que pueda ahorrar costos si elige la opción de inferencia que mejor se adapte a su carga de trabajo.
+ Utilice [inferencia en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) para cargas de trabajo de baja latencia con patrones de tráfico predecibles que deben tener características de latencia coherentes y estar siempre disponibles. Usted paga por el uso de la instancia.
+ Utilice [inferencia sin servidor](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html) para cargas de trabajo sincrónicas que tengan un patrón de tráfico intenso y puedan aceptar variaciones en la latencia p99. La inferencia sin servidor se escala automáticamente para adaptarse al tráfico de su carga de trabajo, por lo que no tendrá que pagar por ningún recurso inactivo. Solo pagará por la duración de la solicitud de inferencia. Se pueden usar el mismo modelo y los mismos contenedores con la inferencia en tiempo real y sin servidor, por lo que puede cambiar entre estos dos modos si sus necesidades cambian.
+ Utilice la [inferencia asíncrona](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html) para cargas de trabajo asíncronas que procesan hasta 1 GB de datos (como cuerpo de textos, imágenes, vídeo y audio) que no son sensibles a la latencia y sí a los costos. Con la inferencia asíncrona, puede controlar los costos especificando un número fijo de instancias para obtener la velocidad de procesamiento óptima, en lugar de aprovisionarlas para los picos de procesamiento. También puede reducir la escala a cero para ahorrar costos adicionales.
+ Utilice [inferencia por lotes](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html) para las cargas de trabajo para las que necesite inferir un conjunto grande de datos para procesos que se llevan a cabo sin conexión (es decir, no necesita un punto de conexión persistente). La instancia se paga mientras dure el trabajo de inferencia por lotes.

### Inscríbase en un SageMaker AI Savings Plan.
<a name="collapsible-2"></a>
+ Si tiene un nivel de uso uniforme en todos los servicios de SageMaker IA, puede optar por un SageMaker AI Savings Plan para reducir sus costes hasta en un 64%.
+ [Amazon SageMaker AI Savings Plans](https://aws.amazon.com/savingsplans/ml-pricing/) ofrece un modelo de precios flexible para Amazon SageMaker AI, a cambio del compromiso de mantener una cantidad constante de uso (medida en USD por hora) durante un período de uno o tres años. Estos planes se aplican automáticamente a los usos de instancias de SageMaker AI ML aptas, como SageMaker Studio Classic Notebook, SageMaker On-Demand Notebook, SageMaker Processing, SageMaker Data Wrangler, SageMaker Training, SageMaker Real-Time Inference y SageMaker Batch Transform, independientemente de la familia, el tamaño o la región de la instancia. Por ejemplo, puede cambiar el uso de una instancia ml.c5.xlarge de CPU que se ejecute en el Este de EE. UU. (Ohio) a una instancia ML.inf1 en Oeste de EE. UU. (Oregón) para cargas de trabajo de inferencia en cualquier momento y seguir pagando automáticamente el precio de Savings Plans.

### Optimice su modelo para que funcione mejor.
<a name="collapsible-3"></a>
+ Los modelos no optimizados pueden prolongar los tiempos de ejecución y consumir más recursos. Puede optar por utilizar más instancias o más grandes para mejorar el rendimiento; sin embargo, esto conlleva costos más altos.
+ Al optimizar sus modelos para que tengan un mayor rendimiento, podrá reducir los costos utilizando menos instancias o más pequeñas y, al mismo tiempo, mantener las mismas o mejores características de rendimiento. Puedes usar [SageMaker Neo](https://aws.amazon.com/sagemaker/neo/) con SageMaker IA Inference para optimizar automáticamente los modelos. Para obtener más detalles y ejemplos, consulte [Optimización del rendimiento de los modelos con SageMaker Neo](neo.md).

### Utilice el tipo y el tamaño de instancia más óptimos para realizar inferencias en tiempo real.
<a name="collapsible-4"></a>
+ SageMaker Inference tiene más de 70 tipos y tamaños de instancias que se pueden usar para implementar modelos de aprendizaje automático, incluidos los chipsets AWS Inferentia y Graviton optimizados para el aprendizaje automático. Elegir la instancia adecuada para su modelo le ayuda a garantizar que dispone de la instancia de mayor rendimiento al menor costo para sus modelos.
+ Al usar [Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html), puede comparar rápidamente diferentes instancias para comprender el rendimiento del modelo y los costos. Con estos resultados, puede elegir la instancia que desea implementar con la mejor rentabilidad de la inversión.

### Mejore la eficiencia y los costos mediante la combinación de varios puntos de conexión en un único punto de conexión para realizar inferencias en tiempo real.
<a name="collapsible-5"></a>
+ Los costos pueden aumentar rápidamente cuando se implementan varios puntos de conexión, especialmente si los puntos de conexión no utilizan completamente las instancias subyacentes. Para saber si la instancia está infrautilizada, consulta las métricas de uso (CPU, GPU, etc.) de Amazon CloudWatch para tus instancias. Si tiene más de uno de estos puntos de conexión, puede combinar los modelos o contenedores de estos puntos de conexión múltiples en un solo punto de conexión.
+ Al utilizar [puntos de conexión multimodelo](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) (MME) o [puntos de conexión multicontenedor](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html) (MCE), puede implementar varios modelos o contenedores de ML en un único punto de conexión para compartir la instancia entre varios modelos o contenedores y mejorar la rentabilidad de la inversión. Para obtener más información, consulte este artículo [sobre cómo ahorrar costes de inferencia mediante el uso de puntos de enlace multimodelo de Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/save-on-inference-costs-by-using-amazon-sagemaker-multi-model-endpoints/) o cómo [implementar varios contenedores de servicio en una sola instancia con puntos de enlace de varios contenedores de Amazon SageMaker AI en el](https://aws.amazon.com/blogs/machine-learning/deploy-multiple-serving-containers-on-a-single-instance-using-amazon-sagemaker-multi-container-endpoints/) blog Machine Learning. AWS 

### Configure el escalado automático para que se adapte a sus requisitos de carga de trabajo para realizar inferencias asíncronas y en tiempo real.
<a name="collapsible-6"></a>
+ Sin el escalado automático, debe aprovisionar los picos de tráfico o el riesgo de no disponibilidad del modelo. A menos que el tráfico de su modelo se mantenga estable durante todo el día, habrá un exceso de capacidad no utilizada. Esto conduce a una baja utilización y al despilfarro de recursos.
+ El [escalado automático](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html) es una out-of-the-box función que monitorea las cargas de trabajo y ajusta dinámicamente la capacidad para mantener un rendimiento estable y predecible al menor coste posible. Cuando la carga de trabajo aumenta, el escalado automático proporciona más instancias en línea. Cuando la carga de trabajo disminuye, el escalado automático elimina las instancias innecesarias, lo que le ayuda a reducir los costos de computación. Para obtener más información, consulte [Configuración de puntos finales de inferencia de escalado automático en Amazon SageMaker AI en el blog](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-sagemaker/) AWS Machine Learning.

# Prácticas recomendadas para reducir al mínimo las interrupciones durante las actualizaciones de controladores de la GPU
<a name="inference-gpu-drivers"></a>

SageMaker AI Model Deployment actualiza los controladores de GPU en las instancias de ML para ofrecer opciones de inferencia en tiempo real, por lotes y asíncrona a lo largo del tiempo para brindar a los clientes acceso a las mejoras de los proveedores de controladores. A continuación, puede ver la versión de GPU compatible con cada opción de inferencia. Las diferentes versiones del controlador pueden cambiar la forma en que su modelo interactúa con el. GPUs A continuación, se muestran algunas estrategias que le ayudarán a entender cómo funciona su aplicación con las distintas versiones de controladores. 

## Versiones actuales y familias de instancias compatibles
<a name="inference-gpu-drivers-versions"></a>

Amazon SageMaker AI Inference admite los siguientes controladores y familias de instancias:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/inference-gpu-drivers.html)

## Solucione los problemas de su contenedor de modelos con las capacidades de la GPU
<a name="inference-gpu-drivers-troubleshoot"></a>

Si tiene algún problema al ejecutar la carga de trabajo de la GPU, consulte las siguientes instrucciones:

### Fallo en la detección de tarjeta de GPU o error de inicialización de NVIDIA
<a name="collapsible-section-0"></a>

Ejecute el comando `nvidia-smi` (Interfaz de administración del sistema NVIDIA) desde el contenedor de Docker. Si la interfaz de administración del sistema NVIDIA detecta un error de detección de la GPU o un error de inicialización de NVIDIA, mostrará el siguiente mensaje de error:

```
Failed to initialize NVML: Driver/library version mismatch
```

Según su caso de uso, siga estas prácticas recomendadas para resolver el fallo o error:
+ Siga las recomendaciones de mejores prácticas que se describen en el menú desplegable [Si trae sus propios (BYO) contenedores de modelos](#collapsible-byoc).
+ Siga las recomendaciones de mejores prácticas que se describen en el menú desplegable [Si utiliza una capa de compatibilidad CUDA](#collapsible-cuda-compat).

Consulte la [página de la interfaz de administración del sistema NVIDIA](https://developer.nvidia.com/nvidia-system-management-interface) en el sitio web de NVIDIA para obtener más información.

### `CannotStartContainerError`
<a name="collapsible-section-cannot-start-container"></a>

 Si la instancia de GPU utiliza versiones de controladores NVIDIA que no son compatibles con la versión CUDA del contenedor de Docker, no se podrá implementar un dispositivo de punto de conexión y aparecerá el siguiente mensaje de error: 

```
 Failure reason CannotStartContainerError. Please ensure the model container for variant <variant_name> starts correctly when invoked with 'docker run <image> serve'
```

Según su caso de uso, siga estas prácticas recomendadas para resolver el fallo o error:
+ Siga las recomendaciones de mejores prácticas que se describen en el menú desplegable [El controlador del que depende mi contenedor es superior a la versión de las instancias de GPU ML](#collapsible-driver-dependency-higher).
+ Siga las recomendaciones de mejores prácticas que se describen en el menú desplegable [Si utiliza una capa de compatibilidad CUDA](#collapsible-cuda-compat).

## Prácticas recomendadas para trabajar con versiones de controladores que no coinciden
<a name="inference-gpu-drivers-cuda-toolkit-updates"></a>

A continuación figura información sobre cómo actualizar el controlador de GPU:

### El controlador del que depende mi contenedor es inferior a la versión de la instancia de GPU ML
<a name="collapsible-driver-dependency-lower"></a>

No hay que hacer nada más. NVIDIA ofrece compatibilidad con versiones anteriores.

### El controlador del que depende mi contenedor es superior a la versión de las instancias de GPU ML
<a name="collapsible-driver-dependency-higher"></a>

Si se trata de una diferencia de versión poco importante, no hay que hacer nada más. NVIDIA proporciona compatibilidad con versiones posteriores poco importantes.

Si se trata de una diferencia de versión importante, será necesario instalar CUDA Compatibility Package. Consulte [CUDA Compatibility Package](https://docs.nvidia.com/deploy/cuda-compatibility/index.html) en la documentación de NVIDIA.

**importante**  
CUDA Compatibility Package no es compatible con versiones anteriores, por lo que es necesario deshabilitarlo si la versión del controlador de la instancia es superior a la versión de CUDA Compatibility Package.

### Si trae sus propios (BYO) contenedores de modelos
<a name="collapsible-byoc"></a>

Asegúrese de que no haya paquetes de controladores de NVIDIA agrupados en la imagen, ya que podrían provocar conflictos con la versión del controlador de NVIDIA alojada.

### Si utiliza una capa de compatibilidad CUDA
<a name="collapsible-cuda-compat"></a>

Para comprobar si la versión del controlador de Nvidia de la plataforma es compatible con la versión de CUDA Compatibility Package instalada en el contenedor del modelo, consulte la [documentación de CUDA](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#use-the-right-compat-package). Si la versión del controlador de Nvidia de la plataforma no es compatible con la versión de CUDA Compatibility Package, puede deshabilitar o eliminar CUDA Compatibility Package de la imagen del contenedor del modelo. Si la versión de las bibliotecas de compatibilidad de CUDA es compatible con la última versión del controlador de Nvidia, le sugerimos que habilite CUDA Compatibility Package en función de la versión del controlador de Nvidia detectada para una futura compatibilidad añadiendo el siguiente fragmento de código en el guión de intérprete de comandos de inicio del contenedor (en el guión `ENTRYPOINT`).

El guión muestra cómo cambiar dinámicamente el uso de CUDA Compatibility Package en función de la versión del controlador Nvidia detectada en el host implementado para el contenedor de modelos. Cuando se SageMaker lanza una versión más reciente del controlador Nvidia, el paquete de compatibilidad CUDA instalado se puede desactivar automáticamente si la aplicación CUDA es compatible de forma nativa con el nuevo controlador.

```
#!/bin/bash

verlt() {
    [ "$1" = "$2" ] && return 1 || [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then
    CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d'.' -f 3-)
    echo "CUDA compat package should be installed for NVIDIA driver smaller than ${CUDA_COMPAT_MAX_DRIVER_VERSION}"
    NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true)
    echo "Current installed NVIDIA driver version is ${NVIDIA_DRIVER_VERSION}"
    if verlt $NVIDIA_DRIVER_VERSION $CUDA_COMPAT_MAX_DRIVER_VERSION; then
        echo "Adding CUDA compat to LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH
        echo $LD_LIBRARY_PATH
    else
        echo "Skipping CUDA compat setup as newer NVIDIA driver is installed"
    fi
else
    echo "Skipping CUDA compat setup as package not found"
fi
```

# Mejores prácticas para la seguridad y la salud de los terminales con Amazon SageMaker AI
<a name="best-practice-endpoint-security"></a>

Para abordar los problemas de seguridad más recientes, Amazon SageMaker AI parchea automáticamente los puntos finales con el software más reciente y seguro. Sin embargo, si modificas de forma incorrecta las dependencias de tus puntos de conexión, Amazon SageMaker AI no podrá parchearlos automáticamente ni reemplazar las instancias en mal estado. Para garantizar que sus puntos de conexión sigan siendo aptos para actualizaciones automáticas, aplique las siguientes prácticas recomendadas.

## No elimine recursos mientras los puntos de conexión los usen
<a name="dont-delete-resources-in-use"></a>

Evite eliminar cualquiera de los siguientes recursos si ya tiene puntos de conexión que los utilizan:
+ La definición del modelo que se crea con la [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)acción en la SageMaker API de Amazon.
+ Cualquier artefacto del modelo que especifique para el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-ModelDataUrl](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-ModelDataUrl).
+ El rol de IAM y los permisos que especifique para el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ExecutionRoleArn](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ExecutionRoleArn).
**Recordatorio**  
En la definición del modelo que utilice su punto de conexión, asegúrese de que el rol de IAM que especificó tenga los permisos correctos. Para obtener más información sobre los permisos necesarios para los puntos de enlace de Amazon SageMaker AI, consulte[CreateModel API: permisos de rol de ejecución](sagemaker-roles.md#sagemaker-roles-createmodel-perms).
+ Las imágenes de inferencia que especifique para el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-Image](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-Image), si utiliza su propio código de inferencia.
**Recordatorio**  
Si utilizas la función de registro privado, asegúrate de que Amazon SageMaker AI pueda acceder al registro privado siempre que utilices el punto final.
+ Las subredes y grupos de seguridad de Amazon VPC que especifique para el parámetro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-VpcConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-VpcConfig).
+ La configuración de punto final que se crea con la [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)acción en la SageMaker API de Amazon.
+ Cualquier clave de KMS o buckets de Amazon S3 que especifique en la configuración del punto de conexión.
**Recordatorio**  
Asegúrese de no deshabilitar estas claves de KMS.

## Siga estos procedimientos para actualizar sus puntos de conexión
<a name="procedures-to-update-endpoint"></a>

Cuando actualice sus puntos de enlace de Amazon SageMaker AI, utilice cualquiera de los siguientes procedimientos que se adapten a sus necesidades.

**Para actualizar los ajustes de definición de su modelo**

1. Crea una nueva definición de modelo con la configuración actualizada mediante la CreateModel acción de la SageMaker API de Amazon.

1. Cree una nueva configuración de punto de conexión que utilice la nueva definición del modelo. Para ello, utiliza la CreateEndpointConfig acción de la SageMaker API de Amazon.

1. Actualice el dispositivo de punto de conexión con la nueva configuración de punto de conexión para que surta efecto la configuración de definición de modelo actualizada.

1. (Opcional) Elimine la configuración de punto de conexión anterior si no la va a utilizar con ningún otro punto de conexión. También puede eliminar los recursos que especificó en la definición del modelo si no los va a utilizar con ningún otro punto de conexión. Estos recursos incluyen artefactos de modelos en Amazon S3 e imágenes de inferencia.

**Para actualizar la configuración del punto de conexión**

1. Cree una nueva configuración de punto de conexión con la configuración actualizada.

1. Actualice el punto de conexión con la nueva configuración para que surtan efecto sus actualizaciones.

1. (Opcional) Elimine la configuración de punto de conexión anterior si no la va a utilizar con ningún otro punto de conexión. También puede eliminar los recursos que especificó en la definición del modelo si no los va a utilizar con ningún otro punto de conexión. Estos recursos incluyen artefactos de modelos en Amazon S3 e imágenes de inferencia.

Siempre que cree una nueva definición de modelo o configuración de punto de conexión, recomendamos que utilice un nombre exclusivo. Si desea actualizar estos recursos y conservar sus nombres originales, utilice los siguientes procedimientos.

**Para actualizar la configuración del modelo y conservar el nombre del modelo original**

1. Elimine la definición del modelo existente. En este punto, cualquier punto de conexión que utilice el modelo está dañado, pero se corrige esto en los pasos siguientes.

1. Vuelva a crear la definición del modelo con la configuración actualizada y utilice el mismo nombre de modelo.

1. Cree una nueva configuración de punto de conexión que utilice la definición actualizada del modelo.

1. Actualice el punto de conexión con la nueva configuración de punto de conexión para que surtan efecto sus actualizaciones.

**Para actualizar la configuración de su punto de conexión y conservar el nombre de la configuración original**

1. Elimine la configuración de punto de conexión existente.

1. Cree una nueva configuración de punto de conexión con la configuración actualizada y utilice el nombre original.

1. Actualice el punto de conexión con la nueva configuración para que surtan efecto sus actualizaciones.

# Actualización de los contenedores de inferencia para cumplir con el kit de herramientas de contenedores de NVIDIA
<a name="container-nvidia-compliance"></a>

A partir de las versiones 1.17.4 y posteriores, el kit de herramientas de contenedores de NVIDIA ya no monta automáticamente las bibliotecas de compatibilidad con CUDA. Este cambio de comportamiento podría afectar a sus cargas de trabajo de inferencia de SageMaker IA. Es posible que tus terminales de SageMaker IA y tus trabajos de transformación por lotes usen contenedores incompatibles con las versiones más recientes del kit de herramientas de contenedores de NVIDIA. Para asegurarse de que sus cargas de trabajo cumplen con los requisitos más recientes, es posible que deba actualizar sus puntos de conexión o configurar sus trabajos de transformación por lotes.

## Actualización de los puntos finales de SageMaker IA para garantizar la conformidad
<a name="endpoint-compliance"></a>

Te recomendamos que actualices los puntos finales de SageMaker IA existentes o crees otros nuevos que admitan el comportamiento predeterminado más reciente.

Para garantizar que su punto de conexión sea compatible con las versiones más recientes del kit de herramientas de contenedores de NVIDIA, siga estos pasos:

1. Actualice la configuración de las bibliotecas de compatibilidad de CUDA si utiliza su propio contenedor.

1. Especifique una imagen de máquina de Amazon (AMI) de inferencia que admita el comportamiento más reciente del kit de herramientas de contenedores NVIDIA. Especifica una AMI al actualizar un punto de conexión existente o al crear uno nuevo.

### Actualización de la configuración de compatibilidad de CUDA si utiliza su propio contenedor
<a name="cuda-compatibility"></a>

Las bibliotecas de compatibilidad de CUDA permiten la compatibilidad con las versiones posteriores. Esta compatibilidad se aplica a todas las versiones del kit de herramientas CUDA que sean más recientes que el controlador NVIDIA proporcionado por la SageMaker instancia de IA.

Debe habilitar las bibliotecas de compatibilidad de CUDA solo cuando el controlador de NVIDIA que utiliza la instancia de SageMaker IA tenga una versión anterior al kit de herramientas CUDA en el contenedor del modelo. Si el contenedor de su modelo no requiere compatibilidad con CUDA, puede omitir este paso. Por ejemplo, puedes saltarte este paso si no piensas usar un kit de herramientas CUDA más nuevo que el que proporcionan las instancias de IA. SageMaker 

Debido a los cambios introducidos en la versión 1.17.4 del kit de herramientas de contenedores NVIDIA, puede habilitar explícitamente las bibliotecas de compatibilidad de CUDA, si es necesario, añadiéndolas a `LD_LIBRARY_PATH` en el contenedor.

Le sugerimos que habilite la compatibilidad con CUDA en función de la versión del controlador NVIDIA detectada. Para habilitarla, añada el siguiente fragmento de código al script del intérprete de comandos de inicio del contenedor. Añada este código al script `ENTRYPOINT`.

El siguiente script muestra cómo cambiar dinámicamente el uso de la compatibilidad de CUDA en función de la versión del controlador NVIDIA detectada en el host implementado para el contenedor de modelos.

```
#!/bin/bash

verlt() {
    [ "$1" = "$2" ] && return 1 || [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then
    CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d'.' -f 3-)
    echo "CUDA compat package should be installed for NVIDIA driver smaller than ${CUDA_COMPAT_MAX_DRIVER_VERSION}"
    NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true)
    echo "Current installed NVIDIA driver version is ${NVIDIA_DRIVER_VERSION}"
    if verlt $NVIDIA_DRIVER_VERSION $CUDA_COMPAT_MAX_DRIVER_VERSION; then
        echo "Adding CUDA compat to LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH
        echo $LD_LIBRARY_PATH
    else
        echo "Skipping CUDA compat setup as newer NVIDIA driver is installed"
    fi
else
    echo "Skipping CUDA compat setup as package not found"
fi
```

### Especificación de una AMI de inferencia que cumpla con el kit de herramientas de contenedores NVIDIA
<a name="specify-inference-ami"></a>

En el `InferenceAmiVersion` parámetro del tipo de `ProductionVariant` datos, puede seleccionar la AMI para un punto final de SageMaker IA. Cada una de las compatibles AMIs es una imagen preconfigurada. Cada imagen se configura AWS con un conjunto de versiones de software y controlador.

De forma predeterminada, la SageMaker IA AMIs sigue el comportamiento anterior. Montan automáticamente las bibliotecas de compatibilidad de CUDA en el contenedor. Para que un punto de conexión utilice el nuevo comportamiento, debe especificar una versión de AMI de inferencia que esté configurada para el nuevo comportamiento.

Las siguientes versiones de la AMI de inferencia siguen actualmente el nuevo comportamiento. No montan las bibliotecas de compatibilidad de CUDA automáticamente.

al2- -2-1 ami-sagemaker-inference-gpu  
+ Versión del controlador NVIDIA: 535.54.03
+ Versión de CUDA: 12.2

al2- -3-1 ami-sagemaker-inference-gpu  
+ Versión del controlador NVIDIA: 550.144.01
+ Versión de CUDA: 12.4

### Actualización de un punto de conexión existente
<a name="update-existing-endpoint"></a>

Utilice el siguiente ejemplo para actualizar un punto de conexión existente. El ejemplo utiliza una versión de AMI de inferencia que deshabilita el montaje automático de las bibliotecas de compatibilidad de CUDA.

```
ENDPOINT_NAME="<endpoint name>"
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

# Obtaining current endpoint configuration
CURRENT_ENDPOINT_CFG_NAME=$(aws sagemaker describe-endpoint --endpoint-name "$ENDPOINT_NAME" --query "EndpointConfigName" --output text)
NEW_ENDPOINT_CFG_NAME="${CURRENT_ENDPOINT_CFG_NAME}new"

# Copying Endpoint Configuration with AMI version specified
aws sagemaker describe-endpoint-config \
    --endpoint-config-name ${CURRENT_ENDPOINT_CFG_NAME} \
    --output json | \
jq "del(.EndpointConfigArn, .CreationTime) | . + {
    EndpointConfigName: \"${NEW_ENDPOINT_CFG_NAME}\",
    ProductionVariants: (.ProductionVariants | map(.InferenceAmiVersion = \"${INFERENCE_AMI_VERSION}\"))
}" > /tmp/new_endpoint_config.json

# Make sure all fields in the new endpoint config look as expected
cat /tmp/new_endpoint_config.json

# Creating new endpoint config
aws sagemaker create-endpoint-config \
   --cli-input-json file:///tmp/new_endpoint_config.json
    
# Updating the endpoint
aws sagemaker update-endpoint \
    --endpoint-name "$ENDPOINT_NAME" \
    --endpoint-config-name "$NEW_ENDPOINT_CFG_NAME" \
    --retain-all-variant-properties
```

### Creación de un nuevo punto de conexión
<a name="create-new-endpoint"></a>

Utilice el siguiente ejemplo para crear una nuevo punto de conexión: El ejemplo utiliza una versión de AMI de inferencia que deshabilita el montaje automático de las bibliotecas de compatibilidad de CUDA.

```
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

aws sagemakercreate-endpoint-config \
 --endpoint-config-name "<endpoint_config>" \
 --production-variants '[{ \
    ....
    "InferenceAmiVersion":  "${INFERENCE_AMI_VERSION}", \
    ...
    "}]'

aws sagemaker create-endpoint \
--endpoint-name "<endpoint_name>" \
--endpoint-config-name "<endpoint_config>"
```

## Ejecución de trabajos de transformación por lotes conformes
<a name="batch-compliance"></a>

La *transformación por lotes* es la opción de inferencia que resulta más adecuada para las solicitudes de procesamiento de grandes cantidades de datos sin conexión. Para crear trabajos de transformación por lotes, utiliza la acción de la API `CreateTransformJob`. Para obtener más información, consulte [Transformación por lotes para inferencias con Amazon AI SageMaker](batch-transform.md).

El comportamiento modificado del kit de herramientas de contenedores NVIDIA afecta a los trabajos de transformación por lotes. Para ejecutar una transformación por lotes que cumpla con los requisitos del kit de herramientas de contenedores NVIDIA, haga lo siguiente:

1. Si desea ejecutar la transformación por lotes con un modelo para el que ha utilizado su propio contenedor, primero actualice el contenedor para que sea compatible con CUDA. Para actualizarlo, siga el proceso que se indica en [Actualización de la configuración de compatibilidad de CUDA si utiliza su propio contenedor](#cuda-compatibility).

1. Utilice la acción de la API `CreateTransformJob` para crear el trabajo de transformación por lotes. En su solicitud, establezca la variable de entorno `SAGEMAKER_CUDA_COMPAT_DISABLED` en `true`. Este parámetro indica al contenedor que no monte automáticamente las bibliotecas de compatibilidad de CUDA.

   Por ejemplo, cuando se crea un trabajo de transformación por lotes mediante AWS CLI, se establece la variable de entorno con el `--environment` parámetro:

   ```
   aws sagemaker create-transform-job \
       --environment '{"SAGEMAKER_CUDA_COMPAT_DISABLED": "true"}'\
       . . .
   ```

# Características admitidas
<a name="model-deploy-feature-matrix"></a>

 Amazon SageMaker AI ofrece las siguientes cuatro opciones para implementar modelos de inferencia. 
+  Inferencia en tiempo real para cargas de trabajo de inferencia con requisitos en tiempo real, interactivos y de baja latencia. 
+  Transformación por lotes para inferencias fuera de línea con grandes conjuntos de datos. 
+  Inferencia asíncrona para near-real-time inferencias con entradas grandes que requieren tiempos de preprocesamiento más prolongados. 
+  Inferencia sin servidor para cargas de trabajo de inferencia que tienen períodos de inactividad entre picos de tráfico repentinos. 

 En la siguiente tabla se resumen las funciones principales de la plataforma compatibles con cada opción de inferencia. No muestra las funciones que pueden proporcionar los marcos, los contenedores Docker personalizados o el encadenamiento de diferentes servicios AWS . 


| Característica | [Inferencia en tiempo real](realtime-endpoints.md) | [Transformación por lotes](batch-transform.md) | [Inferencia asíncrona](async-inference.md) | [Inferencia sin servidor](serverless-endpoints.md) | [Contenedores de Docker](docker-containers.md) | 
| --- | --- | --- | --- | --- | --- | 
| [Soporte de escalado automático](endpoint-auto-scaling.md) | ✓ | N/A | ✓ | ✓ | N/A | 
| Soporte de GPU | ✓1 | ✓1 | ✓1 |  | [1P](common-info-all-im-models.md), prediseñado, BYOC | 
| Modelo único | ✓ | ✓ | ✓ | ✓ | N/A | 
| [Punto de conexión multimodelo](multi-model-endpoints.md) | ✓ |  |  |  | k-NN, Linear Learner, XGBoost RCF, Apache, scikit-learn 2 TensorFlow MXNet PyTorch | 
| [Punto de conexión con varios contenedores](multi-container-endpoints.md) | ✓ |  |  |  | 1P, prediseñado, Extend prediseñado, BYOC | 
| [Canalización de inferencia en serie](inference-pipelines.md) | ✓ | ✓ |  |  | 1P, prediseñado, Extend prediseñado, BYOC | 
| [Recomendador de inferencias](inference-recommender.md) | ✓ |  |  |  | 1P, prediseñado, Extend prediseñado, BYOC | 
| Compatibilidad con enlace privado | ✓ | ✓ | ✓ |  | N/A | 
| [ capture/Model Soporte para monitores de datos](model-monitor.md) | ✓ | ✓ |  |  | N/A | 
| [DLCs compatible](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) | 1P, prediseñado, Extend prediseñado, BYOC | [1P](common-info-all-im-models.md), prediseñado, Extend prediseñado, BYOC | 1P, prediseñado, Extend prediseñado, BYOC | 1P, prediseñado, Extend prediseñado, BYOC | N/A | 
| Protocolos admitidos | HTTP(S) | HTTP(S) | HTTP(S) | HTTP(S) | N/A | 
| Tamaño de carga | < 6 MB | ≤ 100 MB | ≤ 1 GB | ≤ 4 MB |  | 
| Codificación fragmentada HTTP | Depende del marco, no se admite 1P | N/A | Depende del marco, no se admite 1P | Depende del marco, no se admite 1P | N/A | 
| Solicita tiempo de espera | < 60 segundos | Días | 1 hora | < 60 segundos | N/A | 
| [Barandillas de despliegue: despliegues blue/green ](deployment-guardrails.md) | ✓ | N/A | ✓ |  | N/A | 
| [Barreras de protección de implementación: implementaciones continuas](deployment-guardrails.md) | ✓ | N/A | ✓ |  | N/A | 
| [Pruebas de sombra](shadow-tests.md) | ✓ |  |  |  | N/A | 
| Escalado a cero |  | N/A | ✓ | ✓ | N/A | 
| Compatibilidad con los paquetes modelo de Market Place | ✓ | ✓ | ✓ |  | N/A | 
| Compatibilidad con nubes virtuales privadas | ✓ | ✓ | ✓ |  | N/A | 
| Compatibilidad con múltiples variantes de producción | ✓ |  |  |  | N/A | 
| Aislamiento de red | ✓ |  | ✓ |  | N/A | 
| [Compatibilidad con servicio paralelo modelo](model-parallel-intro.md) | ✓3 | ✓ | ✓3 |  | ✓3 | 
| Cifrado de volumen | ✓ | ✓ | ✓ | ✓ | N/A | 
| ¿Cliente AWS KMS | ✓ | ✓ | ✓ | ✓ | N/A | 
| Instancias compatibles d | ✓ | ✓ | ✓ |  | N/A | 
| [soporte inf1](neo-supported-cloud.md) | ✓ |  |  |  | ✓ | 

 Con la SageMaker IA, puede implementar un solo modelo o varios modelos detrás de un único punto final de inferencia para realizar inferencias en tiempo real. En la siguiente tabla se resumen las funciones principales compatibles con las distintas opciones de alojamiento que vienen con la inferencia en tiempo real. 


| Característica | [Puntos de conexión de modelo único](realtime-single-model.md) | [Puntos de conexión multimodelo](multi-model-endpoints.md) | [Canalización de inferencia en serie](inference-pipelines.md) | [Puntos de conexión con varios contenedores](multi-container-endpoints.md) | 
| --- | --- | --- | --- | --- | 
| [Soporte de escalado automático](endpoint-auto-scaling.md) | ✓ | ✓ | ✓ | ✓ | 
| Soporte de GPU | ✓ 1 | ✓ | ✓ |  | 
| Modelo único | ✓ | ✓ | ✓ | ✓ | 
| [Puntos de conexión multimodelo](multi-model-endpoints.md) |  | ✓ | ✓ | N/A | 
| [Puntos de conexión con varios contenedores](multi-container-endpoints.md) | ✓ |  |  | N/A | 
| [Canalización de inferencia en serie](inference-pipelines.md) | ✓ | ✓ | N/A |  | 
| [Recomendador de inferencias](inference-recommender.md) | ✓ |  |  |  | 
| Compatibilidad con enlace privado | ✓ | ✓ | ✓ | ✓ | 
| [Soporte para el monitoreo de datos capture/Model ](model-monitor.md) | ✓ | N/A | N/A | N/A | 
| DLCs compatible | 1P, prediseñado, Extend prediseñado, BYOC | K-nn XGBoost, Linear Learner, RCF, Apache TensorFlow MXNet, scikit-learn 2 PyTorch | 1P, prediseñado, Extend prediseñado, BYOC | 1P, prediseñado, Extend prediseñado, BYOC | 
| Protocolos admitidos | HTTP(S) | HTTP(S) | HTTP(S) | HTTP(S) | 
| Tamaño de carga | < 6 MB | < 6 MB | < 6 MB | < 6 MB | 
| Tiempo de espera de solicitud | < 60 segundos | < 60 segundos | < 60 segundos | < 60 segundos | 
| [Barandillas de despliegue: despliegues blue/green ](deployment-guardrails.md) | ✓ | ✓ | ✓ | ✓ | 
| [Barreras de protección de implementación: implementaciones continuas](deployment-guardrails.md) | ✓ | ✓ | ✓ | ✓ | 
| [Pruebas de sombra](shadow-tests.md) | ✓ |  |  |  | 
| Compatibilidad con los paquetes modelo de Market Place | ✓ |  |  |  | 
| Compatibilidad con nubes virtuales privadas | ✓ | ✓ | ✓ | ✓ | 
| Compatibilidad con múltiples variantes de producción | ✓ |  | ✓ | ✓ | 
| Aislamiento de red | ✓ | ✓ | ✓ | ✓ | 
| [Compatibilidad con servicio paralelo modelo](model-parallel-intro.md) | ✓ 3 |  | ✓ 3 |  | 
| Cifrado de volumen | ✓ | ✓ | ✓ | ✓ | 
| ¿Cliente AWS KMS | ✓ | ✓ | ✓ | ✓ | 
| Instancias compatibles d | ✓ | ✓ | ✓ | ✓ | 
| [soporte inf1](neo-supported-cloud.md) | ✓ |  |  |  | 

 1 La disponibilidad de los tipos de instancias de Amazon EC2 depende de la AWS región. Para conocer la disponibilidad de instancias específicas de Amazon AI AWS, consulte los [precios de Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/). 

 2 Para utilizar cualquier otro marco o algoritmo, utilice el kit de herramientas de inferencia de SageMaker IA para crear un contenedor que admita puntos finales multimodelo. 

 3 Con la SageMaker IA, puede implementar modelos grandes (hasta 500 GB) para realizar inferencias. Puede configurar la comprobación del estado del contenedor y los tiempos de espera de descarga, de hasta 60 minutos. Esto le permitirá disponer de más tiempo para descargar y cargar el modelo y los recursos asociados. Para obtener más información, consulte [Parámetros de punto de conexión de SageMaker AI para inferencia de modelos grandes](large-model-inference-hosting.md). Puede utilizar contenedores de [inferencia de modelos grandes](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) compatibles con la SageMaker IA. También puede utilizar bibliotecas de paralelización de modelos de terceros, como Triton with y. FasterTransformer DeepSpeed Tienes que asegurarte de que sean compatibles con la IA. SageMaker 

# Recursos
<a name="inference-resources"></a>

Utilice los siguientes recursos para solucionar problemas y como referencia, para responder a las preguntas frecuentes y para obtener más información sobre Amazon SageMaker AI.

**Topics**
+ [Blogs, cuadernos de ejemplo y recursos adicionales](deploy-model-blogs.md)
+ [Solución de problemas y referencia](deploy-model-reference.md)
+ [Hospedaje de modelos FAQs](hosting-faqs.md)

# Blogs, cuadernos de ejemplo y recursos adicionales
<a name="deploy-model-blogs"></a>

Las siguientes secciones contienen ejemplos y recursos adicionales para que pueda obtener más información sobre Amazon SageMaker AI.

## Blogs y casos prácticos
<a name="deploy-model-blogs-table"></a>

Consulte la siguiente tabla para ver listas de blogs y casos prácticos sobre diversas características de inferencias de SageMaker AI. Puede utilizar los blogs para encontrar soluciones que funcionen para su caso de uso.


| Característica | Recursos | 
| --- | --- | 
|  Inferencia en tiempo real  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Escalado automático  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Inferencia sin servidor  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Inferencia asíncrona  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Transformación por lotes  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Puntos de conexión multimodelo  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Canalización de inferencia en serie  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Puntos de conexión con varios contenedores  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Ejecución de conjuntos de modelos  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Recomendador de inferencias  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Serie de blogs sobre alojamiento de modelos avanzados  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 

## Cuadernos de ejemplo
<a name="deploy-model-blogs-nbs"></a>

Consulte la siguiente tabla para ver ejemplos de cuadernos que pueden ayudarle a obtener más información sobre las inferencias en SageMaker AI.


| Característica | Cuadernos de ejemplo | 
| --- | --- | 
|  Recomendador de inferencias  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Optimización de modelos de lenguaje de gran tamaño (LLM) para SageMaker AI  |  [Taller de LLM de IA generativa](https://github.com/aws/amazon-sagemaker-examples/tree/main/inference/generativeai/llm-workshop)  | 

## Recursos adicionales
<a name="deploy-model-blogs-extras"></a>

Si desea obtener más información sobre cada opción de inferencia de SageMaker AI en detalle, puede ver el video que aparece a continuación.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/4FqHt5bmS2o/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/4FqHt5bmS2o)


# Solución de problemas y referencia
<a name="deploy-model-reference"></a>

Puede utilizar los siguientes recursos y documentación de referencia para comprender las recomendaciones al utilizar las inferencias de SageMaker AI y solucionar problemas relacionados con las implementaciones de modelos:
+ Para solucionar los problemas relacionados con las implementaciones de modelos, consulte [Solucionar problemas de implementación de modelos de Amazon SageMaker AI](deploy-model-troubleshoot.md).
+ Para conocer las prácticas recomendadas para la implementación de modelos, consulte [Prácticas recomendadas](https://docs.aws.amazon.com/sagemaker/latest/dg/best-practices.html).
+ Para obtener información de referencia acerca del tamaño de los volúmenes de almacenamiento proporcionados para cada tamaño de instancias de alojamiento, consulte [Volúmenes de almacén de instancias](host-instance-storage.md).
+ Para obtener información de referencia sobre los límites y las cuotas de SageMaker AI, consulte [Puntos de conexión y cuotas de Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html).
+ Para conocer las preguntas frecuentes sobre SageMaker AI, consulte [Hospedaje de modelos FAQs](hosting-faqs.md).

# Hospedaje de modelos FAQs
<a name="hosting-faqs"></a>

Consulte las siguientes preguntas frecuentes para obtener respuestas a las preguntas más frecuentes sobre SageMaker AI Inference Hosting.

## Alojamiento general
<a name="hosting-faqs-general"></a>

Los siguientes artículos de preguntas frecuentes responden a preguntas generales comunes sobre la inferencia de SageMaker IA.

### P: ¿Qué opciones de implementación ofrece Amazon SageMaker AI?
<a name="hosting-faqs-general-1"></a>

R: Después de crear y entrenar modelos, Amazon SageMaker AI ofrece cuatro opciones para implementarlos para que pueda empezar a hacer predicciones. La inferencia en tiempo real es adecuada para cargas de trabajo con requisitos de latencia de milisegundos, tamaños de carga útil de hasta 25 MB y tiempos de procesamiento de hasta 60 segundos para las respuestas regulares y 8 segundos para las respuestas de transmisión. La transformación por lotes es ideal para realizar predicciones sin conexión en grandes lotes de datos que están disponibles por adelantado. La inferencia asíncrona está diseñada para cargas de trabajo que no requieren una latencia inferior a un segundo, tamaños de carga útil de hasta 1 GB y tiempos de procesamiento de hasta 60 minutos. Con la inferencia sin servidor, puede implementar rápidamente modelos de machine learning para realizar inferencias sin tener que configurar ni administrar la infraestructura subyacente, y solo paga por la capacidad de cómputo utilizada para procesar las solicitudes de inferencia, lo que resulta ideal para cargas de trabajo intermitentes.

### P: ¿Cómo elijo una opción de implementación de modelos en SageMaker IA?
<a name="hosting-faqs-general-2"></a>

Si desea procesar las solicitudes en lotes, puede elegir la transformación por lotes. De lo contrario, si desea recibir inferencias para cada solicitud a su modelo, es posible que prefiera elegir la inferencia asíncrona, la inferencia sin servidor o la inferencia en tiempo real. Puede elegir la inferencia asíncrona si tiene tiempos de procesamiento prolongados o grandes cargas útiles y desea poner en cola las solicitudes. Puede elegir la inferencia sin servidor si su carga de trabajo tiene tráfico impredecible o intermitente. Puede elegir la inferencia en tiempo real si tiene un tráfico constante y necesita una latencia menor y uniforme para sus solicitudes.

### P: He oído que la inferencia mediante SageMaker IA es cara. ¿Cuál es la mejor forma de optimizar mis costos a la hora de alojar modelos?
<a name="hosting-faqs-general-3"></a>

R: Para optimizar sus costos con SageMaker AI Inference, debe elegir la opción de alojamiento adecuada para su caso de uso. También puede utilizar funciones de inferencia como [Amazon SageMaker AI Savings Plans](https://aws.amazon.com/savingsplans/ml-pricing/), la optimización de modelos con [SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html), puntos de conexión [multimodelo y puntos de conexión multicontenedor](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html)[, o el escalado automático.](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html) Para obtener consejos sobre cómo optimizar los costos de inferencia, consulte [Prácticas recomendadas de optimización de costos de inferencia](inference-cost-optimization.md).

### P: ¿Por qué debo usar Amazon SageMaker Inference Recommender?
<a name="hosting-faqs-general-4"></a>

R: Debe utilizar Amazon SageMaker Inference Recommender si necesita recomendaciones para la configuración correcta de los puntos de conexión a fin de mejorar el rendimiento y reducir los costes. Anteriormente, los científicos de datos que deseaban implementar sus modelos tenían que realizar pruebas de rendimiento manuales para seleccionar la configuración adecuada del punto de conexión. En primer lugar, tenían que seleccionar el tipo de instancia de machine learning adecuada entre los más de 70 tipos de instancias disponibles en función de los requisitos de recursos de sus modelos y las cargas útiles de muestra, y luego optimizar el modelo para tener en cuenta los diferentes tipos de hardware. Luego tenían que realizar pruebas de carga exhaustivas para comprobar que se cumplían los requisitos de latencia y rendimiento y que los costos eran bajos. El recomendador de inferencias elimina esta complejidad al ayudarle a hacer lo siguiente: 
+ Comience en cuestión de minutos con una recomendación de instancias.
+ Realice pruebas de carga en todos los tipos de instancias para obtener recomendaciones sobre la configuración de sus puntos de conexión en cuestión de horas. 
+ Ajuste automáticamente los parámetros del servidor de contenedores y modelos, y realice optimizaciones de modelos para un tipo de instancia determinado.

### P: ¿Qué es un servidor de modelos?
<a name="hosting-faqs-general-5"></a>

R: Los puntos de enlace de SageMaker IA son puntos de enlace HTTP REST que utilizan un servidor web en contenedores, que incluye un servidor modelo. Estos contenedores se encargan de cargar y atender las solicitudes de un modelo de machine learning. Implementan un servidor web que responde a `/invocations` y `/ping` en el puerto 8080.

Los servidores modelo más comunes incluyen TensorFlow Serving TorchServe y Multi Model Server. SageMaker Los contenedores AI Framework tienen estos servidores modelo integrados.

### P: ¿Qué es Bring Your Own Container con Amazon SageMaker AI?
<a name="hosting-faqs-general-6"></a>

R: Todo en SageMaker AI Inference está en contenedores. SageMaker La IA proporciona contenedores gestionados para marcos populares como TensorFlow, y SKlearn. HuggingFace Para obtener una lista completa y actualizada de esas imágenes, consulte [Imágenes disponibles](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

 A veces, hay marcos personalizados para los que es posible que necesite crear un contenedor. Este enfoque se conoce como *Bring Your Own Container* o *BYOC*. Con el enfoque BYOC, usted proporciona la imagen de Docker para configurar su marco o biblioteca. A continuación, inserta la imagen en Amazon Elastic Container Registry (Amazon ECR) para poder utilizarla con IA. SageMaker 

Como alternativa, en lugar de crear una imagen desde cero, puede ampliar un contenedor. Puede tomar una de las imágenes base que proporciona la SageMaker IA y añadir sus dependencias sobre ella en su Dockerfile.

### P: ¿Debo entrenar mis modelos en SageMaker IA para alojarlos en SageMaker puntos finales de IA?
<a name="hosting-faqs-general-7"></a>

R: La SageMaker IA ofrece la posibilidad de crear tu propio modelo de marco entrenado que hayas formado fuera de la SageMaker IA e implementarlo en cualquiera de las opciones de alojamiento de SageMaker IA.

SageMaker La IA requiere empaquetar el modelo en un `model.tar.gz` archivo y tener una estructura de directorios específica. Cada marco tiene su propia estructura de modelo (consulte la siguiente pregunta para ver ejemplos de estructuras). Para obtener más información, consulte la documentación del SDK de SageMaker Python para [TensorFlow[PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#bring-your-own-model)](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts), y [MXNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#deploy-endpoints-from-model-data).

Si bien puede elegir entre imágenes de marco prediseñadas TensorFlow, como PyTorch, y MXNet alojar su modelo entrenado, también puede crear su propio contenedor para alojar sus modelos entrenados en puntos finales de SageMaker IA. Para ver un tutorial, consulte el ejemplo del cuaderno de Jupyter: [Creación de su propio contenedor de algoritmos](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb).

### P: ¿Cómo debo estructurar mi modelo si quiero implementarlo en SageMaker IA pero no entrenarme en SageMaker IA?
<a name="hosting-faqs-general-8"></a>

R: La SageMaker IA requiere que los artefactos del modelo se compriman en un `.tar.gz` archivo o en un *tarball*. SageMaker La IA extrae automáticamente este `.tar.gz` archivo al `/opt/ml/model/` directorio de su contenedor. El tarball no debe contener symlinks ni archivos innecesarios. Si utilizas uno de los contenedores del framework, por ejemplo, o TensorFlow PyTorch, el contenedor MXNet, espera que tu estructura TAR sea la siguiente: 

**TensorFlow**

```
model.tar.gz/
             |--[model_version_number]/
                                       |--variables
                                       |--saved_model.pb
            code/
                |--inference.py
                |--requirements.txt
```

**PyTorch**

```
model.tar.gz/
             |- model.pth
             |- code/
                     |- inference.py
                     |- requirements.txt  # only for versions 1.3.1 and higher
```

**MXNet**

```
model.tar.gz/
            |- model-symbol.json
            |- model-shapes.json
            |- model-0000.params
            |- code/
                    |- inference.py
                    |- requirements.txt # only for versions 1.6.0 and higher
```

### P: Al invocar un punto final de SageMaker IA, puedo proporcionar un tipo `Accept` MIME `ContentType` y. ¿Cuál se utiliza para identificar el tipo de datos que se envía y recibe?
<a name="hosting-faqs-general-10"></a>

R: `ContentType` es el tipo MIME de los datos de entrada en el cuerpo de la solicitud (el tipo MIME de los datos que se envían a su punto de conexión). El servidor de modelos utiliza el `ContentType` para determinar si puede gestionar el tipo proporcionado o no.

`Accept` es el tipo MIME de la respuesta de inferencia (el tipo MIME de los datos que devuelve su punto de conexión). El servidor de modelos utiliza el tipo `Accept` para determinar si puede gestionar la devolución del tipo proporcionado o no.

Los tipos MIME más comunes incluyen `text/csv`, `application/json`, y `application/jsonlines`.

### P: ¿Cuáles son los formatos de datos compatibles con la inferencia de SageMaker IA?
<a name="hosting-faqs-general-12"></a>

R: SageMaker La IA transfiere cualquier solicitud al contenedor del modelo sin modificarla. El contenedor debe contener la lógica necesaria para deserializar la solicitud. Para obtener información sobre los formatos definidos para los algoritmos integrados, consulte [Formatos de datos comunes para la inferencia](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html). Si está creando su propio contenedor o utilizando un contenedor de SageMaker AI Framework, puede incluir la lógica para aceptar el formato de solicitud que prefiera.

Del mismo modo, la SageMaker IA también devuelve la respuesta sin modificarla y, a continuación, el cliente debe deserializarla. En el caso de los algoritmos integrados, devuelven las respuestas en formatos específicos. Si está creando su propio contenedor o utilizando un contenedor de SageMaker AI Framework, puede incluir la lógica para devolver una respuesta en el formato que elija.

### P: ¿Cómo puedo invocar mi punto de conexión con datos binarios, como vídeos o imágenes?
<a name="hosting-faqs-general-11"></a>

Utilice la llamada a la API [Invoke Endpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) para hacer inferencias a su punto de conexión.

Al pasar la entrada como carga útil a la API `InvokeEndpoint`, debe proporcionar el tipo de datos de entrada correcto que espera el modelo. Al transferir una carga útil a la llamada a la API `InvokeEndpoint`, los bytes de la solicitud se reenvían directamente al contenedor del modelo. Por ejemplo, para una imagen, puede utilizar `application/jpeg` para el `ContentType` y asegurarse de que su modelo pueda realizar inferencias con este tipo de datos. Esto se aplica a JSON, CSV, vídeo o cualquier otro tipo de entrada con la que pueda estar trabajando.

Otro factor que tener en cuenta son los límites de tamaño de la carga útil. Los límites de carga útil son de 25 MB para los puntos de conexión en tiempo real y de 4 MB para los puntos de conexión sin servidor. Puede dividir el vídeo en varios fotogramas e invocar el punto de conexión con cada fotograma de forma individual. Como alternativa, si su caso de uso lo permite, puede enviar todo el vídeo de la carga útil mediante un punto de conexión asíncrono, que admita cargas útiles de hasta 1 GB.

Para ver un ejemplo que muestra cómo ejecutar la inferencia por visión artificial en vídeos de gran tamaño con la inferencia asíncrona, consulte esta [entrada de blog](https://aws.amazon.com/blogs/machine-learning/run-computer-vision-inference-on-large-videos-with-amazon-sagemaker-asynchronous-endpoints/).

## Inferencia en tiempo real
<a name="hosting-faqs-real-time"></a>

Los siguientes artículos de preguntas frecuentes responden a preguntas frecuentes sobre la inferencia en tiempo real de SageMaker IA.

### P: ¿Cómo creo un punto final de SageMaker IA?
<a name="hosting-faqs-real-time-1"></a>

R: Puede crear un punto final AWS de SageMaker IA mediante herramientas compatibles AWS SDKs, como el SDK de SageMaker Python Consola de administración de AWS AWS CloudFormation, el y el. AWS Cloud Development Kit (AWS CDK)

Hay tres entidades clave en la creación de puntos finales: un modelo de SageMaker IA, una configuración de puntos finales de SageMaker IA y un punto final de SageMaker IA. El modelo de SageMaker IA apunta hacia los datos y la imagen del modelo que está utilizando. La configuración del punto de conexión define las variantes de producción, que pueden incluir el tipo de instancia y el número de instancias. A continuación, puede utilizar la llamada a la API [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) o la llamada [.deploy ()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html) para que la SageMaker IA cree un punto final con los metadatos de la configuración de su modelo y punto final.

### P: ¿Necesito usar el SDK de SageMaker Python para los create/invoke puntos finales?
<a name="hosting-faqs-real-time-2"></a>

R: No, puedes usar los distintos AWS SDKs (consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_SeeAlso](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_SeeAlso) para ver si están disponibles SDKs) o incluso llamar directamente a la web APIs correspondiente.

### P: ¿Cuál es la diferencia entre los puntos de conexión multimodelo (MME) y los servidores multimodelo (MMS)?
<a name="hosting-faqs-real-time-3"></a>

R: Un punto final multimodelo es una opción de inferencia en tiempo real que SageMaker ofrece la IA. Con los puntos de conexión multimodelo, puede alojar miles de modelos en un punto de conexión. [El servidor multimodelo](https://github.com/awslabs/multi-model-server) es un marco de código abierto para ofrecer modelos de machine learning. Proporciona las capacidades de administración de modelos y front-end HTTP requeridas por los puntos de conexión multimodelo para alojar varios modelos dentro de un único contenedor, cargar y descargar modelos del contenedor dinámicamente y realizar inferencia en un modelo cargado especificado.

### P: ¿Cuáles son las diferentes arquitecturas de implementación de modelos compatibles con la inferencia en tiempo real?
<a name="hosting-faqs-real-time-4"></a>

R: SageMaker La inferencia en tiempo real mediante IA es compatible con diversas arquitecturas de despliegue de modelos, como terminales multimodelo, terminales multicontenedor y canalizaciones de inferencia en serie. 

[Puntos de conexión multimodelo (MME)](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html): un MME permite a los clientes implementar miles de modelos hiperpersonalizados de forma rentable. Todos los modelos se implementan en una flota de recursos compartidos. El MME funciona mejor cuando los modelos tienen un tamaño y una latencia similares y pertenecen al mismo marco de ML. Estos puntos de conexión son ideales para cuando no es necesario llamar al mismo modelo en todo momento. Puede cargar los modelos respectivos de forma dinámica en el punto final de la IA para atender su solicitud SageMaker .

Terminales [multicontenedor (MCE): el MCE permite a los clientes implementar 15 contenedores diferentes con diversos marcos y funcionalidades de aprendizaje automático sin necesidad de arranques en frío y utilizando solo un punto final](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html). SageMaker Puede invocar directamente estos contenedores. Un MCE es ideal para cuando quiera guardar todos los modelos en la memoria.

[Canalizaciones de inferencia en serie (SIP)](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html): puede utilizar una SIP para encadenar de 2 a 15 contenedores en un único punto de conexión. Una SIP resulta especialmente adecuada para combinar el preprocesamiento y la inferencia de modelos en un punto de conexión y para operaciones de baja latencia.

## Inferencia sin servidor
<a name="hosting-faqs-serverless"></a>

Los siguientes elementos de preguntas frecuentes responden a preguntas frecuentes sobre Amazon SageMaker Serverless Inference.

### P: ¿Qué es Amazon SageMaker Serverless Inference?
<a name="hosting-faqs-serverless-1"></a>

R: [Implemente modelos con Amazon SageMaker Serverless Inference](serverless-endpoints.md) es una opción de provisión de modelos sin servidor diseñada específicamente que facilita la implementación y el escalado de los modelos de ML. Los puntos de conexión de inferencias sin servidor inician automáticamente los recursos de computación y los amplían y reducen en función del tráfico, lo que elimina la necesidad de elegir tipos de instancias, ejecutar capacidades aprovisionadas o administrar el escalado. Puede especificar los requisitos de memoria para su punto de conexión sin servidor. Solo paga por la duración de la ejecución del código de inferencia y la cantidad de datos procesados, no por los períodos de inactividad.

### P: ¿Por qué debo utilizar la inferencia sin servidor?
<a name="hosting-faqs-serverless-2"></a>

R: La inferencia sin servidor simplifica la experiencia del desarrollador al eliminar la necesidad de aprovisionar la capacidad por adelantado y administrar las políticas de escalado. La inferencia sin servidor puede escalar instantáneamente de decenas a miles de inferencias en cuestión de segundos en función de los patrones de uso, lo que la hace ideal para aplicaciones de machine learning con tráfico intermitente o impredecible. Por ejemplo, un servicio de chatbot que utiliza una empresa de procesamiento de nóminas experimenta un aumento de las consultas al final del mes, mientras que el tráfico es intermitente durante el resto del mes. En estos casos, el aprovisionamiento de instancias durante todo el mes no resulta rentable, ya que se acaba pagando por los períodos de inactividad.

La inferencia sin servidor ayuda a abordar este tipo de casos de uso al proporcionarle un escalado automático y rápido desde el primer momento sin necesidad de pronosticar el tráfico por adelantado ni de administrar las políticas de escalado. Además, solo paga por el tiempo de computación necesario para ejecutar el código de inferencia y para el procesamiento de datos, lo que lo hace ideal para cargas de trabajo con tráfico intermitente.

### P: ¿Cómo elijo el tamaño de memoria adecuado para mi punto de conexión sin servidor?
<a name="hosting-faqs-serverless-3"></a>

R: Su punto de conexión sin servidor tiene un tamaño de RAM mínimo de 1024 MB (1 GB) y el tamaño máximo de RAM que puede elegir es de 6144 MB (6 GB). Los tamaños de memoria que puede elegir son 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. La inferencia sin servidor asigna automáticamente los recursos de procesamiento proporcionales a la memoria que seleccione. Si elige un tamaño de memoria más grande, su contenedor tiene acceso a más v. CPUs

Seleccione el tamaño de memoria de su punto de conexión de acuerdo con el tamaño de su modelo. Por lo general, el tamaño de la memoria debe ser al menos tan grande como el tamaño del modelo. Es posible que tengas que realizar una evaluación comparativa para elegir la memoria adecuada para tu modelo en función de tu latencia SLAs. Los incrementos de tamaño de memoria tienen precios diferentes; consulta la [página de SageMaker precios de Amazon](https://aws.amazon.com/sagemaker/pricing/) para obtener más información.

## Transformación por lotes
<a name="hosting-faqs-batch"></a>

Los siguientes artículos de preguntas frecuentes responden a preguntas frecuentes sobre SageMaker AI Batch Transform.

### P: ¿Cómo divide mis datos la transformación por lotes?
<a name="hosting-faqs-batch-1"></a>

R: Para formatos de archivo específicos, como CSV, Recordio y SageMaker AI TFRecord, puede dividir sus datos en minilotes de un solo registro o de varios registros y enviarlos como carga útil a su contenedor de modelos. Cuando el valor de `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` es`MultiRecord`, SageMaker AI envía el número máximo de registros en cada solicitud, hasta el límite. `MaxPayloadInMB` Cuando el valor de `BatchStrategy` es`SingleRecord`, SageMaker AI envía registros individuales en cada solicitud.

### P: ¿Cuál es el tiempo de espera máximo para la transformación por lotes y el límite de carga útil de un solo registro?
<a name="hosting-faqs-batch-2"></a>

R: El tiempo de espera máximo para la transformación por lotes es de 3600 segundos. El [tamaño máximo de la carga útil](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB) de un registro (por minilote) es de 100 MB.

### P: ¿Cómo puedo acelerar un trabajo de transformación por lotes?
<a name="hosting-faqs-batch-3"></a>

R: Si está utilizando la API `[CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)`, puede reducir el tiempo necesario para completar los trabajos de transformación por lotes utilizando valores óptimos para parámetros como `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB)`, `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms)` o `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy)`. El valor ideal para `MaxConcurrentTransforms` es igual al número de procesos de computación en el trabajo de transformación por lotes. Si utiliza la consola SageMaker AI, puede especificar estos valores de parámetros óptimos en la sección **Configuración adicional de la página de configuración** del **trabajo de transformación por lotes**. SageMaker La IA encuentra automáticamente los ajustes de parámetros óptimos para los algoritmos integrados. Para los algoritmos personalizados, proporcione estos valores a través de un punto de conexión [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests).

### P: ¿Cuáles son los formatos de datos compatibles de forma nativa con la transformación por lotes?
<a name="hosting-faqs-batch-4"></a>

R: La transformación por lotes es compatible con CSV y JSON.

## Inferencia asíncrona
<a name="hosting-faqs-async"></a>

Los siguientes artículos de preguntas frecuentes responden a preguntas generales comunes sobre la inferencia asincrónica de la SageMaker IA.

### P: ¿Qué es Amazon SageMaker Asynchronous Inference?
<a name="hosting-faqs-async-1"></a>

R: La inferencia asíncrona pone en cola las solicitudes de inferencia entrantes y las procesa de forma asíncrona. Esta opción es ideal para solicitudes con cargas útiles grandes o tiempos de procesamiento prolongados que deben procesarse a medida que llegan. Si lo desea, puede configurar los ajustes de escalado automático para reducir verticalmente el recuento de instancias a cero cuando no se estén procesando solicitudes de forma activa. 

### P: ¿Cómo puedo escalar mis puntos de conexión a 0 cuando no haya tráfico?
<a name="hosting-faqs-async-2"></a>

R: Amazon SageMaker AI admite el escalado automático (escalado automático) de su punto final asíncrono. El escalado automático ajusta dinámicamente el número de instancias aprovisionadas para un modelo en respuesta a los cambios en su carga de trabajo. A diferencia de otros modelos hospedados que admite la SageMaker IA, con la inferencia asíncrona también puede reducir a cero las instancias de puntos finales asíncronos. Las solicitudes que se reciben cuando no hay ninguna instancia se ponen en cola para su procesamiento cuando el punto de conexión escale verticalmente. Para obtener más información, consulte [Escalado automático de un punto de conexión asíncrono](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-autoscale.html).

Amazon SageMaker Serverless Inference también se reduce automáticamente a cero. No lo verá porque la SageMaker IA logra escalar sus puntos de conexión sin servidor, pero si no hay tráfico, se aplica la misma infraestructura.