didas Tech-Stack


Fabian Gringel


Stack of tools

Dieser Artikel gibt einen Überblick über unseren Tech-Stack bei dida. Natürlich passen wir die Tools, die wir verwenden, an die Erfordernisse eines bestimmten Projekts an, aber die hier aufgeführten sind unsere bevorzugten Tools, wenn wir die freie Wahl haben.

Ich werde zunächst die Werkzeuge beschreiben, die unseren Softwareentwicklungsprozess prägen, und dann unsere bevorzugten Python-Bibliotheken und Software-Tools für Machine und Deep Learning.


Softwareentwicklung und -bereitstellung


Python

 Python logo

Standardmäßig schreiben wir unsere Software in Python. In den letzten Jahren hat sich Python als Programmiersprache Nummer eins für Machine- und Deep-Learning-Anwendungen durchgesetzt, und zwar aus folgenden Gründen:

  1. Sie ist relativ einfach und leicht zu erlernen und ermöglicht es Entwicklern, sich auf das maschinelle Lernen zu konzentrieren, anstatt auf Implementierungsfragen.

  2. Python bietet eine große Auswahl an hilfreichen Bibliotheken, die die Entwicklung, das Training und den Einsatz von Machine-Learning-Modellen erleichtern. Einige der beliebtesten Deep-Learning-Frameworks wie PyTorch sind speziell für Python geschrieben.

  3. Mittlerweile gibt es eine große und sehr aktive Python-Community, die ihr Wissen auf Konferenzen, in Blogbeiträgen und auf Internetplattformen wie Stack Overflow teilt, was für jeden Entwickler eine enorme Hilfe sein kann.

Obwohl Python keine leistungsorientierte Programmiersprache und daher von Haus aus eher langsam ist, stellt dies für rechenintensive Deep-Learning-Anwendungen kein Hindernis dar: Die meisten Frameworks lassen die aufwendigen Berechnungen in einer schnelleren Sprache wie C laufen und stellen nur einen Python-Wrapper als "Benutzeroberfläche" zur Verfügung.

Jupyter

 Jupyter logo

Bei dida machen wir ausgiebig Gebrauch von Jupyter Notebooks (und dem umfassenderen JupyterLab). Basierend auf IPython sind Jupyter Notebooks eine Art Dokument, in dem man Python (aber auch Julia und R) Code schreiben und ausführen und die Ergebnisse anzeigen kann. Jupyter Notebooks können nicht nur Kommandozeilenausgaben darstellen, sondern auch komplexere Objekte wie Bilder, pandas.DataFrames oder LaTeX-Formeln.

Der Code ist in Zellen organisiert, die einzeln ausgeführt werden können. Die in Ipython eingebauten "magischen Befehle" erweitern die Funktionalität der Zellen über die reine Ausführung von Python-Code hinaus.

Die oben genannten Funktionen machen Jupyter Notebook und JupyterLab zu großartigen Werkzeugen für das Prototyping und allgemeines exploratives Arbeiten sowie für das Präsentieren. Sie bieten allerdings nicht den vollen Funktionsumfang einer vollwertigen IDE wie VS Code oder PyCharm. Übrigens kann man Notebooks sowohl in VS Code als auch in der Premium-Version von PyCharm verwenden.

Google Cloud Platform

 Google Cloud logo

Google Cloud bietet eine riesige Auswahl an Diensten, die hier unmöglich zu beschreiben ist. Wir verwenden sie hauptsächlich für zwei Anwendungen: Wir nutzen ihre Storage-Buckets, um Daten dezentral zu speichern und allen, die an einem bestimmten Projekt arbeiten, zugänglich zu machen (siehe Abschnitt DVC), und ihre Compute-Engines als GPU-Server.

Die GPU-Server lassen sich leicht so konfigurieren, dass sie genau die benötigten Leistungsanforderungen erfüllen und stellen somit eine sinnvolle Alternative zu lokalen Servern dar.

Amazon Web Services (AWS) und Microsoft Azure bieten ein ähnliches Leistungsspektrum an. Wir haben festgestellt, dass sie im Allgemeinen mit Google Cloud gleichwertig zu sein scheinen, so dass es von den spezifischen Anforderungen abhängt, für welche der beiden Dienste man sich entscheidet. Der Fairness halber muss ich hinzufügen, dass wir sie nicht im gleichen Umfang wie Google Cloud evaluiert haben, da letztere unsere Standardeinstellung ist.

GitLab

 Gitlab logo

Genau wie sein wahrscheinlich bekannterer Konkurrent GitHub bietet GitLab Versionskontrolle mit Git in Remote-Code-Repositories. GitLab erweitert die grundlegenden Funktionen von Git um GUIs (z. B. zum Lösen von Merge-Konflikten) und eine Reihe nützlicher Tools für die Softwareentwicklung (z. B. Definition von Continuous Integration Pipelines) und das Projektmanagement (z. B. Issue Boards).

Für die meisten unserer Projekte sind die schlanken Projektmanagement-Tools, die GitLab bietet, genau das, was wir brauchen, obwohl wir in einigen Fällen auch dedizierte Software wie Jira verwenden.

DVC

 DVC logo

