

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.

# Creación de imágenes de paquetes de modelos
<a name="ml-model-package-images"></a>

Un paquete de modelos de Amazon SageMaker AI es un modelo previamente entrenado que hace predicciones y no requiere ninguna formación adicional por parte del comprador. Puedes crear un paquete modelo en SageMaker IA y publicar tu producto de aprendizaje automático en AWS Marketplaceél. En las siguientes secciones se explica cómo crear un paquete modelo AWS Marketplace. Esto incluye la creación de la imagen del contenedor y la creación y prueba de la imagen localmente.

**Topics**
+ [Descripción general de](#ml-model-package-images-overview)
+ [Creación de una imagen de inferencia para paquetes de modelos](#ml-creating-an-inference-image-for-model-packages)

## Descripción general de
<a name="ml-model-package-images-overview"></a>

 Un paquete de modelos incluye los siguientes componentes: 
+  Imagen de inferencia almacenada en [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) (Amazon ECR) 
+  (Opcional) Artefactos del modelo, almacenados por separado en [Amazon S3](https://aws.amazon.com/s3/) 

**nota**  
Los artefactos del modelo son archivos que su modelo utiliza para realizar predicciones y, por lo general, son el resultado de sus propios procesos de entrenamiento. Los artefactos pueden ser de cualquier tipo de archivo que necesite el modelo, pero deben comprimirse con el archivo use.tar.gz. En el caso de los paquetes modelo, pueden agruparse en la imagen de inferencia o almacenarse por separado en Amazon SageMaker AI. Los artefactos del modelo almacenados en Amazon S3 se cargan en el contenedor de inferencias durante el tiempo de ejecución. Al publicar su paquete modelo, esos artefactos se publican y almacenan en depósitos de Amazon S3 AWS Marketplace propios a los que el comprador no puede acceder directamente. 

**sugerencia**  
Si su modelo de inferencia se ha creado con un marco de aprendizaje profundo como Gluon, Keras,,, TensorFlow -Lite u TensorFlow ONNX PyTorch, considere la posibilidad de utilizar Amazon AI Neo. MXNet SageMaker Neo puede optimizar automáticamente los modelos de inferencia que se implementan en una familia específica de tipos de instancias en la nube, como, etc. `ml.c4` `ml.p2` Para obtener más información, consulte [Optimizar el rendimiento de los modelos con Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.

En el siguiente diagrama se muestra el flujo de trabajo para publicar y usar productos de paquetes de modelos. 

![Diagrama de cómo un vendedor crea una imagen de paquete de modelos con un algoritmo y cómo la usa un comprador.](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/ml-model-package-images.png)


El flujo de trabajo para crear un paquete de modelos de SageMaker IA AWS Marketplace incluye los siguientes pasos:

1. El vendedor crea una imagen de inferencia (no tiene acceso a la red cuando está implementada) y la envía al registro ECR de Amazon. 

   Los artefactos del modelo pueden agruparse en la imagen de inferencia o almacenarse por separado en S3.

1. A continuación, el vendedor crea un recurso de paquete modelo en Amazon SageMaker AI y publica su producto de aprendizaje automático en él AWS Marketplace.

1. El comprador se suscribe al producto de ML e implementa el modelo. 
**nota**  
 El modelo se puede implementar como punto de conexión para inferencias en tiempo real o como un trabajo por lotes para obtener predicciones para todo un conjunto de datos de una sola vez. Para obtener más información, consulte [Implementar modelos para inferencia](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html). 

1. SageMaker La IA ejecuta la imagen de inferencia. Todos los artefactos del modelo proporcionados por el vendedor que no estén incluidos en la imagen de inferencia se cargan dinámicamente en tiempo de ejecución. 

1.  SageMaker La IA pasa los datos de inferencia del comprador al contenedor mediante los puntos finales HTTP del contenedor y devuelve los resultados de la predicción. 

## Creación de una imagen de inferencia para paquetes de modelos
<a name="ml-creating-an-inference-image-for-model-packages"></a>

En esta sección se proporciona un tutorial para empaquetar el código de inferencia en una imagen de inferencia para el producto de paquete de modelos. El proceso consta de los siguientes pasos:

**Topics**
+ [Paso 1: creación de la imagen del contenedor](#ml-step-1-creating-the-container-image)
+ [Paso 2: creación y prueba de la imagen localmente](#ml-step-2-building-and-testing-the-image-locally)

La imagen de inferencia es una imagen de Docker que contiene la lógica de inferencia. En tiempo de ejecución, el contenedor expone los puntos de enlace HTTP para permitir que la SageMaker IA pase datos hacia y desde el contenedor. 

**nota**  
 El siguiente es solo un ejemplo de código de empaquetado para una imagen de inferencia. [Para obtener más información, consulte [Uso de contenedores Docker con SageMaker IA y los ejemplos de IA](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html) que aparecen más abajo AWS Marketplace SageMaker .](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace) GitHub  
En el siguiente ejemplo se utiliza un servicio web, [Flask](https://pypi.org/project/Flask/), por motivos de simplicidad, y no se considera listo para la producción.

### Paso 1: creación de la imagen del contenedor
<a name="ml-step-1-creating-the-container-image"></a>

 Para que la imagen de inferencia sea compatible con la SageMaker IA, la imagen de Docker debe exponer los puntos finales HTTP. Mientras el contenedor está en ejecución, la SageMaker IA pasa las entradas del comprador para su inferencia al punto final HTTP del contenedor. Los resultados de la inferencia se devuelven en el cuerpo de la respuesta HTTP. 

 En el siguiente tutorial se utiliza la CLI de Docker en un entorno de desarrollo utilizando una distribución Linux Ubuntu. 
+ [Crear el script del servidor web](#ml-create-the-web-server-script)
+ [Crear el script para la ejecución del contenedor](#ml-create-the-script-for-the-container-run)
+ [Creación del `Dockerfile`](#ml-create-the-dockerfile)
+ [Empaqueta o cargar los artefactos del modelo](#ml-package-or-upload-the-model-artifacts)

#### Crear el script del servidor web
<a name="ml-create-the-web-server-script"></a>

 Este ejemplo usa un servidor de Python llamado [Flask](https://pypi.org/project/Flask/), pero puede usar cualquier servidor web que funcione para su marco. 

**nota**  
Aquí se usa [Flask](https://pypi.org/project/Flask/) por motivos de simplicidad. No se considera un servidor web listo para producción.

 Crea un script para el servidor web de Flask que sirva a los dos puntos finales HTTP del puerto TCP 8080 que utiliza AI. SageMaker Los dos puntos de conexión esperados son los siguientes: 
+  `/ping`— SageMaker AI realiza solicitudes HTTP GET a este punto final para comprobar si su contenedor está listo. Cuando el contenedor esté listo, responderá a las solicitudes HTTP GET en este punto de conexión con un código de respuesta HTTP 200. 
+  `/invocations`— SageMaker La IA realiza solicitudes HTTP POST a este punto final para realizar inferencias. Los datos de entrada para la inferencia se envían en el cuerpo de la solicitud. El tipo de contenido especificado por el usuario se pasa en el encabezado HTTP. El cuerpo de la respuesta es el resultado de la inferencia. Para obtener más información sobre los tiempos de espera, consulte [Requisitos y prácticas recomendadas para crear productos de machine learning](ml-listing-requirements-and-best-practices.md). 

 **`./web_app_serve.py`** 

```
# Import modules
import json
import re
from flask import Flask
from flask import request
app = Flask(__name__)

# Create a path for health checks
@app.route("/ping")
def endpoint_ping():
  return ""
 
# Create a path for inference
@app.route("/invocations", methods=["POST"])
def endpoint_invocations():
  
  # Read the input
  input_str = request.get_data().decode("utf8")
  
  # Add your inference code between these comments.
  #
  #
  #
  #
  #
  # Add your inference code above this comment.
  
  # Return a response with a prediction
  response = {"prediction":"a","text":input_str}
  return json.dumps(response)
```

En el ejemplo anterior, no existe una lógica de inferencia real. Para la imagen de inferencia real, añada la lógica de inferencia a la aplicación web para que procese la entrada y devuelva la predicción real.

La imagen de inferencia debe contener todas las dependencias requeridas, ya que no tendrá acceso a Internet ni podrá realizar llamadas a ninguna de ellas. Servicios de AWS

**nota**  
Este mismo código se utiliza tanto para las inferencias en tiempo real como para las inferencias por lotes

#### Crear el script para la ejecución del contenedor
<a name="ml-create-the-script-for-the-container-run"></a>

 Cree un script con el nombre de `serve` que SageMaker AI ejecute cuando ejecute la imagen del contenedor de Docker. El siguiente script inicia el servidor web HTTP. 

 **`./serve`** 

```
#!/bin/bash

# Run flask server on port 8080 for SageMaker
flask run --host 0.0.0.0 --port 8080
```

#### Creación del `Dockerfile`
<a name="ml-create-the-dockerfile"></a>

 Cree un `Dockerfile` en su contexto de compilación. En este ejemplo se usa Ubuntu 18.04, pero puede empezar desde cualquier imagen base que funcione para su framework. 

 `./Dockerfile` 

```
FROM ubuntu:18.04

# Specify encoding
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# Install python-pip
RUN apt-get update \
&& apt-get install -y python3.6 python3-pip \
&& ln -s /usr/bin/python3.6 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip;

# Install flask server
RUN pip install -U Flask;

# Add a web server script to the image
# Set an environment to tell flask the script to run
COPY /web_app_serve.py /web_app_serve.py
ENV FLASK_APP=/web_app_serve.py

# Add a script that Amazon SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /serve /opt/program/serve
RUN chmod 755 /opt/program/serve
ENV PATH=/opt/program:${PATH}
```

 El `Dockerfile` añade a la imagen los dos scripts creados anteriormente. El directorio del script `serve` se agrega a PATH para que pueda ejecutarse cuando se ejecute el contenedor. 

#### Empaqueta o cargar los artefactos del modelo
<a name="ml-package-or-upload-the-model-artifacts"></a>

 Las dos formas de proporcionar los artefactos del modelo, desde el entrenamiento del modelo hasta la imagen de inferencia, son las siguientes: 
+  Se empaqueta estáticamente con la imagen de inferencia. 
+  Se carga dinámicamente en tiempo de ejecución. Como se carga de forma dinámica, puede usar la misma imagen para empaquetar diferentes modelos de machine learning.

 Si desea empaquetar los artefactos del modelo con la imagen de inferencia, inclúyalos en el `Dockerfile`. 

 Si desea cargar los artefactos del modelo de forma dinámica, almacénelos por separado en un archivo comprimido (.tar.gz) en Amazon S3. Al crear el paquete modelo, especifique la ubicación del archivo comprimido y SageMaker AI extraerá y copiará el contenido en el directorio del contenedor `/opt/ml/model/` cuando ejecute el contenedor. Al publicar su paquete de modelos, esos artefactos se publican y almacenan en buckets de Amazon S3 propiedad de AWS Marketplace a los que el comprador no puede acceder directamente. 

### Paso 2: creación y prueba de la imagen localmente
<a name="ml-step-2-building-and-testing-the-image-locally"></a>

 En el contexto de la compilación, ahora existen los siguientes archivos: 
+  `./Dockerfile` 
+  `./web_app_serve.py` 
+  `./serve` 
+  Su lógica de inferencia y sus dependencias (opcionales) 

 A continuación, compile, ejecute y pruebe la imagen del contenedor. 

#### Compilar la imagen
<a name="ml-build-the-image"></a>

 Ejecute el comando Docker en el contexto de compilación para crear y etiquetar la imagen. En este ejemplo se utiliza la etiqueta `my-inference-image`. 

```
sudo docker build --tag my-inference-image ./
```

 Tras ejecutar este comando de Docker para crear la imagen, debería ver el resultado a medida que Docker cree la imagen en función de cada línea de su `Dockerfile`. Cuando termine, debería ver algo similar a lo siguiente. 

```
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
```

#### Ejecutar localmente
<a name="ml-run-locally"></a>

 Una vez completada la compilación, puede probar la imagen localmente. 

```
sudo docker run \
  --rm \
  --publish 8080:8080/tcp \
  --detach \
  --name my-inference-container \
  my-inference-image \
  serve
```

 A continuación se muestran los detalles del comando: 
+ `--rm`: eliminar automáticamente el contenedor una vez que se detenga.
+ `--publish 8080:8080/tcp`— Exponga el puerto 8080 para simular el puerto al que SageMaker AI envía las solicitudes HTTP.
+ `--detach`: ejecuta el contenedor en segundo plano.
+ `--name my-inference-container`: asigna un nombre a este contenedor en ejecución.
+ `my-inference-image`: ejecuta la imagen creada.
+ `serve`— Ejecute el mismo script que ejecuta SageMaker AI al ejecutar el contenedor.

 Tras ejecutar este comando, Docker crea un contenedor a partir de la imagen de inferencia compilada y la ejecuta en segundo plano. El contenedor ejecuta el script `serve`, que lanza el servidor web con fines de prueba. 

#### Probar el ping de punto de conexión HTTP
<a name="ml-test-the-ping-http-endpoint"></a>

 Cuando la SageMaker IA ejecuta el contenedor, hace ping periódicamente al punto final. Cuando el punto final devuelve una respuesta HTTP con el código de estado 200, indica a la SageMaker IA que el contenedor está listo para la inferencia. Para comprobarlo, ejecute el siguiente comando, que comprueba el punto de conexión e incluye el encabezado de respuesta. 

```
curl --include http://127.0.0.1:8080/ping
```

A continuación, se muestra un ejemplo de resultado.

```
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
```

#### Probar el punto de conexión HTTP de inferencia
<a name="ml-test-the-inference-http-endpoint"></a>

 Cuando el contenedor indica que está listo devolviendo un código de estado 200 a tu ping, la SageMaker IA pasa los datos de inferencia al punto final `/invocations` HTTP mediante una `POST` solicitud. Pruebe el punto de inferencia ejecutando el siguiente comando. 

```
curl \
  --request POST \
  --data "hello world" \
  http://127.0.0.1:8080/invocations
```

 A continuación, se muestra un ejemplo de resultado. 

 `{"prediction": "a", "text": "hello world"}` 

 Con estos dos puntos finales HTTP funcionando, la imagen de inferencia ahora es compatible con la IA. SageMaker 

**nota**  
 El modelo de su producto de paquete de modelos se puede implementar de dos maneras: en tiempo real y por lotes. En ambas implementaciones, la SageMaker IA utiliza los mismos puntos de enlace HTTP mientras ejecuta el contenedor de Docker. 

 Para detener el contenedor, ejecute el siguiente comando.

```
sudo docker container stop my-inference-container
```

 Cuando la imagen de inferencia esté lista y probada, podrá continuar con [Carga de las imágenes a Amazon Elastic Container Registry](ml-uploading-your-images.md). 