Eine ML, um nützlich zu sein, muss irgendwo laufen. Dies ist höchstwahrscheinlich nicht Ihre lokale Maschine. Ein nicht so gutes Modell, das in einer Produktionsumgebung läuft, ist besser als ein perfektes Modell, das Ihre lokale Maschine niemals verlässt.
Die Produktionsmaschine unterscheidet sich jedoch normalerweise von dem, auf dem Sie das Modell entwickelt haben. Sie versenden das Modell additionally an die Produktionsmaschine, aber irgendwie funktioniert das Modell nicht mehr. Das ist komisch, oder? Sie haben alles auf Ihrer lokalen Maschine getestet und es hat intestine funktioniert. Sie haben sogar Unit -Assessments geschrieben.
Was ist passiert? Höchstwahrscheinlich unterscheidet sich die Produktionsmaschine von Ihrer lokalen Maschine. Vielleicht sind nicht alle erforderlichen Abhängigkeiten installiert, um Ihr Modell auszuführen. Vielleicht sind installierte Abhängigkeiten auf einer anderen Model enthalten. Dafür kann es viele Gründe geben.
Wie können Sie dieses Downside lösen? Ein Ansatz könnte darin bestehen, die Produktionsmaschine genau zu replizieren. Das ist jedoch sehr unflexibel, wie für jede neue Produktionsmaschine, die Sie für eine lokale Nachbildung erstellen müssten.
Ein viel schönerer Ansatz ist die Verwendung Docker Behälter.
Docker ist ein Instrument, mit dem wir Code und Anwendungen in Containern erstellen, verwalten und ausführen können. Ein Container ist eine kleine isolierte Computerumgebung, in der wir eine Anwendung mit allen Abhängigkeiten verpacken können. In unserem Fall muss unser ML -Modell mit allen Bibliotheken ausgeführt werden. Damit müssen wir uns nicht auf das verlassen, was auf dem Host -Laptop installiert ist. A Docker -Container Ermöglicht es uns, Anwendungen von der zugrunde liegenden Infrastruktur zu trennen.
Zum Beispiel verpacken wir unser ML -Modell lokal und schieben es in die Cloud. Damit hilft uns Docker sicher, sicherzustellen, dass unser Modell überall und jederzeit laufen kann. Die Verwendung von Docker hat mehrere Vorteile für uns. Es hilft uns, neue Modelle schneller zu liefern, die Reproduzierbarkeit zu verbessern und die Zusammenarbeit zu erleichtern. Alles nur, weil wir genau die gleichen Abhängigkeiten haben, egal wo wir den Container betreiben.
Da Docker in der Branche häufig verwendet wird, müssen Datenwissenschaftler in der Lage sein, Container mit Docker zu bauen und auszuführen. Daher werde ich in diesem Artikel das grundlegende Konzept von Containern durchgehen. Ich werde Ihnen alles zeigen, was Sie über Docker wissen müssen, um loszulegen. Nachdem wir die Theorie behandelt haben, werde ich Ihnen zeigen, wie Sie Ihren eigenen Docker -Container erstellen und ausführen können.
Was ist ein Behälter?
Ein Behälter ist eine kleine, isolierte Umgebung, in der alles in sich geschlossen ist. Die Umgebung packt alle Code und Abhängigkeiten auf.
Ein Behälter verfügt über fünf Hauptmerkmale.
- in sich geschlossen: Ein Container isoliert die Anwendung/Software program aus seiner Umgebung/Infrastruktur. Aufgrund dieser Isolation müssen wir uns nicht auf vorinstallierte Abhängigkeiten vom Host-Laptop verlassen. Alles, was wir brauchen, ist Teil des Behälters. Dies stellt sicher, dass die Anwendung immer unabhängig von der Infrastruktur ausgeführt werden kann.
- isoliert: Der Behälter hat einen minimalen Einfluss auf den Wirt und andere Behälter und umgekehrt.
- unabhängig: Wir können Container unabhängig verwalten. Das Löschen eines Behälters wirkt sich nicht auf andere Behälter aus.
- tragbar: Wenn ein Container die Software program von der {Hardware} isoliert, können wir sie nahtlos auf jeder Maschine ausführen. Damit können wir es ohne Probleme zwischen Maschinen bewegen.
- leicht: Behälter sind leicht, da sie das Betriebssystem des Host -Computer systems teilen. Da sie kein eigenes Betriebssystem benötigen, müssen wir die {Hardware} -Ressource des Host -Computer systems nicht partitionieren.
Dies magazine ähnlich wie virtuelle Maschinen klingen. Aber es gibt einen großen Unterschied. Der Unterschied besteht darin, wie sie die Ressourcen ihres Host -Computer systems nutzen. Virtuelle Maschinen sind eine Abstraktion der physischen {Hardware}. Sie partitionieren einen Server in mehrere. Somit enthält ein VM eine vollständige Kopie des Betriebssystems, das mehr Platz einnimmt.
Im Gegensatz dazu sind Behälter eine Abstraktion an der Anwendungsschicht. Alle Container teilen das Betriebssystem des Hosts, werden jedoch in isolierten Prozessen ausgeführt. Da Container kein Betriebssystem enthalten, können sie das zugrunde liegende System und die Ressourcen effizienter verwenden, indem sie den Overhead reduzieren.

