Cómo construir una tubería de aprendizaje automático de principio a fin

'Construcción de una tubería de aprendizaje automático de principio a fin'

Una de las quejas más prevalentes que escuchamos de los ingenieros de ML en la comunidad es lo costoso y propenso a errores que es pasar manualmente por el flujo de trabajo de ML para construir e implementar modelos. Ejecutan scripts manualmente para preprocesar sus datos de entrenamiento, vuelven a ejecutar los scripts de implementación, ajustan manualmente sus modelos y pasan sus horas de trabajo manteniendo los modelos previamente desarrollados actualizados.

Construir tuberías de aprendizaje automático de principio a fin permite a los ingenieros de ML construir una vez, volver a ejecutar y reutilizar muchas veces. Les permite centrarse más en implementar nuevos modelos que en mantener los existentes. Proporciona la capacidad de centrarse en nuevos modelos en lugar de dedicar demasiado esfuerzo a mantener los modelos existentes.

Si todo va bien, por supuesto 😉

En este artículo, aprenderás:

  • 1
    Explorar cómo se ve la arquitectura de una tubería de ML, incluyendo los componentes.
  • 2
    Aprender los pasos esenciales y las mejores prácticas que los ingenieros de aprendizaje automático pueden seguir para construir tuberías de aprendizaje automático robustas y escalables de principio a fin.
  • 3
    Construir y implementar rápidamente una tubería de ML de principio a fin con Kubeflow Pipelines en AWS.
  • 4
    Aprender los desafíos de construir tuberías de ML de principio a fin y las mejores prácticas para construirlas.

¿Qué es una tubería de aprendizaje automático?

Las tuberías de aprendizaje automático están compuestas por una secuencia de componentes o pasos vinculados que definen el flujo de trabajo de aprendizaje automático para resolver problemas específicos. Las tuberías te permiten orquestar los pasos de tu flujo de trabajo de ML que se pueden automatizar. La orquestación aquí implica que las dependencias y el flujo de datos entre los pasos del flujo de trabajo deben completarse en el orden adecuado.

Un flujo de trabajo de ML “estándar” tiene tres fases: adquisición de datos y gestión de características, gestión de experimentos y desarrollo de modelos, y gestión de modelos | Fuente: Autor

Construirías una tubería para:

  • Lograr la reproducibilidad en tu flujo de trabajo (ejecutar la tubería repetidamente con entradas similares proporcionará salidas similares).
  • Simplificar la orquestación de principio a fin de los múltiples pasos en el flujo de trabajo de aprendizaje automático para proyectos con poca o ninguna intervención (automatización) por parte del equipo de ML.
  • Reducir el tiempo que lleva que los datos y los modelos pasen de la fase de experimentación a la fase de producción.
  • Permitir a tu equipo centrarse más en desarrollar nuevas soluciones que en mantener las existentes utilizando componentes modulares que ofrecen automatización para tu flujo de trabajo.
  • Facilitar la reutilización de componentes (un paso específico en el flujo de trabajo de aprendizaje automático) para crear e implementar soluciones de principio a fin que se integren con sistemas externos sin tener que reconstruir cada vez.

Tubería de aprendizaje automático vs plataforma de aprendizaje automático

La tubería de ML es parte de la plataforma de ML más amplia. Se utiliza para agilizar, orquestar y automatizar el flujo de trabajo de aprendizaje automático dentro de la plataforma de ML.

Tuberías y plataformas son conceptos relacionados en MLOps, pero se refieren a aspectos diferentes del flujo de trabajo de aprendizaje automático. Una plataforma de ML es un entorno que estandariza la pila tecnológica para tu equipo de ML/AI y proporciona herramientas, bibliotecas e infraestructura para desarrollar, implementar y operativizar aplicaciones de aprendizaje automático.

La plataforma incluye típicamente componentes para el ecosistema de ML como gestión de datos, almacenes de características, rastreadores de experimentos, un registro de modelos, un entorno de pruebas, servicio de modelos y gestión de modelos. Está diseñada para proporcionar un entorno unificado e integrado para que principalmente los científicos de datos y los ingenieros de ML desarrollen e implementen modelos, gestionen datos y agilicen el flujo de trabajo de aprendizaje automático.

La arquitectura de una tubería de aprendizaje automático

La arquitectura de una tubería de aprendizaje automático puede ser una construcción en tiempo real (en línea) o por lotes (fuera de línea), dependiendo del caso de uso y los requisitos de producción. Para mantener los conceptos simples en este artículo, aprenderás cómo se ve una tubería típica sin los matices de las construcciones en tiempo real o por lotes.

El artículo de Semi Koen brinda una visión detallada de las arquitecturas de las tuberías de aprendizaje automático.

Una típica tubería de aprendizaje automático con varias etapas resaltadas | Fuente: Autor

Tipos comunes de tuberías de aprendizaje automático

De acuerdo con las etapas del flujo de trabajo de ML (datos, modelo y producción), un pipeline de ML comprende tres pipelines diferentes que resuelven diferentes etapas del flujo de trabajo. Incluyen:

  • 1
    Pipeline de datos (o entrada).
  • 2
    Pipeline de modelo (o entrenamiento).
  • 3
    Pipeline de servicio (o producción).

