Machine Learning Modelle mit Hilfe von Docker Containern bereitstellen

Thomas Alcock Blog, Data Science

Einleitung

Künstliche Intelligenz (KI) ist für deutsche Firmen keineswegs eine Zukunftsvorstellung mehr. Laut einer Umfrage von Deloitte unter ca. 2.700 KI-Experten aus neun Ländern, geben über 90 Prozent der Befragten an, dass ihr Unternehmen Technologien aus einem der Bereiche Machine Learning (ML), Deep Learning, Natural Language Processing (NLP) und Computer Vision nutzt oder plant zu nutzen. Dieser hohe Anteil lässt sich nicht nur dadurch erklären, dass die Firmen das Potenzial von KI erkannt haben. Vielmehr stehen auch deutlich mehr standardisierte Lösungen für den Einsatz dieser Technologien zur Verfügung. Diese Entwicklung hat dazu geführt, dass die Einstiegshürde in den vergangenen Jahren immer weiter gesunken ist.

Das Problem mit Standardlösungen

So bieten zum Beispiel die drei großen Cloud Anbieter – Amazon Web Services (AWS), Google Cloud Plattform (GCP) und Microsoft Azure – für bestimmte Problemstellungen standardisierte Lösungen an (z.B. Objekterkennung auf Bildern, Übersetzung von Texten, und automatisiertes Machine Learning). Bislang lassen sich aber noch nicht alle Probleme mit Hilfe solcher standardisierten Anwendungen lösen. Dafür kann es unterschiedliche Gründe geben: Der häufigste Grund ist, dass die verfügbaren Standardlösungen nicht auf die gewünschte Fragestellung passen. So ist zum Beispiel im Bereich NLP die Klassifikation von ganzen Texten häufig als eine Standardlösung verfügbar. Soll hingegen eine Klassifikation nicht auf Text-, sondern Wort-Ebene stattfinden, werden dazu andere Modelle benötigt, die nicht immer als Teil von Standardlösungen verfügbar sind. Und selbst wenn diese zur Verfügung stehen, sind die möglichen Kategorien in der Regel vordefiniert und lassen sich nicht weiter anpassen. Ein Service also, der für die Klassifikation von Wörtern in die Kategorien Ort, Person und Zeit gebaut wurde, kann nicht ohne weiteres für die Klassifikation von Wörtern in den Kategorien Kunde, Produkt und Preis verwendet werden. Viele Unternehmen sind deshalb auch weiterhin darauf angewiesen, eigene ML Modelle zu entwickeln. Da die Entwicklung von Modellen oftmals auf lokalen Rechnern erfolgt, muss sichergestellt werden, dass diese Modelle nicht nur dem Entwickler zur Verfügung stehen. Nach der Entwicklung eines Modells besteht eine wichtige Herausforderung darin, das Modell unterschiedlichen Nutzern zur Verfügung zu stellen, da nur dann auch ein Mehrwert für das Unternehmen entsteht.

Mit MLOps Modelle nutzbar machen

Bei ML & KI Projekten im Unternehmen treten sowohl bei der Entwicklung als auch bei der Bereitstellung eigene Herausforderungen in Erscheinung. Während die Entwicklung oftmals an der mangelnden Verfügbarkeit geeigneter Daten scheitert, kann die Bereitstellung daran scheitern, dass ein Modell nicht mit der Produktionsumgebung kompatibel ist. So werden beispielsweise Machine Learning Modelle zum überwiegenden Teil mit Open Source Sprachen oder neuen ML-Frameworks (z.B. Dataiku oder H2O) entwickelt, während eine operative Produktionsumgebung oftmals mit proprietärer und langjährig erprobter Software arbeitet. Die enge Verzahnung dieser beiden Welten stellt oftmals beide Komponenten vor gewichtige Herausforderungen. Deshalb ist es wichtig, die Entwicklung von ML Modellen mit der Arbeit der IT Operations zu verknüpfen. Diesen Prozess bezeichnet man als MLOps, da hier Data Scientists mit der IT zusammenarbeiten, um Modelle produktiv nutzbar zu machen.

MLOps ist eine ML-Entwicklungskultur und -praxis, deren Ziel es ist, die Entwicklung von ML-Systemen (Dev) und den Betrieb von ML-Systemen (Ops) zu verbinden. In der Praxis bedeutet MLOps, auf Automatisierung und Überwachung zu setzen. Dieses Prinzip erstreckt sich auf alle Schritte der ML-Systemkonfiguration wie Integration, Testen, Freigabe, Bereitstellung und Infrastrukturverwaltung. Der Code eines Modells ist dabei einer von vielen weiteren Bestandteilen, wie in Abbildung 1 veranschaulicht wird. Die Abbildung zeigt neben dem ML Code auch andere Schritte des MLOps Prozesses auf und verdeutlicht, dass der ML Code selbst einen relativ kleinen Anteil des gesamten Prozesses ausmacht.

Abbildung 1: Wichtige Bestandteile des MLOps Prozesses

