Implementación de modelos para inferencia en tiempo real - Amazon SageMaker

Implementación de modelos para inferencia en tiempo real

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 Concesión de permisos para etiquetar recursos de SageMaker.

Las Políticas administradas de AWS para Amazon SageMaker que conceden permisos para crear recursos de SageMaker ya incluyen permisos para añadir etiquetas al crear esos recursos.

Existen varias opciones para implementar un modelo mediante los servicios de alojamiento de SageMaker. 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 SageMaker Python SDK o el SDK de Python (Boto3). También puede realizar la implementación mediante la AWS CLI.

Antes de empezar

Antes de implementar un modelo de SageMaker, busque y tome nota de lo siguiente:

  • La Región de AWS en la que está ubicada el bucket de Amazon S3

  • La ruta de URI de Amazon S3 donde se almacenan los artefactos del modelo

  • El rol de IAM para SageMaker

  • La ruta de registro de URI de Docker Amazon ECR para la imagen personalizada que incluye el código de inferencia, o el marco y la versión de una imagen de Docker integrada que sea compatible con AWS.

Para obtener una lista de Servicios de AWS disponibles en cada Región de AWS, consulte Servicios de AWS por región. Consulte Creación de roles de IAM 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

Puede implementar uno o varios modelos en un punto de conexión con Amazon SageMaker. Cuando varios modelos comparten un punto de conexión, utilizan conjuntamente los recursos que se alojan allí, como, por ejemplo, las instancias de computación de ML, las CPU y los aceleradores. 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

Un componente de inferencia es un objeto de alojamiento de SageMaker que puede utilizar para implementar un modelo en un punto de conexión. 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 de modelo de SageMaker 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, puede invocar directamente el modelo asociado cuando utilice la acción InvokeEndpoint en la API de SageMaker.

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 empaqueta los modelos como componentes de inferencia al implementarlos mediante:

  • SageMaker Studio Classic.

  • El SageMaker Python SDK para implementar un objeto de modelo (en el que se establece el tipo de punto de conexión en EndpointType.INFERENCE_COMPONENT_BASED).

  • El AWS SDK for Python (Boto3) para definir objetos InferenceComponent que se implementan en un punto de conexión.

Implementación de modelos con SageMaker Studio

Complete los siguientes pasos para crear e implementar el modelo de forma interactiva a través de SageMaker Studio. Para obtener más información sobre Studio, consulte la documentación de Studio. Para ver más tutoriales de varios escenarios de implementación, consulte el blog Package and deploy classical ML models and LLMs easily with Amazon SageMaker – Part 2.

Preparación de los artefactos y los permisos

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.

  2. SageMaker puede empaquetar automáticamente los artefactos. Solo tiene que incluir los artefactos del modelo sin procesar y cualquier dependencia en un archivo requirements.txt, y SageMaker puede proporcionarle el código de inferencia predeterminado (o puede anularlo con su propio código de inferencia personalizado). SageMaker admite esta opción para los siguientes marcos: PyTorch y XGBoost.

Además de traer el modelo, el rol de AWS Identity and Access Management (IAM) y un contenedor de Docker (o el marco y la versión deseados para los que SageMaker tiene un contenedor prediseñado), también debe conceder permisos para crear e implementar modelos a través de SageMaker Studio.

Debe tener la política AmazonSageMakerFullAccess asociada al rol de IAM para acceder a SageMaker y a otros servicios pertinentes. Para ver los precios de los tipos de instancias en Studio, también debe asociar la política AWSPriceListServiceFullAccess (o, si no quiere asociar la política completa, más específicamente, la acción pricing:GetProducts).

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. También se pueden alternar mayúsculas en la palabra SageMaker: 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:

Creación de un modelo implementable

En este paso creará una versión implementable del modelo en SageMaker proporcionando los artefactos junto con especificaciones adicionales, como, por ejemplo, el contenedor y el marco deseados, los códigos de inferencia personalizados y la configuración de la red.

Cree un modelo implementable en SageMaker Studio de la siguiente manera:

  1. Abra la aplicación de SageMaker Studio.

  2. En el panel de navegación izquierdo, elija Models (Modelos).

  3. Seleccione la pestaña Modelos implementables.

  4. En la página Modelos implementables, elija Crear.

  5. 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
En la sección Definición de contenedor, haga lo siguiente:
  1. En Tipo de contenedor, seleccione Contenedor prediseñado si desea usar un contenedor administrado por SageMaker, o seleccione Traiga su propio contenedor si tiene uno propio.

  2. Si ha seleccionado Contenedor prediseñado, seleccione las opciones Marco del contenedor, Versión del marco y Tipo de hardware que desee utilizar.

  3. 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
