Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 87

Nimm das System in Betrieb, überwache und warte es

Оглавление

Sie haben die Freigabe für die Inbetriebnahme! Sie müssen Ihre Lösung nun fit machen für die Produktivumgebung (zum Beispiel den Code ordentlich machen, Dokumentation und Tests schreiben und so weiter). Dann können Sie Ihr Modell in Ihre Produktivumgebung deployen. Eine Möglichkeit dafür besteht darin, das trainierte Scikit-Learn-Modell zu sichern (beispielsweise mit joblib) – einschließlich der vollständigen Vorverarbeitungs- und Vorhersagepipeline –, dann dieses trainierte Modell in Ihrer Produktivumgebung zu laden und es durch den Aufruf der Methode predict() zu verwenden. Vielleicht wird das Modell ja auf einer Website genutzt: Der Anwender gibt Daten über einen neuen Bezirk ein und klickt auf den Button Preis schätzen. Dadurch wird eine Anfrage mit den Daten an den Webserver geschickt, der diese an Ihre Webanwendung weiterleitet, und Ihr Code ruft dort einfach die Methode predict() des Modells auf (Sie werden das Modell nicht bei jedem Einsatz laden wollen, sondern einmalig, wenn der Server startet). Alternativ können Sie das Modell auch in einem eigenen Webservice verpacken, den Ihre Webanwendung über eine REST-API23 aufrufen kann (siehe Abbildung 2-17). Das erleichtert das Aktualisieren des Modells, ohne dass die Hauptanwendung unterbrochen werden muss. Auch wird das Skalieren so einfacher, da Sie so viele Webservices wie nötig starten und die Requests von Ihrer Webanwendung darauf per Load Balancing verteilen können. Zudem ist es so möglich, Ihre Webanwendung in einer beliebigen Programmiersprache zu entwickeln, statt auf Python angewiesen zu sein.

Abbildung 2-17: Ein Modell, das als Webservice deployt und von einer Webanwendung genutzt wird

Eine andere verbreitete Strategie besteht darin, Ihr Modell in die Cloud zu deployen – zum Beispiel auf die Google Cloud AI Platform (früher bekannt als Google Cloud ML Engine): Speichern Sie Ihr Modell einfach mithilfe von joblib, laden Sie es auf Google Cloud Storage (GCS), wechseln Sie zur Google Cloud AI Platform, erstellen Sie eine neue Modellversion und lassen Sie diese auf die GCS-Datei zeigen. Das ist alles! Sie erhalten so einen einfachen Webservice, der Ihnen Load Balancing und Skalieren abnimmt. Er erwartet JSON-Requests mit den Eingabedaten (zum Beispiel von einem Bezirk) und gibt JSON-Responses mit den Vorhersagen zurück. Sie können diesen Webservice dann auf Ihrer Website verwenden (oder welche Produktivumgebung Sie sonst so nutzen). Wie wir in Kapitel 19 sehen werden, unterscheidet sich das Deployen von TensorFlow-Modellen auf AI Platform nicht sonderlich vom Deployen von Scikit-Learn-Modellen.

Aber mit dem Deployen ist die Geschichte noch nicht zu Ende. Sie müssen auch Code zur Überwachung schreiben, damit Sie die Leistung des laufenden Systems in regelmäßigen Abständen prüfen können und ein Alarm ausgelöst wird, wenn sie abfällt. Dies ist wichtig, damit Sie nicht nur plötzliche Ausfälle, sondern auch einen allmählichen Leistungsverfall erfassen. Letztere Situation entsteht häufig, da Modelle mit der Zeit dazu tendieren, zu »verrotten«: Die Welt dreht sich weiter, und wenn das Modell mit den Daten aus dem letzten Jahr trainiert wurde, passt es vielleicht nicht zu denen von heute.

Auch ein Modell, das dafür trainiert wurde, Bilder von Katzen und Hunden zu klassifizieren, muss eventuell regelmäßig nachtrainiert werden – nicht weil Katzen und Hunde über Nacht mutieren, sondern weil sich Kameras, Bildformate, Schärfe, Helligkeit oder Seitenverhältnisse ändern. Und vielleicht mögen die Menschen im nächsten Jahr lieber andere Rassen, oder sie entscheiden sich dazu, ihre Haustiere mit kleinen Hütchen zu verkleiden – wer weiß.

Sie müssen also die Leistung Ihres Modells überwachen. Aber wie tun Sie das? Nun, das kommt darauf an. In manchen Fällen kann sie aus Folgemetriken abgeleitet werden. Ist Ihr Modell beispielsweise Teil eines Empfehlungssystems und schlägt es Produkte vor, an denen die Benutzer interessiert sein könnten, ist es leicht, die Anzahl an empfohlenen Produkten zu überwachen, die jeden Tag verkauft werden. Fällt diese Zahl (verglichen mit den nicht empfohlenen Produkten), ist der Hauptverdächtige das Modell. Es kann daran liegen, dass die Datenpipeline defekt ist, oder vielleicht muss das Modell mit frischen Daten neu trainiert werden (wie wir gleich noch besprechen werden).