En organizaciones grandes, es probable que dos o más equipos manejen cada pipeline debido a su funcionalidad y escala. Los pipelines son interoperables para construir un sistema de trabajo:

Pipeline de datos (entrada) (adquisición de datos y pasos de gestión de características)

Este pipeline transporta datos sin procesar de un lugar a otro. Cubre todo el proceso de movimiento de datos, desde donde se recopilan los datos, por ejemplo, a través de flujos de datos o procesamiento por lotes, hasta aplicaciones aguas abajo como lagos de datos o modelos de aprendizaje automático.

Pipeline de entrenamiento de modelo

Este pipeline entrena uno o más modelos en los datos de entrenamiento con hiperparámetros predefinidos. Los evalúa, los ajusta y empaqueta el modelo óptimo antes de enviarlo a aplicaciones aguas abajo como el registro de modelos o el pipeline de servicio.

Pipeline de servicio

Este pipeline implementa el modelo como un servicio de predicción (o puntuación) en producción y utiliza otro servicio para habilitar el monitoreo del rendimiento.

Este artículo clasifica los diferentes pipelines como “pipelines de aprendizaje automático” porque permiten aplicaciones de ML basadas en su función en el flujo de trabajo. Además, son interoperables para permitir aplicaciones de producción, especialmente durante el mantenimiento (reentrenamiento y pruebas continuas).

Elementos de un pipeline de aprendizaje automático

Algunos pipelines proporcionarán abstracciones de alto nivel para estos componentes a través de tres elementos:

  1. Transformer: un algoritmo capaz de transformar un conjunto de datos en otro.
  2. Estimator: un algoritmo entrenado en un conjunto de datos para producir un transformer.
  3. Evaluator: para examinar la precisión del modelo entrenado.

Componentes del pipeline de aprendizaje automático

Un componente del pipeline es un paso en el flujo de trabajo de aprendizaje automático que realiza una tarea específica tomando una entrada, procesándola y produciendo una salida. Los componentes comprenden implementaciones del proceso de flujo de trabajo manual en el que participa para pasos automatizables, incluyendo:

  • Ingestión de datos (extracción y versión).
  • Validación de datos (escritura de pruebas para verificar la calidad de los datos).
  • Preprocesamiento de datos.
  • Entrenamiento y ajuste del modelo, dado un número selecto de algoritmos para explorar y un rango de hiperparámetros para usar durante la experimentación.
  • Análisis y evaluación del rendimiento del modelo.
  • Empaquetado y registro del modelo.
  • Implementación del modelo.
  • Puntuación del modelo.
  • Monitoreo del rendimiento del modelo.

Con la mayoría de las herramientas, los componentes del pipeline contendrán código ejecutable que se puede contenerizar (para eliminar problemas de dependencia). Cada paso se puede gestionar con una herramienta de orquestación como Kubeflow Pipelines, Metaflow o ZenML.

Vamos a repasar brevemente cada uno de los componentes a continuación.

Ingestión de datos, extracción y versión

Este componente ingiere datos de una fuente de datos (externa al pipeline de aprendizaje automático) como entrada. Luego transforma el conjunto de datos en un formato (es decir, CSV, Parquet, etc.) que se utilizará en los próximos pasos del pipeline. En este paso, los datos sin procesar y versionados también se transforman para facilitar el rastreo de su linaje.

Validación de datos

Este paso recoge los datos transformados como entrada y, a través de una serie de pruebas y validadores, asegura que cumplan con los criterios para el siguiente componente. Verifica la calidad de los datos y detecta valores atípicos y anomalías. Este componente también verifica signos de desviación de datos o posibles sesgos entre entrenamiento y producción para enviar registros a otros componentes o alertar al científico de datos responsable.

Si las pruebas de validación tienen éxito, los datos se envían al siguiente componente, y si fallan, se registra el error y se detiene la ejecución.

Preprocesamiento de datos e ingeniería de características

Los pasos de limpieza de datos, segregación y ingeniería de características toman los datos validados y transformados del componente anterior como entrada. Los procesos involucrados en este paso dependen del problema que esté resolviendo y los datos. Los procesos aquí pueden incluir:

  • Selección de características: seleccionar las características más apropiadas para limpiar e ingeniar.
  • Limpieza de características: tratar los valores de características faltantes y eliminar valores atípicos mediante límites basados en la implementación de código.
  • Transformación de características: transformar características sesgadas en los datos (si corresponde).
  • Creación de características: crear nuevas características a partir de las existentes o combinar diferentes características para crear una nueva.
  • Segregación de datos: dividir los datos en conjuntos de entrenamiento, prueba y validación.
  • Normalización/estandarización de características: convertir los valores de características en valores de escala y distribución similares.
  • Publicación de características en un repositorio de características para ser utilizado para entrenamiento e inferencia por toda la organización.

Nuevamente, lo que sucede en este componente es subjetivo al proceso de preparación de datos inicial (manual) del científico de datos, el problema y los datos utilizados.