Git-Repositorys wie GitLab halten den in einem Projekt entwickelten Code fest. Theoretisch könnten sie auch als Remote-Repositories für andere Arten von Daten verwendet werden, aber dafür sind sie nicht optimiert.

DVC (kurz für Data Version Control) ist für den Umgang mit großen Dateien, wie z.B. Bilddaten und allgemein für Datensätze des maschinellen Lernens konzipiert. Es funktioniert ähnlich wie Git: lokale Änderungen werden in ein entferntes Repository gepusht, und alle Änderungen werden nachverfolgt.

DVC entspricht dabei in etwa Software Git, nicht dem Dienst GitLab. Das bedeutet, dass DVC einen externen Remote-Speicher benötigt, der als DVC-Repositories initialisiert wird - in unserem Fall üblicherweise Google Storage Buckets.

Docker

 docker logo

Stellen Sie sich vor, wir haben eine Software entwickelt, die das Problem eines Kunden erfolgreich löst. Sie läuft einwandfrei auf unseren Maschinen, wo wir die volle Kontrolle über die Hardware, das Betriebssystem und die Python-Installation haben. Wie können wir sicherstellen, dass sie auf anderen Systemen genauso gut läuft?

Wir könnten den Kunden bitten, die Software auf einer vollwertigen virtuellen Maschine laufen zu lassen, die nach unseren Vorgaben erstellt wurde, aber das erzeugt eine Menge Aufwand, der hier nicht wirklich notwendig ist, denn Docker bietet eine bessere Lösung: Ein sogenannter Docker-Container ist im Wesentlichen eine virtuelle Maschine, die für die Ausführung einer einzelnen Anwendung gedacht ist. Weitere Informationen zu Docker finden Sie in unserem Blog-Beitrag.


Tools für machine/deep learning


SciPy

 SciPy logo

ist eine Python-Bibliothek für wissenschaftliches Rechnen. Sie bietet optimierte Implementierungen verschiedener nützlicher Funktionen aus den Bereichen lineare Algebra, Interpolation, FFT, Signal- und Bildverarbeitung und vielen anderen.
Wir verwenden SciPy immer dann, wenn wir Domänenwissen nutzen wollen, um die von uns entwickelten Algorithmen durch deterministische Berechnungen zu erweitern.

Scikit Learn

 Scikit-learn logo

Scikit-learn ist eine Python-Bibliothek, die klassische maschinelle Lernalgorithmen für Regression, Klassifikation und Clustering wie Random Forests, Support Vector Machines, lineare oder logistische Regressionen und k-means anbietet. Es ist auch möglich, einfache neuronale Netze zu definieren und zu trainieren.

Scikit-learn enthält darüber hinaus viele praktische Werkzeugen für die Vorverarbeitung von Daten, die Definition komplexer Modell-Pipelines und die Evaluation trainierter Modelle.

Bei dida verwenden wir Scikit-Learn-Modelle häufig, um robuste Baselines zu etablieren, die mit der Leistung komplexerer Modellen verglichen werden können, die mit speziellen Deep-Learning-Bibliotheken entwickelt wurden.

Pytorch, TensorFlow and Keras

PyTorch und TensorFlow sind Deep-Learning-Bibliotheken für Python, welche die Definition, Konfiguration, das Training und die Anwendung von neuronalen Netzen erleichtern. PyTorch wird von Facebook entwickelt und gepflegt, TensorFlow von Google. Beide sind quelloffen und frei verwendbar, und in den meisten Fällen ist es Geschmackssache, welche von beiden man wählt (besonders seit der Veröffentlichung von TensorFlow 2.0). Obwohl es noch andere Maschinen- und Deep-Learning-Bibliotheken für Python gibt, haben diese beiden den Markt in den letzten Jahren zunehmend unter sich aufgeteilt.

Keras ist eine weitere Deep-Learning-Bibliothek, die früher ein Wrapper für verschiedene Deep-Learning-Backends (einschließlich TensorFlow) war und eine High-Level-Schnittstelle bietet, die die Entwicklung von Modellen übersichtlicher und einfacher macht. Im Jahr 2020 hat Keras aufgehört, andere Backends als TensorFlow zu unterstützen und wurde nun in TensorFlow integriert.

MLflow

 MLflow

Deep-Learning-Bibliotheken wie die oben genannten machen es relativ einfach, mit verschiedenen Modellen und verschiedenen Hyperparameter-Konfigurationen zu experimentieren. Jeder, der das schon einmal gemacht hat, weiß, dass man sehr schnell den Überblick darüber verlieren kann, was man bereits ausprobiert und wie gut es funktioniert hat.

MLflow ist eine Open-Source-Plattform, die wir nutzen, um unsere Experimente aufzuzeichnen und den Überblick zu behalten. Neben der Verfolgung von Experimenten bietet sie Funktionen für das Modell-Deployment und die Modellspeicherung.

Natürlich gibt es einige Alternativen zu MLflow: TensorBoard (es ist ein Bestandteil von TensorFlow, funktioniert aber auch mit PyTorch) zielt hauptsächlich auf die Inspektion und Visualisierung von Experimenten ab. Sacred ist ein weiteres Tool, das sich auf die Aufzeichnung von Experimenten konzentriert.