Logotipo de Zephyrnet

Reduzca el tiempo necesario para implementar sus modelos en Amazon SageMaker para realizar pruebas

Fecha:

Los científicos de datos a menudo entrenan sus modelos localmente y buscan un servicio de alojamiento adecuado para implementar sus modelos. Lamentablemente, no existe un mecanismo o una guía establecidos para implementar modelos previamente entrenados en la nube. En esta publicación, analizamos la implementación de modelos entrenados para Amazon SageMaker hosting para reducir el tiempo de implementación.

SageMaker es un servicio de aprendizaje automático (ML) completamente administrado. Con SageMaker, puede crear y entrenar rápidamente modelos ML e implementarlos directamente en un entorno alojado listo para producción. Además, no necesita administrar servidores. Obtiene un entorno de notebook Jupyter integrado con fácil acceso a sus fuentes de datos. Puede realizar análisis de datos, entrenar sus modelos y probarlos usando sus propios algoritmos o usar algoritmos de ML proporcionados por SageMaker que están optimizados para ejecutarse de manera eficiente contra grandes conjuntos de datos distribuidos en varias máquinas. La capacitación y el hospedaje se facturan por minutos de uso, sin tarifas mínimas ni compromisos iniciales.

Resumen de la solución

Los científicos de datos a veces entrenan modelos localmente usando su IDE y envían esos modelos al equipo de ingeniería de ML para su implementación o simplemente ejecutan predicciones localmente en máquinas potentes. En esta publicación, presentamos una biblioteca de Python que simplifica el proceso de implementación de modelos en SageMaker para hosting en puntos finales en tiempo real o sin servidor.

Esta biblioteca de Python brinda a los científicos de datos una interfaz simple para comenzar rápidamente con SageMaker sin necesidad de conocer ninguna de las funciones de SageMaker de bajo nivel.

Si tiene modelos entrenados localmente con su IDE preferido y quiere beneficiarse de la escala de la nube, puede usar esta biblioteca para implementar su modelo en SageMaker. Con SageMaker, además de todos los beneficios de escalabilidad de una plataforma de aprendizaje automático basada en la nube, tiene acceso a herramientas de capacitación especialmente diseñadas (capacitación distribuida, ajuste de hiperparámetros), administración de experimentos, administración de modelos, detección de sesgos, explicabilidad de modelos y muchas otras. capacidades que pueden ayudarlo en cualquier aspecto del ciclo de vida de ML. Puede elegir entre los tres marcos más populares para ML: Scikit-learn, PyTorch y TensorFlow, y puede elegir el tipo de cómputo que desea. Los valores predeterminados se proporcionan en el camino para que los usuarios de esta biblioteca puedan implementar sus modelos sin necesidad de tomar decisiones complejas o aprender nuevos conceptos. En esta publicación, le mostramos cómo comenzar con esta biblioteca y optimizar la implementación de sus modelos ML en el alojamiento de SageMaker.

La biblioteca se encuentra en la Repositorio GitHub.

El kit de herramientas de migración de SageMaker

El SageMakerMigration La clase está disponible a través de una biblioteca de Python publicada en GitHub. Las instrucciones para instalar esta biblioteca se proporcionan en el repositorio; asegúrese de seguir el LÉAME para configurar correctamente su entorno. Después de instalar esta biblioteca, el resto de esta publicación habla sobre cómo puede usarla.

El SageMakerMigration La clase consta de abstracciones de alto nivel sobre las API de SageMaker que reducen significativamente los pasos necesarios para implementar su modelo en SageMaker, como se ilustra en la siguiente figura. Esto está destinado a la experimentación para que los desarrolladores puedan comenzar rápidamente y probar SageMaker. No está diseñado para migraciones de producción.

Para los modelos Scikit-learn, PyTorch y TensorFlow, esta biblioteca admite la implementación de modelos entrenados en un punto final en tiempo real de SageMaker o un punto final sin servidor. Para obtener más información sobre las opciones de inferencia en SageMaker, consulte Implementar modelos para inferencia.

Endpoints en tiempo real frente a sin servidor

La inferencia en tiempo real es ideal para cargas de trabajo de inferencia en las que tiene requisitos de latencia baja, interactivos y en tiempo real. Puede implementar su modelo en los servicios de alojamiento de SageMaker y obtener un punto final que se puede usar para la inferencia. Estos puntos finales están totalmente administrados y admiten el escalado automático.

SageMaker Serverless Inference es una opción de inferencia especialmente diseñada que le facilita implementar y escalar modelos ML. La inferencia sin servidor es ideal para cargas de trabajo que tienen períodos de inactividad entre picos de tráfico y pueden tolerar arranques en frío. Los puntos finales sin servidor inician automáticamente los recursos informáticos y los escalan hacia adentro y hacia afuera según el tráfico, lo que elimina la necesidad de elegir tipos de instancias o administrar políticas de escalado. Esto elimina el trabajo pesado indiferenciado de seleccionar y administrar servidores.

Dependiendo de su caso de uso, es posible que desee alojar rápidamente su modelo en SageMaker sin tener una instancia siempre activa y sin incurrir en costos, en cuyo caso un extremo sin servidor es una excelente solución.

Prepare su modelo entrenado y script de inferencia

Una vez que haya identificado el modelo que desea implementar en SageMaker, debe asegurarse de que el modelo se presente a SageMaker en el formato correcto. Los puntos finales de SageMaker generalmente constan de dos componentes: el artefacto del modelo entrenado (.pth, .pkl, etc.) y un script de inferencia. El script de inferencia no siempre es obligatorio, pero si no se proporciona, se aplican los controladores predeterminados para el contenedor de servicio que está utilizando. Es esencial proporcionar este script si necesita personalizar su funcionalidad de entrada/salida para la inferencia.