Entrenamiento y ajuste del modelo

Este componente puede recuperar características preparadas del almacenamiento de características o recibir el conjunto de datos preparado (conjuntos de entrenamiento y validación) como entrada del componente anterior.

Este componente utiliza una variedad de hiperparámetros predefinidos para entrenar el modelo (utilizando búsqueda en cuadrícula CV, búsqueda de arquitectura neuronal u otras técnicas). También puede entrenar varios modelos en paralelo con diferentes conjuntos de valores de hiperparámetros. El modelo entrenado se envía al siguiente componente como un artefacto.

Evaluación del modelo

El modelo entrenado es la entrada de este componente y se evalúa en el conjunto de validación. Puede analizar los resultados de cada modelo en función de métricas como ROC, AUC, precisión, recuperación y exactitud. Las métricas generalmente se establecen en función del problema. Estas métricas se registran para análisis futuros.

Análisis y validación del modelo

Este componente:

  • 1
    Evalúa la capacidad del modelo para generalizar a datos no vistos.
  • 2
    Analiza la interpretabilidad/explicabilidad del modelo para ayudarlo a comprender la calidad y los sesgos del modelo o modelos que planea implementar. Examina cómo se desempeña el modelo en cortes de datos y la importancia de las características del modelo. ¿Es un modelo de caja negra o se pueden explicar las decisiones?

Si entrena varios modelos, el componente también puede evaluar cada modelo en el conjunto de prueba y proporcionar la opción de seleccionar un modelo óptimo.

Aquí, el componente también devolverá estadísticas y metadatos que le ayudarán a comprender si el modelo se adapta al entorno de implementación objetivo. Por ejemplo:

  • ¿Es demasiado grande para cumplir con los requisitos de infraestructura?
  • ¿Cuánto tiempo tarda en devolver una predicción?
  • ¿Cuánto recurso (uso de CPU, memoria, etc.) consume cuando realiza una predicción?

Si su canalización está en implementación, este componente también puede ayudarlo a comparar las métricas del modelo entrenado con las métricas en producción y alertarlo si son significativamente más bajas.

Empaquetado y registro del modelo

Este componente empaqueta su modelo para la implementación en los entornos de preparación o producción. Los artefactos del modelo y los archivos de configuración necesarios se empaquetan, versionan y se envían al registro del modelo.

Los contenedores son una técnica útil para empaquetar modelos. Encapsulan el modelo implementado para ejecutarse en cualquier lugar como un servicio de puntuación separado. También están disponibles otras opciones de implementación, como volver a escribir el código implementado en el lenguaje del entorno de producción. Lo más común es usar contenedores para canalizaciones de aprendizaje automático.

Implementación del modelo

Puede implementar el modelo empaquetado y registrado en un entorno de preparación (como software tradicional con DevOps) o en el entorno de producción. El entorno de preparación es para pruebas de integración. El entorno de preparación es el primer entorno similar a la producción en el que se pueden probar los modelos con otros servicios en todo el sistema que permiten la aplicación, por ejemplo, implementar un servicio de recomendación y probarlo con el servidor backend que enruta la solicitud del cliente al servicio.

Algunas organizaciones pueden optar por utilizar un entorno de preparación en una plataforma de orquestación de contenedores como Kubernetes. Depende de la herramienta que esté utilizando para la orquestación de la canalización.

Aunque no se recomienda, también puede implementar modelos que se hayan empaquetado y registrado directamente en el entorno de producción.

Servicio de puntuación del modelo

El modelo implementado predice las solicitudes de los clientes en tiempo real (para sistemas en línea) o en lotes (para sistemas sin conexión). Las predicciones se registran en un servicio de monitoreo o en un almacén de evaluación en línea para controlar el rendimiento predictivo del modelo, especialmente para el cambio de concepto/modelo.

Puede adoptar estrategias de implementación como implementación de canarios, implementación en modo sombra y pruebas A/B con el servicio de puntuación. Por ejemplo, puede implementar varios modelos desafiantes junto con el modelo campeón en producción. Todos recibirán las mismas solicitudes de predicción de los clientes, pero solo el modelo campeón devolverá los resultados de predicción. Los demás registrarán sus predicciones en el servicio de monitoreo.

Monitoreo del rendimiento y bucle de retroalimentación de la canalización

La pieza final de la canalización es el componente de monitoreo, que realiza comprobaciones en los datos. También realiza un seguimiento de las puntuaciones de evaluación de inferencia recopiladas (métricas del modelo u otras métricas proxy) para medir el rendimiento de los modelos en producción.

Algunos componentes de monitoreo también supervisan la eficiencia operativa de la canalización, incluyendo:

  • salud de la canalización,
  • llamadas de API,
  • tiempo de espera de las solicitudes,
  • uso de recursos, y así sucesivamente.

Para un pipeline de aprendizaje automático completamente automatizado, la integración continua (CI), la entrega continua (CD) y el entrenamiento continuo (CT) se vuelven cruciales. Los pipelines se pueden programar para llevar a cabo CI, CD o CT. También se pueden activar por:

  • 1
    el cambio de modelo,
  • 2
    el cambio de datos,
  • 3
    a demanda por el científico de datos a cargo.

