Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Vertex AI Vizier: reduce las iteraciones en entrenamientos de ML costosos

By Joshua FoxJul 31, 20236 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Tienes un proceso de optimización en el que cada prueba cuesta tiempo o dinero. Puede tratarse del entrenamiento de Machine Learning (ML), donde cada ejecución toma horas y decenas de dólares; de un test A/B, donde cada iteración puede tomar un día y costar miles de dólares en ingresos perdidos; o incluso de la gestión de la cadena de suministro de una fábrica, donde elegir los insumos del día para lograr el menor costo y la mayor producción es una apuesta: una decisión equivocada puede salir cara y hacerte perder un día entero.

Si una prueba no resulta lo suficientemente buena, lo intentas de nuevo. Pero cuando cada intento es costoso, no se trata de adivinar parámetros: la idea es converger hacia los mejores parámetros posibles en la menor cantidad de pruebas.

Esta serie de tres artículos explica un nuevo enfoque para reducir el costo del entrenamiento de ML y de otros procesos de optimización: el flujo de trabajo de optimización Black Box con Google Vertex AI Vizier.

Conviene tener presente que Vizier no se limita al Machine Learning. De hecho, ni siquiera sabe que estás haciendo ML; no participa en las pruebas en sí. Vizier solo conoce lo que tú le dices: los parámetros y la medición del objetivo (qué tan bien resultaron las pruebas). Tú eres el experto y eres quien ejecuta el entrenamiento de ML o el proceso a optimizar, mientras que Vizier es un asesor externo que te entrega sugerencias para la siguiente ronda.

En el entrenamiento de ML puedes usar Vertex AI Vizier para elegir los mejores hiperparámetros posibles —los que configuran la ejecución del entrenamiento en su conjunto—, como la regularización, las tasas de aprendizaje o el número y tamaño de las capas. Es más, el tipo de modelo que se usará en el siguiente entrenamiento es en sí mismo un parámetro a explorar: por ejemplo, si un problema de clasificación binaria conviene resolverlo con Naive Bayes, Logistic Regression o XGBoost.

Como Vertex AI Vizier solo asesora el entrenamiento desde afuera, puedes usarlo con cualquier tipo de ML. Puede ser con el SDK de Google Vertex para lanzar trabajos de entrenamiento personalizados, o entrenando tu propio modelo de TensorFlow o PyTorch dentro de un contenedor personalizado.

Cómo usar Vizier

Quizás conozcas librerías de tuning de hiperparámetros como las de Scikit y Hyperopt. Estas ejecutan pruebas repetidas de ML, ajustando los hiperparámetros en cada iteración para intentar converger al mejor resultado.

Sin embargo, un servicio de tuning de hiperparámetros como los de Google y AWS simplifica radicalmente el proceso, porque elimina la necesidad de configurar las librerías y la infraestructura de cómputo.

Vertex AI Vizier va un paso más allá con el proceso Black Box que describiré en esta serie. La diferencia esencial está en el patrón de uso: con Vizier ejecutas pruebas interactivas, en las que en cada ronda le pides consejo a Vertex AI Vizier y este te devuelve sugerencias basándose únicamente en qué tan buenos fueron los resultados de las pruebas anteriores.

El proceso

Estos son los pasos generales para implementar el flujo de trabajo con Vertex AI Vizier:

  1. Primero, se crea un estudio de Vertex AI Vizier que contendrá una serie de pruebas. El estudio se define mediante una configuración que establece los objetivos (las mediciones/métricas) y los valores de entrada (hiperparámetros) de tus experimentos, llamados pruebas.
  2. Ejecuta una prueba: entrenar un modelo de Machine Learning o correr otro proceso que necesites optimizar.
  3. Invoca a Vertex AI Vizier enviándole los parámetros junto con la medición de optimización de esa prueba. En el caso del entrenamiento de un modelo de ML, esa métrica podría ser, por ejemplo, la pérdida de entropía cruzada o la exactitud balanceada sobre tus datos de validación, tras el habitual split de entrenamiento/validación/test.
  4. La respuesta a esa solicitud son sugerencias para la siguiente prueba. Esto incluye uno o más conjuntos de parámetros que puedes usar para definir la próxima prueba.
  5. Ejecuta la siguiente prueba, normalmente con base en los parámetros sugeridos. Pero son solo sugerencias: puedes usar los parámetros que tú elijas. En cualquier caso, Vertex AI Vizier seguirá aprendiendo.
  6. Continúa con la siguiente prueba.
  7. Detén las iteraciones cuando hayas hecho suficientes pruebas (más detalles a continuación).

Diagrama de flujo de la interacción con Vizier

Vertex AI Vizier es software-as-a-service. Basta con invocar un servicio REST a través de una práctica API de Python, que veremos más adelante.

Cómo se ve una llamada a la API

Aquí tienes un ejemplo de la entrada y la salida. Está algo simplificado, pero refleja la esencia de la invocación REST. (En la práctica, usarías un cliente de Python, que veremos más adelante).

Entrada:

{
 "Params": {"flour": 0.21, "recipe": "Pam's chocolate chip", "eggs": 2 },
 "rating": 8.1
}

Salida:

{"flour": 0.32, "recipe": "Chocoflake", "eggs": 1}

Este JSON es un ejemplo de optimización de una receta de galletas que el equipo de investigación llevó a cabo en la realidad: ¡hornear galletas es tan caro y toma tanto tiempo que no quieres hacerlo cientos de veces!

Los parámetros incluyen las cantidades por ingrediente: tenemos un parámetro de tipo float y otro entero. Otro parámetro es la elección de la receta, que es un parámetro categórico (con algunas opciones, sin orden entre ellas).

La entrada también incluye la medición de éxito, que es la calificación que los catadores les dieron a las galletas.

La salida, la respuesta de la llamada REST, es una sugerencia (en la práctica, potencialmente varias sugerencias) de los parámetros a usar en la siguiente ronda de horneado.

Cómo correr las pruebas dentro de un estudio

Las pruebas pueden hacerse de manera iterativa, pero también puedes ejecutar varias en paralelo. Le pides a Vertex AI Vizier varias sugerencias, digamos cinco, y luego corres cinco pruebas en simultáneo. El paralelismo tiene un trade-off: por un lado acelera el proceso, pero por otro hay una ventaja en hacer las pruebas de forma iterativa, porque así Vizier puede afinar sus recomendaciones para cada prueba con base en todas las anteriores.

El número de pruebas puede estar predeterminado, digamos veinte: la recomendación es diez veces el número de parámetros. Otra opción es que Vizier sugiera cuándo es momento de detenerse, en función de si los resultados están convergiendo. Esta austeridad en el número de pruebas es clave, ya que cada una es costosa.

Lo que viene

Recientemente, en febrero de 2023, Vizier quedó disponible en una variante open-source. Te recomiendo explorar la implementación. Sin embargo, la versión open-source no incluye el algoritmo central de optimización bayesiana, y el servicio Vertex AI Vizier ofrece facilidad de uso, escalabilidad y robustez. En esta serie nos centraremos únicamente en Vertex AI Vizier.

En este primer artículo presentamos un resumen de cómo usar Vertex AI Vizier. El segundo explicará las ventajas de este enfoque "Black Box": al dejar en tus manos la responsabilidad de los procesos de optimización pesados, tú te dedicas a lo que mejor sabes hacer, como estructurar tu entrenamiento de ML u otros procesos costosos. Mientras tanto, Vertex AI Vizier hace lo suyo: guiarte para llegar al mejor resultado en la menor cantidad de pruebas.