Wie Kann KI in Microservice-Systemen Funktionieren?
Künstliche Intelligenz in Microservice-Systemen, in Kubernets-Clustern, … funktioniert das überhaupt? Sind das nicht große, unhandliche Module in unpassender Software-Architektur?
Dr. Matthias Boldt - Die Nutzung von Methoden der Künstlichen Intelligenz nimmt in der Praxis rasant zu, bei steigendem Bedarf. In vielen Fällen hat die Entwicklung diese Systeme ihren Anfang in der Forschung. Das ist gut - sehr gut - denn so gelangen neueste Erkenntnisse und Entwicklungen sehr schnell in die produktive Praxis. UND es ist gleichzeitig ein Problem: In der Forschung sind solche Systeme im Normalfall als “Demonstratoren” ausgelegt. Sie dienen dem Nachweis einer prinzipiellen Funktionalität, zur Überprüfung neuester, wissenschaftlicher Erkenntnisse, sind Vorbereitung und/oder Teil einer Veröffentlichung und nicht dafür gedacht, in der entwickelten Form praktische Arbeit auszuführen.
Daraus resultiert leider häufig, dass der KI-Modul erst einmal nicht “reentrant” ist. Das heißt, er ist als Programm nicht in der Lage, mehrere Anfragen gleichzeitig zu verarbeiten. Im schlimmsten Fall ist er sogar nur für einen einmaligen Aufruf geeignet und muss anschließend neu gestartet werden. Gerade KI-Systeme haben eine nicht zu vernachlässigende Ladezeit (ramp-up-Phase). Bis sie betriebsbereit sind, müssen die trainierten (oft riesigen) Modelle geladen und interne Strukturen initialisiert werden. Die Forschung hat Ressourcenverbrauch und Verarbeitungszeit nicht in ihrem Fokus, da es in ihr primär um den Nachweis der prinzipiellen Nutzbarkeit geht. Das kann in keinem Falle zu einem Vorwurf gemacht werden, da Forschung und Anwendungsentwicklung nun einmal vollkommen verschiedene Motivationen und Zielrichtungen haben.
Eine weitere Herausforderung für einen praktischen Einsatz von KI-Systemen kann durch eine in der Forschung genutzte Programmierumgebung entstehen. In vielen Fällen ist dies Python. Python bietet viele Vorteile, da es neben einer einfach zu nutzenden Programmiersprache eine große Laufzeitumgebung mit zusätzlichen Funktionen und mathematischen Modulen zur Verfügung stellt. Diese erleichtern die Arbeit in der Forschung und Entwicklung erheblich. Leider ergibt sich aus diesem Vorteil auch ein Nachteil für den produktiven Einsatz: Es entsteht ein großer ”Ressourcenhunger”, der sich störend in einer Cloud- und Microservices-Umgebung auswirken kann.
Die Praxis beginnt am Horizont, erst weit hinter den Prototypen
Also ist Vorsicht geboten, bei einer kurzfristigen Übernahme von KI-Systemen aus der Forschung in die Praxis. Es sind mit hoher Wahrscheinlichkeit einige Untersuchungen und Schritte notwendig, um die neue KI in ein produktives System zu integrieren.
Zu Kubernetes, Microservices, KI-Systemen und deren Kombinationen sind viele Artikel im Internet zu finden. Meist wird darin beschrieben, wie so etwas schnell zum Einsatz gebracht werden kann. Für eine praktische Nutzung in produktiv eingesetzten Software-Systemen sind viele Nebenbedingungen zu lösen. Von ”Wir haben das einmal ausprobiert und es hat prototypisch funktioniert …” bis zum stabilen, praktischen Einsatz für Kunden ist es ein weiter Weg.
… und die Lösung?
Wie nicht anders zu erwarten, besteht die Lösung in der Abarbeitung vieler Aufgaben, von denen hier einzige genannt werden sollen:
Das Modell ist auf Verzerrungen zu untersuchen. Niemand möchte in der Praxis ein System einsetzen, das z.B. durch die Diskriminierung von einzelnen Menschen oder Gruppen auffällt oder z.B. mit speziellen meteorologischen Konstellationen nicht umgehen kann und deshalb Extremsituationen fehlerhaft bewertet. Dafür sind die zum Training des Modells genutzten Daten sorgsam auszuwählen und zu ergänzen.
Das trainierte Modell sollte nach Möglichkeit in seiner Größe reduziert werden, da diese einen direkten Einfluss auf den Ressourcenverbrauch, das Laufzeitverhalten und die ramp-up-Phase des KI-Systems hat. Für Deep-Learning-Modelle bietet sich z.B. eine Konvertierung in das ONNX-Format an. Diese ist oft mit einer Reduktion der Größe verbunden.
Um mehrere Verarbeitungen parallel ablaufen lassen zu können, sollte das KI-System reentrant werden. Dafür sind z.B. Probleme zu untersuchen, die auf Grundlage statischer Datenbereiche und globaler Variablen entstehen können und eine korrekte Abarbeitung weiterer Aufgaben verhindern. Außerdem ist das System in einen Service (oder Server) umzuwandeln, der mehrere Aufrufe parallel verarbeiten kann und keine Neustarts benötigt.
Ein Ziel ist die Erzeugung eines möglichst “kleinen” Service (zumeist Containers) für den effizienten Einsatz in einer Cloud-Computing-Umgebung, wie z.B. Kubernetes. Die Größe kann entscheidend mit der Wahl der Laufzeitumgebung und Programmiersprache beeinflusst werden. Heute bieten sich entweder GO, Rust oder C++ an. Mit einigen zusätzlichen Anstregungen ist es jedoch auch möglich, mit Python optimierte, kleine Services aufzubauen.
Die Suche und Beseitigung von Memory-Leaks ist eine der wichtigsten Aufgaben. Schließlich soll der Service über Tage/Wochen/Monate ohne Neustart laufen können und sein Speicherbedarf dabei nicht ins Endlose wachsen.
Nach Möglichkeit ist eine Reduzierung der ramp-up-Phase des Service auf wenige Sekunden anzustreben. Kurze Zeitspannen für den Start einer Instanz des KI-Systems gestatten die Nutzung eines Autoscalings, um im produktiven Einsatz schnell auf steigende Anforderungen reagieren zu können.
Mit der Integration eines Cachings der Daten und Modelle kann die Reduktion des Verbrauchs an Ressourcen und der Zeiten der ramp-up-Phase unterstützt werden.
Auf jeden Fall ist eine Überwachung der wesentlichen Systemparameter zu integrieren. Mit Hilfe eines solchen health-Systems ist zum Beispiel ein automatischer Austausch und Neustart des Service bei auftretenden Problemen realisierbar, um einen unterbrechungsfreien Betrieb zu garantieren.
Obwohl obige Auflistung die wesentlichen Arbeiten enthält, ist sie in keinem Falle vollständig. Je nach gewählter Cloud-Computing-Umgebung, in der das KI-System zum praktischen Einsatz kommen soll, sind noch weitere Untersuchungen, Anpassungen und Ergänzungen notwendig.
Nutzung der Erfahrungen von sense.AI.tion
sense.AI.tion hat vielfältige, praktische Erfahrungen mit dem Einsatz von KI-Systemen als Microservices in Cloud-Software-Systemen gesammelt. Wir können bei der Integration eines solchen Bestandteils in bestehende Software-Systeme helfen … und das onshore … vom Rande Berlins … nah und kompetent. Wir geben unsere Erfahrungen gern weiter.
Bild von Gerd Altmann auf Pixabay