Docker für Datenwissenschaftler: Eine einfache Einführung

Autor: Zen und die Kunst der Computerprogrammierung

1. Einleitung

Docker ist ein Open-Source-Projekt zum Entwickeln, Bereitstellen und Ausführen von Anwendungen. Es ermöglicht Entwicklern, ihre Anwendungen und Abhängigkeiten in einen leichten, tragbaren Container zu packen und sie dann auf jedem gängigen Linux- oder Windows-Rechner zu veröffentlichen. Container können die Bereitstellung komplexer Anwendungen vereinfachen und die Entwicklerumgebung hochgradig konsistent machen. Datenwissenschaftler nutzen Docker zunehmend für Datenanalysearbeiten. Als Ersatz für virtuelle Maschinen bietet Docker folgende Vorteile:

  • Einfacheres Erstellen, Starten und Stoppen von Containern.
  • Es ist gut portierbar und für mehrere Betriebssysteme geeignet.
  • Die Ressourcenisolierung ist gut und übt keinen übermäßigen Druck auf den Host aus.
  • Bequemeres Teilen und Migrieren. Aufgrund der oben genannten Vorteile entscheiden sich Datenwissenschaftler auch dafür, ihre Modelle für maschinelles Lernen und ihre Abhängigkeiten in Docker-Bilder zu packen, damit andere Datenwissenschaftler diese Bilder schnell verwenden können. Sie können ihre Bilder auch für andere Datenwissenschaftler freigeben. Dadurch ist Docker zu einem der beliebtesten Tools für Datenwissenschaftler geworden. In diesem Artikel wird erläutert, wie Sie Docker verwenden können, um datenwissenschaftliche Arbeiten bequemer durchzuführen.

    2. Erläuterung grundlegender Konzepte und Begriffe

    Bevor wir über Docker sprechen, müssen wir einige grundlegende Konzepte und Terminologie von Docker verstehen. Wenn Sie damit nicht vertraut sind, lesen Sie bitte weiter unten.

    2.1 Bild

    Ein Image ist eine schreibgeschützte Vorlage, die alles enthält, was zum Erstellen eines Containers erforderlich ist (z. B. Betriebssystem, Laufzeitumgebung der Programmiersprache usw.). Sie können sich das Image auch als Software-Quellcode vorstellen, der erst nach der Installation ausgeführt werden kann. Im Allgemeinen werden Bilder in zwei Kategorien unterteilt:
  • Basisbild: Offiziell bereitgestellt, z. B. Python- oder R-Sprachbild;
  • Aktives Bild: Ein auf einem Basisbild basierendes Bild, das zum Erstellen von Containern verwendet werden kann. Wenn wir den Befehl verwenden docker run <image>, um einen neuen Container zu erstellen, wird der Inhalt aus dem angegebenen Image gelesen und der Container wird dann auf einem neuen kaskadierenden Dateisystem ausgeführt. Verschiedene Container können auf demselben Image basieren, verfügen jedoch über eigene Dateisysteme, Konfigurationen und Prozessräume.

    2.2 Behälter

    Ein Container ist eine laufende Instanz eines Images. Sie können Container über den Docker-Run-Befehl erstellen, starten und verwalten. Jeder Container ist unabhängig und sicher, und sein Kernel, sein Prozessraum und seine Benutzerberechtigungen sind unabhängig voneinander. Anwendungen, die in Containern ausgeführt werden, können nur ihre eigenen Dateien und Ressourcen sehen und haben keinen Einfluss auf andere Container.

    2.3 Docker-Datei

    Eine Docker-Datei ist eine Textdatei, die Anweisungen zum Erstellen eines Images enthält. Zu diesen Anweisungen gehören RUN, CMD, ENV, WORKDIR, COPY, ADD usw. Dockerfile wird verwendet, um den Image-Erstellungsprozess zu automatisieren, uns bei der Erstellung von Standardcontainern zu helfen und die Konstruktionseffizienz zu verbessern. Dockerfile ist sehr wichtig und wird oft zusammen mit Docker verwendet und bildet ein leistungsstarkes Ökosystem.

    2.4 Lager (Registrierung)

    Das Warehouse wird zum Speichern von Bildern verwendet, und jeder Benutzer oder jede Organisation kann über ein eigenes privates Warehouse verfügen. Wenn wir ein Bild aus dem Image Warehouse herunterladen, werden im Allgemeinen die Adresse, der Benutzername, das Passwort und andere Informationen angegeben. Standardmäßig ruft Docker Bilder aus öffentlichen Repositorys ab. Neben öffentlichen Lagerhäusern gibt es auch verwaltete Lagerhäuser, die von Drittanbietern von Cloud-Diensten wie AWS ECR und Google GCR bereitgestellt werden.

    2.5 Datenvolumen (Volume)

    Ein Datenvolumen ist ein Verzeichnis, in dem Daten gespeichert werden. Es umgeht UFS und kann den Dateiaustausch zwischen Containern, dem Host und lokalen Dateien realisieren. Der Zweck von Volumes besteht darin, Daten beizubehalten. Docker bietet zwei Möglichkeiten, Datenvolumes zu implementieren: gebundene Datenvolumes und anonyme Volumes.

    2.6 Netzwerk

    Netzwerk bezieht sich darauf, wie Docker die Kommunikation zwischen Docker-Containern verbindet. Docker bietet zwei Modi zur Implementierung von Netzwerken:
  • Standardmodus (Bridge): Dies ist der Standardnetzwerkmodus von Docker. Alle Container werden mit der NAT-Bridge verbunden, die mit Docker geliefert wird, und können über IP-Adressen direkt auf andere Container zugreifen.
  • Benutzerdefinierte Bridge-Netzwerke: In diesem Modus können Benutzer ihre eigenen Netzwerke definieren und Container können sich mit jedem Netzwerk verbinden.

    3. Erläuterung der Grundprinzipien des Algorithmus, spezifischer Arbeitsschritte und mathematischer Formeln

    Da die Bedeutung von Docker für Datenwissenschaftler weit über Docker selbst hinausgeht, besteht meines Erachtens keine Notwendigkeit, die Algorithmen und Prinzipien von Docker im Detail zu erklären. Im Gegenteil, ich hoffe, dass der Leser anhand von Beispielen und Beispielen die Rolle von Docker in der Datenwissenschaft intuitiv spüren kann.

    3.1 Docker installieren

    Zuerst müssen wir Docker installieren. Docker stellt Installationspakete für verschiedene Plattformen bereit, die Sie entsprechend Ihrer Betriebssystemversion installieren können. Wenn Docker bereits auf Ihrem Computer installiert ist, können Sie diesen Schritt überspringen.

    3.2 Verwenden von Docker zum Ausführen von Tensorflow

    Tensorflow ist ein von Google entwickeltes Open-Source-Framework für maschinelles Lernen, das für das Training, die Inferenz und die Optimierung von Deep Learning und neuronalen Netzen verwendet werden kann. Wir können Tensorflow verwenden, um Modelle für maschinelles Lernen zu erstellen.

    Schritte

    Der erste Schritt besteht darin, den Datensatz und den Modellcode vorzubereiten. Normalerweise wird unser Datensatz in einer CSV-Datei und der Modellcode in einer Python-Datei gespeichert. Im zweiten Schritt verwenden wir das Dockerfile, um unseren Container zu erstellen. Eine Docker-Datei ist eine Textdatei, die eine Reihe von Anweisungen enthält, die Docker mitteilen, wie ein Image erstellt werden soll. Wir können eine Docker-Datei mit folgendem Inhalt schreiben:
