Creación de tareas en Prefect para flujos de Machine Learning

Clase 17 de 35Curso de MLOPS: Despliegue de Modelos de Machine Learning

Resumen

¿Qué son los "Pythons" en Machine Learning?

Los "Pythons" en Machine Learning se refieren a productos automáticos que facilitan el tránsito desde la experimentación hasta la producción en esta área. Principalmente, estos productos están compuestos por tareas, las cuales son la unidad fundamental de los workflows en Machine Learning. Utilizando la librería de código abierto Prefect, podemos definir estas tareas de manera sencilla, lo que nos ayuda a automatizar procesos y mejorar la eficiencia del flujo de trabajo.

¿Cómo definir una tarea con Prefect?

La definición de tareas con Prefect se inicia mediante el uso de un decorador llamado @task, que se aplica a una función específica. A continuación, se muestra un ejemplo básico para ilustrar el proceso:

from prefect import task

@task
def miPrimeraTarea(mensaje):
    print("Hola", mensaje)

En este ejemplo, la tarea miPrimeraTarea recibe como parámetro un mensaje y ejecuta un print con él. La lógica interna de la función será lo que se ejecuta dentro de la tarea.

¿Cómo integrar una tarea en un workflow?

Para introducir una tarea dentro de la lógica de un flujo de trabajo se utiliza la anotación @flow, que es la encargada de gestionar estas tareas dentro de un flujo más extenso. A continuación, los pasos para crear un flujo simple que clasifique el conjunto de datos "iris":

  1. Importar Librerías:
  • Se requiere importar Prefect y otras bibliotecas como Scikit-Learn.
  1. Definir la Tarea:
  • Se utiliza el decorador @task para definir la lógica de la tarea.
  1. Crear el Diccionario de Datos:
  • Se extraen los datos y se estructuran en un diccionario que almacenará las features y el target.
  1. Ejecutar un Flujo:
  • Se incorpora la tarea dentro de un flujo empleando el decorador @flow.

Aquí un ejemplo del flujo:

from prefect import flow, task
from sklearn import datasets

@task
def obtenerDatos():
    """
    Carga el dataset de Iris desde Scikit-Learn.
    """
    datos = datasets.load_iris()
    return {'X': datos.data, 'y': datos.target}

@flow(retries=3, retry_delay_seconds=5)
def clasificacionIris():
    data = obtenerDatos()
    print(data)

clasificacionIris()

Este código ilustra el flujo clasificacionIris, que ejecuta la tarea obtenerDatos, cargando así los datos del conjunto de "iris" y gestionando posibles errores.

¿Cómo visualizar y gestionar los flujos en Prefect?

Para poder observar y controlar nuestros flujos y tareas de manera efectiva, Prefect nos ofrece una interfaz gráfica a través de su servidor. Para inicializar el servidor, se pueden seguir estos pasos:

  1. Activar el entorno virtual.
  2. Ejecutar el comando prefect server start en la terminal.
  3. Abrir la dirección proporcionada en un navegador para acceder a la interfaz.

Con esta configuración, puedes gestionar tus flujos, observar los registros y consultar el estado de tus tareas. Prefect ofrece funcionalidades como reintentos automáticos, reintentos con un retraso específico y almacenamiento eficiente de registros, lo que resulta invaluable en proyectos de Machine Learning. A medida que sigas avanzando, considera integrar múltiples tareas para encadenar flujos automáticos más complejos, optimizando así tus recursos y experimentos en Machine Learning.