Ejecute modelos de aprendizaje automático de conjuntos en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Ejecute modelos ML de conjunto en Amazon SageMaker

La implementación de modelos en el aprendizaje automático (ML) se está volviendo cada vez más compleja. Desea implementar no solo un modelo de ML, sino grandes grupos de modelos de ML representados como flujos de trabajo de conjunto. Estos flujos de trabajo se componen de múltiples modelos de ML. La producción de estos modelos ML es un desafío porque debe cumplir con varios requisitos de rendimiento y latencia.

Amazon SageMaker admite conjuntos de instancia única con Servidor de inferencia Triton. Esta capacidad le permite ejecutar conjuntos de modelos que se ajustan a una sola instancia. Detrás de escena, SageMaker aprovecha Triton Inference Server para administrar el conjunto en cada instancia detrás del punto final para maximizar el rendimiento y la utilización del hardware con una latencia de inferencia ultrabaja (milisegundos de un solo dígito). Con Triton, también puede elegir entre una amplia gama de marcos de ML compatibles (incluidos TensorFlow, PyTorch, ONNX, XGBoost y NVIDIA TensorRT) y backends de infraestructura, incluidos GPU, CPU y Inferencia de AWS.

Con esta capacidad en SageMaker, puede optimizar sus cargas de trabajo al evitar la costosa latencia de la red y aprovechar los beneficios de la ubicación de los datos y la computación para las canalizaciones de inferencia de conjuntos. En esta publicación, discutimos los beneficios de usar Triton Inference Server junto con consideraciones sobre si esta es la opción correcta para su carga de trabajo.

Resumen de la solución

Triton Inference Server está diseñado para permitir que los equipos implementen, ejecuten y escalen modelos de IA entrenados desde cualquier marco en cualquier infraestructura basada en GPU o CPU. Además, se ha optimizado para ofrecer inferencia de alto rendimiento a escala con funciones como procesamiento por lotes dinámico, ejecuciones simultáneas, configuración de modelo óptima, capacidades de conjunto de modelos y compatibilidad con entradas de transmisión.

Las cargas de trabajo deben tener en cuenta las capacidades que proporciona Triton para garantizar que se puedan servir sus modelos. Triton es compatible con una serie de marcos populares listos para usar, incluidos TensorFlow, PyTorch, ONNX, XGBoost y NVIDIA TensorRT. Triton también admite varios backends que son necesarios para que los algoritmos se ejecuten correctamente. Debe asegurarse de que sus modelos sean compatibles con estos backends y, en caso de que un backend no lo sea, Triton le permite implementar los suyos propios e integrarlos. También debe verificar que la versión de su algoritmo sea compatible y asegurarse de que los artefactos del modelo sean aceptables para el backend correspondiente. Para verificar si su algoritmo particular es compatible, consulte Back-end del servidor de inferencia Triton para obtener una lista de backends compatibles de forma nativa mantenidos por NVIDIA.

Puede haber algunos escenarios en los que sus modelos o conjuntos de modelos no funcionen en Triton sin requerir más esfuerzo, como si no existiera un back-end compatible de forma nativa para su algoritmo. Hay algunas otras consideraciones a tener en cuenta, como que el formato de la carga útil puede no ser el ideal, especialmente cuando el tamaño de la carga útil puede ser grande para su solicitud. Como siempre, debe validar su rendimiento después de implementar estas cargas de trabajo para asegurarse de que se cumplan sus expectativas.

Tomemos un modelo de red neuronal de clasificación de imágenes y veamos cómo podemos acelerar nuestras cargas de trabajo. En este ejemplo, usamos el backend NVIDIA DALI para acelerar nuestro preprocesamiento en el contexto de nuestro conjunto.

Crear conjuntos de modelos Triton

Triton Inference Server simplifica la implementación de modelos de IA a escala. Triton Inference Server viene con una solución conveniente que simplifica la creación de canalizaciones de preprocesamiento y posprocesamiento. La plataforma Triton Inference Server proporciona el programador de conjuntos, que puede usar para crear modelos de conjuntos de canalización que participen en el proceso de inferencia al tiempo que garantiza la eficiencia y optimiza el rendimiento.

Triton Inference Server sirve modelos de repositorios de modelos. Veamos el diseño del repositorio de modelos para el modelo de conjunto que contiene el modelo de preprocesamiento de DALI, el modelo TensorFlow inception V3 y la configuración del conjunto de modelos. Cada subdirectorio contiene la información del repositorio para los modelos correspondientes. los config.pbtxt El archivo describe la configuración del modelo para los modelos. Cada directorio debe tener una subcarpeta numérica para cada versión del modelo y lo ejecuta un backend específico que admite Triton.

Repositorio de modelos NVIDIA Triton

NVIDIA DALI

Para esta publicación, usamos la biblioteca de carga de datos de NVIDIA (DALI) como modelo de preprocesamiento en nuestro conjunto de modelos. NVIDIA DALI es una biblioteca para la carga y el preprocesamiento de datos para acelerar las aplicaciones de aprendizaje profundo. Proporciona una colección de bloques de construcción optimizados para cargar y procesar datos de imagen, video y audio. Puede usarlo como un reemplazo directo portátil para cargadores de datos integrados e iteradores de datos en marcos de aprendizaje profundo populares.

NVIDIA Dalí

El siguiente código muestra la configuración del modelo para un backend DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Modelo de inicio V3