Aber es ist nicht immer möglich, die Leistung des Modells ohne menschliche Analyse zu bestimmen. Stellen Sie sich beispielsweise vor, Sie hätten ein Modell zur Bildklassifikation trainiert (siehe Kapitel 3), um defekte Produkte in der Herstellung zu erkennen. Wie können Sie gewarnt werden, wenn die Leistung des Modells abfällt, bevor Tausende von defekten Produkten an Ihre Kunden geliefert werden? Eine Möglichkeit ist, menschlichen Bewertern Beispiele all der Bilder zu schicken, die das Modell klassifiziert (insbesondere der Bilder, bei denen sich das Modell nicht so sicher ist). Abhängig von der Aufgabe müssen die Bewerter eventuell Experten sein, aber manchmal sind Spezialisten gar nicht notwendig, und es bieten sich Arbeiter auf einer Plattform für Crowdsourcing an (zum Beispiel Amazon Mechanical Turk). Bei manchen Anwendungen kann es sich auch um die Anwender selbst handeln, die beispielsweise über Umfragen oder umfunktionierte Captchas24 Rückmeldung geben.

Auf jeden Fall müssen Sie ein Überwachungssystem (mit oder ohne menschliche Beurteiler) zum Evaluieren des Modells aufsetzen und auch alle relevanten Prozesse einrichten, um zu definieren, was bei Fehlern zu tun ist und wie man sich auf sie vorbereitet. Leider kann das ziemlich viel Arbeit bedeuten. Tatsächlich ist es meist sogar mehr Arbeit, als ein Modell zu bauen und zu trainieren.

Entwickeln sich die Daten weiter, werden Sie regelmäßig Ihre Datensätze aktualisieren und Ihr Modell neu trainieren müssen. Sie sollten den Prozess so weit wie möglich zu automatisieren versuchen. Hier ein paar Schritte, die Sie automatisieren können:

 Regelmäßig neue Daten einsammeln und labeln (zum Beispiel mithilfe menschlicher Beurteiler).

 Ein Skript schreiben, um das Modell zu trainieren und die Hyperparameter automatisch genauer anzupassen. Das Skript kann abhängig von Ihren Anforderungen automatisiert laufen – zum Beispiel jeden Tag oder jede Woche.

 Ein weiteres Skript schreiben, das sowohl das neue wie auch das alte Modell gegen den aktualisierten Testdatensatz evaluiert und das Modell in die Produktivumgebung deployt, wenn die Leistung nicht nachgelassen hat (und wenn sie nachlässt, stellen Sie sicher, dass Sie auch ermitteln, woran das liegt).

Sie sollten auch die Qualität der Eingabedaten evaluieren. Manchmal fällt die Leistung wegen eines schlechten Signals leicht ab (z.B. ein Sensor mit Fehlfunktion, der zufällige Werte sendet, oder eine altbackene Ausgabe eines anderen Teams), es kann aber lange dauern, bis Ihre Überwachung deswegen einen Alarm auslöst. Wenn Sie die Eingabedaten des Systems überwachen, können Sie dies früh feststellen. Sie könnten beispielsweise eine Warnung ausgeben lassen, wenn immer mehr Eingangsdaten ein Merkmal fehlt, wenn deren Mittelwert oder Standardabweichung zu weit vom Trainingsdatensatz wegdriftet oder wenn ein kategorisches Merkmal plötzlich neue Kategorien besitzt.

Und stellen Sie auch sicher, dass Sie Backups von jedem erstellten Modell haben und die Prozesse und Tools bereitstehen, um schnell zu einem früheren Modell zurückkehren zu können, falls das neue Modell aus irgendwelchen Gründen fehlerhaft arbeitet. Durch das Vorhandensein von Backups können Sie auch leicht neue Modelle mit bestehenden vergleichen. Und Sie sollten Backups jeder Version Ihrer Datensätze aufheben, sodass Sie zu einem älteren Datensatz zurückkehren können, wenn das neue einmal fehlerhaft ist (weil beispielsweise die neu hinzugefügten Daten nur noch aus Ausreißern bestehen). Mit den Backups Ihrer Datensätze können Sie außerdem jedes Modell gegen jeden früheren Datensatz evaluieren.

Sie können diverse Untermengen des Testdatensatzes erzeugen, um zu ermitteln, wie gut Ihr Modell mit bestimmten Teilen der Daten funktioniert. So kann es beispielsweise sinnvoll sein, eine Untermenge nur mit den aktuellsten Daten zu besitzen oder einen Testdatensatz für bestimmte Eingabearten (zum Beispiel Bezirke im Landesinneren im Gegensatz zu denen in Küstennähe). Damit erhalten Sie ein besseres Verständnis der Stärken und Schwächen Ihres Modells.

Wie Sie sehen, gehört zu Machine Learning ziemlich viel Infrastruktur – seien Sie also nicht überrascht, wenn Ihr erstes ML-Projekt viel Aufwand und Zeit erfordert, um es in den Produktivbetrieb zu bringen. Ist die Infrastruktur einmal eingerichtet, wird es zum Glück deutlich schneller werden, von einer Idee bis in die Produktion zu kommen.

Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow

Подняться наверх