MLOps es una disciplina clave que a menudo supervisa el camino hacia la producción de modelos de aprendizaje automático (ML). Es natural centrarse en un solo modelo que desea entrenar e implementar. Sin embargo, en realidad, probablemente trabajará con docenas o incluso cientos de modelos, y el proceso puede implicar varios pasos complejos. Por lo tanto, es importante contar con la infraestructura para rastrear, entrenar, implementar y monitorear modelos con diferentes complejidades a escala. Aquí es donde entran en juego las herramientas de MLOps. Las herramientas de MLOps lo ayudan a construir y simplificar de manera repetible y confiable estos procesos en un flujo de trabajo diseñado para ML.
Canalizaciones de Amazon SageMakeruna característica de Amazon SageMaker, es un servicio de orquestación de flujos de trabajo especialmente diseñado para ML que lo ayuda a automatizar flujos de trabajo de ML de extremo a extremo a escala. Simplifica el desarrollo y mantenimiento de modelos ML al proporcionar una plataforma centralizada para orquestar tareas como preparación de datos, entrenamiento de modelos, ajuste y validación. SageMaker Pipelines puede ayudarlo a optimizar la administración del flujo de trabajo, acelerar la experimentación y volver a entrenar modelos más fácilmente.
En esta publicación, destacamos una característica nueva y emocionante de SageMaker Pipelines conocida como Ejecución Selectiva. Esta nueva función le permite ejecutar de manera selectiva partes específicas de su flujo de trabajo de ML, lo que genera un ahorro significativo de tiempo y recursos informáticos al limitar la ejecución a los pasos de canalización dentro del alcance y eliminar la necesidad de ejecutar pasos fuera del alcance. Además, exploramos varios casos de uso donde las ventajas de utilizar la Ejecución Selectiva se hacen evidentes, solidificando aún más su propuesta de valor.
Descripción general de la solución
SageMaker Pipelines continúa innovando su experiencia de desarrollador con el lanzamiento de Ejecución Selectiva. Los desarrolladores de ML ahora tienen la capacidad de elegir pasos específicos para ejecutar dentro de una canalización, eliminando la necesidad de volver a ejecutar toda la canalización. Esta característica le permite volver a ejecutar secciones específicas de la canalización mientras modifica los parámetros de tiempo de ejecución asociados con los pasos seleccionados.
Es importante tener en cuenta que los pasos seleccionados pueden depender de los resultados de los pasos no seleccionados. En tales casos, los resultados de estos pasos no seleccionados se reutilizan a partir de una ejecución de referencia de la versión de canalización actual. Esto significa que la ejecución de referencia ya debe haberse completado. La ejecución de referencia predeterminada es la última ejecución de la versión de canalización actual, pero también puede optar por utilizar una ejecución diferente de la versión de canalización actual como referencia.
El estado general del recorrido de referencia debe ser Exitoso, Fallido o Interrumpido. No puede ser Correr cuando Selective Execution intenta usar sus salidas. Al usar la ejecución selectiva, puede elegir cualquier cantidad de pasos para ejecutar, siempre que formen una parte contigua de la canalización.
El siguiente diagrama ilustra el comportamiento de la canalización con una ejecución completa.
El siguiente diagrama ilustra el comportamiento de la canalización mediante la ejecución selectiva.
En las siguientes secciones, mostramos cómo usar la ejecución selectiva para varios escenarios, incluidos flujos de trabajo complejos en gráficos acíclicos directos (DAG) de canalización.
requisitos previos
Para comenzar a experimentar con la ejecución selectiva, primero debemos configurar los siguientes componentes de su entorno SageMaker:
- SDK de Python de SageMaker – Asegúrese de tener una actualización SDK de Python de SageMaker instalado en su entorno de Python. Puede ejecutar el siguiente comando desde su computadora portátil o terminal para instalar o actualizar la versión del SDK de Python de SageMaker a 2.162.0 o mas alto:
python3 -m pip install sagemaker>=2.162.0opip3 install sagemaker>=2.162.0. - Acceso a SageMaker Studio (opcional) – Estudio Amazon SageMaker puede ser útil para visualizar ejecuciones de canalización e interactuar visualmente con ARN de canalización preexistentes. Si no tiene acceso a SageMaker Studio o está utilizando cuadernos bajo demanda u otros IDE, aún puede seguir esta publicación e interactuar con los ARN de su canalización mediante el SDK de Python.
El código de muestra para un tutorial completo de un extremo a otro está disponible en el repositorio de GitHub.
Configuración
Con el sagemaker>=1.162.0 SDK de Pythonpresentamos el SelectiveExecutionConfig clase como parte del sagemaker.workflow.selective_execution_config módulo. La función de ejecución selectiva se basa en un ARN de canalización que se ha marcado previamente como logrado, Fallido o Interrumpido. El siguiente fragmento de código muestra cómo importar el SelectiveExecutionConfig class, recupere el ARN de canalización de referencia y recopile los pasos de canalización asociados y los parámetros de tiempo de ejecución que rigen la ejecución de la canalización:
import boto3
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.selective_execution_config import SelectiveExecutionConfig
sm_client = boto3.client('sagemaker')
# reference the name of your sample pipeline
pipeline_name = "AbalonePipeline"
# filter for previous success pipeline execution arns
pipeline_executions = [_exec
for _exec in Pipeline(name=pipeline_name).list_executions()['PipelineExecutionSummaries']
if _exec['PipelineExecutionStatus'] == "Succeeded"
]
# get the last successful execution
latest_pipeline_arn = pipeline_executions[0]['PipelineExecutionArn']
print(latest_pipeline_arn)
>>> arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/x62pbar3gs6h
# list all steps of your sample pipeline
execution_steps = sm_client.list_pipeline_execution_steps(
PipelineExecutionArn=latest_pipeline_arn
)['PipelineExecutionSteps']
print(execution_steps)
>>>
[{'StepName': 'Abalone-Preprocess',
'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 519000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 986000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-fvsmu7m7ki3q-Abalone-Preprocess-d68CecvHLU'}},
'SelectiveExecutionResult': {'SourcePipelineExecutionArn': 'arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/ksm2mjwut6oz'}},
{'StepName': 'Abalone-Train',
'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 31, 320000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 43, 58, 224000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'TrainingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:training-job/pipelines-x62pbar3gs6h-Abalone-Train-PKhAc1Q6lx'}}},
{'StepName': 'Abalone-Evaluate',
'StartTime': datetime.datetime(2023, 6, 27, 4, 43, 59, 40000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 76000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-x62pbar3gs6h-Abalone-Evaluate-vmkZDKDwhk'}}},
{'StepName': 'Abalone-MSECheck',
'StartTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 821000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 44, 124000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'Condition': {'Outcome': 'True'}}}]
# list all configureable pipeline parameters
# params can be altered during selective execution
parameters = sm_client.list_pipeline_parameters_for_execution(
PipelineExecutionArn=latest_pipeline_arn
)['PipelineParameters']
print(parameters)
>>>
[{'Name': 'XGBNumRounds', 'Value': '120'},
{'Name': 'XGBSubSample', 'Value': '0.9'},
{'Name': 'XGBGamma', 'Value': '2'},
{'Name': 'TrainingInstanceCount', 'Value': '1'},
{'Name': 'XGBMinChildWeight', 'Value': '4'},
{'Name': 'XGBETA', 'Value': '0.25'},
{'Name': 'ApprovalStatus', 'Value': 'PendingManualApproval'},
{'Name': 'ProcessingInstanceCount', 'Value': '1'},
{'Name': 'ProcessingInstanceType', 'Value': 'ml.t3.medium'},
{'Name': 'MseThreshold', 'Value': '6'},
{'Name': 'ModelPath',
'Value': 's3://sagemaker-us-east-1-123123123123/Abalone/models/'},
{'Name': 'XGBMaxDepth', 'Value': '12'},
{'Name': 'TrainingInstanceType', 'Value': 'ml.c5.xlarge'},
{'Name': 'InputData',
'Value': 's3://sagemaker-us-east-1-123123123123/sample-dataset/abalone/abalone.csv'}]
casos de uso
En esta sección, presentamos algunos escenarios en los que la ejecución selectiva puede potencialmente ahorrar tiempo y recursos. Usamos un flujo de canalización típico, que incluye pasos como la extracción de datos, capacitación, evaluación, registro e implementación del modelo, como referencia para demostrar las ventajas de la ejecución selectiva.
SageMaker Pipelines le permite definir parámetros de tiempo de ejecución para la ejecución de su canalización mediante parámetros de canalización. Cuando se activa una nueva ejecución, normalmente ejecuta toda la canalización de principio a fin. Sin embargo, si almacenamiento en caché de pasos está habilitado, SageMaker Pipelines intentará encontrar una ejecución anterior del paso actual de la canalización con los mismos valores de atributo. Si se encuentra una coincidencia, SageMaker Pipelines utilizará los resultados de la ejecución anterior en lugar de volver a calcular el paso. Tenga en cuenta que incluso con el almacenamiento en caché de pasos habilitado, SageMaker Pipelines seguirá ejecutando todo el flujo de trabajo hasta el final de forma predeterminada.
Con el lanzamiento de la función de ejecución selectiva, ahora puede volver a ejecutar un flujo de trabajo de canalización completo o ejecutar de forma selectiva un subconjunto de pasos utilizando un ARN de canalización anterior. Esto se puede hacer incluso sin el almacenamiento en caché de pasos habilitado. Los siguientes casos de uso ilustran las diversas formas en que puede usar la ejecución selectiva.
Caso de uso 1: ejecutar un solo paso
Los científicos de datos a menudo se enfocan en la etapa de capacitación de una canalización de MLOps y no quieren preocuparse por los pasos de preprocesamiento o implementación. La ejecución selectiva permite a los científicos de datos centrarse solo en el paso de entrenamiento y modificar los parámetros de entrenamiento o los hiperparámetros sobre la marcha para mejorar el modelo. Esto puede ahorrar tiempo y reducir costos porque los recursos informáticos solo se utilizan para ejecutar los pasos de canalización seleccionados por el usuario. Ver el siguiente código:
# select a reference pipeline arn and subset step to execute
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=["Abalone-Train"]
)
# start execution of pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config,
parameters={
"XGBNumRounds": 120,
"XGBSubSample": 0.9,
"XGBGamma": 2,
"XGBMinChildWeight": 4,
"XGBETA": 0.25,
"XGBMaxDepth": 12
}
)
Las siguientes figuras ilustran la canalización con un paso en proceso y luego completo.
Caso de uso 2: ejecutar varios pasos de canalización contiguos
Continuando con el caso de uso anterior, un científico de datos quiere entrenar un nuevo modelo y evaluar su desempeño contra un conjunto de datos de prueba dorado. Esta evaluación es crucial para garantizar que el modelo cumpla con las pautas rigurosas para las pruebas de aceptación del usuario (UAT) o la implementación de producción. Sin embargo, el científico de datos no desea ejecutar todo el flujo de trabajo de canalización ni implementar el modelo. Pueden utilizar la Ejecución selectiva para centrarse únicamente en los pasos de formación y evaluación, ahorrando tiempo y recursos y, al mismo tiempo, obteniendo los resultados de validación que necesitan:
# select a reference pipeline arn and subset step to execute
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=["Abalone-Train", "Abalone-Evaluate"]
)
# start execution of pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config,
parameters={
"ProcessingInstanceType": "ml.t3.medium",
"XGBNumRounds": 120,
"XGBSubSample": 0.9,
"XGBGamma": 2,
"XGBMinChildWeight": 4,
"XGBETA": 0.25,
"XGBMaxDepth": 12
}
)
Caso de uso 3: actualizar y volver a ejecutar pasos de canalización fallidos
Puede usar la ejecución selectiva para volver a ejecutar pasos fallidos dentro de una canalización o reanudar la ejecución de una canalización desde un paso fallido en adelante. Esto puede ser útil para solucionar problemas y depurar pasos fallidos porque permite a los desarrolladores centrarse en los problemas específicos que deben abordarse. Esto puede conducir a una resolución de problemas más eficiente y tiempos de iteración más rápidos. El siguiente ejemplo ilustra cómo puede optar por volver a ejecutar solo el paso fallido de una canalización.
# select a previously failed pipeline arn
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/fvsmu7m7ki3q",
selected_steps=["Abalone-Evaluate"]
)
# start execution of failed pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config
)
Como alternativa, un científico de datos puede reanudar una canalización desde un paso fallido hasta el final del flujo de trabajo especificando el paso fallido y todos los pasos que le siguen en el SelectiveExecutionConfig.
Caso de uso 4: Cobertura de tubería
En algunos pipelines, ciertas ramas se ejecutan con menos frecuencia que otras. Por ejemplo, puede haber una rama que solo se ejecuta cuando falla una condición específica. Es importante probar estas ramas minuciosamente para asegurarse de que funcionan como se espera cuando se produce un error. Al probar estas ramas que se ejecutan con menos frecuencia, los desarrolladores pueden verificar que su canalización sea sólida y que los mecanismos de manejo de errores mantengan de manera efectiva el flujo de trabajo deseado y produzcan resultados confiables.
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=["Abalone-Train", "Abalone-Evaluate", "Abalone-MSECheck", "Abalone-FailNotify"]
)
Conclusión
En esta publicación, analizamos la función de ejecución selectiva de SageMaker Pipelines, que le permite ejecutar de manera selectiva pasos específicos de sus flujos de trabajo de ML. Esta capacidad conduce a ahorros significativos de tiempo y recursos computacionales. Proporcionamos un código de muestra en el repositorio de GitHub que demuestra cómo usar la ejecución selectiva y presenta varios escenarios en los que puede ser ventajoso para los usuarios. Si desea obtener más información sobre la ejecución selectiva, consulte nuestro Guía del desarrollador y Guía de referencia de la API.
Para explorar los pasos disponibles dentro del flujo de trabajo de SageMaker Pipelines con más detalle, consulte Canalización de creación de modelos de Amazon SageMaker y Flujos de trabajo de SageMaker. Además, puede encontrar más ejemplos que muestran diferentes casos de uso y enfoques de implementación utilizando SageMaker Pipelines en el Ejemplos de AWS SageMaker repositorio GitHub. Estos recursos pueden mejorar aún más su comprensión y ayudarlo a aprovechar todo el potencial de SageMaker Pipelines y Selective Execution en sus proyectos de aprendizaje automático actuales y futuros.
Sobre los autores
Pranav Murthy es un arquitecto de soluciones especializado en IA/ML en AWS. Se enfoca en ayudar a los clientes a crear, entrenar, implementar y migrar cargas de trabajo de aprendizaje automático (ML) a SageMaker. Anteriormente trabajó en la industria de los semiconductores desarrollando grandes modelos de visión por computadora (CV) y procesamiento del lenguaje natural (NLP) para mejorar los procesos de semiconductores. En su tiempo libre, le gusta jugar al ajedrez y viajar.
Akhil Numarsu es un Gerente Técnico de Producto Senior enfocado en ayudar a los equipos a acelerar los resultados de ML a través de herramientas y servicios eficientes en la nube. Le gusta jugar al tenis de mesa y es fanático de los deportes.
Nishant Krishnamoorthy es ingeniero sénior de desarrollo de software en Amazon Stores. Tiene una maestría en informática y actualmente se enfoca en acelerar la adopción de ML en diferentes organizaciones dentro de Amazon mediante la creación y puesta en funcionamiento de soluciones de ML en SageMaker.