En la sección Artefactos, haga lo siguiente:
  1. Si utiliza uno de los marcos que SageMaker admite para empaquetar artefactos de modelos (PyTorch o XGBoost), en Artefactos, puede elegir la opción Cargar artefactos. Con esta opción, simplemente puede especificar los artefactos del modelo sin procesar, los códigos de inferencia personalizados que tenga y el archivo requirements.txt, y SageMaker se encargará de empaquetar el archivo automáticamente. 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.

    2. Si ha decidido cargar los artefactos, en Bucket de S3, introduzca la ruta de Amazon S3 a un bucket en el que desee que SageMaker almacene los artefactos después de empaquetarlos automáticamente. A continuación, complete los pasos siguientes.

    3. En Cargar artefactos de modelos, cargue los archivos del modelo.

    4. En Código de inferencia, seleccione Usar código de inferencia predeterminado si desea utilizar el código predeterminado que SageMaker proporciona para atender a las inferencias. De lo contrario, seleccione Cargar código de inferencia personalizado para utilizar su propio código de inferencia.

    5. En Cargar requirements.txt, cargue un archivo de texto que enumere las dependencias que desee instalar en el tiempo de ejecución.

  2. Si no utiliza un marco compatible con SageMaker para empaquetar los artefactos de modelos, Studio le mostrará la opción Artefactos preempaquetados, y deberá 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. Seleccione Cargar artefactos de modelos preempaquetados si desea cargar directamente el archivo en SageMaker.

    2. 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
En la sección Seguridad, realice lo siguiente:
  1. En Rol de IAM, escriba el ARN de un rol de IAM.

  2. (Opcional) En Nube privada virtual (VPC), puede seleccionar una Amazon VPC para almacenar la configuración y los artefactos del modelo.

  3. (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
(Opcional) En la sección Opciones avanzadas, realice lo siguiente:
  1. Active el conmutador de Recomendaciones de instancias personalizadas si desea ejecutar un trabajo de Recomendador de inferencias de Amazon SageMaker en el modelo después de crearlo. 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.

  2. En Añadir variables de entorno, introduzca una variable de entorno para el contenedor como pares clave-valor.

  3. En Etiquetas, introduzca cualquier etiqueta como pares clave-valor.

  4. Una vez finalizada la configuración del modelo y del contenedor, elija Crear modelo implementable.

Ahora debería tener un modelo en SageMaker Studio que esté listo para su implementación.

Implementar el modelo

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 intenta implementar un modelo en un nuevo punto de conexión, SageMaker configurará el punto de conexión 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 de SageMaker Studio.

  2. En el panel de navegación izquierdo, elija Models (Modelos).

  3. En la página Modelos, seleccione uno o varios modelos en la lista de modelos de SageMaker.

  4. Elija Implementar.

  5. 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.

  6. 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 con los tipos de instancias en JumpStart

    Si va a implementar un modelo de JumpStart, Studio solo mostrará los tipos de instancias compatibles con el modelo.

  7. En Recuento inicial de instancias, introduzca el número inicial de instancias que le gustaría aprovisionar para el punto de conexión.

  8. 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.

  9. Si el modelo que va a implementar es uno de los LLM de JumpStart más utilizados en el centro de modelos, aparecerá la opción Configuraciones alternativas después de los campos Tipo de instancia y Recuento de instancias.

    Para los LLM de JumpStart más populares, 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

    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 puede elegir Otras instancias compatibles para ver una lista de otros tipos de instancias que son compatibles con el modelo de JumpStart. Tenga en cuenta que al seleccionar aquí un tipo de instancia se sobrescribirá cualquier selección de instancia anterior especificada en el paso 6.

    2. (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).

    3. Elija Seleccionar para confirmar el tipo de instancia y los ajustes de configuración.

  10. 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.

    2. 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.

    3. En Memoria mínima de CPU (MB), introduzca la cantidad mínima de memoria (en MB) que requiere el modelo.

    4. En Memoria máxima de CPU (MB), introduzca la cantidad máxima de memoria (en MB) que desea permitir que utilice el modelo.

  11. (Opcional) En Opciones avanzadas, realice lo siguiente:

    1. En Rol de IAM, utilice el rol de ejecución de IAM predeterminado de SageMaker o especifique el suyo propio con los permisos que necesita. Tenga en cuenta que este rol de IAM debe ser el mismo que el que ha especificado al crear el modelo implementable.

    2. En Nube privada virtual (VPC), puede especificar una VPC en la que desee alojar el punto de conexión.

    3. En Clave de KMS de cifrado, seleccione una clave de AWS KMS para cifrar datos en el volumen de almacenamiento asociado a la instancia de computación de ML que aloja el punto de conexión.

    4. Active el conmutador de Habilitar el aislamiento de red para restringir el acceso a Internet por parte del contenedor.

    5. 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 la cantidad máxima de tiempo que SageMaker permite descargar el modelo en el contenedor e iniciarlo, respectivamente.

    6. En Etiquetas, introduzca cualquier etiqueta como pares clave-valor.

    nota

    SageMaker configura el rol de IAM, la VPC y la configuración del aislamiento de 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

Tras configurar la implementación, elija Implementar para crear el punto de conexión e implementar el modelo.

Implementación de modelos con los Python SDK

Con el SageMaker Python SDK, puede crear un 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 Creación de un modelo en Amazon SageMaker con ModelBuilder.

En la siguiente sección se describen ambos métodos para crear el modelo e implementar el objeto de modelo.

Configuración

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
ejemplo instrucciones de importación

En los siguientes ejemplos se importan módulos desde el SageMaker Python SDK, 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 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
ejemplo 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)
ejemplo 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
ejemplo 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.

