Containerisierter Machine-Learning-Workflow mit Docker

Inhalt

Vor Jahren, virtuelle Maschinen (VM) Sie waren das Hauptwerkzeug zum Hosten einer Anwendung, da es den Code und die Konfigurationsdateien zusammen mit den Abhängigkeiten kapselt, die zum Ausführen einer Anwendung erforderlich sind. Bietet die gleiche Funktionalität wie ein physisches System.

Um mehrere Anwendungen auszuführen, wir müssen mehrere virtuelle Maschinen starten und eine Reihe von virtuellen Maschinen verwalten, Wir brauchen einen Hypervisor.

container-vm-whatcontainer_2-7503589

Quelle: Application-Sharing-Infrastruktur

Wechsel von virtuellen Maschinen zu Containern

Die Einschränkung dieses Mechanismus (Virtuelle Maschinen) ist, dass es nicht effizient ist, da das Ausführen mehrerer Anwendungen Ihre eigenen Betriebssysteme repliziert, die eine große Menge an Ressourcen verbraucht und, wenn laufende Anwendungen zunehmen, Wir brauchen mehr Platz, um Ressourcen zuzuweisen.

Ein weiterer Nachteil ist, Angenommen, wir müssen unsere Bewerbung mit anderen teilen, und wenn sie versuchen, die Anwendung die meiste Zeit auszuführen, wird sie aufgrund von Abhängigkeitsproblemen nicht ausgeführt, das müssen wir nur sagen"Funktioniert auf meinem Laptop / System“. Dann, damit andere die Anwendungen ausführen können, muss auf der Hostseite dieselbe Umgebung einrichten, in der sie ausgeführt wurde, das bedeutet viel manuelle Konfiguration und Komponenteninstallation.

Die Lösung für diese Einschränkungen ist eine Technologie namens Behälter.

Das Erstellen von Modellen für maschinelles Lernen in Jupyter Notebooks ist nicht die endgültige Lösung für jeden POC / Luftzug, Wir müssen es in die Produktion bringen, um reale Probleme in Echtzeit zu lösen.

Dann, der erste schritt ist zu packen / Packen Sie unsere Anwendung so, dass wir unsere Anwendung auf jeder Cloud-Plattform ausführen können, um die Vorteile von Managed Services, Autoscaling und Zuverlässigkeit zu nutzen, und viele mehr.

Um unsere Anwendung zu verpacken, benötigen wir Tools wie Docker. Also lasst uns an tollen Tools arbeiten und die Magie sehen..

Behälter

Ein Container ist eine Standardsoftwareeinheit, die den Code und alle seine Abhängigkeiten so verpackt, dass die Anwendung schnell und zuverlässig von einer Computerumgebung zur anderen läuft..

Jetzt, mehrere virtuelle Maschinen werden durch mehrere Container ersetzt, die auf einem einzigen Host-Betriebssystem ausgeführt werden. In Containern ausgeführte Anwendungen sind vollständig isoliert und haben Zugriff auf das Dateisystem, Betriebssystemressourcen und -pakete. Zum Erstellen und Ausführen von Containern, wir brauchen Container-Management-Tools, Was Stauraum.

docker-containerized-application-blue-border_2-6319065

Quelle: Anwendungen, die das Betriebssystem gemeinsam nutzen

Stauraum

Docker ist ein Container-Management-Tool, das den Anwendungscode verpackt, Konfiguration und Abhängigkeiten in einem portablen Image, das gemeinsam genutzt und auf jeder Plattform oder jedem System ausgeführt werden kann. Con Docker, Wir können mehrere Anwendungen enthalten und auf demselben Computer ausführen / System, da sie alle die gleichen Kernel-Dienste des Betriebssystems verwenden, verbrauchen weniger Ressourcen als virtuelle Maschinen (VM).

Ein Docker-Container-Image ist ein schlankes Softwarepaket, eigenständig und ausführbar, das alles enthält, was Sie zum Ausführen einer Anwendung benötigen: Code, Ausführungszeit, Systemtools, Systembibliotheken und Einstellungen.

