[ad_1]
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 único 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 que exista la infraestructura para rastrear, entrenar, implementar y monitorear modelos de diversa complejidad a escala. Aquí es donde entran en juego las herramientas MLOps. Las herramientas MLOps lo ayudan a integrar y simplificar estos procesos de manera repetible y confiable en un flujo de trabajo personalizado para ML.
Amazon SageMaker Pipelines, una característica de Amazon SageMaker, es un servicio de orquestación de flujos de trabajo de ML especialmente diseñado que le ayuda a automatizar los flujos de trabajo de ML de un extremo a otro a escala. Simplifica el desarrollo y el mantenimiento del modelo ML al proporcionar una plataforma central para orquestar tareas como la preparación de datos, el entrenamiento, la optimización y la validación de modelos. SageMaker Pipelines puede ayudarle a optimizar la gestión del flujo de trabajo, acelerar los experimentos y facilitar el reentrenamiento de los modelos.
En esta publicación, presentamos una nueva e interesante característica de SageMaker Pipelines conocida como ejecución selectiva. Esta nueva capacidad le permite ejecutar de forma selectiva partes específicas de su flujo de trabajo de aprendizaje automático, lo que genera importantes ahorros de tiempo y recursos computacionales al limitar la ejecución a los pasos del proceso dentro del alcance y eliminar la necesidad de ejecutar pasos fuera del alcance. Además, examinamos varios casos de uso que demuestran los beneficios de aprovechar la ejecución selectiva y solidificar aún más su propuesta de valor.
descripción general de la solución
SageMaker Pipelines continúa mejorando su experiencia de desarrollador con el lanzamiento de Selective Execution. Los desarrolladores de ML ahora tienen la capacidad de seleccionar 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 cambia los parámetros de tiempo de ejecución asociados con los pasos seleccionados.
Es importante tener en cuenta que los pasos seleccionados pueden basarse en los resultados de 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 actual de la canalización. 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 actual de la canalización. Sin embargo, también puede utilizar otra ejecución de la versión actual de la canalización como referencia.
El estado general del recorrido de referencia debe ser Exitoso, fallido o interrumpido. No puede ser Correr cuando la Ejecución Selectiva intenta utilizar sus salidas. Al utilizar la ejecución selectiva, puede elegir cualquier número de pasos para ejecutar, siempre que formen una parte contigua de la canalización.
El siguiente diagrama ilustra el comportamiento de la tubería en una pasada completa.
El siguiente diagrama ilustra el comportamiento de la canalización cuando se utiliza la ejecución selectiva.
En las siguientes secciones, mostramos cómo utilizar la ejecución selectiva para varios escenarios, incluidos flujos de trabajo complejos en gráficos asimétricos directos de canalización (DAG).
requisitos
Para experimentar con la ejecución selectiva, primero debemos configurar los siguientes componentes de su entorno SageMaker:
- SDK de Python de SageMaker – Asegúrese de que su entorno Python tenga instalado un SDK de SageMaker Python actualizado. Puede ejecutar el siguiente comando desde su computadora portátil o terminal para instalar o actualizar la versión del SDK de SageMaker Python 2.162.0 o mas alto:
python3 -m pip install sagemaker>=2.162.0
opip3 install sagemaker>=2.162.0
. - Acceso a SageMaker Studio (opcional) – Amazon SageMaker Studio puede resultar útil para visualizar ejecuciones de canalizaciones e interactuar visualmente con los ARN de canalizaciones existentes. 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 una guía completa de un extremo a otro está disponible en el repositorio de GitHub.
Configuración
Con el sagemaker>=1.162.0
SDK de Python, lo presentamos SelectiveExecutionConfig
clase como parte de sagemaker.workflow.selective_execution_config
Módulo. La función de ejecución selectiva se basa en un ARN de canalización previamente marcado como Exitoso, fallido o interrumpido. El siguiente fragmento de código muestra cómo importar SelectiveExecutionConfig
Clase, obtenga el ARN de la canalización de referencia y recopile los pasos de la canalización asociados y los parámetros de tiempo de ejecución que controlan 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 donde la ejecución selectiva puede potencialmente ahorrar tiempo y recursos. Utilizamos un flujo de canalización típico, que incluye pasos como extracción de datos, capacitación, puntuación, registro de modelos e implementación, como referencia para demostrar los beneficios de la ejecución selectiva.
SageMaker Pipelines le permite utilizar parámetros de canalización para definir parámetros de tiempo de ejecución para la ejecución de su canalización. Normalmente, cuando se activa una nueva ejecución, se ejecuta todo el proceso de principio a fin. Sin embargo, cuando el almacenamiento en caché de pasos está habilitado, SageMaker Pipelines intenta encontrar una ejecución anterior del paso de canalización actual con los mismos valores de atributos. Si se encuentra una coincidencia, SageMaker Pipelines utiliza 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 aún ejecuta todo el flujo de trabajo hasta su finalización 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 selectivamente un subconjunto de pasos utilizando un ARN de canalización anterior. Esto también es posible sin el almacenamiento en caché de pasos activado. Los siguientes casos de uso ilustran las diferentes formas en que puede aprovechar la ejecución selectiva.
Caso de uso 1: ejecutar un solo paso
Los científicos de datos a menudo se centran en la fase de capacitación de un proceso 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 cambiar los parámetros o hiperparámetros de entrenamiento sobre la marcha para mejorar el modelo. Esto puede ahorrar tiempo y reducir costos al utilizar recursos computacionales solo para ejecutar pasos de canalización seleccionados por el usuario. Vea 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 imágenes ilustran la canalización en un paso del proceso y luego al finalizar.
Caso de uso 2: ejecutar varios pasos de canalización consecutivos
Continuando con el caso de uso anterior, un científico de datos quiere entrenar un nuevo modelo y evaluar su rendimiento frente a un conjunto de datos de prueba de oro. Esta evaluación es fundamental para garantizar que el modelo cumpla con pautas estrictas para las pruebas de aceptación del usuario (UAT) o la implementación en producción. Sin embargo, el científico de datos no quiere ejecutar todo el flujo de trabajo del proceso ni implementar el modelo. Con la ejecución selectiva, pueden centrarse únicamente en los pasos de capacitació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 los pasos fallidos de la canalización
Puede utilizar la ejecución selectiva para volver a ejecutar pasos fallidos dentro de una canalización o para reanudar la ejecución de una canalización desde un paso fallido. Esto puede resultar útil para solucionar problemas y depurar pasos fallidos, lo que permite a los desarrolladores centrarse en los problemas específicos que deben solucionarse. Esto puede conducir a una resolución de problemas más eficiente y tiempos de iteración más rápidos. El siguiente ejemplo muestra 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
)
Alternativamente, un científico de datos puede continuar una canalización desde un paso fallido hasta el final del flujo de trabajo especificando el paso fallido y todos los pasos posteriores en el SelectiveExecutionConfig
.
Caso de uso 4: Cobertura de canalización
En algunos oleoductos, ciertas ramas funcionan con menos frecuencia que otras. Por ejemplo, podría haber una rama que solo se ejecute si falla una determinada condición. Es importante probar minuciosamente estas ramas para garantizar que funcionen como se espera cuando se produce un error. Al probar estas ramas ejecutadas con menos frecuencia, los desarrolladores pueden verificar que su canalización sea sólida y que los mecanismos de manejo de errores sean efectivos para mantener el flujo de trabajo deseado y brindar 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"]
)
Diploma
En esta publicación, analizamos la función de ejecución selectiva de SageMaker Pipelines, que le permite ejecutar selectivamente ciertos pasos de sus flujos de trabajo de ML. Esta capacidad genera importantes ahorros de tiempo y recursos computacionales. Proporcionamos un código de muestra en el repositorio de GitHub que demuestra el uso de la ejecución selectiva y presentamos varios escenarios en los que puede beneficiar a los usuarios. Si desea obtener más información sobre la ejecución selectiva, lea nuestra Guía para desarrolladores y nuestra Guía de referencia de API.
Para obtener más información sobre los pasos disponibles en el flujo de trabajo de SageMaker Pipelines, consulte Canalización de creación de modelos de Amazon SageMaker y flujos de trabajo de SageMaker. Además, consulte el repositorio GitHub de ejemplos de AWS SageMaker para obtener más ejemplos que demuestran diferentes casos de uso y enfoques de implementación utilizando SageMaker Pipelines. 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 ML actuales y futuros.
Sobre los autores
Pranav Murthy es un arquitecto de soluciones especializado en IA/ML en AWS. Su objetivo es 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 los semiconductores. En su tiempo libre le gusta jugar al ajedrez y viajar.
Akhil Numarsu es Gerente Técnico Senior de Producto 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 un aficionado a los deportes.
Nishant Krishnamoorthy es ingeniero senior de desarrollo de software en tiendas Amazon. Tiene una maestría en Ciencias de la Computación y actualmente se concentra en acelerar la adopción de ML en varias organizaciones dentro de Amazon mediante la creación y puesta en funcionamiento de soluciones de ML sobre SageMaker.
[ad_2]