FROM tensorflow/tensorflow:latest-gpu
MAINTAINER AuthorName <<EMAIL>>

RUN mkdir /app

COPY. /app
WORKDIR /app

RUN pip install -r requirements.txt

ENTRYPOINT ["python"]
CMD ["main.py"]

Hier erstellen wir unseren Container aus dem offiziell bereitgestellten Tensorflow-GPU-Image und legen den Autor, das Arbeitsverzeichnis und andere Eigenschaften fest. Als nächstes haben wir den Datensatz und den Modellcode in den Container kopiert und die relevanten Abhängigkeiten installiert. Schließlich richten wir das Startskript ein, das python main.py ausführt.

Im dritten Schritt verwenden wir den Docker-Build-Befehl, um das Image zu erstellen. Die Form des Befehls ist wie folgt:

docker build --tag image_name:tag_name.

Unter anderem wird der Parameter --tag verwendet, um den Namen und die Beschriftung des Bildes anzugeben, und der folgende Parameter gibt den Pfad an, in dem sich die Docker-Datei befindet. Wenn das Dockerfile im aktuellen Verzeichnis gespeichert ist, können wir diesen Befehl direkt ausführen.

Im vierten Schritt verwenden wir den Docker-Run-Befehl, um den Container zu starten. Die Form des Befehls ist wie folgt:

docker run -v /path/to/dataset:/data -it image_name:tag_name bash

Hier wird der Parameter -v verwendet, um anzugeben, dass das externe Verzeichnis dem Verzeichnis innerhalb des Containers zugeordnet wird, im Format: externer Pfad:Pfad innerhalb des Containers. Der Parameter -it gibt an, dass wir die interaktive Shell des Containers betreten.

Im fünften Schritt können wir den Modellcode für maschinelles Lernen in der Shell des Containers ausführen.

Schritt 6: Wenn wir den Container nicht benötigen, können wir den Docker-Stop-Befehl verwenden, um den Container zu stoppen.

3.3 Verwenden Sie Docker, um Jupyter Notebook auszuführen

Jupyter Notebook ist ein interaktives Notizbuch, das die Ausführung mehrerer Programmiersprachen unterstützt. Es kann zur Datenvisualisierung, numerischen Berechnungen und statistischen Analyse verwendet werden. Wir können Jupyter Notebook verwenden, um die Visualisierung und Bewertung von Modellen für maschinelles Lernen durchzuführen.

Schritte

Der erste Schritt besteht darin, den Datensatz und den Modellcode vorzubereiten. Normalerweise wird unser Datensatz in einer CSV-Datei und der Modellcode in einer Python-Datei gespeichert.

Im zweiten Schritt verwenden wir das Dockerfile, um unseren Container zu erstellen. Der Inhalt der Docker-Datei ist wie folgt:

FROM jupyter/minimal-notebook:latest

USER root

RUN apt-get update && \
    apt-get install -y python3-dev graphviz libgraphviz-dev pkg-config && \
    rm -rf /var/lib/apt/lists/*

USER $NB_UID

RUN conda config --add channels conda-forge && \
    conda install numpy pandas scikit-learn matplotlib seaborn pillow bokeh plotly cython numba


COPY notebook_dir /home/$NB_USER/work

WORKDIR /home/$NB_USER/work

Hier verwenden wir das Jupyter/Minimal-Notebook-Image als Basis-Image und legen Attribute wie Autor und Arbeitsverzeichnis fest. Als Nächstes haben wir Bibliotheken wie graphviz, matplotlib und numba installiert, die uns beim Zeichnen von Grafiken, bei Matrixoperationen und bei der Beschleunigung helfen können. Abschließend haben wir den Datensatz und den Modellcode in den Container kopiert und das Startskript eingerichtet.

Im dritten Schritt verwenden wir den Docker-Build-Befehl, um das Image zu erstellen. Die Form des Befehls ist wie folgt:

docker build --tag image_name:tag_name.

Im vierten Schritt verwenden wir den Docker-Run-Befehl, um den Container zu starten. Die Form des Befehls ist wie folgt:

docker run -p 8888:8888 -v /path/to/code:/home/$NB_USER/work -d image_name:tag_name

Hier wird der Parameter -p verwendet, um die Portzuordnung anzugeben, der Parameter -v wird verwendet, um die Zuordnung des externen Verzeichnisses zum Verzeichnis innerhalb des Containers anzugeben, und der Parameter -d gibt an, dass der Container im Hintergrund ausgeführt wird.

Im fünften Schritt öffnen wir den Browser und geben http://localhost:8888 ein, um die Jupyter Notebook-Oberfläche aufzurufen.

Im sechsten Schritt können wir den Code im Jupyter Notebook bearbeiten und ausführen.

Schritt 7: Wenn wir den Container nicht benötigen, können wir den Docker-Stop-Befehl verwenden, um den Container zu stoppen.

3.4 Zukünftige Entwicklungstrends und Herausforderungen

Mit der Popularität von Docker erleben wir ein neues Jahrzehnt. Datenwissenschaftler nutzen Docker aktiv, um ihre Arbeit und Forschung komfortabler zu gestalten. Da Docker jedoch immer beliebter wird, werden auch mehr Datenwissenschaftler und Ingenieure dem Docker-Lager beitreten. Docker ist in verschiedenen Bereichen zum Maßstab geworden und hat auch die Aufmerksamkeit vieler Neueinsteiger auf sich gezogen. Docker hat jedoch auch Einschränkungen. Hier sind einige Herausforderungen, denen Docker begegnen kann:

  1. Dateiberechtigungen und Probleme bei der Datenfreigabe: Obwohl sich Docker-Container nicht gegenseitig stören, können dennoch Dateiberechtigungen und Probleme bei der Datenfreigabe auftreten. Denn Dateiberechtigungen innerhalb eines Docker-Containers werden oft vom Host und nicht vom Container selbst bestimmt. Gleichzeitig können Daten nicht zwischen verschiedenen Containern geteilt werden und müssen über das Netzwerk übertragen werden.
  2. Probleme bei der Clusterplanung und -orchestrierung: Da der Docker-Container selbst kein verteiltes System ist, kann er die zugrunde liegenden Clusterressourcen nicht nutzen. Darüber hinaus ist die von Docker bereitgestellte Cluster-Planungsfunktion sehr schwach und kann das verteilte Problem nicht wirklich lösen.
  3. Geschwindigkeitsproblem: Docker startet langsam und beansprucht mehr Speicher als herkömmliche virtuelle Maschinen. Dadurch sind bestimmte Arten von Anwendungen für die Verwendung mit Docker ungeeignet, beispielsweise solche, die rechenintensiv sind.
  4. Aktualisierungsproblem: Da Docker-Container in einem gemeinsam genutzten Ressourcenpool ausgeführt werden, ist der Aktualisierungsmechanismus eingeschränkt. Insbesondere in Anwendungsszenarien mit häufigen Versionsiterationen werden die Aktualisierungskosten relativ hoch.

Insgesamt ist Docker zwar zu einem heißen Thema geworden, aber nicht alle Datenwissenschaftler und Ingenieure sind mit der Verwendung vertraut. Sie sollten dennoch anhand der tatsächlichen Situation das für Sie passende Werkzeug auswählen.

Ich denke du magst

Origin blog.csdn.net/universsky2015/article/details/133565985
Empfohlen
Rangfolge