Container-Images werden zur Laufzeit in Container konvertiert und, für Docker-Container, Images werden zu Containern, wenn sie auf der Docker Engine ausgeführt werden.

Motor den Docker

Docker Engine ist die Container-Laufzeit, die auf verschiedenen Linux-Betriebssystemen läuft (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE und Ubuntu) y Windows-Server.

Docker Engine ermöglicht die konsistente Ausführung von containerisierten Anwendungen überall auf jeder Infrastruktur, das lösen “Abhängigkeit Hölle” für Entwickler und Betriebsteams, und Beseitigung der “Auf meinem Laptop funktioniert es!!” Problem.

Die Docker-Container, die auf der Docker-Engine ausgeführt werden, sind:

  • Standard: Docker hat den Industriestandard für Container geschaffen, damit sie überall tragbar sind.
  • Hell: Container teilen sich den Kernel des Betriebssystems der Maschine und, Daher, kein Betriebssystem pro Anwendung erforderlich, was zu einer höheren Servereffizienz und niedrigeren Server- und Lizenzkosten führt.
  • Sicher: Anwendungen sind in Containern sicherer und Docker bietet die branchenweit stärksten Standardisolationsfunktionen.

Docker-Installation

Docker ist eine offene Plattform für die Entwicklung, Anwendungen senden und ausführen. Docker ermöglicht es uns, unsere Anwendungen von unserer Infrastruktur zu trennen, sodass wir Software schnell bereitstellen können.

Wir können Docker auf mehreren Plattformen herunterladen und installieren. Schauen Sie sich den offiziellen Docker an Seite um Docker entsprechend dem Betriebssystem Ihres lokalen Systems zu installieren.

Sobald Sie Docker installiert haben, Sie können überprüfen, ob die Installation erfolgreich war, indem Sie die Stauer Befehl im Terminal / Symbol des Systems.

Die Ausgabe ähnelt der folgenden, wenn Sie einen Berechtigungsfehler erhalten, Versuchen Sie es im Root-Benutzermodus auszuführen (unter Linux wird es verwendet Sudo Docker).

48710docker_check-5095638

Quelle: Autor

Dockerfile

Eine einfache Datei mit Anweisungen zum Erstellen eines Docker-Images. Jede Anweisung in einer Docker-Datei ist ein Befehl / Betrieb, zum Beispiel, welches betriebssystem soll verwendet werden, welche Abhängigkeiten installiert werden sollen oder wie der Code kompiliert wird, und viele dieser Anweisungen, die wie eine Schicht wirken.

Das Beste daran ist, dass alle Layer zwischengespeichert werden und wenn wir einige Anweisungen im Dockerfile ändern, während des Bauprozesses, die geänderte Ebene wird einfach neu aufgebaut.

Ein Beispiel-Dockerfile sieht wie folgt aus

FROM ubuntu:18.04
WORKDIR /app 
COPY . /app 
RUN pip install -r requirements.txt AUFDECKEN 5000 CMD-Python-App.py 

Jede Anweisung erstellt eine Ebene:

  • VON Erstellen Sie eine Ebene aus dem Basisbild, hier haben wir ubuntu verwendet: 18.04 Docker-Image
  • ARBEITSVERZEICHNIS Arbeitsverzeichnis angeben
  • KOPIEREN Dateien aus dem aktuellen Verzeichnis Ihres Docker-Clients oder Host-Systems hinzufügen, Hier fügen wir aktuelle Verzeichnisdateien zum Container-App-Verzeichnis hinzu
  • LAUFEN Geben Sie an, welche Befehle im Container ausgeführt werden sollen, Führen Sie hier den pip-Befehl aus, um die Abhängigkeiten aus der Datei Requirements.txt zu installieren
  • AUFDECKEN Geben Sie an, welcher Port unsere Anwendung verfügbar machen soll, hier ist es 5000
  • CMD Gibt an, welcher Befehl beim Containerstart ausgeführt werden soll

Docker-Image

Sobald eine Docker-Datei erstellt wurde, wir können daraus ein Docker-Image erstellen. Docker Image stellt die Laufzeitumgebung für eine Anwendung bereit, die den ganzen Code enthält, die erforderlichen Konfigurationsdateien und Abhängigkeiten.

Ein Docker-Image besteht aus schreibgeschützten Ebenen, von denen jeder eine Dockerfile-Anweisung darstellt. Die Ebenen sind gestapelt und jede ist ein Delta der Änderungen der vorherigen Ebene.

Wir können ein Docker-Image mit einer Docker-Datei erstellen, indem wir die Docker-Build Befehl.

Sobald das Docker-Image erstellt wurde, Wir können es mit dem testen Docker-Lauf Befehl, wodurch ein Container mit Docker-Image erstellt und die Anwendung ausgeführt wird.

Docker-Registrierung

Sobald das Docker-Image erstellt und getestet wurde, wir können es mit anderen teilen, damit sie unsere App nutzen können. Dafür, Wir müssen das Docker-Image an die öffentliche Docker-Image-Registrierung senden, como DockerHub, Google Container Registry (GCR) oder eine andere Registrierungsplattform.

Wir können unsere Docker-Images auch an private Datensätze senden, um den Zugriff auf Docker-Images einzuschränken.

Anwendung für maschinelles Lernen

Die Machine-Learning-Anwendung besteht aus einem vollständigen Workflow von der Eingabeverarbeitung, vom Engineering von Funktionen bis zur Ergebnisgenerierung. Wir werden eine einfache Anwendung zur Stimmungsanalyse sehen, die wir mit Docker containerisieren und diese App an den DockerHub senden, um sie anderen zur Verfügung zu stellen.

Stimmungsanalyse

Wir werden nicht auf Details zu Anwendungen für maschinelles Lernen eingehen, nur ein überblick, Wir werden eine Twitter-Sentiment-Analyse-App in Containern fassen. Den Code und die Datendateien finden Sie unter Github.

Sie können diese Anwendung klonen oder sie kann Ihre eigene Anwendung enthalten, der prozess wird der gleiche sein.

Das Git-Repository enthält die folgenden Dateien

  • app.py: Hauptanwendung
  • train.py: Skript zum Trainieren und Speichern des trainierten Modells
  • sentiment.tsv: Datendatei
  • anforderungen.txt: enthält die Pakete / erforderliche Abhängigkeiten
  • Dockerfile: um das Docker-Image zu erstellen
  • Vorlagenordner: enthält unsere Webseite für die Bewerbung
  • Modellordner: enthält unser trainiertes Modell

Hier ist wie anforderungen.txt es wird gesehen, Wir können auch die Version für jede Bibliothek angeben, die wir installieren müssen

numpy
Pandas
scikit-lernen
Flasche
nltk
regex

In unserer app.py, Wir laden unser trainiertes Modell und führen die gleiche Vorverarbeitung durch, die wir im Training gemacht haben.

Die Flask-Anwendung bedient zwei Endpunkte, Heimat, Ja Vorhersagen

@app.route('/')
auf jeden Fall zu Hause():
    render_template zurückgeben('home.html')
@app.route('/Vorhersagen',Methoden=['POST'])
auf jeden Fall vorhersagen():
    if request.method == 'POST':
        Nachricht = request.form['Botschaft']
        clean_test = remove_pattern(Prüfung,"@[w]*")
        tokenized_clean_test = clean_test.split()
        stem_tokenized_clean_test = [Stimmen.stem(ich) für i in tokenized_clean_test]
        Nachricht=" ".beitreten(stem_tokenized_clean_test)
        Daten = [Botschaft]
        data = cv.transform(Daten)
        my_prediction = clf.predict(Daten)
    render_template zurückgeben('result.html',Vorhersage = my_prediction)

Wir müssen das trainierte Modell laden, der Vektorisierer und der Stemmer (im Training verwendet) und wir haben auch konfiguriert, Anfragen über den Port zu empfangen 5000 in localhost (0.0.0.0)

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.