Automatizar su pipeline de ML se convierte en una decisión crucial para aumentar la productividad si ejecuta muchos modelos en producción.

Cómo construir un pipeline de aprendizaje automático de principio a fin

Construya la mayoría de los pipelines en la siguiente secuencia:

  • 1
    Defina la implementación del código del componente como funciones modulares en un script o reutilice implementaciones de código preexistentes.
  • 2
    Contenedorice los scripts modulares para que sus implementaciones sean independientes y separadas.
  • 3
    Empaquete las implementaciones e impleméntelas en una plataforma.

Scripts modulares

Definir sus componentes como funciones modulares que reciben entradas y devuelven salidas es una forma de construir cada componente de su pipeline de ML. Depende del lenguaje que utilice para desarrollar su pipeline de aprendizaje automático. Los componentes están encadenados con un lenguaje específico de dominio (DSL) para formar el pipeline.

A continuación, se muestra un ejemplo de dicho script escrito en un DSL para definir un pipeline de ML en Kubeflow Pipeline:

import kfp.dsl as dsl

def my_pipeline_step(step_name, param1, param2, ...):
    return dsl.ContainerOp(
        name = step_name,
        image = '<ruta hacia mi imagen de contenedor>',
        arguments = [
            '--param1', param1,
            '--param2', param2,
            ...
        ],
        file_outputs = {
            'output1' : '/output1.txt',
            'output2' : '/output2.json',
            ...
        }
    )

Paquetes y contenedores

Podría decidir utilizar una herramienta de contenedores como Docker u otro método para asegurarse de que su código pueda ejecutarse en cualquier lugar.

Plataformas y herramientas de orquestación

Las plataformas y herramientas de orquestación de pipelines pueden ayudar a gestionar sus scripts y contenedores empaquetados en un DAG o un flujo de trabajo orquestado de principio a fin que puede ejecutar los pasos en secuencia.

Herramientas de pipeline de aprendizaje automático

Los siguientes son ejemplos de herramientas y plataformas de orquestación de pipelines de aprendizaje automático:

  • 1
    Metaflow.
  • 2
    Kedro pipelines.
  • 3
    ZenML.
  • 4
    Flyte.
  • 5
    Kubeflow pipelines.

Metaflow

Metaflow, originalmente un proyecto de Netflix, es un marco nativo en la nube que combina todas las piezas del stack de ML, desde la orquestación hasta la versionado, modelado, implementación y otras etapas. Metaflow le permite especificar un pipeline como un DAG de cálculos relacionados con su flujo de trabajo. Netflix ejecuta cientos o miles de proyectos de aprendizaje automático en Metaflow, eso es lo escalable que es.

Metaflow se diferencia de otros marcos de pipelining porque puede cargar y almacenar artefactos (como datos y modelos) como variables de instancia regulares de Python. Cualquier persona con conocimientos básicos de Python puede usarlo sin aprender otros lenguajes específicos de dominio (DSL).

Cómo Metaflow estructura diferentes piezas del stack de ML en un flujo escrito en código Python arbitrario. | Fuente: What is Metaflow | Metaflow Docs.

Aprenda más sobre Metaflow en la documentación y comience con los tutoriales o páginas de recursos.

Kedro

Kedro es una biblioteca de Python para construir pipelines modulares de ciencia de datos. Kedro le ayuda a crear flujos de trabajo de ciencia de datos compuestos por componentes reutilizables, cada uno con una “única responsabilidad”, para acelerar la canalización de datos, mejorar el prototipado de ciencia de datos y promover la reproducibilidad de la pipeline.

Nodos de Kedro (cuadrados), conjuntos de datos (rectángulos de bordes redondeados) y pipelines (la interconexión entre ellos) | Fuente: Kedro Docs Visualise pipelines page

Aprende cómo puedes construir tuberías de aprendizaje automático con Kedro en este artículo.

ZenML

ZenML es un marco de trabajo extensible de MLOps de código abierto para construir tuberías de MLOps portátiles y listas para producción. Está diseñado para que los científicos de datos y los ingenieros de MLOps colaboren mientras desarrollan para producción.

Crea tuberías de aprendizaje automático reproducibles con ZenML. | Fuente: Página de inicio de ZenML

Aprende más sobre los conceptos principales de ZenML en la documentación.

Flyte

Flyte es una plataforma para orquestar tuberías de aprendizaje automático a gran escala. Puedes utilizar Flyte para implementación, mantenimiento, gestión del ciclo de vida, control de versiones y entrenamiento. También puedes usarlo con plataformas como Feast, PyTorch, TensorFlow y whylogs para realizar tareas en todo el ciclo de vida del modelo.

La arquitectura de la plataforma Flyte. | Fuente: Flyte: MLOps Simplified

Este artículo de Samhita Alla, ingeniera de software y evangelista tecnológica en Union.ai, proporciona una guía simplificada de las aplicaciones de Flyte en MLOps. Consulta la documentación para comenzar.

Kubeflow Pipelines