El artefacto del modelo entrenado es simplemente un modelo guardado de Scikit-learn, PyTorch o TensorFlow. Para Scikit-learn, suele ser un archivo pickle, para PyTorch es un archivo .pt o .pth y para TensorFlow es una carpeta con recursos, archivos .pb y otras variables.

En general, debe poder controlar cómo su modelo procesa la entrada y realiza la inferencia, y controlar el formato de salida para su respuesta. Con SageMaker, puede proporcionar una guion de inferencia para agregar esta personalización. Cualquier secuencia de comandos de inferencia utilizada por SageMaker debe tener una o más de las siguientes cuatro funciones de controlador: model_fn, input_fn, predict_fny output_fn.

Tenga en cuenta que estas cuatro funciones se aplican a PyTorch y Scikit-learn contenedores específicamente. TensorFlow tiene controladores ligeramente diferentes porque está integrado con Publicación de TensorFlow. Para un script de inferencia con TensorFlow, tiene dos manipuladores de modelos: manejador_de_entrada y manejador_de_salida. Nuevamente, estos tienen el mismo propósito de preprocesamiento y posprocesamiento con los que puede trabajar, pero están configurados de manera ligeramente diferente para integrarse con Publicación de TensorFlow. Para los modelos de PyTorch, model_fn es una función obligatoria en el script de inferencia.

modelo_fn

Esta es la función que se llama primero cuando invoca su punto final de SageMaker. Aquí es donde escribe su código para cargar el modelo. Por ejemplo:

def model_fn(model_dir):
    model = Your_Model()
    with open(os.path.join(model_dir, 'model.pth'), 'rb') as f:
        model.load_state_dict(torch.load(f))
    return model

Según el marco y el tipo de modelo, este código puede cambiar, pero la función debe devolver un modelo inicializado.

entrada_fn

Esta es la segunda función que se llama cuando se invoca su punto final. Esta función toma los datos enviados al punto final para la inferencia y los analiza en el formato requerido para que el modelo genere una predicción. Por ejemplo:

def input_fn(request_body, request_content_type):
    """An input_fn that loads a pickled tensor"""
    if request_content_type == 'application/python-pickle':
        return torch.load(BytesIO(request_body))
    else:
        # Handle other content-types here or raise an Exception
        # if the content type is not supported.
        pass

El request_body contiene los datos que se usarán para generar inferencias a partir del modelo y se analizan en esta función para que estén en el formato requerido.

predecir_fn

Esta es la tercera función que se llama cuando se invoca su modelo. Esta función toma los datos de entrada preprocesados ​​devueltos desde input_fn y utiliza el modelo devuelto de model_fn para hacer la predicción. Por ejemplo:

def predict_fn(input_data, model):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model.to(device)
    model.eval()
    with torch.no_grad():
        return model(input_data.to(device))

Opcionalmente, puede agregar output_fn para analizar la salida de predict_fn antes de devolverlo al cliente. La firma de la función es def output_fn(prediction, content_type).

Mueva su modelo previamente entrenado a SageMaker

Una vez que tenga el archivo de modelo entrenado y la secuencia de comandos de inferencia, debe colocar estos archivos en una carpeta de la siguiente manera:

#SKLearn Model

model_folder/
    model.pkl
    inference.py
    
# Tensorflow Model
model_folder/
    0000001/
        assets/
        variables/
        keras_metadata.pb
        saved_model.pb
    inference.py
    
# PyTorch Model
model_folder/
    model.pth
    inference.py

Una vez que su modelo y secuencia de comandos de inferencia se hayan preparado y guardado en esta estructura de carpetas, su modelo estará listo para su implementación en SageMaker. Ver el siguiente código:

from sagemaker_migration import frameworks as fwk

if __name__ == "__main__":
    ''' '''
    sk_model = fwk.SKLearnModel(
        version = "0.23-1", 
        model_data = 'model.joblib',
        inference_option = 'real-time',
        inference = 'inference.py',
        instance_type = 'ml.m5.xlarge'
    )
    sk_model.deploy_to_sagemaker()

Después de la implementación de su punto final, asegúrese de limpiar los recursos que no utilizará a través de la consola de SageMaker o a través de la eliminar_punto final Llamada a la API de Boto3.

Conclusión

El objetivo del proyecto del kit de herramientas de migración de SageMaker es facilitar que los científicos de datos incorporen sus modelos a SageMaker para aprovechar la inferencia basada en la nube. El repositorio seguirá evolucionando y admitirá más opciones para migrar cargas de trabajo a SageMaker. El código es de código abierto y agradecemos las contribuciones de la comunidad a través de solicitudes de extracción y problemas.

Primero eche un vistazo al sitio web de la página Repositorio GitHub para explorar más sobre el uso del kit de herramientas de migración de SageMaker, y siéntase libre de contribuir también con ejemplos o solicitudes de funciones para agregar al proyecto.


Sobre los autores

kirit thadaka es un arquitecto de soluciones de aprendizaje automático que trabaja en el equipo de Amazon SageMaker Service SA. Antes de unirse a AWS, Kirit pasó un tiempo trabajando en startups de IA en etapas iniciales, seguido de algún tiempo en consultoría en varios roles en investigación de IA, MLOps y liderazgo técnico.

Ram Vegiraju es un arquitecto de ML en el equipo de servicio Sagemaker. Se enfoca en ayudar a los clientes a construir y optimizar sus soluciones AI/ML en Amazon Sagemaker. En su tiempo libre, le encanta viajar y escribir.

punto_img

Información más reciente

punto_img