Información general

Existen varias formas de implementar modelos con el SageMaker Python SDK o el SDK de 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 SageMaker Python SDK, puede crear un modelo de dos 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 Creación de un modelo en Amazon SageMaker con ModelBuilder. También puede consultar el blog Package and deploy classical ML models and LLMs easily with SageMaker – Part 1 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.

  2. Cree un objeto de modelo a partir de las clases Model o ModelBuilder. El objeto ResourceRequirements se especifica en la configuración del modelo.

  3. 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 mediante el método create_model.

  2. 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 create_endpoint_config.

  3. Cree el punto de conexión mediante el método create_endpoint y, en la solicitud, proporcione la configuración del punto de conexión que ha creado.

  4. 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:

    • Especificación de un objeto de modelo de SageMaker

    • 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 mediante el método create_model.

  2. 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 create_endpoint_config. En la configuración del punto de conexión, asigne el objeto de modelo a una variante de producción.

  3. Cree el punto de conexión mediante el método create_endpoint. En la solicitud, proporcione la configuración del punto de conexión que ha creado.

    Al crear el punto de conexión, SageMaker aprovisionará los recursos del punto de conexión e implementará el modelo en este.

Configuración

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. También puede crear un objeto de modelo creando una instancia de la clase ModelBuilder y ejecutando 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 modelos grandes. En el ejemplo se utiliza ModelBuilder para crear un modelo de Hugging Face (también puede usar un modelo de JumpStart como base). 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. En cada variante, puede elegir el tipo de instancia que desea que Amazon SageMaker aprovisione y puede habilitar el escalado de instancias administrado.

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)
ejemplo definición del modelo

En el siguiente ejemplo se define un modelo de SageMaker con el método create_model en AWS SDK for 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 de recurso de Amazon (ARN) del rol de IAM que Amazon SageMaker puede asumir para obtener acceso a los artefactos del modelo y a imágenes de Docker para su implementación en instancias de cómputo de ML 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.

ejemplo 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 utiliza esta configuración para implementar modelos. En la configuración, identifique uno o varios modelos, creados con el método create_model, para implementar los recursos que desea que Amazon SageMaker 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:

Implementación

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_endpoint para crearlo. El nombre del punto de conexión debe ser único en una Región de AWS de la cuenta de AWS.

En el siguiente ejemplo se crea un punto de conexión mediante la configuración especificada en la solicitud. Amazon SageMaker utiliza el punto de conexión 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)
ejemplo Implementación

Proporcione la configuración del punto de conexión a SageMaker. 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_endpoint para el punto de conexión. El nombre del punto de conexión debe ser único en una Región de AWS de la cuenta de AWS.

En el siguiente ejemplo se crea un punto de conexión mediante la configuración especificada en la solicitud. Amazon SageMaker utiliza el punto de conexión 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")

Implementación de modelos con AWS CLI

Puede implementar un modelo en un punto de conexión mediante la AWS CLI.

Información general

Al implementar un modelo con la AWS CLI, puede hacerlo 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 create-model.

  2. 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 create-endpoint-config.

  3. Cree el punto de conexión mediante el comando create-endpoint. En el cuerpo del comando, especifique la configuración del punto de conexión que ha creado.

  4. 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:

    • Especificación de un objeto de modelo de SageMaker

    • 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 mediante el comando create-model.

  2. 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 create-endpoint-config. En la configuración del punto de conexión, asigne el objeto de modelo a una variante de producción.

  3. Cree el punto de conexión mediante el comando create-endpoint. En el cuerpo del comando, especifique la configuración del punto de conexión que ha creado.

    Al crear el punto de conexión, SageMaker aprovisionará los recursos del punto de conexión e implementará el modelo en este.

Configuración

En los siguientes ejemplos se configuran los recursos que necesita para implementar un modelo en un punto de conexión.

With inference components
ejemplo Comando create-endpoint-config

En el siguiente ejemplo se crea una configuración de punto de conexión con el comando create-endpoint-config.

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, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }
Without inference components
ejemplo Comando create-model

En el siguiente ejemplo se crea un modelo con el comando create-model.

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, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name" }
ejemplo Comando create-endpoint-config

En el siguiente ejemplo se crea una configuración de punto de conexión con el comando create-endpoint-config.

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, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }

Implementación

En los siguientes ejemplos se implementa un modelo en un punto de conexión.

With inference components
ejemplo Comando create-endpoint

En el siguiente ejemplo se crea un punto de conexión con el comando create-endpoint.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

Si el comando se ejecuta correctamente, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }
ejemplo Comando create-inference-component

En el siguiente ejemplo se crea un componente de inferencia con el comando create-inference-component.

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, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name" }
Without inference components
ejemplo Comando create-endpoint

En el siguiente ejemplo se crea un punto de conexión con el comando create-endpoint.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

Si el comando se ejecuta correctamente, la AWS CLI responderá con el ARN del recurso que ha creado.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }