En este artículo, presentaremos una herramienta que demuestra, de forma práctica, nuestra experiencia utilizando Vertex AI Pipelines en un proyecto en producción.
Un tutorial de principio a fin sobre cómo entrenar y desplegar un modelo ML personalizado en producción utilizando Vertex AI Pipelines con Kubeflow v2. Si estás confundido sobre cómo abordar Vertex AI, podrás encontrar tu camino ya que todo en este tutorial se basa en la experiencia de la vida real. Hay muchos ejemplos de pipelines que ilustran cómo utilizar ciertas características interesantes de vertex AI y Kubeflow. También encontrarás un makefile que te ayudará a ejecutar recetas importantes y te ahorrará mucho tiempo para construir tu modelo y tenerlo funcionando en producción.
Los pipelines en ML pueden definirse como conjuntos de trabajos conectados que realizan partes completas o específicas del flujo de trabajo de ML (ej: pipeline de entrenamiento).
ejemplo de proceso de formación sencillo
ejemplo de pipeline de entrenamiento en Vertex AI Pipelines using Kubeflow
Si se diseñan correctamente, los pipelines tienen la ventaja de ser reproducibles y altamente personalizables. Estas dos propiedades hacen que experimentar con ellas y desplegarlas en producción sea una tarea relativamente sencilla. El uso de Vertex AI Pipelines junto con Kubeflow nos ayudó a diseñar y ejecutar rápidamente pipelines personalizados que tienen las propiedades antes mencionadas. Los ejemplos de pipelines que ilustramos en el starter kit son muy representativos de lo que uno podría encontrarse cuando trabaja en un proyecto de ML que necesita ser desplegado en producción. También compartimos un puñado de consejos y scripts automatizados para que puedas centrarte en sentirte cómodo con Vertex AI.
Cuando empecé a usar Vertex AI Pipelines, me sentí bastante abrumado por todas las posibilidades de hacer exactamente la misma tarea. No estaba muy seguro de cuáles eran las mejores opciones para construir mis tuberías. Al cabo de unos meses, encontramos nuestro camino y forjamos algunas convicciones, al menos sobre el aspecto más importante de la gestión del ciclo de vida de un proyecto en producción con esta tecnología.
Como ya se ha dicho, este artículo pretende presentar un kit de iniciación que muestre, con métodos prácticos, nuestra experiencia y lo que hemos aprendido al utilizar Vertex AI Pipelines. Esperamos que esto ayude a los principiantes a comprender rápidamente esta potente herramienta sin tener que pagar su elevado precio de entrada.
En las siguientes secciones, presentaremos los conceptos/funciones más interesantes que hemos encontrado utilizando Vertex AI Pipelines. También utilizaremos un proyecto de previsión de juguete (el concurso M5) para ilustrarlo todo. Intencionadamente, no nos centraremos en la parte de modelado, sino que haremos hincapié en los distintos pasos necesarios para poner en funcionamiento un modelo en producción.
Cree una imagen base personalizada y utilícela como base para sus componentes
Si alguna vez has trabajado con Kubeflow pipelines, una pregunta que podrías tener es cuándo utilizar componentes basados en contenedores frente a componentes basados en funciones. Hay muchos pros y contras en ambas opciones, sin embargo, también hay un punto medio que se puede encontrar. Los componentes basados en contenedores son más adecuados para tareas complejas donde hay muchas dependencias de código en comparación con los componentes basados en funciones que contienen todas las dependencias de código dentro de una función y suelen ser más simples. Estos últimos se ejecutan más rápidamente ya que no necesitamos construir y desplegar una imagen cada vez que editamos nuestro código. En los componentes basados en funciones, se utiliza una imagen por defecto de python 3.7 para ejecutar tu función.
Nuestra solución para ejecutar componentes complejos y simples de la misma manera es trabajar con una versión sobreescrita de la imagen base por defecto. Dentro de esta imagen base alterada instalamos todos nuestros códigos como un paquete. Entonces, importamos esas funciones dentro de componentes basados en funciones como harías para pandas por ejemplo. Obtenemos el beneficio de ejecutar tareas complejas y simples de la misma manera y reducimos el tiempo de construcción de la imagen a sólo 1 (la imagen base).
También organizamos nuestros archivos de configuración de forma que sea fácil adaptar las entradas de sus componentes y canalizaciones.
Utilizar una imagen base sobrescrita como base única para todos sus componentes.
Paralelizar partes de tus pipelines es tan sencillo como escribir un bucle for
Cuando experimentamos con ML, normalmente necesitamos ejecutar muchas iteraciones de un flujo de trabajo de entrenamiento simple, ya sea para afinar un hiperparámetro o para hacer múltiples modelos (por ejemplo, un modelo por categoría de producto).
Hacer esto de forma óptima significaría paralelizar los diferentes flujos de trabajo de entrenamiento para ganar tiempo y optimizar recursos. Con Vertex Pipelines y Kubefkow el esfuerzo es mínimo por diseño; sólo te costará escribir un bucle for. Y al compilar tu pipeline, Kubeflow averiguará qué pasos y/o grupo de pasos pueden ejecutarse en paralelo y cuáles deben hacerse sucesivamente.
Ejemplo de canalización con partes que se ejecutan en paralelo
Despliegue condicional para operar su modelo ML sin problemas
Con kfp.dsl.condition, puede desplegar fácilmente un modelo entrenado y prepararse para reutilizarlo más tarde con algo de lógica de código. Si usted está experimentando con muchas configuraciones y con la esperanza de mover sin problemas las cosas en la producción dado un conjunto de condiciones, esta funcionalidad de Kubeflow será muy útil. Combínalo con un gran CICD y harás funcionar el ciclo de vida de tu modelo ML sin problemas.
Ejemplo de despliegue condicional
Además de estas funciones (que no son exhaustivas), dispondrá de reproducibilidad, trazabilidad, capacidad de gestión y, por último, pero no por ello menos importante, una excelente interfaz de usuario para supervisarlo todo en la interfaz de Vertex AI en GCP.
Conclusión
Hoy en día se espera que muchos modelos ML funcionen en producción. Así que si estás trabajando en GCP y planeas utilizar Vertex AI, esperamos que este kit de inicio te ayude a tener un viaje agradable con la herramienta. También deberías echarle un vistazo si estás empezando tus proyectos con la ambición de hacerlos útiles lo antes posible, es decir, desplegarlos en producción.
Muchas gracias a Luca Serra, Jeffrey Kayne y Robin Doumerc (Artefact) que ayudaron a construir este kit de inicio, pero también a Maxime Lutel por haber hecho realmente el modelado para el proyecto de juguete que utilizamos.
Si desea pasar al siguiente nivel, en la documentación de GCP encontrará cómo hacerlo: