. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .
Unser Hauptaugenmerk als Data Scientists liegt auf der Verarbeitung von Daten sowie der Entwicklung und Verbesserung von Modellen für maschinelles Lernen. Es besteht die Ansicht, dass die Datenverarbeitung die zeitaufwändigste Phase im gesamten Projekt ist und die Genauigkeit des Modells den Erfolg des Informationsprodukts bestimmt. Die Branche befindet sich jedoch derzeit in einer Übergangsphase "von der Ära der Entdeckung zur Ära der Implementierung" (Supermächte auf dem Gebiet der künstlichen Intelligenz: China, das Silicon Valley und die neue Weltordnung in diesem Bereich werden von Li Kaifu diktiert). Das Bild erweitert sich jetzt und der Fokus verlagert sich vom Erstellen des Modells zur Bereitstellung des Modells für Benutzer als Service und von der Leistung des Modells zu seinem Geschäftswert. Das bekannteste Beispiel hierfür ist Netflix, das trotz der versprochenen signifikanten Leistungssteigerungen dieser Motoren nie die Siegermodelle seines 1-Millionen-Dollar-Algorithmus aufgrund technischer Kosten - WIRED - verwendet hat .
Vom Verständnis zur Realität (Folien von der Strata Data- Konferenz - Kubeflow erklärt: Tragbares maschinelles Lernen auf Kubernetes ) Die
Implementierung des Modells ist äußerst wichtig, und Informationsprodukte können jetzt als Softwareprodukte betrachtet werden, da sie eine ähnliche Projektstruktur, ein ähnliches Management und einen ähnlichen Lebenszyklus aufweisen. Daher haben wir das Recht, alle bekannten Techniken aus dem Bereich der Softwareentwicklung zu verwenden, um Modelle für maschinelles Lernen in der Produktion einzusetzen.
Die Containerisierung ist eine Methode, die häufig zum Bereitstellen von Softwareprodukten sowohl auf einer Cloud-Plattform als auch auf einem lokalen Server verwendet wird. Grundsätzlich geht es um Verpackungscode und Abhängigkeiten in einer Box, die als Container bezeichnet wird. Es folgt die Definition eines Containers im Kontext der Softwareentwicklung:
Auf der Docker- Site ist ein
Container eine Standard-Softwareeinheit, die Code und alle seine Abhängigkeiten so verpackt, dass eine Anwendung schnell und zuverlässig in verschiedenen Computerumgebungen ausgeführt werden kann.
Docker ist eine Plattform, mit der Sie die Entwicklung, Containerisierung und Bereitstellung unseres Modells für maschinelles Lernen in anderen Umgebungen beschleunigen können. In dieser Artikelserie werde ich Ihnen zeigen, wie Sie ein Modell speichern, als API-Endpunkt verwenden, Ihre ML-Anwendung containerisieren und auf der Docker-Engine ausführen.
Frage eins "Warum Docker?"
Bevor wir beginnen, müssen Sie sich mit einer Docker-ID registrieren, falls Sie keine haben, und diese ID dann verwenden, um Docker auf Ihren Computer herunterzuladen und zu installieren.
Als ich meinen Job bei der Bank anfing, wurde mir ein Projekt zugewiesen, das Datenverarbeitung beinhaltete, und das erste MVP (Minimum Viable Product) musste innerhalb eines Monats geliefert werden. Es klingt stressig, aber wir im Team verwenden die agile Methodik bei der Entwicklung aller wichtigen Produkte. Das Hauptziel dieses MVP war es, die Hypothese über die Praktikabilität und Wirksamkeit des Produkts zu testen (weitere Informationen zur agilen Methodik finden Sie im Buch von Eric Ries "Lean Startup" ). Mein Manager wollte, dass ich mein Modell auf seinem Laptop bereitstelle, es ausführe und zur Vorhersage verwende.
Wenn Sie sich alle Schritte vorgestellt haben, die ich unternehmen musste, um den Laptop des Managers für die Ausführung meines Projekts vorzubereiten, haben Sie möglicherweise viele Fragen, z. B.:
- Auf welchem Betriebssystem muss das Modell ausgeführt werden, da es Macbook und ThinkPad verwendet? Ich könnte ihn natürlich danach fragen, aber nehmen wir an, dass mein Chef in diesem Moment seines Lebens sehr böse war und nicht wollte, dass ich diese Informationen erfahre. (Dieser Gedanke soll Sie auf das Problem der Betriebssystemabhängigkeit aufmerksam machen, und mein Chef ist ein wirklich guter Mensch.)
- Zweite Frage: "Hat er Python installiert?" Wenn ja, welche Version, 2 oder 3? Welches: 2.6, 2.7 oder 3.7?
- Was ist mit den erforderlichen Paketen wie Scikit-Learn, Pandas und Numpy? Hat es die gleichen Versionen, die ich auf meinem Computer habe?
Angesichts all dieser Fragen musste ich dies mit seinem Computer tun, um mein Modell darauf laufen zu lassen.
- Installieren Sie Python.
- Installieren Sie alle Pakete.
- Richten Sie Umgebungsvariablen ein.
- Übertragen Sie den Code auf das Auto.
- Führen Sie den Code mit den erforderlichen Parametern aus.
Alle diese Schritte sind sehr aufwändig und es besteht die Gefahr der Inkompatibilität, wenn Code in verschiedenen Umgebungen ausgeführt wird.
Wenn Sie Docker bereits installiert haben und ausführen, können Sie ein Terminal öffnen und den folgenden Befehl ausführen:
docker run --rm -p 5000:5000 datascienceexplorer/classifier
Nach ein paar Minuten sollte in Ihrem Terminal etwas Ähnliches angezeigt werden:
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Öffnen Sie nun Ihren Lieblingsbrowser und gehen Sie zu dieser Adresse:
http://localhost:5000/apidocs/
Klicken Sie in der API auf die Vorhersagezeile und dann rechts auf die Schaltfläche zum Ausprobieren. Die Benutzeroberfläche sieht folgendermaßen aus:
Swagger-Seite für die API im Backend
Erinnern Sie sich an den Standard-Iris Flowers-Datensatz, mit dem Sie gespielt haben? Mit dieser kleinen Anwendung können Sie den Blumentyp anhand von Informationen zu einigen Messungen anhand eines Klassifizierungsmodells vorhersagen. Tatsächlich verwenden Sie mein Modell für maschinelles Lernen bereits als Dienst, und alles, was Sie installiert haben, ist nur Docker, und ich musste weder Python noch Pakete auf Ihrem Computer installieren.
Dies ist die Stärke von Docker. Es hilft mir, Abhängigkeitsprobleme zu lösen, damit ich meinen Code schnell in verschiedenen Umgebungen oder in diesem Fall auf Ihrem Computer bereitstellen kann.
DevOps Data Science
Hoffentlich habe ich Sie genug motiviert, um weiterzulesen. Wenn Sie diese Teile nur überspringen und direkt zum Code gehen möchten, ist dies in Ordnung, da Sie Ihr Modell für maschinelles Lernen mit Docker containerisieren und als verfügbar machen möchten Bedienung. Im Moment müssen wir jedoch ein wenig innehalten und alle Materialien über maschinelles Lernen und Docker beiseite legen, um über DevOps in Data Science nachzudenken und warum es dort überhaupt benötigt wird.
Was ist DevOps?
Das Ziel von Softwareentwicklern ist die rechtzeitige Bereitstellung von Code mit allen erforderlichen Funktionen bei einfacher Bedienung, Zuverlässigkeit, Skalierbarkeit, Netzwerkteil, Firewall, Infrastruktur usw. bleiben oft betriebliche Probleme. Aufgrund unterschiedlicher Endziele und wahrscheinlicher KPIs verstehen sich diese Teams normalerweise nicht unter einem Dach. Daher könnte ein DevOps-Spezialist als Verbindungsmann fungieren und diesen Teams bei der Zusammenarbeit helfen oder sogar die Verantwortung beider Parteien übernehmen, sodass das Endergebnis ein Team ist, das die Entwicklung von Anfang bis Ende leitet. Schließlich können Sie Ihren Computer nicht einfach dem Client übergeben, da der Code ordnungsgemäß funktioniert.
DevOps aus Wikipedia ist eine Sammlung von Methoden, die Softwareentwicklung und Informationstechnologiedienste kombinieren. Ziel ist es, den Lebenszyklus der Systementwicklung zu verkürzen und eine kontinuierliche Bereitstellung hochwertiger Software sicherzustellen.
Aber mit Jupyter Notebook bin ich glücklich !!!Data Scientists haben eine ähnliche Geschichte, denn auch hier können Sie Ihren Laptop, auf dem Jupyter Notebook ausgeführt wird, nicht einfach abholen und dem Kunden zur Verwendung geben. Wir brauchen eine Möglichkeit, das Modell so zu verwenden, dass es jederzeit und überall eine große Anzahl von Benutzern bedienen und mit minimalen Ausfallzeiten (Benutzerfreundlichkeit, Zuverlässigkeit, Skalierbarkeit) steigen kann.
Aus diesem Grund suchen Unternehmen nach Datenanalysten mit DevOps-Kenntnissen, die ihre Modelle für maschinelles Lernen in der Produktion bereitstellen und bereitstellen und dem Unternehmen geschäftlichen Nutzen bringen können, anstatt nur Konzepte zu beweisen und sich auf die Verbesserung der Modellgenauigkeit zu konzentrieren. Solche Leute werden Einhörner genannt.
Es gibt viele Möglichkeiten, ein Modell für maschinelles Lernen bereitzustellen, aber Docker ist ein leistungsstarkes Tool, das Ihnen die Flexibilität bietet, die Sie benötigen, und gleichzeitig die Robustheit und Kapselung Ihres Codes beibehält. Natürlich werden wir unsere Kunden nicht bitten, Docker zu installieren und ein Terminal zu öffnen, um es auszuführen. Diese Containerisierungsphase wird jedoch schließlich zur Grundlage, wenn Sie mit realen Projekten arbeiten, bei denen Sie Ihre Modelle auf Cloud-Plattformen oder lokalen Servern bereitstellen müssen.
Speichern des trainierten Modells
Zurück an der Universität haben wir erfahren, dass das Data Science-Projekt aus sechs Phasen besteht, wie im Bild unten gezeigt. Wenn die Automatisierung und Bereitstellung des Modells für die Produktion unser oberstes Ziel ist, wie können wir das Modell in die Bereitstellungsphase „bringen“?
Sechs Phasen eines Data Science-Projekts
Der einfachste Weg, den Sie sich vorstellen können, besteht darin, alles aus unserem Notizbuch zu kopieren, in eine .py-Datei einzufügen und auszuführen. Jedes Mal, wenn wir eine Prognose erstellen müssen, führen wir diese Datei aus und trainieren das Modell erneut mit denselben Daten. Wenn dieser Ansatz für einfache Modelle mit einem kleinen Trainingsdatensatz irgendwie anwendbar ist, ist er für komplexe Modelle mit vielen Trainingsdaten nicht effektiv (überlegen Sie, wie lange Sie brauchen, um ein ANN- oder CNN-Modell zu trainieren). Dies bedeutet, dass ein Benutzer, wenn er eine Modellanforderung zur Vorhersage einreicht, einige Minuten bis mehrere Stunden warten muss, um das Ergebnis zu erhalten, da es lange dauern wird, bis die Modellschulungsphase abgeschlossen ist.
Wie lagere ich das Modell sofort nach dem Training?
In den meisten Fällen wird ein Modell für maschinelles Lernen in Python während der Codeausführung als Python-Objekt im Speicher gespeichert und nach Abschluss des Programms gelöscht. Wenn wir dieses Objekt unmittelbar nach dem Training des Modells auf der Festplatte speichern könnten, könnten wir das nächste Modell, wenn wir das nächste Mal eine Vorhersage treffen müssen, einfach in den Speicher laden und nicht die Initialisierungs- und Trainingsphasen durchlaufen. In der Informatik wird der Prozess der Umwandlung eines Objekts in einen Bytestrom zur Speicherung als Serialisierung bezeichnet . In Python kann dies problemlos mit einem Paket namens pickle durchgeführt werden , das standardmäßig native Python-Unterstützung bietet. Python-Entwickler nennen "Beizen" auch den Prozess des Serialisierens eines Objekts mit Beizen ....
In Jupyter Notebook können Sie das Modellobjekt (in meinem Fall "knn") einfach in einer pkl- Datei speichern, die sich im selben Verzeichnis wie der Code befindet:
import pickle
with open('./model.pkl', 'wb') as model_pkl:
pickle.dump(knn, model_pkl)
Speichern des Modells im aktuellen Verzeichnis
Mein Notizbuch empfehle ich von hier aus zu nehmen , damit wir weiterhin ähnliche Ergebnisse erzielen. Alternativ können Sie Ihr eigenes Modell verwenden, aber stellen Sie sicher, dass Sie über alle erforderlichen Pakete sowie die richtigen Modelleingaben verfügen.
Im ersten Schritt haben Sie das trainierte Modell gespeichert. Weiterhin werden wir das Modell für Prognosen wiederverwenden, aber mehr dazu im zweiten Teil des Artikels.