Para esta publicación, mostramos cómo se usa DALI en un conjunto de modelos con Inception V3. El modelo preentrenado de Inception V3 TensorFlow se guarda en formato GraphDef como un solo archivo llamado model.graphdef. config.pbtxt El archivo tiene información sobre el nombre del modelo, la plataforma, max_batch_sizey contratos de entrada y salida. Recomendamos configurar el max_batch_size configuración a menos que el tamaño de lote del modelo inicial V3. El archivo de etiquetas tiene etiquetas de clase para 1,000 clases diferentes. Copiamos las etiquetas del modelo de clasificación inicial en el inception_graphdef directorio en el repositorio de modelos. El archivo de etiquetas contiene 1,000 etiquetas de clase del ImagenNet conjunto de datos de clasificación.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

conjunto tritón

El siguiente código muestra una configuración de modelo de un modelo de conjunto para el preprocesamiento DALI y la clasificación de imágenes:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Crear un punto final de SageMaker

Puntos finales de SageMaker permitir el alojamiento en tiempo real donde se requiere un tiempo de respuesta de milisegundos. SageMaker asume el trabajo pesado indiferenciado de la gestión de hospedaje de modelos y tiene la capacidad de escalar automáticamente. Además, también se proporcionan una serie de capacidades, incluido el alojamiento de múltiples variantes de su modelo, pruebas A/B de sus modelos, integración con Reloj en la nube de Amazon para obtener la observabilidad del rendimiento del modelo y el seguimiento de la desviación del modelo.

Vamos a crear un modelo de SageMaker a partir de los artefactos del modelo que cargamos en Servicio de almacenamiento simple de Amazon (Amazon S3).

A continuación, también proporcionamos una variable de entorno adicional: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, que especifica el nombre del modelo que Triton cargará. El valor de esta clave debe coincidir con el nombre de la carpeta en el paquete del modelo cargado en Amazon S3. Esta variable es opcional en los casos en los que está utilizando un solo modelo. En el caso de modelos de conjunto, esta clave debe especificarse para que Triton se inicie en SageMaker.

Además, puede configurar SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT y SAGEMAKER_TRITON_THREAD_COUNT para optimizar el número de hilos.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

Con el modelo anterior, creamos una configuración de punto final donde podemos especificar el tipo y la cantidad de instancias que queremos en el punto final:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Usamos esta configuración de punto final para crear un nuevo punto final de SageMaker y esperamos a que finalice la implementación. El estado cambia a InService cuando la implementación se realiza correctamente.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Carga útil de inferencia

La imagen de carga útil de entrada pasa por la canalización de preprocesamiento de DALI y se utiliza en el programador de conjuntos proporcionado por Triton Inference Server. Construimos la carga útil para pasar al punto final de inferencia:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

inferencia de conjunto

Cuando tenemos el punto final en ejecución, podemos usar la imagen de muestra para realizar una solicitud de inferencia usando JSON como formato de carga útil. Para el formato de solicitud de inferencia, Triton utiliza los protocolos de inferencia estándar de la comunidad KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

Con la binary+json formato, tenemos que especificar la longitud de los metadatos de la solicitud en el encabezado para permitir que Triton analice correctamente la carga útil binaria. Esto se hace usando un encabezado de tipo de contenido personalizado application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Esto es diferente de usar un Inference-Header-Content-Length encabezado en un servidor Triton independiente porque los encabezados personalizados no están permitidos en SageMaker.

El paquete tritonclient proporciona métodos de utilidad para generar la carga útil sin tener que conocer los detalles de la especificación. Usamos los siguientes métodos para convertir nuestra solicitud de inferencia en un formato binario, lo que proporciona latencias más bajas para la inferencia. Consulte el GitHub cuaderno para obtener detalles de implementación.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Conclusión

En esta publicación, mostramos cómo puede producir conjuntos de modelos que se ejecutan en una sola instancia en SageMaker. Este patrón de diseño puede ser útil para combinar cualquier lógica de preprocesamiento y posprocesamiento junto con predicciones de inferencia. SageMaker usa Triton para ejecutar la inferencia de conjunto en un solo contenedor en una instancia que admite todos los marcos principales.

Para obtener más ejemplos de conjuntos de Triton en SageMaker, consulte el Repositorio GitHub. ¡Pruébalo!


Acerca de los autores

Ejecute modelos de aprendizaje automático de conjuntos en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.James Park es arquitecto de soluciones en Amazon Web Services. Trabaja con Amazon.com para diseñar, crear e implementar soluciones tecnológicas en AWS y tiene un interés particular en la IA y el aprendizaje automático. En su tiempo libre, le gusta buscar nuevas culturas, nuevas experiencias y mantenerse al día con las últimas tendencias tecnológicas.

Ejecute modelos de aprendizaje automático de conjuntos en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Vikram Elango es Arquitecto Senior de Soluciones Especializado en IA/ML en Amazon Web Services, con sede en Virginia, EE. UU. Vikram ayuda a los clientes de la industria financiera y de seguros con diseño y liderazgo intelectual para crear e implementar aplicaciones de aprendizaje automático a escala. Actualmente se centra en el procesamiento del lenguaje natural, la IA responsable, la optimización de inferencias y el escalado de ML en toda la empresa. En su tiempo libre, disfruta viajar, hacer caminatas, cocinar y acampar con su familia.

Ejecute modelos de aprendizaje automático de conjuntos en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Saurabh Trikande es gerente sénior de productos para Amazon SageMaker Inference. Le apasiona trabajar con clientes y está motivado por el objetivo de democratizar el aprendizaje automático. Se enfoca en los desafíos principales relacionados con la implementación de aplicaciones de ML complejas, modelos de ML de múltiples inquilinos, optimizaciones de costos y hacer que la implementación de modelos de aprendizaje profundo sea más accesible. En su tiempo libre, a Saurabh le gusta caminar, aprender sobre tecnologías innovadoras, seguir TechCrunch y pasar tiempo con su familia.

Sello de tiempo:

Mas de Aprendizaje automático de AWS