Jetzt wissen wir, was Behälter sind. Lassen Sie uns ein hochrangiges Verständnis dafür erhalten, wie Docker funktioniert. Ich werde kurz die technischen Begriffe vorstellen, die häufig verwendet werden.
Was ist Docker?
Um zu verstehen, wie Docker funktioniert, werfen wir einen kurzen Blick auf seine Architektur.
Docker verwendet eine Consumer-Server-Architektur mit drei Hauptteilen: einen Docker-Consumer, einen Docker-Daemon (Server) und eine Docker-Registrierung.
Der Docker -Consumer ist die primäre Möglichkeit, über Befehle mit Docker zu interagieren. Wir verwenden den Kunden, um über eine REST -API mit so vielen Docker -Daemons zu kommunizieren, wie wir es wollen. Oft sind verwendete Befehle Docker Run, Docker Construct, Docker Pull und Docker Push. Ich werde später erklären, was sie tun.
Der Docker -Daemon verwaltet Docker -Objekte wie Bilder und Container. Der Daemon hört auf Docker -API -Anfragen. Abhängig von der Anfrage erstellt, läuft und verteilt Docker -Container. Der Docker -Daemon und der Kunde können auf denselben oder verschiedenen Systemen ausgeführt werden.
Die Docker -Registrierung ist ein zentraler Ort, an dem Docker -Bilder gespeichert und verwaltet werden. Wir können sie verwenden, um Bilder zu teilen und sie anderen zugänglich zu machen.
Klingt ein bisschen abstrakt? Keine Sorge, sobald wir anfangen, wird es intuitiver sein. Lassen Sie uns vorher jedoch die erforderlichen Schritte durchlaufen, um einen Docker -Container zu erstellen.

