ML-Produktionssysteme: Bereitstellungstests

Sie können das Einhorn-Modell, das Einhorn-Erscheinungen vorhersagt, bereitstellen. Bei der Bereitstellung sollte Ihre ML-Pipeline (Machine Learning) problemlos ausgeführt, aktualisiert und bereitgestellt werden. Wenn das Bereitstellen eines Modells nur so einfach wäre wie das Drücken einer großen Schaltfläche Bereitstellen. Leider sind für ein vollständiges System für maschinelles Lernen Tests für Folgendes erforderlich:

  • Eingabedaten werden validiert.
  • Validierung von Feature Engineering
  • Validierung der Qualität neuer Modellversionen
  • Validierung der Bereitstellungsinfrastruktur
  • Testen der Integration der Pipelinekomponenten

Viele Softwareentwickler bevorzugen die testgetriebene Entwicklung (Test-Driven Development, TDD). Bei der TDD schreiben Softwareentwickler Tests vor dem Schreiben des „echten“ Quellcodes. TDD kann beim maschinellen Lernen jedoch schwierig sein. Beispielsweise können Sie vor dem Trainieren Ihres Modells keinen Test schreiben, um den Verlust zu validieren. Stattdessen müssen Sie zuerst den erzielbaren Verlust während der Modellentwicklung ermitteln und dann neue Modellversionen anhand des erzielbaren Verlusts testen.

Unicorn-Modell

Dieser Abschnitt bezieht sich auf das Einhorn-Modell. Dazu sollten Sie Folgendes wissen:

Sie verwenden maschinelles Lernen, um ein Klassifizierungsmodell zu erstellen, mit dem die Wahrscheinlichkeit vorhergesagt wird, dass ein Einhorn erscheint. Ihr Datensatz enthält 10.000 Erwähnungen von Einhörnern und 10.000 Erwähnungen ohne Einhörner. Der Datensatz enthält den Standort, die Tageszeit, die Höhe, die Temperatur, die Luftfeuchtigkeit, die Baumbedeckung, das Vorhandensein eines Regenbogens und mehrere andere Merkmale.

Modellupdates mit reproduzierbarem Training testen

Vielleicht möchten Sie Ihr Einhornmodell weiter verbessern. Angenommen, Sie führen zusätzliches Feature Engineering für ein bestimmtes Merkmal durch und trainieren das Modell dann noch einmal, in der Hoffnung, bessere (oder zumindest dieselben) Ergebnisse zu erzielen. Leider ist es manchmal schwierig, das Modelltraining zu reproduzieren. Beachten Sie die folgenden Empfehlungen, um die Reproduzierbarkeit zu verbessern:

  • Den Zufallszahlengenerator deterministisch initialisieren. Weitere Informationen finden Sie unter Zufallsmix bei der Datengenerierung.

  • Modellkomponenten in einer festen Reihenfolge initialisieren, damit die Komponenten bei jedem Durchlauf dieselbe Zufallszahl vom Zufallszahlengenerator erhalten. ML-Bibliotheken erfüllen diese Anforderung in der Regel automatisch.

  • Ermitteln Sie den Durchschnitt mehrerer Ausführungen des Modells.

  • Verwenden Sie die Versionskontrolle auch für vorläufige Iterationen, damit Sie Code und Parameter ermitteln können, wenn Sie Ihr Modell oder Ihre Pipeline untersuchen.

Auch wenn Sie diese Richtlinien befolgen, können andere Quellen von Nichtdeterminismus weiterhin vorhanden sein.

Aufrufe der Machine Learning API testen

Wie teste ich Aktualisierungen von API-Aufrufen? Sie können Ihr Modell neu trainieren, was aber zeitaufwendig ist. Schreiben Sie stattdessen einen Unit-Test, um zufällige Eingabedaten zu generieren und einen einzelnen Schritt des Gradientenabstiegs auszuführen. Wenn dieser Schritt ohne Fehler abgeschlossen wird, haben die Updates der API Ihr Modell wahrscheinlich nicht beschädigt.

Integrationstests für Pipelinekomponenten schreiben

In einer ML-Pipeline können Änderungen an einer Komponente zu Fehlern in anderen Komponenten führen. Prüfen Sie, ob die Komponenten zusammenarbeiten, indem Sie einen Integrationstest schreiben, bei dem die gesamte Pipeline durchlaufen wird.

Neben kontinuierlichen Integrationstests sollten Sie Integrationstests auch ausführen, wenn Sie neue Modelle und neue Softwareversionen veröffentlichen. Die langsame Ausführung der gesamten Pipeline erschwert die Continuous-Integration-Tests. Wenn Sie Integrationstests schneller ausführen möchten, trainieren Sie mit einer Teilmenge der Daten oder mit einem einfacheren Modell. Die Details hängen von Ihrem Modell und Ihren Daten ab. Um eine kontinuierliche Abdeckung zu erhalten, passen Sie Ihre schnelleren Tests so an, dass sie mit jeder neuen Version des Modells oder der Software ausgeführt werden. In der Zwischenzeit werden Ihre langsamen Tests kontinuierlich im Hintergrund ausgeführt.

Modellqualität vor der Bereitstellung prüfen

Bevor Sie eine neue Modellversion in die Produktion übernehmen, sollten Sie die folgenden beiden Arten von Qualitätseinbußen testen:

  • Plötzliche Leistungseinbußen Ein Fehler in der neuen Version kann zu einer deutlich geringeren Qualität führen. Prüfen Sie die Qualität neuer Versionen anhand der vorherigen Version.

  • Langsame Leistungsminderung Ein Test auf plötzliche Leistungseinbußen erkennt möglicherweise keine langsame Verschlechterung der Modellqualität über mehrere Versionen hinweg. Achten Sie stattdessen darauf, dass die Vorhersagen Ihres Modells für einen Validierungsdatensatz einen festen Grenzwert einhalten. Wenn Ihr Validierungsdatensatz von den Live-Daten abweicht, aktualisieren Sie ihn und achten Sie darauf, dass Ihr Modell weiterhin denselben Qualitätsgrenzwert erfüllt.

Kompatibilität von Modell und Infrastruktur vor dem Bereitstellen prüfen

Wenn Ihr Modell schneller als Ihr Server aktualisiert wird, kann es unterschiedliche Softwareabhängigkeiten haben, was zu Inkompatibilitäten führen kann. Sorgen Sie dafür, dass die vom Modell verwendeten Vorgänge auf dem Server vorhanden sind, indem Sie das Modell in einer Sandbox-Version des Servers bereitstellen.