Blog de Amazon Web Services (AWS)
Personalización y reutilización de modelos generados por el piloto automático de Amazon SageMaker
Por Simon Zamarin, Piali Das y Qingwei Li
El modo piloto automático de Amazon SageMaker entrena y ajusta automáticamente los mejores modelos de aprendizaje automático (ML) para problemas de clasificación o regresión, al tiempo que le permite mantener el control y total visibilidad. Esto no solo permite a los analistas de datos, desarrolladores y científicos de datos entrenar, ajustar e implementar modelos con poco o ningún código, sino que también puede revisar un cuaderno generado que describe todos los pasos que AutoPiloto tomó para generar el modelo. En algunos casos, es posible que también desee personalizar los pipelines generados por Autopilot con sus propios componentes personalizados.
En este post se muestra cómo crear y utilizar modelos con Autopilot en un par de clics y, a continuación, describe cómo adaptar el código generado por SageMaker Autopilot con sus propios selectores de funciones y transformadores personalizados para añadir características específicas del dominio. También utilizamos la capacidad de funcionamiento en seco de Autopilot, en la que Autopilot solo genera código para preprocesadores de datos, algoritmos y ajustes de parámetros de algoritmos. Esto se puede hacer simplemente eligiendo la opción ejecutar un piloto para crear un cuaderno con definiciones de candidatos.
Personalización del Piloto Automático
Personalizar modelos de piloto automático, en la mayoría de los casos, no es necesario. Autopilot crea modelos de alta calidad que se pueden implementar sin necesidad de personalización. Autopilot realiza automáticamente el análisis exploratorio de sus datos y decide qué características pueden producir los mejores resultados. Como tal, presenta una baja barrera de entrada a ML para una amplia gama de usuarios, desde analistas de datos hasta desarrolladores, que desean agregar capacidades AI/ML a su proyecto.
Sin embargo, los usuarios más avanzados pueden aprovechar el enfoque transparente de AutoPiloto hacia AutoML para reducir drásticamente el trabajo pesado indiferenciado que prevalece en los proyectos ML. Por ejemplo, puede que desee que AutoPiloto utilice transformaciones de funciones personalizadas que utiliza su empresa, o técnicas de imputación personalizadas que funcionen mejor en el contexto de los datos. Puede preprocesar sus datos antes de llevarlos a SageMaker Autopilot, pero eso implicaría salir de Piloto Automático y mantener un pipeline de preprocesamiento independiente. Alternativamente, puede utilizar rl pipeline de procesamiento de datos de Autopilot para dirigir Autopilot a utilizar sus transformaciones e imputaciones personalizadas. La ventaja de este enfoque es que puede centrarse en la recopilación de datos y dejar que Autopilot haga el trabajo pesado para aplicar las transformaciones e imputaciones de características deseadas, y luego encontrar e implementar el mejor modelo.
Preparación de sus datos y trabajo de piloto automático
Comencemos creando un experimento de piloto automático utilizando el conjunto de datos Tipo de cubierta forestal .
- Descargue el conjunto de datos y cárguelo en Amazon Simple Storage Service (Amazon S3).
Asegúrese de crear el usuario de Amazon SageMaker Studio en la misma región que el depósito de S3.
2. Abra SageMaker Studio.
3. Cree un trabajo, proporcionando la siguiente información:
-
- Nombre del experimento
- Ubicación del dataset de formación
- Bucket de S3 para guardar los datos de salida del piloto automático
- Tipo de problema de ML
Su trabajo de piloto automático ya está listo para ejecutarse. En lugar de ejecutar un experimento completo, elegimos dejar que Autopilot genere un cuaderno con definiciones de candidatos.
Inspección de los pipelines generadas por piloto automático
SageMaker Autopilot automatiza las tareas clave en una pipeline ML. Explora cientos de modelos compuestos por diferentes características, algoritmos e hiperparámetros para encontrar el que mejor se adapte a sus datos. También proporciona una tabla de líderes de 250 modelos para que pueda ver cómo se desempeñó cada candidato de modelo y elegir el mejor para implementar. Exploramos esto con más profundidad en la sección final de este post.
Una vez finalizado el experimento, puede inspeccionar las pipelines candidatas generadas. Elcandidato se refiere a la combinación de pasos de preprocesamiento de datos y selección de algoritmos utilizados para entrenar los 250 modelos. El cuaderno de generación de candidatos contiene código Python que Autopilot usó para generar estos candidatos.
5247080863753079
07/26
983
- Elija Abrir portátil de generación de candidatos.
- Abra su cuaderno.
- Elija Importar para importar el Jupyter notebook al espacio de trabajo.
- Cuando se le solicite, elija Python 3 (Data Science) como núcleo.
- Dentro del portátil, ejecute todas las celdas de la configuración de SageMaker
Esto copia el código de preparación de datos generado por AutoPiloto en su espacio de trabajo.
En el directorio raíz de SageMaker Studio, ahora debería ver una carpeta con el nombre de su experimento de piloto automático. El nombre de la carpeta debe ser <Your Experiment Name> —artefactos. Ese directorio contiene dos subdirectorios: generated_module y sagemaker_automl. El directorio generated_module contiene los artefactos de procesamiento de datos generados por Autopilot.
Hasta ahora, el trabajo de piloto automático ha analizado el conjunto de datos y generado pipelines candidatas ML que contienen un conjunto de transformadores de entidades y un algoritmo ML. Desplácese por la carpeta generated_module hasta el directorio candidate_data_processors , que contiene 12 archivos:
- dpp0.py—dpp9.py — Candidatos de procesamiento de datos que el piloto automático generó
- trainer.py — Script que ejecuta los candidatos de procesamiento de datos
- sagemaker_serve.py — Script para ejecutar la pipeline de preprocesamiento en tiempo de inferencia
Si examina cualquiera de los archivos dpp*.py , puede observar que Autopilot generó código que crea pipelines sckit-learn , que puede extender fácilmente con sus propias transformaciones. Puede hacer esto modificando directamente los archivos dpp*.py existentes o extendiendo las pipelines después de que se crean instancias en el archivo trainer.py , en el que define un transformador que se puede llamar dentro de dpp*.pyexistente archivos. El segundo enfoque se recomienda porque es más mantenible y le permite extender todas los pipelines de procesamiento propuestas a la vez en lugar de modificar cada una de ellas individualmente
Uso de transformadores específicos
Es posible que desee llamar a un transformador específico desde sckit-learn o usar uno implementado en el paquete de código abierto sagemaker-scikit-learn-extension. Este último proporciona una serie de estimadores y transformadores compatibles con scikit-learn-que puede utilizar. Por ejemplo, implementa el codificador Weight of Evidence (WoE), una codificación a menudo utilizada para características categóricas en el contexto de la clasificación binaria.
Para utilizar transformadores adicionales, primero amplíe las instrucciones de importación en el archivo trainer.py . Para nuestro caso de uso, agregamos el siguiente código:
de sklearn.pipeline import FeatuReunion, Pipeline de sklearn.ensemble importar RandomForestClassifier de sklearn.feature_selection importar SelectFromModel desde sagemaker_sklearn_extension.preprocesamiento de importación RobustStandardScaler
Si, al modificar trainer.py, encuentra errores al ejecutar la celda del Jupyter notebook que contiene automl_interactive_runner.fit_data_transformers
(…), puede obtener información de depuración de Amazon CloudWatch en el grupo de registro /aws/sageMaker/TrainingJobs.
Implementación de transformadores personalizados
Volviendo al caso de uso tipo cubierta forestal, tenemos características para la distancia vertical y horizontal a la hidrología. Queremos ampliar esto con una transformación de característica adicional que calcula la distancia de línea recta a la hidrología. Podemos hacer esto agregando un archivo adicional en el directorio candidate_data_processors donde definimos nuestra transformación personalizada. Consulte el siguiente código:
# additional_features.py importar numpy como np de sklearn.base importar BaseEstimator, TransformerMixin clase HydrologyDistance (BaseEstimator, TransformerMixin): def __init__ (self, feature_index): sí mismo._feature_index = feature_index def fit (auto, X, y = Ninguno): retorno auto transformada def (auto, X, y = Ninguna): X = x.copy () .astype (np.float32) a, b = np.split (X [:, auto._feature_index], 2, ejes=1) devuelve np.hypot (a, b) .remodelar (-1,1) Dentro del archivo trainer.py , importamos el módulo additional_features y agregamos nuestro transformador HydrologyDistance como una tubería paralela a los generados existentes. Además de nuestro transformador de características adicional, también agregamos un selector de características a nuestra pipeline para seleccionar solo las entidades con la mayor importancia según lo determinado por un RandomForestClassifier: def update_feature_transformer (encabezado, feature_transformer): «" "Personalizar el transformador de función. Devuelve por defecto encabezado: SageMaker_Sklearn_Extension.externals.header Objeto del encabezado de clase, utilizado para asignar los nombres de las columnas al índice apropiado feature_transformer: obj transformador aplicado a las entidades Devoluciones — feature_transformer: obj transformador actualizado que se aplicará a las entidades «"» features_to_transform = header.as_feature_indices ( [ «Horizontal_Distance_To_Hidrología», 'Vertical_Distance_To_Hidrología' ] ) # nueva pipeline con transformaciones personalizadas additional_pipeline = Pipeline ([(«distancia», HydrologyDistance (features_to_transform)), («ScaleDistance», RobustStandardScaler ()) ]) # combinarse con la pipeline generada por AutoPiloto combined_transformer = FeatuReIon ([(«adicional», adicional_pipeline), («existente», feature_transformer)] ) # realizar la selección de entidades en la tubería combinada feature_selector = SelectFromModel (RandomForestClassifier (n_estimators = 10)) feature_transformer = Pipeline ([(«feature_engineering», combined_transformer), («feature_selection», feature_selector)] ) devolver feature_transformerde adicional_features_import *
Correr inferencias
A continuación, tenemos que copiar nuestro archivo additional_features.py en el directorio del modelo para que esté disponible en el momento de la inferencia. Una función serialize_code se proporciona específicamente para esto. Modifique la función según el código de ejemplo siguiente para asegurarse de que se incluye con el artefacto del modelo. Se resalta la línea de código que requiere modificación.
def serialize_code (dest_dir, processor_file): «" "Copia el código necesario para la inferencia en el directorio de destino De forma predeterminada, sagemaker_serve.py y el archivo del módulo del procesador se copian. Para serializar cualquier archivo.py adicional para un transformador personalizado, agréguelo al listar archivos_to_serialize. dest_dir: str destino donde se serializarían los archivos python «"» archivos_to_serialize = [ os.path.join (os.path.dirname (__file__), 'sagemaker_serve.py'), archivo_procesador] # Incluir el código del transformador personalizado en el directorio del modelo archivos_to_serialize.append (os.path.join (os.path.dirname (__file__), 'additional_features.py')) os.makedirs (dest_dir, exist_OK=True) para el origen en files_to_serialize: shutil.copy (source, os.path.join (dest_dir, os.path.basename (fuente))) Finalmente, necesitamos modificar la función model_fn en sagemaker_serve.py para copiar el archivo additional_features.py en el directorio de trabajo actual para que la pipeline scikit-learn pueda importar el archivo en el momento de la inferencia: importar shutil # asegúrese de que esto se importe para que el archivo se pueda copiar def model_fn (model_dir): «" "Carga el modelo. El modelo de servidor modelo SageMaker Scikit-Learn carga modelo invocando este método. Parámetros — model_dir: str el directorio donde residen los archivos de modelo Devoluciones — : AutomlTransformer objeto de modelo deserializado que se puede utilizar para servir modelos «"» shutil.copyfile (os.path.join (model_dir, 'additional_features.py'), 'additional_features.py') carga de retorno (nombre_archivo = os.path.join (model_dir, 'model.joblib'))
Cuando termine todos estos pasos, puede volver al Jupyter notebook de definición de candidato y ejecutar las celdas restantes. Las transformaciones adicionales definidas se aplican a todos los candidatos del pipeline de procesamiento de datos seleccionados y también se incluyen en el pipeline de inferencia.
Implementación del mejor modelo
À medida que o Autopilot executa os pipelines candidatos, ele itera mais de 250 combinações de pipelines de processamento, tipos de algoritmos e hiperparâmetros de modelo. Quando o processo estiver concluído, você pode navegar até a seção final do notebook (Seleção de Modelo e Implantação) e visualizar uma tabela de classificação dos modelos Autopilot gerados. A execução das células de notebook restantes implanta automaticamente o modelo que produziu os melhores resultados e o expõe como um endpoint REST API.
Conclusiones
En este post, demostramos cómo personalizar un pipeline de entrenamiento e inferencia de Amazon Sagemaker Autopilot con su propio código de ingeniería de funciones. Primero dejamos que Autopilot genere definiciones de candidatos sin ejecutar el entrenamiento real y ajuste de hiperparámetros. Luego implementamos transformadores personalizados que representan la ingeniería de características personalizadas que queremos llevar al piloto automático. Para obtener más información sobre el piloto automático, consulte Amazon SageMaker Autopilot.
Este artículo fue traducido del Blog da AWS en Inglês.
Sobre os Autores
Simon Zamarin es Arquitecto de Soluciones AI/ML cuyo objetivo principal es ayudar a los clientes a extraer valor de sus activos de datos. En su tiempo libre, Simon disfruta pasar tiempo con la familia, leer ciencia ficción, y trabajar en varios proyectos de bricolaje.
Qingwei Li es especialista en aprendizaje automático en Amazon Web Services. Recibió su doctorado en Investigación Operativa después de romper la cuenta de la beca de investigación de su asesor y no entregar el Premio Nobel que prometió. Actualmente ayuda a clientes del sector de seguros y servicios financieros a crear soluciones de aprendizaje automático en AWS. En su tiempo libre, le gusta leer y enseñar.
Piali Das es ingeniero sénior de software en el equipo de piloto automático de AWS SageMaker. Anteriormente contribuyó a la construcción de algoritmos de SageMaker. Ella disfruta de la programación científica en general y ha desarrollado un interés por el aprendizaje automático y los sistemas distribuidos.
Revisor
Sergio Beltrán es arquitecto de soluciones especialista en AI/ML en AWS. En su rol apoya a los clientes a encontrar la mejor solución y arquitectura para sus necesidades y aprovechar los servicios de AI/ML para generar innovación y mejorar la productividad. Antes de AWS, trabajó como data scientist y gerente de business development en la industria Telco.