Kubeflow Pipelines es una herramienta de orquestación para construir e implementar flujos de trabajo de aprendizaje automático de extremo a extremo portátiles, escalables y reproducibles directamente en clústeres de Kubernetes. Puedes definir Kubeflow Pipelines con los siguientes pasos:

Paso 1: Escribe la implementación del código para cada componente como un archivo o script ejecutable, o reutiliza componentes preconstruidos.

Paso 2: Define el flujo de trabajo utilizando un lenguaje específico del dominio (DSL).

Paso 3: Compila y construye el flujo de trabajo que acabas de definir.

Paso 4: El Paso 3 creará un archivo YAML estático que se puede activar para ejecutar el flujo de trabajo a través del intuitivo SDK de Python para tuberías.

Kubeflow es notablemente complejo y, con ciclos de iteración de desarrollo lentos, otras plataformas basadas en K8s como Flyte facilitan la construcción de tuberías. Pero desplegar un servicio gestionado en la nube como Google Kubernetes Engine (GKE) puede ser más fácil.

También hay otras opciones, como Prefect y Argo, que puedes considerar. Este artículo puede ser útil, ya que compara más de 10 herramientas de orquestación de flujos de trabajo y tuberías: Mejores herramientas de orquestación de flujos de trabajo y tuberías.

DEMO: Ejemplo de tubería de aprendizaje automático de extremo a extremo

En este ejemplo, construirás una tubería de aprendizaje automático con Kubeflow Pipelines basada en la famosa competencia de aprendizaje automático del Titanic en Kaggle. Este proyecto utiliza el aprendizaje automático para crear un modelo que predice qué pasajeros sobrevivieron al naufragio del Titanic.

El conjunto de datos también proporciona información sobre el destino de los pasajeros en el Titanic, resumida según el estado económico (clase), sexo, edad y supervivencia.

Pre-requisitos

  • En esta demostración, utilizarás MiniKF para configurar Kubeflow en AWS. Arrikto MiniKF es la forma más rápida y sencilla de comenzar con Kubeflow. También puedes usar MiniKF para configurar Kubeflow en cualquier lugar, incluyendo tu ordenador local. Puedes obtener más información sobre cómo configurar Kubeflow con MiniKF en Google Cloud y tu ordenador local en la documentación.
  • Si aún no tienes una cuenta de AWS, crea una.
  • Usar Arrikto MiniKF a través de AWS Marketplace tiene un costo de $0.509/hora al momento de escribir esto. La demostración tarda menos de una hora en completarse, así que no deberías gastar más de $3 siguiendo esta demostración.
  • Esta demostración utiliza Arrikto MiniKF v20210428.0.1 y esta versión instala lo siguiente:
    • Kubeflow v1.3.
    • Kale v0.7.0.: una herramienta de orquestación y flujo de trabajo para Kubeflow que te permite ejecutar flujos de trabajo completos de ciencia de datos a partir de un notebook.
    • Kubernetes (usando Minikube v1.22.0).

Los pasos de demostración también funcionan con la última versión de Arrikto MiniKF v20221221.0.0 en el momento de escribir esto. Puede seguir este tutorial en la documentación oficial para aprender cómo implementar Kubeflow con MiniKF a través de AWS Marketplace.

Si ha implementado Kubeflow con MiniKF, vayamos al panel de control de Kubeflow para configurar el proyecto:

Para comenzar, haga clic en (1) “Notebooks” y (2) “+NUEVO SERVIDOR”.

Especifique un nombre para su servidor de cuaderno:

Deje los demás como predeterminados (dependiendo de sus requisitos, por supuesto) y haga clic en “AGREGAR VOLUMEN” en la categoría Volúmenes de datos:

Ahora verá un nuevo volumen de datos agregado con el nombre que especificó para su servidor y “-vol-1/” como sufijo:

Ahora puede iniciar el servidor de cuadernos:

Esto puede tardar unos minutos en configurarse, dependiendo del número de recursos que haya especificado. Cuando vea la marca de verificación verde, haga clic en “CONECTAR”:

Eso debería llevarlo al lanzador de Jupyterlab, donde puede crear un nuevo cuaderno y acceder a la terminal:

Cuando inicie la terminal, ingrese el siguiente comando (recuerde ingresar el nombre de su volumen de datos):

$ cd <INGRESE AQUÍ EL NOMBRE DE SU VOLUMEN DE DATOS>

$ git clone https://github.com/NonMundaneDev/layer-demo-kubeflow.git

(3) Inicie el cuaderno `layer_kubeflow_titanic_demo.ipynb`:

Después de ejecutar la primera celda de código, reinicie su kernel para que los cambios surtan efecto en el kernel actual:

Kale ayuda a compilar los pasos en su cuaderno en un pipeline de aprendizaje automático que se puede ejecutar con Kubeflow Pipelines. Para convertir el cuaderno en un pipeline de ML,

(1) Haga clic en el icono de Kale y luego

(2) Haga clic en habilitar:

Kale detectará automáticamente los pasos que debe ejecutar y los que debe omitir como parte del proceso exploratorio en el cuaderno. En este cuaderno, Kale clasifica todos los pasos en un componente, ya que todos toman una entrada y devuelven un artefacto de salida.

