Pasos de canalizaciones
Las canalizaciones se componen de pasos. Estos pasos definen las acciones que realiza la canalización y las relaciones entre los pasos mediante propiedades. En la página siguiente, se describen los tipos de pasos, sus propiedades y las relaciones entre ellos.
Temas
Propiedades de paso
El atributo properties
se utiliza para añadir dependencias de datos entre los pasos de la canalización. Las canalizaciones utilizan estas dependencias de datos para construir el DAG a partir de la definición de la canalización. Se puede hacer referencia a estas propiedades como valores de marcador de posición y se resuelven en el tiempo de ejecución.
El atributo properties
de un paso de Canalizaciones coincide con el objeto devuelto por una llamada Describe
al tipo de trabajo de SageMaker correspondiente. Para cada tipo de trabajo, la llamada Describe
devuelve el siguiente objeto de respuesta:
-
ProcessingStep
: DescribeProcessingJob -
TrainingStep
: DescribeTrainingJob -
TransformStep
: DescribeTransformJob
Para comprobar qué propiedades son recomendables para cada tipo de paso durante la creación de la dependencia de datos, consulte Data Dependency - Property Reference
Paralelismo de paso
Cuando un paso no depende de ningún otro paso, se ejecuta inmediatamente después de la ejecución de la canalización. Sin embargo, si se ejecutan demasiados pasos de canalización en paralelo se podrían agotar rápidamente los recursos disponibles. Controle el número de pasos simultáneos para la ejecución de una canalización con ParallelismConfiguration
.
En el siguiente ejemplo, se utiliza ParallelismConfiguration
para establecer el límite de pasos simultáneos en cinco.
pipeline.create( parallelism_config=ParallelismConfiguration(5), )
Dependencia de datos entre pasos
La estructura del DAG se define al especificar las relaciones de datos entre los pasos. Para crear dependencias de datos entre los pasos, transfiera las propiedades de un paso como entrada a otro paso de la canalización. El paso que recibe la entrada no se inicia hasta que termina de ejecutarse el paso que proporciona la entrada.
Una dependencia de datos utiliza la notación JsonPath en el siguiente formato. Este formato recorre el archivo de propiedades de JSON. Esto significa que puede anexar tantas instancias <property>
como sea necesario para alcanzar la propiedad anidada deseada en el archivo. Para obtener más información sobre la notación JsonPath, consulte el repositorio de JsonPath
<step_name>
.properties.<property>
.<property>
A continuación se muestra cómo especificar un bucket de Amazon S3 mediante la propiedad ProcessingOutputConfig
de un paso de procesamiento.
step_process.properties.ProcessingOutputConfig.Outputs["train_data"].S3Output.S3Uri
Para crear la dependencia de datos, pase el bucket a un paso de entrenamiento de la siguiente manera.
from sagemaker.workflow.pipeline_context import PipelineSession sklearn_train = SKLearn(..., sagemaker_session=PipelineSession()) step_train = TrainingStep( name="CensusTrain", step_args=sklearn_train.fit(inputs=TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs[ "train_data"].S3Output.S3Uri )) )
Para comprobar qué propiedades son recomendables para cada tipo de paso durante la creación de la dependencia de datos, consulte Data Dependency - Property Reference
Dependencia personalizada entre pasos
Al especificar una dependencia de datos, Canalizaciones proporciona la conexión de los datos entre los pasos. Como alternativa, un paso puede acceder a los datos de un paso anterior sin utilizar directamente Canalizaciones. En este caso, puede crear una dependencia personalizada que indique a Canalizaciones que no inicie un paso hasta que haya terminado de ejecutarse otro paso. Para crear una dependencia personalizada, especifique el atributo DependsOn
de un paso.
A modo de ejemplo, lo siguiente define un paso C
que comienza solo después de que el paso A
y el paso B
terminen de ejecutarse.
{ 'Steps': [ {'Name':'A', ...}, {'Name':'B', ...}, {'Name':'C', 'DependsOn': ['A', 'B']} ] }
Canalizaciones lanza una excepción de validación si la dependencia crea una dependencia cíclica.
En el siguiente ejemplo, se crea un paso de entrenamiento que comienza cuando termina de ejecutarse un paso de procesamiento.
processing_step = ProcessingStep(...) training_step = TrainingStep(...) training_step.add_depends_on([processing_step])
El siguiente ejemplo crea un paso de entrenamiento que no comienza hasta que terminen de ejecutarse dos pasos de procesamiento diferentes.
processing_step_1 = ProcessingStep(...) processing_step_2 = ProcessingStep(...) training_step = TrainingStep(...) training_step.add_depends_on([processing_step_1, processing_step_2])
A continuación, se proporciona una forma alternativa de crear la dependencia personalizada.
training_step.add_depends_on([processing_step_1]) training_step.add_depends_on([processing_step_2])
El siguiente ejemplo crea un paso de entrenamiento que recibe la entrada de un paso de procesamiento y espera a que termine de ejecutarse otro paso de procesamiento.
processing_step_1 = ProcessingStep(...) processing_step_2 = ProcessingStep(...) training_step = TrainingStep( ..., inputs=TrainingInput( s3_data=processing_step_1.properties.ProcessingOutputConfig.Outputs[ "train_data" ].S3Output.S3Uri ) training_step.add_depends_on([processing_step_2])
En el ejemplo siguiente se muestra cómo recuperar una lista de cadenas de las dependencias personalizadas de un paso.
custom_dependencies = training_step.depends_on
Imágenes personalizadas en un paso
Puede utilizar cualquiera de las imágenes del contenedor de aprendizaje profundo
También puede utilizar su propio contenedor con pasos de canalización. Dado que no puede crear una imagen desde Studio Classic, deberá crearla mediante otro método antes de utilizarla con Canalizaciones.
Para usar su propio contenedor al crear los pasos de la canalización, incluya el URI de la imagen en la definición del estimador. Para obtener más información sobre el uso de su propio contenedor con SageMaker, consulte Using Docker Containers with SageMaker.