Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Flexibilidad en la optimización Black Box de Vizier

By Joshua FoxAug 17, 20236 min read

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

En la Parte 1 describimos los retos de los procesos de optimización lentos y costosos, y el nuevo flujo Black Box que implementa Vertex AI Vizier. En la Parte 2 explicamos por qué Black Box ofrece más control y escalabilidad que los servicios convencionales de ajuste de hiperparámetros. En este artículo de cierre veremos cómo configurar Vizier para acelerar la convergencia hacia el mejor modelo posible.

Versión estándar vs. configurable

La interacción con Vizier es así: la entrada son los parámetros y la métrica de un trial que ya ejecutaste; la salida son los parámetros sugeridos para el siguiente trial. Pero Vizier ofrece más flexibilidad cuando hace falta. Aun así, conviene ser cauto al tocar estas opciones de configuración avanzada. Vizier hace una optimización anidada: los trials en sí ya son optimizaciones, y Vizier busca converger en la mejor respuesta a lo largo de esas repeticiones, cada una de ellas costosa. Si encima agregas otra capa de anidamiento y corres varios estudios de Vizier sobre el mismo problema, ajustando cada vez su configuración opcional y volviendo a ejecutar, lo más probable es que el costo de esas optimizaciones supere los beneficios.

Algoritmo de búsqueda

Puedes elegir el algoritmo que Vizier usará para recorrer el espacio de parámetros en busca del mejor conjunto. El primero es la búsqueda en cuadrícula (grid search), que avanza de forma regular por el espacio de parámetros y prueba tantas opciones como sea posible dado el número limitado de iteraciones. Le sigue la búsqueda aleatoria: saltar por el espacio de parámetros sin más, lo que puede funcionar sorprendentemente bien. Estos dos algoritmos parecen bastante básicos, y podrías aplicarlos sin Vizier; ya sea recorriendo con cuidado el rango de hiperparámetros o probando combinaciones al azar, los resultados serían los mismos. Pero al usar Vizier, este lleva el registro y gestiona el proceso. Vizier es gratuito con grid search o búsqueda aleatoria.

Más sofisticada es la búsqueda bayesiana, en la que Vizier construye su propio modelo interno para optimizar las mejores sugerencias. (Consulta el paper de investigación para más detalles). A diferencia de saltar al azar o en pasos predeterminados, este enfoque suele converger mucho más rápido.

La búsqueda bayesiana es la opción por defecto, y la única por la que se cobra: cuesta un dólar por trial después de los primeros 100 trials gratuitos al mes. Como Vizier está pensado para minimizar la repetición de procesos de optimización costosos, ese precio resulta trivial frente, por ejemplo, a una sola iteración de entrenamiento de ML que puede costar 20 dólares, o a un test A/B que podría representar miles en ingresos potencialmente perdidos. Y al ofrecer un servicio de hiperoptimización en lugar de una librería para auto-despliegue, Vizier te ahorra el tiempo y el costo de montar la arquitectura.

Cuándo detenerse

Como mencionamos, Vizier puede aconsejarte cuándo detenerte. En el gráfico de abajo, la curva verde punteada primero mejora y luego empieza a empeorar, así que conviene parar, y Vizier sabe detectarlo. La curva naranja punteada, en cambio, mejora rápidamente y vale la pena seguir; las curvas sólidas están en un punto intermedio. Puedes configurar el algoritmo que Vizier usa para esto: pedirle que recomiende detener el estudio cuando la última iteración no sea mejor que la mediana de todas las iteraciones previas, o que las últimas.

Figura 1. Sugerencias para detenerse (basado en el paper de investigación. )

Cómo elegir el conjunto óptimo de parámetros

Una vez terminado el estudio, Vizier te indica cuál fue el mejor conjunto de parámetros, y puedes decirle cómo hacer esa selección. Parece obvio elegir el trial que produjo las mejores métricas, y esa es la opción por defecto. Pero si tienes un proceso con mucho ruido (mira la imagen de abajo), el pico puede ser solo fruto del azar, un repunte momentáneo, lo que a veces se conoce como la Maldición del Ganador. Si sabes que tienes ese tipo de ruido pero la tendencia es generalmente ascendente, puedes pedirle a Vizier que simplemente elija el último.

Figura 2. La Maldición del Ganador: por qué quizá no convenga quedarte con el mejor

Transfer Learning

Vizier puede aprovechar de forma incremental el aprendizaje acumulado y crear un nuevo estudio que se apoya en otro similar anterior. Supongamos que optimizaste tu sitio web con tests A/B, asesorado por Vizier, pero unas semanas más tarde sale una nueva versión con funciones importantes y quieres ajustarlas también. Con resumePreviousJobId, transfieres el aprendizaje de otro estudio. Esto puede traducirse en grandes ahorros de tiempo y dinero, ya que reutilizas el modelado existente y corres muchos menos de esos trials lentos y costosos sobre los que Vizier te asesora.

Hoy esta funcionalidad solo está disponible en la versión interna de Vizier que impulsa el ajuste de hiperparámetros de AI Platform, y no en ninguna de las APIs con la marca Vizier.

Las APIs

Vizier ofrece varias APIs.

La API de Vertex AI Vizier (a veces llamada "GAPIC" por el generador de clientes de Protocol Buffer que utiliza) gira en torno a una clase de Python llamada VizierServiceClient. Es un producto Generally Available y la dirección que Google prefiere a futuro. Por eso es la API principal en la que conviene enfocarse.

Vizier también se expone como otra API, retroportada a la antigua AI Platform de GCP y actualmente en beta. Esta API se basa en discovery: no ves funciones implementadas en la librería, sino que llamas a funciones definidas mediante una capa de wrapper dinámica. No es tan complicado como suena: con la documentación, algo de experimentación y el código de ejemplo (incluido el mío, más abajo) resulta usable.

La otra implementación de Vizier, como ya mencionamos, es el proyecto open-source, por si quieres gestionarlo por tu cuenta o simplemente leer el código.

Recorrido por el código

Hay muy pocos ejemplos de código disponibles. De hecho, la documentación oficial de Vizier ofrece un único notebook de ML para la API retroportada de AI Platform Vizier, y ninguno para la API preferida de Vertex AI Vizier. Por eso preparé este notebook. Está armado en torno a un proceso normal de entrenamiento de ML que se ejecuta internamente en el contenedor (aunque, como ya sabemos, Vizier es independiente de cómo se ejecute ese entrenamiento). Puedes recorrerlo siguiendo los comentarios de código numerados #[0], #[1], etc.

Además, Ryan Holbrook creó este notebook open-source. Quizá te convenga usar esta variante que armé, que muestra la salida de una ejecución exitosa y está ligeramente ajustada para facilitar correrla de principio a fin sin configuración adicional.

Quizá ya hayas usado un servicio de ajuste de hiperparámetros para tu ML: Vizier es eso y más. Como Vizier no sabe nada del ML, ni siquiera que estás haciendo ML, puedes usarlo para cualquier proceso de optimización lento y costoso. Como servicio, es robusto, escalable y prácticamente gratuito en comparación con los procesos costosos que busca minimizar. Te da la libertad de seguir su consejo o no, y en cualquier caso te marca el camino hacia la convergencia más rápida a una respuesta óptima.