Weitere Aspekte von MLOps sind z.B. die kontinuierliche Bereitstellung und Qualitätsprüfung der Daten, oder das Testen des Modells und ggf. die Fehlerbehebung (sog. Debugging). Docker Container haben sich bei der Bereitstellung von eigens entwickelten ML Modellen als Kerntechnologie herauskristallisiert und werden deshalb in diesem Beitrag vorgestellt.

Warum Docker Container?

Die Herausforderung bei der Bereitstellung von ML Modellen ist, dass ein Modell in einer bestimmten Version einer Programmiersprache geschrieben ist. Diese Sprache ist im Regelfall nicht in der Produktionsumgebung verfügbar und muss deshalb erst installiert werden. Zudem verfügt das Modell über eigene Bibliotheken, Laufzeiten und andere technische Abhängigkeiten, die ebenfalls erst in der Produktionsumgebung installiert werden müssten. Docker löst dieses Problem über sogenannte Container, in denen sich Anwendungen samt aller Bestandteile isoliert verpacken und als eigene Services bereitstellen lassen. Diese Container enthalten alle Komponenten, die die Anwendung bzw. das ML Modell zum Ausführen benötigt inklusive Code, Bibliotheken, Laufzeiten und Systemtools. Über Container lassen sich deshalb auch eigene Modelle und Algorithmen in jeder Umgebung bereitstellen und zwar ohne Sorge, dass bspw. fehlende oder inkompatible Bibliotheken zu Fehlern führen.

Abbildung 2: Vergleich von Docker Containern und virtuellen Maschinen

Vor dem Siegeszug von Docker waren lange Zeit virtuelle Maschinen das Tool der Wahl, um Anwendungen und ML Modelle isoliert bereitzustellen. Allerdings hat sich herausgestellt, dass Docker über diverse Vorteile gegenüber virtuellen Maschinen verfügt. Dies sind insbesondere verbesserte Ressourcennutzung, Skalierbarkeit und die schnellere Bereitstellung neuer Software. Im Folgenden sollen die drei Punkte detaillierter beleuchtet werden.

Verbesserte Ressourcennutzung

Abbildung 2 vergleicht schematisch, wie Applikationen in Docker Containern bzw. auf virtuellen Maschinen laufen können. Virtuelle Maschinen verfügen über ihr eigenes Gastbetriebssystem, auf welchem unterschiedliche Applikationen laufen. Die Virtualisierung des Gastbetriebssystems auf der Hardwareebene nimmt viel Rechenleistung und Speicherplatz in Anspruch. Deshalb können auf einer virtuellen Maschine, bei gleichbleibender Effizienz, weniger Applikationen gleichzeitig laufen.

Docker Container teilen sich hingegen das Betriebssystem des Hosts und benötigen kein eigenes Betriebssystem. Applikationen in Docker Containern fahren deshalb schneller hoch und nehmen, durch das geteilte Betriebssystems des Hosts, weniger Rechenleistung und Speicherplatz in Anspruch. Diese geringere Ressourcenauslastung ermöglicht es auf einem Server mehrere Applikationen parallel laufen zu lassen, was die Nutzungsrate eines Servers verbessert.

Skalierbarkeit

Einen weiteren Vorteil bieten Container im Bereich der Skalierung: Soll innerhalb des Unternehmens ein ML Modell häufiger genutzt werden, muss die Anwendung die zusätzlichen Anfragen bedienen können. Glücklicherweise lassen sich ML Modelle mit Docker leicht skalieren indem zusätzliche Container mit der gleichen Anwendung hochgefahren werden. Insbesondere Kubernetes, eine Open Source Technologie zur Container-Orchestrierung und skalierbaren Bereitstellung von Web-Services, eignet sich aufgrund seiner Kompatibilität mit Docker für flexible Skalierung. Mit Kubernetes können Web-Services basierend auf der aktuellen Auslastung flexibel und automatisiert hoch- oder runterskaliert werden.

Bereitstellung neuer Software

Von Vorteil ist außerdem, dass Container sich nahtlos von lokalen Entwicklungsmaschinen auf Produktionsmaschinen schieben lassen. Deshalb sind sie einfach auszutauschen, wenn z.B. eine neue Version des Modells bereitgestellt werden soll. Die Isolierung des Codes und aller Abhängigkeiten in einem Container führt zudem zu einer stabileren Umgebung, in der das Modell betrieben werden kann. Dadurch treten Fehler aufgrund von bspw. falschen Versionen einzelner Bibliotheken weniger häufig auf und lassen sich gezielter beheben.

Das Modell wird innerhalb eines Containers dabei als Web-Service bereitgestellt, den andere Nutzer und Anwendungen über gewöhnliche Internetprotokolle (z.B. HTTP) ansprechen können. Auf diesem Weg kann das Modell als Web-Service von anderen Systemen und Nutzern angefragt werden, ohne dass diese selbst spezifische technischen Voraussetzungen erfüllen müssen. Es müssen also nicht erst Bibliotheken oder die Programmiersprache des Modells installiert werden, um das Modell nutzbar zu machen.

