Zephyrnet-Logo

Eine vollständige End-to-End-Bereitstellung eines Machine-Learning-Algorithmus in einer Live-Produktionsumgebung

Datum:

By Graham Harrison, Group Director für IT, Informationsmanagement und Projekte bei der Lincoln College Group



Photo by Fotis Fotopoulos on Unsplash

Einleitung

 
 
Im Oktober 2021 habe ich einen Artikel zum Thema „Deploying Machine Learning and Data Science Projects as Public Web Applications“ verfasst (vgl https://towardsdatascience.com/deploying-machine-learning-and-data-science-projects-as-public-web-applications-3abc91088c11).

In diesem Artikel habe ich untersucht, wie Jupyter Notebooks als öffentlich verfügbare Web-Apps mithilfe von Voila, GitHub und mybinder bereitgestellt werden.

Nach der Veröffentlichung des Artikels erhielt ich Feedback von Lesern, die daran interessiert waren, wie man die Produktionsbereitstellung weiter vorantreiben kann, um zu untersuchen, wie ein maschineller Lernalgorithmus vollständig in einer Live-Produktionsumgebung bereitgestellt werden kann, damit er auf plattformunabhängige Weise „konsumiert“ werden kann und daraus entstand die idee für diesen artikel …

Schritt 1: Entwickeln Sie einen maschinellen Lernalgorithmus

 
 
Der erste Schritt besteht darin, den maschinellen Lernalgorithmus zu entwickeln, den wir einsetzen möchten. In der realen Welt könnte dies viele Wochen oder Monate Entwicklungszeit und viele Iterationen über die Schritte der Data-Science-Pipeline hinweg umfassen, aber für dieses Beispiel werde ich einen grundlegenden ML-Algorithmus entwickeln, da der Hauptzweck dieses Artikels darin besteht, einen Weg dazu zu finden Bereitstellen eines Algorithmus zur Verwendung durch „Verbraucher“.

Ich habe einen Datensatz von kaggle ausgewählt (https://www.kaggle.com/prathamtripathi/drug-classification), das vom Autor mit einer „CC0: Public Domain“-Lizenz erstellt wurde, was bedeutet, dass es kein Urheberrecht hat und dass es ohne Einschränkungen in anderen Werken verwendet werden darf (siehe https://creativecommons.org/publicdomain/zero/1.0/ für Details).

Der Python-Code zur Entwicklung eines prädiktiven maschinellen Lernalgorithmus zur Klassifizierung von Medikamentenverschreibungen unter Berücksichtigung einer Reihe von Patientenkriterien lautet wie folgt:

0.99 0.012247448713915901

An diesem Punkt können wir sehen, dass wir einen maschinellen Lernalgorithmus haben, der darauf trainiert ist, Arzneimittelverschreibungen vorherzusagen, und dass eine Kreuzvalidierung (dh Faltung der Daten) verwendet wurde, um die Modellgenauigkeit auf 99 % zu bewerten.

So weit, ist es gut …

Wir werden dieses Modell in einer Produktionsumgebung bereitstellen, und obwohl es sich um ein einfaches Beispiel handelt, möchten wir unser Modell nicht jedes Mal in der Live-Umgebung neu trainieren müssen, wenn ein Benutzer eine Medikamentenverschreibung vorhersagen möchte. Daher ist unser nächster Schritt die Erhaltung den Zustand unseres trainierten Modells mit pickle ...

Wann immer wir nun das trainierte Modell verwenden möchten, müssen wir einfach seinen Zustand aus der neu laden model.pkl Datei, anstatt den Trainingsschritt erneut auszuführen.

Schritt 2: Machen Sie eine individuelle Vorhersage aus dem trainierten Modell

 
 
Ich werde in Schritt 2 ein paar Annahmen treffen –

  1. Verbraucher des maschinellen Lernalgorithmus haben die Anforderung, Vorhersagen für einzelne Patienten und nicht für eine Gruppe von Patienten zu treffen.
  2. Diese Verbraucher möchten mit dem Algorithmus kommunizieren, indem sie textähnliche Werte für die Parameter verwenden (z. B. Blutdruck = „NORMAL“ oder „HOCH“ und nicht ihre etikettencodierten Äquivalente wie 0 und 1.

Daher werden wir damit beginnen, zu überprüfen, was die Werte für alle Label-codierten kategorialen Merkmale sind, die als Eingabe für den Algorithmus verwendet werden …

Sex ['F', 'M'] [0, 1] BP ['HIGH', 'LOW', 'NORMAL'] [0, 1, 2] Cholesterol ['HIGH', 'NORMAL'] [0, 1] Drug ['DrugY', 'drugC', 'drugX', 'drugA', 'drugB'] [0, 3, 4, 1, 2]

Und da haben wir es, eine Liste aller kategorialen Merkmale mit den eindeutigen Werten, die in den Daten erscheinen, und den entsprechenden numerischen Werten, die durch transformiert wurden LabelEncoder().

Ausgestattet mit diesem Wissen können wir eine Reihe von Wörterbüchern bereitstellen, die die textähnlichen Werte (z. B. „HIGH“, „LOW“ usw.) in ihre codierten Äquivalente abbilden, und dann eine einfache Funktion entwickeln, um eine individuelle Vorhersage wie folgt zu treffen …

Diese Implementierung kann dann verifiziert werden, indem die Funktion aufgerufen wird, um einige Vorhersagen basierend auf Werten aus den Originaldaten zu treffen, damit wir wissen, was die Ausgaben sein sollten …

Beachten Sie, dass unsere predict_drug Die Funktion muss das Modell nicht trainieren, sondern „rehydriert“ das Modell, dessen Zustand zuvor von gespeichert wurde pickle in die model.pkl Datei und wir können aus der Ausgabe sehen, dass die Vorhersagen für die Medikamentenempfehlung korrekt sind.

Schritt 3: Entwickeln Sie einen Webdienst-Wrapper

 
 
Bisher sieht alles gut aus, aber hier liegt das Hauptproblem: Clients oder Verbraucher unseres maschinellen Lernalgorithmus müssen in der Programmiersprache Python geschrieben sein, und nicht nur das, wir müssen die Möglichkeit haben, die Anwendung zu ändern und zu modifizieren.

Was ist, wenn eine Drittanbieteranwendung unseren Algorithmus verwenden und konsumieren möchte und was, wenn diese Drittanbieteranwendung nicht in Python geschrieben ist? Vielleicht ist es in Java, C#, JavaScript oder einer anderen Nicht-Python-Sprache geschrieben.

Hier kommen Webservices ins Spiel. Ein Webservice ist ein „Wrapper“, der Anfragen von Clients und Verbrauchern mit den Befehlen http GET und http PUT empfängt, den Python-Code aufruft und das Ergebnis als HTML-Antwort zurückgibt.

Das bedeutet, dass die Clients und Aufrufer nur in der Lage sein müssen, HTTP-Anforderungen zu formulieren, und fast alle Programmiersprachen und -umgebungen haben eine Möglichkeit, dies zu tun.

In der Python-Welt gibt es mehrere verschiedene Ansätze, aber der, den ich ausgewählt habe, ist zu verwenden flask um unseren Webservice-Wrapper zu erstellen.

Der Code ist nicht sehr kompliziert, aber es kann schwierig sein, VS Code so zu konfigurieren, dass Entwickler eine Flask-Anwendung debuggen können. Wenn Sie ein Tutorial für diesen Schritt benötigen, lesen Sie bitte meinen Artikel mit dem Titel „So debuggen Sie Flask-Anwendungen in VS-Code“, der hier zu finden ist — https://towardsdatascience.com/how-to-debug-flask-applications-in-vs-code-c65c9bdbef21.

Hier ist der Wrapper-Code für den Webdienst …

Starten Sie die VS Code IDE von der Anaconda Navigator Seite (oder indem Sie Anaconda Command Prompt starten und eingeben code). Dadurch wird VS Code mit der Conda-Basisumgebung gestartet, die zum Ausführen und Debuggen der Flask-Anwendung erforderlich ist.

Der Webdienst kann aus VS Code heraus gestartet werden, indem Sie auf „Ausführen und debuggen“ klicken und dann „Flask starten und eine Flask-Webanwendung debuggen“ auswählen –



Bild vom Autor

 

Wenn alles nach Plan gelaufen ist, sollte die letzte Meldung im TERMINAL-Fenster stehen Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) was anzeigt, dass Ihre Flask-Webanwendung betriebsbereit ist.

Sie sollten Ihren Webdienst jetzt mit einer dieser Methoden testen –

  1. Öffnen Sie einen Webbrowser und geben Sie Folgendes ein: http://127.0.0.1:5000/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20
  2. Öffnen Sie eine Anaconda-Eingabeaufforderung und geben Sie Folgendes ein: curl -X GET "http://127.0.0.1:5000/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20"



Bild vom Autor

 

Wenn Sie mehr über die Entwicklung erfahren möchten flask Anwendungen und Webdienste sind diese Artikel ein guter Ausgangspunkt –

Schritt 4: Stellen Sie den Webdienst in Microsoft Azure bereit

 
 
Wir haben jetzt einen prädiktiven maschinellen Lernalgorithmus, der Medikamentenverschreibungen mit 99-prozentiger Genauigkeit vorhersagen kann, wir haben eine Hilfsfunktion, die individuelle Vorhersagen treffen kann, und wir haben einen Webservice-Wrapper, der es ermöglicht, diese Komponenten über einen Browser oder eine Befehlszeile aufzurufen.

All dies ist jedoch weiterhin nur aus der Entwicklungsumgebung aufrufbar. Der nächste Schritt besteht darin, alles in der Cloud bereitzustellen, damit Clients den Webdienst über das öffentliche Internet „verbrauchen“ können.

Es gibt viele verschiedene öffentliche Dienste, die für die Bereitstellung von Web-Apps verfügbar sind, einschließlich –

Ich habe mich für Azure entschieden, weil es kostenlos (für ein Einstiegskonto), benutzerfreundlich, schnell und vollständig in VS Code integriert ist, was meine bevorzugte Entwicklungsumgebung ist.

Schritt 4.1: Fügen Sie VS Code die Azure App Service-Erweiterung hinzu

 
 
Wechseln Sie Aufgaben in VS Code, gehen Sie zu „Erweiterungen“ (Strg+Umschalt_X) und fügen Sie die Erweiterung „Azure App Service“ hinzu. Sobald die Erweiterung hinzugefügt wurde, sehen Sie ein neues Azure-Symbol in der Aktivitätsleiste –



Bild vom Autor

Schritt 4.1: Erstellen Sie ein Azure-Konto

 
 
Sie müssen über ein Konto verfügen, um mit Bereitstellungen in der Azure-Cloud zu beginnen, und Sie müssen während des Registrierungsprozesses Kreditkartendaten angeben. Es werden Ihnen jedoch keine Kosten in Rechnung gestellt, es sei denn, Sie entscheiden sich ausdrücklich dafür, von der kostenlosen Lizenz abzuweichen.

Sie können den Anweisungen auf dieser Seite folgen — https://azure.microsoft.com/en-gb/free/ um Ihr kostenloses Azure-Konto über einen Browser zu erstellen, aber am einfachsten klicken Sie auf das neue Azure-Symbol in der Aktivitätsleiste und wählen Sie „Kostenloses Azure-Konto erstellen“ (oder „Bei Azure anmelden“, wenn Sie bereits eines haben) –



Bild vom Autor

Schritt 4.3: Erstellen Sie eine Azure-Web-App

 
 
Im nächsten Schritt erstellen Sie eine Azure-Web-App zum Hosten Ihrer Anwendung, indem Sie im Fenster „APP SERVICE“ auf das „+“-Zeichen klicken. Sie werden aufgefordert, einen Namen für die App einzugeben. Der Name wird in der endgültigen URL verwendet und muss eindeutig sein, aber ansonsten ist der Name nicht besonders wichtig.

Wenn Sie nach einem Lizenztyp gefragt werden, wählen Sie „Free Trial“ – Ihre Web-App wird jetzt erstellt und Sie können sie bereitstellen.



Bild vom Autor

Schritt 4.4 Erstellen Sie eine Bereitstellungsdatei „requirements.txt“.

 
 
Bevor Sie die App in Azure bereitstellen können, müssen Sie eine „requirements.txt“-Datei im selben Ordner wie Ihre Flask-Web-App erstellen, die eine Liste aller Abhängigkeiten und Bibliotheken enthält, die Azure installieren muss, um Ihre Anwendung auszuführen. Dieser Schritt ist wichtig, da die App abstürzt, wenn sich die Bibliotheken nicht in der bereitgestellten Umgebung befinden.

Die Inhalte von requirements.txt für unsere App sind wie folgt –



Bild vom Autor

 

Einige Punkte zu beachten –

  1. Die Bibliotheksnamen müssen genau mit dem übereinstimmen, was Sie eingeben würden, wenn Sie beispielsweise mit pip installieren würden pip install Flask.
  2. Beachten Sie, dass Flask hat ein großes „F“. Dies liegt daran, dass Flask auf diese Weise ungewöhnlich groß geschrieben wird. Normalerweise werden Bibliotheken alle in Kleinbuchstaben geschrieben.
  3. sklearn ist erforderlich, um die rehydrierte auszuführen model.pkl. Obwohl sklearn und DecisionTreeClassifier nicht explizit im Code referenziert werden, für die sie benötigt werden model.fit also wenn sklearn weggelassen wird, stürzt die App ab.
  4. Ein Verweis auf pickle ist nicht erforderlich, da diese Bibliothek Teil der zentralen Python-Installation ist. Wenn Sie es einschließen pickle Die Bereitstellung stürzt ab, da Sie sie nicht ausführen können pip install pickle.

Wenn Sie sich an diese Regeln halten, funktioniert Ihre Bereitstellung, und alle Fehlermeldungen sind in der Regel informativ genug, um die Probleme mit ein wenig Internetrecherche zu lösen.

Schritt 4.5 Stellen Sie Ihre App in Azure bereit

 
 
Wenn Sie die Schritte bisher befolgt haben, haben Sie jetzt eine Flask-App in VS Code. Ihre App-Code-Datei wird aufgerufen app.py und der Anwendungsname ist app. Die Flask-App wurde auf einem lokalen Entwicklungswebserver getestet.

Sie haben die VS Code Azure App Extension installiert und damit ein kostenloses Microsoft Azure-Konto sowie eine Azure-Webanwendung erstellt.

Sie sollten Ihre Flask-Anwendung in VS Code geöffnet haben und alles bereit haben, um Ihre Anwendung in der Cloud bereitzustellen.

Klicken Sie dazu einfach auf den Namen der Web-App neben dem blauen Kreissymbol und dann auf das Wolkensymbol neben dem „+“-Zeichen.

Wenn Sie dazu aufgefordert werden, wählen Sie Folgendes aus:

  • Wählen Sie den bereitzustellenden Standardordner aus
  • Wählen Sie das Abonnement „Free Trial“.
  • Wählen Sie den Namen der von Ihnen erstellten Webanwendung aus
  • Wenn Sie zum Überschreiben aufgefordert werden, wählen Sie „Bereitstellen“
  • Wenn Sie gefragt werden, ob Sie „Immer bereitstellen …“ auswählen möchten, wählen Sie „Vorerst überspringen“.
  • Wenn die Bereitstellung beginnt, klicken Sie auf „Ausgabefenster“.

Lehnen Sie sich jetzt zurück und machen Sie einen Kaffee, während die App bereitgestellt wird –



Bild vom Autor

 

Wenn die Bereitstellung abgeschlossen ist, klicken Sie auf „Website durchsuchen“ und Sie werden zur richtigen URL weitergeleitet, die ausgeführt wird app.route("/") Funktion.

Fügen Sie einfach dieselben URL-Parameter hinzu, die wir zum Testen der lokalen Bereitstellung verwendet haben, und Sie sehen die Ausgabe einer vollständig bereitgestellten Webanwendung! –

https://graham-harrison68-web03.azurewebsites.net/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20



Bild vom Autor

 

Ein Hinweis: Nach einer Weile geht die Azure-App in den Ruhezustand und der erste Anruf danach dauert sehr lange.

Wenn Sie sich für ein Upgrade auf ein kostenpflichtiges Azure-Abonnement entscheiden, gibt es eine Option, um die App aktualisiert und „wach“ zu halten, aber im kostenlosen Abonnement kann die schlafbedingte Verzögerung nicht vermieden werden, da dieses Abonnement für Testzwecke gedacht ist und als solches gilt ein paar Einschränkungen.

Schritt 5: Erstellen einer Clientanwendung zur Nutzung des von Azure bereitgestellten Webdiensts

 
 
An diesem Punkt kann jede Programmiersprache oder Umgebung, die Webanforderungen aufrufen kann, den bereitgestellten Webdienst mit nur wenigen Codezeilen aufrufen.

Wir haben damit begonnen, dass Nicht-Python-Umgebungen wie C#, JavaScript usw. alle verwendet werden können, aber ich werde dieses Beispiel abschließen, indem ich etwas Code schreibe, um die bereitgestellte App von einem Python-Client aus aufzurufen ipywidgets -



Bild vom Autor

 

Wenn Sie mit den Standardwerten auf „Verschreiben“ klicken, sollte die Empfehlung für „drugC“ lauten.

Ändere das Alter auf 60 und Na auf K bis 20 und „DrugY“ sollte verschrieben werden. Setzen Sie das Alter zurück auf 47, Na auf K zurück auf 14 und ändern Sie BP auf „HIGH“ und Medikament A sollte verschrieben werden.

Diese einfachen Tests beweisen, dass der von Azure gehostete Webdienst, der einen entscheidungsbaumbasierten prädiktiven maschinellen Lernalgorithmus verwendet, vollständig in der öffentlichen Cloud bereitgestellt wird und von jeder Entwicklungsumgebung aufgerufen werden kann, die in der Lage ist, eine auszuführen http GET Befehl und ist voll funktionsfähig End-to-End.

Zusammenfassung

 
 
Es sind einige Schritte erforderlich, aber unter Verwendung leicht verfügbarer Bibliotheken und kostenloser Tools, darunter scikit-learn, Pickle, Flask, Microsoft Azure und ipywidgets, haben wir eine voll funktionsfähige, öffentlich verfügbare Cloud-Bereitstellung eines maschinellen Lernalgorithmus und eines voll funktionsfähigen Clients erstellt um den Webdienst aufzurufen und zu konsumieren und die Ergebnisse anzuzeigen.

Vielen Dank für das Lesen!

 
 
Wenn Sie diesen Artikel gerne gelesen haben, schauen Sie sich doch meine anderen Artikel an https://grahamharrison-86487.medium.com/?

Außerdem würde ich gerne von Ihnen hören, um Ihre Meinung zu diesem Artikel, einem meiner anderen Artikel oder irgendetwas anderem im Zusammenhang mit Datenwissenschaft und Datenanalyse zu erfahren.

Wenn Sie sich mit mir in Verbindung setzen möchten, um eines dieser Themen zu besprechen, suchen Sie mich bitte auf LinkedIn auf – https://www.linkedin.com/in/grahamharrison1 oder schreiben Sie mir gerne eine E-Mail an [E-Mail geschützt] .

Wenn Sie den Autor und tausende andere, die weltweit zum Schreiben von Artikeln beitragen, durch ein Abonnement unterstützen möchten, verwenden Sie bitte diesen Link — https://grahamharrison-86487.medium.com/membership. Hinweis: Der Autor erhält einen Anteil der Gebühren, wenn Sie sich über diesen Link anmelden.

 
Bio: Graham Harrison ist Group Director of IT, Information Management & Projects für die Lincoln College Group, wo er für alle Daten- und Technologiekapazitäten in Großbritannien, Saudi-Arabien und China verantwortlich ist. Graham ist außerdem MD und Gründer einer datenwissenschaftlichen Beratungsfirma namens The Knowledge Ladder, Komiteemitglied des Lincolnshire Cyber ​​Security Forum und Digital Ambassador für die Greater Lincolnshire and Rutland Branch des Institute of Directors. Graham hat kürzlich eine akademische Forschung zur Demokratisierung der Datenwissenschaft abgeschlossen und setzt sich leidenschaftlich für die Bereitstellung zugänglicher, erschwinglicher und agiler Datenwissenschaft für alle Organisationen ein, unabhängig von Größe, Branche oder Vorerfahrung. Besuch https://www.theknowledgeladder.co.uk/ und https://www.youtube.com/watch?v=cFt03rny07Y für weitere Einzelheiten.

Original. Mit Genehmigung erneut veröffentlicht.

Related:

Quelle: https://www.kdnuggets.com/2021/12/deployment-machine-learning-algorithm-live-production-environment.html

spot_img

Neueste Intelligenz

spot_img