(1) Ahora puedes editar la descripción de tu pipeline y otros detalles. Cuando termines,

(2) haz clic en ” COMPILAR Y EJECUTAR “:

Si todo va bien, deberías ver una visualización como la siguiente. Haz clic en ” Ver ” junto a ” Ejecución del pipeline en curso… ” y se abrirá una nueva pestaña:

Deberías poder ver la ejecución de un pipeline y ver el DAG (grafo acíclico dirigido) del Kubeflow Pipeline que acabas de ejecutar con Kale a través de la interfaz de usuario del Pipeline:

Ahora, para ver el resultado que devolvió tu modelo en el paso de servicio, haz clic en el paso ” randomforest ” > ve a ” Visualizaciones ” y desplázate hacia abajo hasta la sección ” HTML estático ” y visualiza el resultado de la predicción para la última celda:

En este caso, según los datos de prueba pasados en el paso de servicio para el cuaderno, el modelo predijo que este pasajero en particular no sobreviviría al naufragio.

También puedes obtener el punto final URL que sirve tu modelo siguiendo estos pasos:

Haz clic en ” Modelos ” en la barra lateral y observa que ya se está sirviendo un modelo. Observa el Predictor, Runtime y Protocolo. Haz clic en el nombre del modelo.

Verás un panel de control para ver los detalles del modelo que estás sirviendo en producción.

(1) Supervisa tu modelo en producción con Métricas y registros para depurar errores. También puedes ver el

(2) “URL externo” y

(3) “URL interno”, los puntos finales donde puedes acceder a tu modelo desde cualquier otro servicio o solicitud de cliente. El “URL externo” se puede redirigir a tu URL personalizada.

Por ahora, accederemos al modelo a través de la terminal mediante el punto final “URL interno”. Copia el punto final y vuelve a tu terminal de JupyterLab. Guarda el punto final en una variable con el siguiente comando:

$ export MODEL_DEPLOYMENT_URL=<INGRESA AQUÍ TU PUNTO FINAL DE URL INTERNO>

$ curl --header "Content-Type: application/json; format=pandas-records"   --request POST   --data  '{"instances": [[3, 0, 4, 1, 2 ,3, 0, 1, 0, 8, 3, 6, 2]]}'  $MODEL_DEPLOYMENT_URL

Deberías obtener la misma respuesta que la del cuaderno del Pipeline:

¡Felicitaciones! Has construido un Pipeline de extremo a extremo con Kubeflow.

Desafíos asociados con los pipelines de ML

Algunos desafíos con los que probablemente te encuentres al trabajar con tuberías de ML incluyen lo siguiente:

  • 1
    Requisitos de infraestructura y escalabilidad.
  • 2
    Interdependencias complejas en el flujo de trabajo.
  • 3
    Programar los flujos de trabajo es un dilema.
  • 4
    Reproducibilidad de la tubería.
  • 5
    Seguimiento de experimentos.

Requisitos de infraestructura y escalabilidad

La promesa de las tuberías de aprendizaje automático se materializa cuando tienes la excelente infraestructura en la que deben ejecutarse. Empresas como Uber, Airbnb, etc. alojan su infraestructura y tienen el presupuesto para construirla internamente. Esto es poco realista, especialmente para empresas más pequeñas y startups que dependen de la infraestructura en la nube para lanzar sus productos al mercado.

Utilizar la infraestructura en la nube para ejecutar tuberías de datos, entrenamiento y producción puede llevar a costos y facturas exponenciales si no los supervisas adecuadamente. También puedes encontrarte con situaciones en las que los diferentes componentes del flujo de trabajo requieren necesidades de infraestructura significativamente diferentes.

Las tuberías de aprendizaje automático te permiten ejecutar experimentos de manera eficiente y a gran escala, pero este propósito puede verse frustrado si los recursos y el presupuesto son limitados.

Interdependencias complejas en el flujo de trabajo

La implementación de flujos de trabajo de tuberías puede ser complicada debido a la compleja interdependencia de los pasos de la tubería, que pueden crecer y volverse difíciles de gestionar.

La escalabilidad de las interdependencias complejas en el flujo de trabajo también puede ser un problema, ya que algunos componentes pueden requerir más recursos computacionales que otros. Por ejemplo, el entrenamiento del modelo puede utilizar más recursos de cómputo que la transformación de datos.

Dilema de programación de flujos de trabajo

Programar los flujos de trabajo en una tubería de aprendizaje automático y proporcionar resiliencia contra errores y situaciones no planificadas puede ser muy complicado. Cuando usas un programador de flujos de trabajo, puede ser difícil especificar todas las acciones que el orquestador debe tomar cuando un trabajo falla.

Reproducibilidad de la tubería

Ejecutar decenas a cientos de tuberías a gran escala, con múltiples etapas interconectadas que pueden involucrar diversas transformaciones de datos, parámetros algorítmicos y dependencias de software, puede afectar la reproducibilidad de las tuberías de aprendizaje automático.