Neben Docker existieren noch weitere Containertechnologien wie rkt und Mesos, wobei Docker mit seiner nutzerfreundlichen Bedienung und ausführlichen Dokumentation neuen Entwicklern einen leichten Einstieg ermöglicht. Durch die große Nutzerbasis existieren für viele Standardanwendungen Vorlagen, die mit geringem Aufwand in Containern hochgefahren werden können. Gleichzeitig dienen diese kostenlosen Vorlagen als Basis für Entwicklungen eigener Anwendungen.

Nicht zuletzt wegen dieser Vorteile wird Docker im MLOps Prozess mittlerweile als Best Practice angesehen. Der Prozess der Modellentwicklung gleicht zunehmend dem Softwareentwicklungsprozess, nicht zuletzt auch wegen Docker. Deutlich wird dies daran, dass containerbasierte Anwendungen durch Standardtools zur stetigen Integration und Bereitstellung (CI/CD) von Web-Services unterstützt werden.

Welche Rolle spielen Docker Container in der MLOps Pipeline?

Wie bereits erwähnt, handelt es sich bei MLOps um einen komplexen Prozess der kontinuierlichen Bereitstellung von ML Modellen. Zentrale Bestandteile eines solchen Systems sind in Abbildung 1 veranschaulicht. Der MLOps Prozess ähnelt stark dem DevOps Prozess, da auch die Entwicklung von Systemen des maschinellen Lernens eine Form der Softwareentwicklung ist. Standardkonzepte aus dem DevOps Bereich, wie stetige Integration von neuem Code und Bereitstellung neuer Software, finden sich deshalb im MLOps Prozess wieder. Dabei kommen neue, ML-spezifische Bestandteile wie das kontinuierliche Modelltraining und die Modell- und Datenvalidierung hinzu.

Grundsätzlich gilt es als Best Practice die Entwicklung von ML Modellen in einer MLOps Pipeline einzubetten. Die MLOps Pipeline umfasst alle Schritte von der Bereitstellung und Transformation von Daten über das Modelltraining bis hin zur kontinuierlichen Bereitstellung fertiger Modelle auf Produktionsservern. Der Code für jeden Schritt in der Pipeline wird hierbei in einem Docker Container verpackt und die Pipeline startet die Container in einer festgelegten Reihenfolge. Docker Container zeigen besonders hier ihre Stärke, da durch die Isolierung des Codes innerhalb einzelner Container kontinuierlich Codeänderungen an den entsprechenden Stellen der Pipeline eingearbeitet werden können, ohne dass die gesamte Pipeline ausgetauscht werden muss. Dadurch sind die Kosten für die Wartung der Pipeline relativ gering. Die großen Cloud Anbieter (GCP, AWS und Microsoft Azure) bieten zudem Services an, mit denen Docker Container automatisch gebaut, bereitgestellt und als Web-Services gehostet werden können. Um die Skalierung von Containern zu erleichtern und möglichst flexibel zu gestalten, bieten Cloud Anbieter ebenfalls vollständig verwaltete Kubernetes Produkte an. Für die Verwendung von ML Modellen im Unternehmen bedeutet diese Flexibilität Kostenersparnisse, da eine ML Anwendung einfach runterskaliert wird für den Fall, dass die Nutzungsrate sinkt. Gleichermaßen kann eine höhere Nachfrage durch Bereitstellung weiterer Container gewährleistet werden, ohne dass der Container mit dem Modell gestoppt werden muss. Nutzer der Anwendung erfahren so keine unnötige Downtime.

Fazit

Für die Entwicklung von Machine Learning Modellen und MLOps Pipelines stellen Docker Container eine Kerntechnologie dar. Die Vorteile bestehen in der Portabilität, Modularisierung und Isolierung des Codes von Modellen, geringem Wartungsaufwand bei Integration in Pipelines, schnellere Bereitstellung neuer Versionen des Modells und Skalierbarkeit über serverlose Cloudprodukte zur Bereitstellung von Containern. Bei STATWORX haben wir das Potenzial von Docker Containern erkannt und nutzen diese aktiv. Mit diesem Wissen unterstützten wir unsere Kunden bei der Verwirklichung ihrer Machine Learning und KI-Projekte. Sie wollen Docker in Ihrer MLOps Pipeline nutzen? Unsere Academy bietet Remote Trainings zu Data Science mit Docker, sowie kostenlose Webinare zu den Themen MLOps und Docker an.

Über den Autor
Thomas Alcock

Thomas Alcock

I am a data scientist at STATWORX. The most interesting thing about data science is to find performative and explainable solutions to new problems.

ABOUT US


STATWORX
is a consulting company for data science, statistics, machine learning and artificial intelligence located in Frankfurt, Zurich and Vienna. Sign up for our NEWSLETTER and receive reads and treats from the world of data science and AI. If you have questions or suggestions, please write us an e-mail addressed to blog(at)statworx.com.