Was müssen wir einen Docker -Container erstellen?
Es ist einfach. Wir müssen nur drei Schritte ausführen:
- Erstellen Sie eine Dockerfile
- Erstellen Sie ein Docker -Bild aus der Dockerfile
- Führen Sie das Docker -Bild aus, um einen Docker -Container zu erstellen
Lassen Sie uns Schritt für Schritt gehen.
Eine Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker -Pictures enthält. In der Dockerfile definieren wir, wie die Anwendung aussieht und ihre Abhängigkeiten. Wir geben auch an, welchen Prozess beim Starten des Docker -Containers ausgeführt werden soll. Die Dockerfile besteht aus Schichten, die einen Teil des Dateisystems des Bildes darstellen. Jede Schicht fügt, entfernt, entfernt oder modifiziert die darunter liegende Ebene.
Basierend auf der Dockerfile erstellen wir ein Docker -Bild. Das Bild ist eine schreibgeschützte Vorlage mit Anweisungen zum Ausführen eines Docker-Containers. Bilder sind unveränderlich. Sobald wir ein Docker -Bild erstellt haben, können wir es nicht mehr ändern. Wenn wir Änderungen vornehmen möchten, können wir nur Änderungen über vorhandene Bilder hinzufügen oder ein neues Bild erstellen. Wenn wir ein Bild wieder aufbauen, ist Docker klug genug, um nur Ebenen wieder aufzubauen, die sich geändert haben, und die Bauzeit verkürzt.
Ein Docker -Container ist eine ausgeführte Instanz eines Docker -Bildes. Der Container wird durch das Bild und alle Konfigurationsoptionen definiert, die wir beim Erstellen oder Starten des Containers angeben. Wenn wir einen Behälter entfernen, werden alle Änderungen in seinen internen Zuständen entfernt, wenn sie nicht in einer anhaltenden Lagerung gespeichert werden.
Verwenden von Docker: Ein Beispiel
Lassen Sie uns bei all der Theorie die Hände schmutzig machen und alles zusammenfügen.
Als Beispiel verpacken wir ein einfaches ML -Modell mit Flask in einem Docker -Container. Wir können dann Anfragen gegen den Container ausführen und im Gegenzug Vorhersagen erhalten. Wir werden ein Modell lokal trainieren und nur die Artefakte des geschulten Modells im Docker -Container laden.
Ich werde den allgemeinen Workflow durchgehen, der zum Erstellen und Ausführen eines Docker -Containers mit Ihrem ML -Modell erforderlich ist. Ich werde Sie durch die folgenden Schritte führen:
- Modell erstellen
- erstellen
necessities.txt
Datei mit allen Abhängigkeiten enthalten - erstellen
Dockerfile
- Bauen Sie das Docker -Bild
- Behälter ausführen
Bevor wir anfangen, müssen wir Docker Desktop installieren. Wir werden es verwenden, um unsere Docker -Container später anzusehen und auszuführen.
1. Erstellen Sie ein Modell
Erstens werden wir einen einfachen zufälligen ForestClassifier aufbilden scikit-learn
Das Iris -Datensatz und dann speichern Sie das geschulte Modell.
Zweitens erstellen wir ein Skript, das unser Modell über eine REST -API mit Flask zur Verfügung stellt. Das Skript ist auch einfach und enthält drei Hauptschritte:
- Extrahieren und konvertieren Sie die Daten, die wir aus der Nutzlast JSON übergeben möchten
- Laden Sie die Modellartefakte und erstellen Sie eine OnNX -Sitzung und führen Sie das Modell aus
- Geben Sie die Vorhersagen des Modells als JSON zurück
Ich nahm den größten Teil des Codes aus Hier Und Hier und nahm nur geringfügige Änderungen vor.
2. Erstellen Sie Anforderungen
Sobald wir die Python -Datei erstellt haben, die wir ausführen möchten, wenn der Docker -Container ausgeführt wird, müssen wir a erstellen necessities.txt
Datei mit allen Abhängigkeiten. In unserem Fall sieht es so aus:
3. Erstellen Sie Dockerfile
Das Letzte, was wir uns vorbereiten müssen, bevor wir ein Docker -Bild erstellen und einen Docker -Container ausführen können, ist, eine Dockerfile zu schreiben.
Die Dockerfile enthält alle Anweisungen, die zum Erstellen des Docker -Bildes erforderlich sind. Die häufigsten Anweisungen sind
FROM <picture>
– Dies gibt das Basisbild an, das sich der Construct erstreckt.WORKDIR <path>
– Dieser Anweisungen gibt das „Arbeitsverzeichnis“ oder den Pfad im Bild an, in dem Dateien kopiert werden und Befehle ausgeführt werden.COPY <host-path><image-path>
– In dieser Anweisung wird der Bauherr aufgeführt, dass er Dateien aus dem Host kopieren und in das Containerbild einfügt.RUN <command>
– In dieser Anweisung wird der Bauherr angegeben, den angegebenen Befehl auszuführen.ENV <title><worth>
– Dieser Befehl legt eine Umgebungsvariable fest, die ein laufender Container verwendet.EXPOSE <port-number>
– Dieser Befehl legt die Konfiguration auf dem Bild fest, die einen Port angibt, das das Bild offenbaren möchte.USER <user-or-uid>
– In diesem Befehl wird der Standardbenutzer für alle nachfolgenden Anweisungen festgelegt.CMD ("<command>", "<arg1>")
– In diesem Befehl legt der Standardbefehl ein, den ein Container mit diesem Bild ausgeführt wird.
Mit diesen können wir die Dockerfile für unser Beispiel erstellen. Wir müssen die folgenden Schritte ausführen:
- Bestimmen Sie das Basisbild
- Anwendungsabhängigkeiten installieren
- Kopieren Sie in einem relevanten Quellcode und/oder Binärdateien
- Konfigurieren Sie das endgültige Bild
Gehen wir Schritt für Schritt durch. Jeder dieser Schritte führt zu einer Ebene im Docker -Bild.
Zuerst geben wir das Basisbild an, auf dem wir dann aufbauen. Wie wir im Beispiel in Python geschrieben haben, werden wir ein Python -Basisbild verwenden.
Zweitens setzen wir das Arbeitsverzeichnis, in das wir alle Dateien kopieren werden, die wir benötigen, um unser ML -Modell auszuführen.
Drittens aktualisieren wir die Paketindexdateien, um sicherzustellen, dass wir über die neuesten verfügbaren Informationen zu Paketen und deren Versionen verfügen.
Viertens kopieren und installieren wir die Anwendungsabhängigkeiten.
Fünftens kopieren wir den Quellcode und alle anderen Dateien, die wir benötigen. Hier enthüllen wir auch Port 8080, den wir für die Interaktion mit dem ML -Modell verwenden werden.
Sechstens setzen wir einen Benutzer, damit der Container nicht als Root -Benutzer ausgeführt wird
Siebten definieren wir das die instance.py
Die Datei wird ausgeführt, wenn wir den Docker -Container ausführen. Damit erstellen wir den Flask -Server, um unsere Anfragen auszuführen.
Neben der Erstellung der Dockerfile können wir auch a erstellen .dockerignore
Datei zur Verbesserung der Construct -Geschwindigkeit. Ähnlich wie a .gitignore
Datei, wir können Verzeichnisse aus dem Construct -Kontext ausschließen.
Wenn Sie mehr wissen möchten, gehen Sie bitte zu Docker.com.
4. Erstellen Sie das Docker -Bild
Nachdem wir alle Dateien erstellt haben, die wir zum Erstellen des Docker -Bildes erstellt haben.
Um das Bild zu erstellen, müssen wir zuerst den Docker -Desktop öffnen. Sie können überprüfen, ob Docker Desktop durch Laufen ausgeführt wird docker ps
in der Befehlszeile. Dieser Befehl zeigt alle laufenden Container.
Um ein Docker -Picture zu erstellen, müssen wir auf der gleichen Ebene wie unsere Dockerfile sein und necessities.txt
Datei. Wir können dann rennen docker construct -t our_first_image .
Der -t
Flag gibt den Namen des Bildes an, dh. our_first_image
und die .
fordert uns an, aus diesem aktuellen Verzeichnis zu bauen.
Sobald wir das Bild erstellt haben, können wir mehrere Dinge tun. Wir können
- Zeigen Sie das Bild durch Laufen an
docker picture ls
- Sehen Sie sich den Verlauf oder wie das Bild durch Laufen erstellt hat
docker picture historical past <image_name>
- Drücken Sie das Bild durch Laufen in eine Registrierung
docker push <image_name>
5. Docker -Container ausführen
Sobald wir das Docker -Bild erstellt haben, können wir unser ML -Modell in einem Container ausführen.
Dafür müssen wir nur ausführen docker run -p 8080:8080 <image_name>
in der Befehlszeile. Mit -p 8080:8080
Wir verbinden den lokalen Port (8080) mit dem Port im Container (8080).
Wenn das Docker -Bild keinen Port enthüllt, können wir einfach ausgeführt werden docker run <image_name>
. Anstatt die zu verwenden image_name
Wir können auch die verwenden image_id
.
Okay, sobald der Container ausgeführt wird, führen wir eine Anfrage dagegen aus. Dafür senden wir eine Nutzlast an den Endpunkt, indem wir ausführen curl
X POST http://localhost:8080/invocations -H "Content material-Kind:software/json" -d @.path/to/sample_payload.json
Abschluss
In diesem Artikel habe ich Ihnen die Grundlagen von Docker -Containern, was sie sind und wie Sie sie selbst bauen. Obwohl ich nur die Oberfläche kratzte, sollte es ausreichen, um Ihnen den Einstieg zu erlangen und Ihr nächstes Modell zu verpacken. Mit diesem Wissen sollten Sie in der Lage sein, die Probleme „Es auf meiner Maschine“ zu vermeiden.
Ich hoffe, dass Sie diesen Artikel nützlich finden und dass er Ihnen hilft, ein besserer Datenwissenschaftler zu werden.
Wir sehen uns in meinem nächsten Artikel und/oder hinterlassen Sie einen Kommentar.