A menudo se olvida, pero la infraestructura, el código y la configuración que se utilizan para producir los modelos no están versionados correctamente y se encuentran en un estado no consumible y no reproducible.

— Ketan Umare, Cofundador y CEO de Union.ai, en una sesión AMA en MLOps.community 2022.

En otros casos, es posible que construyas tus tuberías con configuraciones de hardware específicas que se ejecutan en un sistema operativo y dependencias de bibliotecas variables. Pero al compilar la tubería para que se ejecute en un entorno diferente, estas diferencias ambientales pueden afectar la reproducibilidad de las tuberías de aprendizaje automático.

Mejores prácticas para construir tuberías de ML

Desde examinar conversaciones en la comunidad hasta hablar con ingenieros de empresas como Brainly y Hypefactors, y destilar los aprendizajes principales de Netflix, Lyft, Spotify, etc., aprende algunas de las mejores prácticas para construir tuberías de ML a continuación.

Haz un seguimiento de tus tuberías de aprendizaje automático

Adjuntamos automáticamente un rastreador de experimentos a cada tubería que lanzamos sin que nuestros usuarios se den cuenta. Para nosotros, esto asegura al menos un conjunto mínimo de parámetros que se rastrean… En principio, vemos el seguimiento de experimentos como una herramienta que debe utilizarse con la tubería. Recomendamos usar una tubería para hacer un seguimiento de tus experimentos, así te aseguras de que sean reproducibles.

— Simon Stiebellehner, Ingeniero Principal de MLOps y Líder de MLE Craft en TMNL, en “Diferencias entre enviar software clásico y operar modelos de ML” en MLOps LIVE.

Quieres aprovechar técnicas y tecnologías para que tu tubería sea reproducible y depurable. Esto implica explorar prácticas que incluyen:

  • Control de versiones: para administrar las dependencias, incluido el código, los datos, la configuración, las dependencias de bibliotecas, los metadatos de la tubería y los artefactos, lo que permite realizar un seguimiento y comparar fácilmente las versiones de la tubería.
  • Implementar gobernanza del sistema. Dependiendo de los pasos en tu tubería, puedes analizar los metadatos de las ejecuciones de la tubería y la genealogía de los artefactos de ML para responder preguntas de gobernanza del sistema. Por ejemplo, podrías utilizar los metadatos para determinar qué versión de tu modelo estaba en producción en un momento dado.
  • Usar herramientas y marcos dedicados que admitan el seguimiento y la gestión de tuberías, como neptune.ai o MLflow, puede proporcionar capacidades de seguimiento y monitoreo integrales.

Las herramientas de seguimiento te permiten

  • registrar los resultados de los experimentos,
  • visualizar los componentes de la tubería,
  • documentar los detalles de los pasos para facilitar la colaboración entre los miembros del equipo,
  • monitorear el rendimiento de la tubería durante la ejecución, lo que facilita el seguimiento de la evolución de la tubería a lo largo del tiempo,
  • gestionar el progreso de la tubería.

A continuación se presenta un interesante estudio de caso sobre cómo ReSpo.Vision realiza un seguimiento de sus pipelines con neptune.ai

ReSpo.Vision utiliza ML en el análisis de datos deportivos para extraer datos 3D de videos de transmisión deportiva de una sola cámara. Ejecutan muchos pipelines de kedro en el proceso.

Wojtek Rosiński, CTO de ReSpo.Vision, dice: “Cuando usamos Neptune con kedro, podemos realizar un seguimiento fácil del progreso de los pipelines que se ejecutan en muchas máquinas, porque a menudo ejecutamos muchos pipelines simultáneamente, por lo que el seguimiento cómodo de cada uno de ellos se vuelve casi imposible. Con Neptune, también podemos ejecutar fácilmente varios pipelines utilizando diferentes parámetros y luego comparar los resultados a través de la interfaz de usuario”.

A continuación, puedes ver un ejemplo de cómo se ve en la interfaz de usuario de Neptune.

Neptune se integra nativamente con herramientas como Kedro y ZenML. Pero incluso sin una integración lista para usar, puedes usarlo con cualquier otra herramienta de pipeline que tengas en su lugar.

  • Ver cómo empezar con neptune.ai
  • Leer el estudio de caso completo para obtener más información sobre cómo ReSpo.Vision realiza un seguimiento de sus experimentos y pipelines

Componga los componentes de su pipeline en funciones más pequeñas

Utilice herramientas de pipelining y el SDK para construir su pipeline con componentes reutilizables (definidos como funciones pequeñas). Vea un ejemplo que sigue el flujo de trabajo del pipeline de ZenML:

import numpy as np
from sklearn.base import ClassifierMixin
from sklearn.svm import SVC

from zenml.steps import step


@step
def svc_trainer(
    X_train: np.ndarray,
    y_train: np.ndarray,
) -> ClassifierMixin:
    """Entrena un clasificador SVC de sklearn."""
    model = SVC(gamma=0.001)
    model.fit(X_train, y_train)
    return model

De esta manera, puede implementar su flujo de trabajo construyendo componentes personalizados o reutilizando componentes predefinidos. Esto puede facilitar y acelerar la construcción de nuevos pipelines, depurar los existentes e integrarlos con otros servicios tecnológicos de la organización.

