Alojar varios modelos en un contenedor detrás de un punto de conexión - Amazon SageMaker

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.

Alojar varios modelos en un contenedor detrás de un punto de conexión

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 costes 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 gestiona la carga de los 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 alojan los modelos los endpoints multimodelo y cómo se alojan los modelos unimodales.

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 costes. 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 terminales multimodelo admiten el alojamiento tanto de los modelos respaldados como de los modelos respaldados. CPU GPU Al utilizar modelos GPU respaldados, puede reducir los costos de implementación del modelo mediante un mayor uso del punto final y sus instancias de procesamiento acelerado 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 requieren transacciones por segundo (TPS) o latencia significativamente más altos, le recomendamos alojarlos en puntos de conexión dedicados.

Puede utilizar puntos de conexión multimodelo con las siguientes funciones:

No puede usar multi-model-enabled contenedores con Amazon Elastic Inference.

Puede utilizar el AWS SDK for Python (Boto) o la SageMaker consola para crear un punto final multimodelo. En el CPU caso de los puntos finales multimodelo respaldados, puede crear su punto final con contenedores personalizados integrando la biblioteca de servidores multimodelo.

Algoritmos, marcos e instancias compatibles

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 finales multimodelo mediante instancias respaldadas CPU

Los contenedores de inferencia de los siguientes algoritmos y marcos admiten puntos de conexión multimodelo:

Para usar cualquier otro marco o algoritmo, usa el kit de herramientas de SageMaker inferencia para crear un contenedor que admita puntos finales multimodelo. Para obtener más información, consulte Cree su propio contenedor para terminales SageMaker multimodelo.

Los puntos finales multimodelo admiten todos los tipos de instancias. CPU

Algoritmos, marcos e instancias compatibles para puntos finales multimodelo mediante instancias respaldadas GPU

El servidor de inferencia Triton admite el alojamiento de varios modelos GPU respaldados en puntos finales multimodelo. SageMaker Esto es compatible con los principales marcos de inferencia, como NVIDIA® TensorRT™,, Python PyTorch,MXNet, XGBoost scikit-learn ONNX RandomForest, Open, C++ personalizado y más. VINO

Para usar cualquier otro marco o algoritmo, puede usar el backend Triton para Python o C++ 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 finales multimodelo admiten los siguientes tipos de instancias: GPU

Familia de instancias Tipo de instancia vCPUs GiB de memoria por v CPU GPUs GPUmemoria

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

Cuadernos de ejemplo para puntos de conexión multimodelo

Para obtener más información sobre cómo usar puntos de conexión multimodelo, puede probar los siguientes cuadernos de ejemplo:

Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar los ejemplos anteriores, consulte. SageMaker Instancias de Amazon SageMaker Notebook Tras crear una instancia de bloc de notas y abrirla, selecciona la pestaña SageMaker Ejemplos para ver una lista de todos los SageMaker ejemplos. Los cuadernos de puntos finales multimodelo se encuentran en la ADVANCEDFUNCTIONALITYsección. 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:

Cómo funcionan los puntos de conexión multimodelo

SageMaker gestiona el ciclo de vida de los modelos alojados en puntos finales multimodelo de 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, los carga y almacena en caché de SageMaker forma dinámica cuando los invoca. Cuando SageMaker 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.

  2. Descarga el modelo desde el bucket de S3 al volumen de almacenamiento de esa instancia.

  3. Carga el modelo en la memoria del contenedor (CPUoGPU, en función de si tiene instancias GPU respaldadas CPU o respaldadas) en esa instancia de cómputo acelerado. Si el modelo ya está cargado en la memoria del contenedor, la invocación es más rápida porque SageMaker no es necesario descargarlo ni cargarlo.

SageMaker sigue enviando 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, SageMaker 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 SageMaker 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, SageMaker 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 proporciona la 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.

Establecer el comportamiento de SageMaker almacenamiento en caché de un modelo de punto final multimodelo

De forma predeterminada, los puntos finales multimodelo almacenan en caché los modelos que se utilizan con frecuencia en la memoria (CPUoGPU, en función de si tiene instancias GPU respaldadas CPU o respaldadas) y en el disco para proporcionar inferencias de baja latencia. Los modelos en caché se descargan y/o eliminan del disco solo cuando un contenedor se queda sin memoria o espacio en disco para adaptarse a un nuevo modelo de destino.

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_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 ModelCacheSetting parámetro para Disabled permitir un mayor número de transacciones por segundo (TPS) en las invoke_endpoint solicitudes, en comparación con el modo de almacenamiento en caché predeterminado. Más alto TPS en estos casos de uso se debe a que SageMaker hace lo siguiente después de la invoke_endpoint solicitud:

  • 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. CPUTanto para los puntos de enlace como para los GPU respaldados, la simultaneidad es un factor del número vCPUs de la instancia contenedora.

Para obtener instrucciones sobre cómo elegir un tipo de instancia de SageMaker ML para un punto final multimodelo, consulte. Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo

Recomendaciones de instancia para implementaciones de puntos de conexión multimodelo

Hay varios elementos que se deben tener en cuenta a la hora de seleccionar un tipo de instancia de SageMaker ML para un punto final multimodelo:

  • Aprovisione suficiente capacidad de Amazon Elastic Block Store (AmazonEBS) para todos los modelos que necesitan ser servidos.

  • Equilibre el rendimiento (minimice los inicios en frío) y el coste (no aprovisione en exceso la capacidad de instancia). Para obtener información sobre el tamaño del volumen de almacenamiento que se SageMaker adjunta a cada tipo de instancia para un punto final y para un punto final multimodelo, consulte. Alojamiento de volúmenes de almacenamiento de instancias

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

Al elegir un tipo de instancia de SageMaker ML, ten en cuenta lo siguiente:

  • Actualmente, los puntos finales multimodelo se admiten en todos los tipos de CPU instancias y en los tipos de GPU instancia única.

  • 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:

    • Piense en la cantidad de memoria de una instancia como el espacio de caché para cargar los modelos y piense en la cantidad de memoria vCPUs como el límite de simultaneidad para realizar inferencias en los modelos cargados (suponiendo que la invocación de un modelo esté limitada a). CPU

    • En el caso de las instancias CPU respaldadas, el número de ellas vCPUs afecta al número máximo de invocaciones simultáneas por instancia (suponiendo que la invocación de un modelo esté limitada a). CPU Una cantidad mayor de te vCPUs permite invocar más modelos únicos de forma simultánea.

    • En el caso de las instancias GPU respaldadas, una mayor cantidad de instancias y GPU memoria permite tener más modelos cargados y listos para atender las solicitudes de inferencia.

    • CPUTanto para las instancias GPU respaldadas como para las respaldadas, disponga de memoria «sobrante» para poder descargar los modelos no utilizados y, en especial, en el caso de los terminales 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 tiempos de carga/descarga:

    • Las familias de tipos de instancia d (por ejemplo, m5d, c5d o r5d) y g5s vienen con una NVMe (memoria express no volátil)SSD, que ofrece un alto rendimiento de E/S 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 NVMe SSD almacenamiento, SageMaker no adjunta un volumen de EBS almacenamiento de Amazon 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 descarga los modelos de forma dinámica cuando se queda sin memoria para dejar espacio a un nuevo modelo segmentado. 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 .

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.