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 los puntos de conexión multimodelo alojan los modelos en comparación con la forma en que los puntos de conexión de un solo modelo alojan estos.

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 puntos de conexión multimodelo admiten el alojamiento de modelos respaldados tanto por CPU como por GPU. Al utilizar modelos respaldados por GPU, puede reducir los costes de implementación del modelo mediante un mayor uso del punto de conexión y sus instancias de computación acelerada subyacentes.

Los puntos de conexión multimodelo permiten compartir el tiempo de los recursos de memoria en todos los modelos. Esto funciona mejor cuando los modelos son bastante similares en tamaño y latencia de invocación. Cuando es el caso, los puntos de conexión multimodelo pueden usar eficazmente instancias en todos los modelos. Si tiene modelos que tienen transacciones por segundo (TPS) o requisitos de latencia notablemente más altos, le recomendamos alojarlos en puntos de conexión dedicados.

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

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

Puede usar la consola AWS SDK for Python (Boto) o la SageMaker consola para crear un punto final multimodelo. Puede utilizar puntos de conexión multimodelo con respaldo de CPU, puede crear su punto de conexión con contenedores personalizados integrando la biblioteca Multi Model Server.

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 de conexión multimodelo que utilizan instancias respaldadas por CPU

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

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

Los puntos de conexión multimodelo admiten todos los tipos de instancias de CPU.

Algoritmos, marcos e instancias compatibles para puntos de conexión multimodelo que utilizan instancias respaldadas por GPU

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

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 de conexión multimodelo admiten los siguientes tipos de instancias de GPU:

Familia de instancias Tipo de instancia vCPU GiB de memoria por vCPU GPU Memoria de GPU

p2

ml.p2.xlarge

4

15.25

1

12

p3

ml.p3.2xlarge

8

7.62

1

16

g5

ml.g5.xlarge

4

4

1

24

g5

ml.g5.2xlarge

8

4

1

24

g5

ml.g5.4xlarge

16

4

1

24

g5

ml.g5.8xlarge

32

4

1

24

g5

ml.g5.16xlarge

64

4

1

24

g4dn

ml.g4dn.xlarge

4

4

1

16

g4dn

ml.g4dn.2xlarge

8

4

1

16

g4dn

ml.g4dn.4xlarge

16

4

1

16

g4dn

ml.g4dn.8xlarge

32

4

1

16

g4dn

ml.g4dn.16xlarge

64

4

1

16

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 punto de conexión multimodelo se encuentran en la sección FUNCIONALIDAD AVANZADA. Para abrir un bloc de notas, elija su pestaña Usar y, a continuación, Crear copia.

Para obtener más información sobre casos de uso de puntos de conexión multimodelo, consulte los siguientes blogs y recursos:

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 (CPU o GPU, dependiendo de si tiene instancias respaldadas por CPU o GPU) de esa instancia de computación acelerada. Si el modelo ya está cargado en la memoria del contenedor, la invocación es más rápida porque 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 de conexión multimodelo almacenan en caché los modelos que se utilizan con más frecuencia en la memoria (CPU o GPU, dependiendo de si tiene instancias respaldadas por CPU o GPU) y en disco para proporcionar inferencias de baja latencia. Los modelos en caché se descargan y/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 parámetro ModelCacheSetting en Disabled permite un mayor número de transacciones por segundo (TPS) para solicitudes invoke_endpoint, en comparación con el modo de almacenamiento en caché predeterminado. Un TPS más alto en estos casos de uso se debe a que SageMaker hace lo siguiente después de la solicitud: invoke_endpoint

  • Descarga el modelo de la memoria de forma asíncrona y lo elimina del disco inmediatamente después de invocarlo.

  • Proporciona una mayor simultaneidad para descargar y cargar modelos en el contenedor de inferencias. Tanto para los puntos de conexión respaldados por CPU como por GPU, la simultaneidad es un factor del número de vCPU de la instancia de contenedor.

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 (Amazon EBS) para todos los modelos que tenga que atender.

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

A la hora de elegir un tipo de instancia de aprendizaje SageMaker automático, ten en cuenta lo siguiente:

  • Actualmente, los puntos de conexión multimodelo se admiten en todos los tipos de instancias de CPU y en tipos de instancias de una sola GPU.

  • Para la distribución del tráfico (patrones de acceso) a los modelos que desea alojar detrás del punto de conexión multimodelo, junto con el tamaño del modelo (cuántos modelos se pueden cargar en la memoria en la instancia), tenga en cuenta la siguiente información:

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

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

    • En el caso de instancias respaldadas por GPU, una mayor cantidad de memoria de GPU e instancia le permite tener más modelos cargados y listos para servir solicitudes de inferencia.

    • En el caso de instancias respaldadas por CPU y GPU, tenga disponible memoria “holgada” para que los modelos no utilizados puedan descargarse, y especialmente para los puntos de conexión multimodelo con varias instancias. Si falla una instancia o una zona de disponibilidad, los modelos de esas instancias se redireccionarán a otras instancias situadas detrás del punto de conexión.

  • Determine su tolerancia a tiempos de carga/descarga:

    • Las familias de tipos de instancia d (por ejemplo, m5d, c5d o r5d) y g5s vienen con un SSD NVMe (memoria express no volátil), que ofrece un alto rendimiento de E/S y podría reducir el tiempo necesario para descargar modelos en el volumen de almacenamiento y para que el contenedor cargue el modelo desde el volumen de almacenamiento.

    • Como los tipos de instancia d y g5 vienen con un almacenamiento SSD NVMe, SageMaker no adjuntan un volumen de almacenamiento de Amazon EBS a estas instancias de procesamiento de aprendizaje automático que alojan el punto final multimodelo. El escalado automático funciona mejor cuando los modelos tienen un tamaño similar y son homogéneos, es decir, cuando sus requisitos de recursos y latencia de inferencia son similares.

También puede utilizar las siguientes instrucciones para optimizar la carga de modelos en sus puntos de conexión multimodelo:

Elegir un tipo de instancia que no pueda almacenar todos los modelos de destino en la memoria

En algunos casos, puede optar por reducir los costos y elegir un tipo de instancia que no pueda almacenar todos los modelos de destino en la memoria a la vez. SageMaker 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.