No cargue cosas a nivel de módulo; esto suele ser algo malo. No quieres que la carga del módulo tarde mucho tiempo y falle.

— Ketan Umare, Co-Fundador y CEO de Union.ai, en una sesión de preguntas y respuestas en MLOps.community 2022.

A continuación se muestra otro ejemplo de un paso definido como una función con la herramienta de orquestación Prefect:

@task
def split_data(data: pd.DataFrame):
    # Dividir el conjunto de datos aleatoriamente en un 70% para entrenamiento y un 30% para pruebas.
    X = data.drop("rented_bikes", axis=1)
    y = data.rented_bikes
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, train_size=0.7, test_size=0.3, random_state=42
    )
    return X_train, X_test, y_train, y_test

@task
def train_model(X_train: pd.DataFrame, y_train: pd.DataFrame):
    # Crear una instancia del modelo: GBRT (Gradient Boosted Regression Tree)
    model = GradientBoostingRegressor()
    # Entrenamiento del modelo
    model.fit(X_train, y_train)
    return model

Escriba pruebas para el pipeline

Otra buena práctica es asegurarse de construir un conjunto de pruebas que cubra cada aspecto de su pipeline, desde las funciones que componen los componentes hasta la ejecución completa del pipeline. Si es posible (y dependiendo del caso de uso), esté dispuesto a automatizar estas pruebas.

Para garantizar que los modelos sigan funcionando como se espera durante los cambios continuos en las imágenes del contenedor de entrenamiento o servicio subyacente, tenemos una familia única de pruebas aplicables a LyftLearn Serving llamadas autopruebas del modelo.

— Mihir Mathur, Gerente de Producto de Lyft, en el blog “Powering Millions of Real-Time Decisions with LyftLearn Serving” 2023.

Componer los componentes del pipeline en funciones más pequeñas puede facilitar las pruebas. Vea un ejemplo de las autopruebas del modelo de Lyft, donde especificaron una pequeña cantidad de muestras para las entradas y salidas esperadas del modelo en una función llamada `test_data`:

class SampleNeuralNetworkModel(TrainableModel):

    @property

    def test_data(self) -> pd.DataFrame:

        return pd.DataFrame(

            [

                # La entrada `[1, 0, 0]` debería generar una salida cercana a `[1]`

                [[1, 0, 0], 1],

                [[1, 1, 0], 1],

            ],

            columns=["input", "score"],

        )

Escribe tus pruebas localmente porque, en la mayoría de los casos en los que tu pila y configuración hacen que las pruebas locales sean imposibles, es probable que tus usuarios terminen probando en producción. Contenerizar tus pasos puede facilitar las pruebas de tus tuberías localmente o en otro entorno antes de implementarlas en producción.

¿Cuáles son las pruebas de tubería que debes escribir? Eugene Yan, en su artículo, enumeró un mapa de alcance de cómo deberían ser las pruebas de tubería efectivas, que incluyen pruebas unitarias, pruebas de integración, pruebas de funciones, pruebas de extremo a extremo, y más. Echa un vistazo al extenso artículo.

Conclusión

Construir tuberías de aprendizaje automático de extremo a extremo es una habilidad crítica para los ingenieros modernos de aprendizaje automático. Siguiendo las mejores prácticas, como pruebas y validaciones exhaustivas, monitoreo y seguimiento, automatización y programación, puedes garantizar la confiabilidad y eficiencia de las tuberías.

Con una sólida comprensión de los componentes, estructura y desafíos de cada etapa de la tubería, puedes construir tuberías sólidas y escalables que agilicen tu flujo de trabajo de ML.

¡Feliz creación de tuberías!


Referencias

  • Introducción a Kubeflow Pipelines – YouTube
  • Construcción y gestión de tuberías de ciencia de datos con Kedro – neptune.ai
  • Cómo Metaflow se convirtió en el popular marco de ciencia de datos de Netflix • Julie Amundson
  • https://mlops-community.slack.com/archives/C02NLLRUVN3/p1660842600835749
  • Flyte: MLOps Simplificado – Comunidad de MLOps
  • https://mlops-community.slack.com/archives/C02NLLRUVN3/p1660844981495249

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

ChatGPT obtiene una puntuación en el 1% superior en la prueba de creatividad humana

La inteligencia artificial (IA) ha alcanzado nuevas alturas, según una investigación realizada por la Universidad de ...

Inteligencia Artificial

Aprendizaje Automático de Grafos @ ICML 2023

Magníficas playas y paisajes tropicales de Hawái 🌴 no impidieron que valientes científicos asistieran a la Conferenci...

Ciencias de la Computación

Oportunidad de Asia para la Inteligencia Artificial Generativa.

La inteligencia artificial generativa está acelerando la adopción digital en toda Asia.

Inteligencia Artificial

Permite un entrenamiento más rápido con la biblioteca de paralelismo de datos de Amazon SageMaker

El entrenamiento de modelos de lenguaje de gran tamaño (LLM, por sus siglas en inglés) se ha vuelto cada vez más popu...