In Teil 1 haben wir die Tücken langsamer, kostenintensiver Optimierungsprozesse beschrieben sowie den neuen Black-Box-Workflow, den Vertex AI Vizier umsetzt. In Teil 2 haben wir erläutert, warum Black Box mehr Kontrolle und Skalierbarkeit bietet als gewöhnliche Hyperparameter-Tuner-Dienste. In diesem abschließenden Beitrag zeigen wir, wie Sie Vizier so konfigurieren, dass Sie schneller zum bestmöglichen Modell konvergieren.
Standardbetrieb vs. Konfigurierbarkeit
Der Dialog mit Vizier sieht so aus: Eingabe sind die Parameter und die Metrik aus einem von Ihnen durchgeführten Trial; Ausgabe sind vorgeschlagene Parameter für den nächsten Trial. Vizier bietet darüber hinaus jedoch zusätzliche Flexibilität, wo sie gebraucht wird. Dennoch rate ich zur Vorsicht beim Experimentieren mit diesen erweiterten Konfigurationsoptionen. Vizier führt eine verschachtelte Optimierung durch: Die Trials selbst sind Optimierungen, und Vizier soll über diese Wiederholungen hinweg zur besten Antwort konvergieren – wobei jede einzelne Wiederholung teuer ist. Wenn Sie nun noch eine weitere Verschachtelungsebene einziehen und mehrere Vizier-Studien zum selben Problem fahren, jedes Mal Viziers optionale Konfiguration anpassen und neu starten, dürften die Kosten dieser Optimierungen den Nutzen übersteigen.
Suchalgorithmus
Sie können den Suchalgorithmus wählen, mit dem Vizier den Parameterraum durchstreift, um den besten Parametersatz für Sie zu finden. Der erste ist die Grid Search, die den Parameterraum in regelmäßigen Schritten abläuft und angesichts der begrenzten Anzahl an Iterationen so viele Optionen wie möglich ausprobiert. Als Nächstes folgt die Random Search: Sie springt einfach im Parameterraum umher – was erstaunlich gut funktionieren kann. Diese beiden Algorithmen wirken recht simpel, und Sie könnten sie auch ohne Vizier umsetzen: Egal, ob Sie sorgfältig durch die Hyperparameterbereiche gehen oder einfach zufällige Kombinationen ausprobieren – die Ergebnisse wären dieselben. Mit Vizier wird dieser Prozess jedoch protokolliert und gesteuert. Mit Grid Search oder Random Search ist Vizier kostenlos.
Anspruchsvoller ist die Bayes'sche Suche, bei der Vizier ein eigenes internes Modell aufbaut, um die besten Vorschläge zu liefern. (Details finden Sie im Forschungspapier.) Im Gegensatz zum zufälligen oder regelmäßigen Springen lässt dieser Ansatz eine deutlich schnellere Konvergenz erwarten.
Die Bayes'sche Suche ist die Standardeinstellung und die einzige kostenpflichtige Variante: Sie kostet einen Dollar pro Trial nach den ersten 100 kostenfreien Trials pro Monat. Da Vizier darauf ausgelegt ist, die Wiederholung teurer Optimierungsprozesse zu minimieren, ist dieser Preis vernachlässigbar – etwa im Vergleich zu einer einzelnen Iteration eines ML-Trainings, die 20 Dollar kosten kann, oder einem A/B-Test, der Tausende an entgangenem Umsatz bedeuten kann. Und da Vizier als Hyperoptimierungsdienst bereitgestellt wird statt als Bibliothek zur Eigenbereitstellung, sparen Sie Zeit und Aufwand für den Aufbau der Architektur.
Stoppen
Wie erwähnt, kann Vizier Sie auch dabei beraten, wann Sie aufhören sollten. In der Grafik unten verbessert sich die gepunktete grüne Kurve zunächst und verschlechtert sich dann irgendwann wieder – ein Abbruch ist also sinnvoll, und Vizier kann das erkennen. Die gepunktete orangefarbene Kurve hingegen wird rapide besser, und es lohnt sich, weiterzumachen; die durchgezogenen Kurven liegen dazwischen. Den dafür verwendeten Algorithmus können Sie konfigurieren: Sie können Vizier anweisen, einen Stopp der Studie zu empfehlen, sobald die jüngste Iteration nicht besser ist als der Median aller bisherigen Iterationen oder nicht besser als die letzten paar.
Abbildung 1. Empfehlungen zum Stoppen (basierend auf dem Forschungspapier.)
Den optimalen Parametersatz wählen
Nach Abschluss der Studie teilt Vizier Ihnen mit, welcher Parametersatz der beste war – und Sie können Vizier vorgeben, wie diese Auswahl getroffen werden soll. Es scheint naheliegend, den Trial mit den besten Metriken zu wählen, und das ist auch die Standardeinstellung. Wenn Ihr Prozess jedoch stark verrauscht ist (siehe Bild unten), kann der Spitzenwert reiner Zufall sein – ein kurzer Ausschlag, der mitunter als Winner's Curse bezeichnet wird. Wenn Sie wissen, dass Sie es mit solchem Rauschen zu tun haben, der Trend aber generell nach oben weist, können Sie Vizier anweisen, einfach den letzten Wert zu nehmen.
Abbildung 2. Winner's Curse: Warum man nicht immer den besten Wert nehmen sollte
Transfer Learning
Vizier kann das gewonnene Wissen schrittweise weiterverwenden und eine neue Studie auf einer ähnlichen früheren Studie aufbauen. Angenommen, Sie haben Ihre Website per A/B-Test unter Anleitung von Vizier optimiert; ein paar Wochen später erscheint eine neue Version mit deutlichen neuen Funktionen, die Sie ebenfalls feinjustieren möchten. Mit resumePreviousJobId übertragen Sie das Wissen aus einer anderen Studie. Das kann erhebliche Zeit- und Kostenersparnisse bringen, weil Sie bestehende Modellierungsarbeit wiederverwenden und deutlich weniger der langsamen, teuren Trials fahren müssen, zu denen Vizier Sie berät.
Aktuell wird dieses Feature nur in der internen Vizier-Version unterstützt, die den Hyperparameter-Tuner der AI Platform antreibt – nicht aber in einer der Vizier-gebrandeten APIs.
Die APIs
Vizier bietet mehrere APIs.
Die Vertex AI Vizier API (manchmal auch "GAPIC" genannt – nach dem verwendeten Protocol-Buffer-Client-Generator) ist um die Python-Klasse VizierServiceClient herum aufgebaut. Sie ist Generally Available und die künftige Vorzugsrichtung von Google. Damit ist sie die zentrale API, auf die Sie sich konzentrieren sollten.
Vizier ist außerdem als weitere API verfügbar, rückportiert auf die ältere GCP AI Platform und derzeit in der Beta-Phase. Diese API ist Discovery-basiert: In der Bibliothek selbst sehen Sie keine implementierten Funktionen, sondern rufen Funktionen auf, die über eine dynamische Wrapper-Schicht definiert sind. Das ist nicht so schwierig, wie es klingt: Mit Dokumentation, Experimenten und Beispielcode (auch meinem, siehe unten) lässt sie sich gut nutzen.
Die andere Vizier-Implementierung ist, wie erwähnt, das Open-Source-Projekt – falls Sie es selbst betreiben oder einfach den Code lesen möchten.
Code-Walkthrough
Es gibt nur wenige Codebeispiele dazu. Die offizielle Vizier-Dokumentation bietet tatsächlich nur ein einziges ML-Notebook für die rückportierte AI-Platform-Vizier-API – und keines für die bevorzugte Vertex AI Vizier API. Deshalb habe ich dieses Notebook erstellt. Es ist um einen normalen ML-Trainingsprozess herum aufgebaut, der intern im Container läuft (wobei Vizier, wie wir wissen, unabhängig davon ist, wie dieses Training durchgeführt wird). Sie können es anhand der Code-Kommentare durcharbeiten, die mit #[0], #[1] usw. nummeriert sind.
Darüber hinaus hat Ryan Holbrook dieses Open-Source-Notebook erstellt. Sie können auch diese Variante von mir nutzen, die das Ergebnis eines erfolgreichen Laufs zeigt und leicht angepasst wurde, damit sie ohne weitere Konfiguration durchgängig ausführbar ist.
Vielleicht haben Sie schon einmal einen Hyperparameter-Tuner-Dienst für Ihr ML eingesetzt: Vizier ist das – und mehr. Da Vizier nichts vom ML weiß – nicht einmal davon, dass Sie ML betreiben – können Sie es für jeden langsamen, kostenintensiven Optimierungsprozess nutzen. Als Service ist es robust, skalierbar und im Vergleich zu den teuren Prozessen, die es minimieren soll, nahezu kostenlos. Es lässt Ihnen die Freiheit, seinem Rat zu folgen oder nicht – und weist Ihnen in beiden Fällen den Weg zur schnellsten Konvergenz auf eine optimale Antwort.