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
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:
-
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 archivorequirements.txt
. -
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-{
. Este bucket se utiliza para almacenar los artefactos que cargue.Region
}-{accountID
}
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)
de la consola de Amazon S3 -
Mediante PutBucketCors de la API de Amazon S3
-
Mediante el comando put-bucket-cors de la AWS CLI:
aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
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:
-
Abra la aplicación de SageMaker Studio.
-
En el panel de navegación izquierdo, elija Models (Modelos).
-
Seleccione la pestaña Modelos implementables.
-
En la página Modelos implementables, elija Crear.
-
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:
En la sección Definición de contenedor, haga lo siguiente:
-
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.
-
Si ha seleccionado Contenedor prediseñado, seleccione las opciones Marco del contenedor, Versión del marco y Tipo de hardware que desee utilizar.
-
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:
En la sección Artefactos, haga lo siguiente:
-
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:
-
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 archivorequirements.txt
, seleccione Introducir el URI de S3 para los artefactos preempaquetados. -
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.
-
En Cargar artefactos de modelos, cargue los archivos del modelo.
-
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.
-
En Cargar requirements.txt, cargue un archivo de texto que enumere las dependencias que desee instalar en el tiempo de ejecución.
-
-
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:-
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. -
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:
En la sección Seguridad, realice lo siguiente:
-
En Rol de IAM, escriba el ARN de un rol de IAM.
-
(Opcional) En Nube privada virtual (VPC), puede seleccionar una Amazon VPC para almacenar la configuración y los artefactos del modelo.
-
(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:
(Opcional) En la sección Opciones avanzadas, realice lo siguiente:
-
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.
-
En Añadir variables de entorno, introduzca una variable de entorno para el contenedor como pares clave-valor.
-
En Etiquetas, introduzca cualquier etiqueta como pares clave-valor.
-
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:
-
Abra la aplicación de SageMaker Studio.
-
En el panel de navegación izquierdo, elija Models (Modelos).
-
En la página Modelos, seleccione uno o varios modelos en la lista de modelos de SageMaker.
-
Elija Implementar.
-
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.
-
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.
-
En Recuento inicial de instancias, introduzca el número inicial de instancias que le gustaría aprovisionar para el punto de conexión.
-
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.
-
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:
En el cuadro Configuraciones alternativas, haga lo siguiente:
-
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.
-
(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).
-
Elija Seleccionar para confirmar el tipo de instancia y los ajustes de configuración.
-
-
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:
-
En Número de núcleos de CPU, introduzca los núcleos de CPU que desea dedicar al uso del modelo.
-
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.
-
En Memoria mínima de CPU (MB), introduzca la cantidad mínima de memoria (en MB) que requiere el modelo.
-
En Memoria máxima de CPU (MB), introduzca la cantidad máxima de memoria (en MB) que desea permitir que utilice el modelo.
-
-
(Opcional) En Opciones avanzadas, realice lo siguiente:
-
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.
-
En Nube privada virtual (VPC), puede especificar una VPC en la que desee alojar el punto de conexión.
-
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.
-
Active el conmutador de Habilitar el aislamiento de red para restringir el acceso a Internet por parte del contenedor.
-
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.
-
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.
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.
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.
Configuración
En los siguientes ejemplos se configuran los recursos que necesita para implementar un modelo en un punto de conexión.
Implementación
En los siguientes ejemplos se implementa un modelo en un punto de conexión.
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.
Configuración
En los siguientes ejemplos se configuran los recursos que necesita para implementar un modelo en un punto de conexión.
Implementación
En los siguientes ejemplos se implementa un modelo en un punto de conexión.