In seinem Blog-Artikel spricht unser Werkstudent Daniel über sein Praxissemester als Data Engineer bei inovex.
Hi – ich bin Daniel und studiere Künstliche Intelligenz an der Technischen Hochschule Deggendorf. Dort bekommen wir die Grundlagen und Theorien über Daten, deren Verarbeitung und Modellierung beigebracht. Der Einsatz von KI in Wirtschaft und Industrie ist jedoch (noch) nicht trivial. Um Einblicke in diesen spannenden, sich rasch entwickelnden Bereich zu bekommen, habe ich mich entschieden, mein Praxissemester bei inovex zu absolvieren.
Mein Weg zu inovex
Bewerbungsablauf
Ich bin auf inovex durch das Online-Jobportal Stepstone aufmerksam geworden. Beim Durchlesen der Anzeige fühlte ich mich sehr angesprochen und habe mich dann entschieden, mich für die Praktikumsstelle zu bewerben. Nach nur zwei Wochen hatte ich bereits die Zusage. Ich konnte dann angeben, in welchem Aufgabenbereich ich arbeiten möchte.
Mich hat inovex dadurch überzeugt, dass in der Firma nicht nur Kundenzufriedenheit und Wirtschaftlichkeit großgeschrieben werden, sondern auch die Mitarbeiterzufriedenheit. Hierzu bietet inovex eine moderne Arbeitskultur an, die durch flache Hierarchien sowie eine Möglichkeit für Home-Office gekennzeichnet ist.
Außerdem hat die Firma ein Mentoring-Programm für Neueinsteiger:innen, was meine Entscheidung stark beeinflusst hat. Schließlich wurde im Bewerbungsgespräch betont, dass inovex starken Fokus auf die Unterstützung von Student:innen setzt. Es gibt sogar Forschungsprojekte, die zu großen Teilen von Studierenden umgesetzt werden und in denen man neue Technologien frei einsetzen und erlernen kann.
Erwartungen an das Praktikum
Bei meiner Bewerbung habe ich mich bewusst für den Aufgabenbereich Data Management & Analytics (DMA) entschieden. Der Hauptgrund dafür war, dass ich das Gelernte im Studium in der Praxis umsetzen wollte. Hierbei habe ich Aufgaben wie beispielsweise Datenanalyse und die Gestaltung von KI-Modellen erwartet. Im Studium haben wir hauptsächlich mit der Programmiersprache R daran gearbeitet. In der Praxis bin ich aber davon ausgegangen, dass solche Aufgaben eher mit Python durchgeführt werden. Ich habe mich also darauf gefreut, mich intensiver mit Python auseinanderzusetzen und die bekannten ML-Bibliotheken auszuprobieren.
Im Datenumfeld gibt es heutzutage viele verschiedene Rollen. Vom Data Engineer, ML Engineer bis zum Data Scientist, die Unterschiede zwischen diesen Rollen war mir bisher unklar. Daher wollte ich meine Zeit bei inovex nutzen, um die Grenzen dazwischen etwas besser zu verstehen. Für mich standen also folgende Fragen im Vordergrund: Ist ein Job in diesem Bereich etwas für mich und kann ich mir vorstellen, zukünftig im Datenumfeld eine Karriere zu machen?
Man arbeitet in Software-Projekten nie alleine. inovex legt dabei viel Wert auf Agilität. Mit dem Thema habe ich auch schon im Studium erste Berührungspunkte bekommen. Allerdings war ich gespannt zu erfahren, wie agile Werte und Arbeitsmethoden in einem modernen Unternehmen wie inovex gelebt und ausgeübt werden.
Meine Arbeit bei inovex
Während meines Praktikums war ich im Aufgabenbereich Data Management & Analytics tätig und habe an dem Forschungsprojekt “Servicemeister“ mitgewirkt, in dem wir ein Ticketsystem zur Optimierung von Instandhaltungsprozessen für einen Kunden aus der Automobilindustrie entwickelt haben. Hierfür sollte KI eingesetzt werden, um das System intelligent zu machen.
Projektvorstellung
Im Servicemeister-Forschungsprojekt geht es darum, ein Intelligentes Service-Ticketing System (ISTS) für einen Hersteller von Automobilkomponenten zu entwickeln. Das System soll die regelmäßige Wartung und Instandhaltung seiner Werkzeugmaschinen unterstützen. Bei der Instandhaltung sollte das auftretende Problem beschrieben und einer Problemkategorie zugeordnet werden. Hierbei soll das Ticketsystem dem Kunden ermöglichen, seine Wartungsprozesse durchzuführen und zu optimieren. Was macht aber das System intelligent? Konkret soll es folgende Features aufweisen: das Vorschlagen von ähnlichen Problembeschreibungen, die Vorhersage von Problemkategorien anhand einer gegebenen Beschreibung, und das Vorschlagen von Lösungen basierend auf vorherigen Instandhaltungsaufträgen. Die Umsetzung der Features lässt sich mit verschiedenen KI-Modellen realisieren.
Teamwork
Unser Projektteam setzt sich aus Festangestellten und Student:innen zusammen und umfasst folgende Rollen: Product Owner, Frontend-Entwickler, sowie Backend-Entwickler:innen. Der Product Owner ist unser Ansprechpartner gegenüber dem Kunden und spielt eine wesentliche Rolle bei der Planung und Priorisierung von Aufgaben. Die Frontend-Entwickler sind für die Gestaltung der ISTS-Webanwendung und ihrer Benutzeroberfläche zuständig. Die Backend-Entwickler:innen kümmern sich wiederum um die API-Schnittstellen, Geschäftslogik sowie KI-Services.
Wir haben uns im Projekt agil bewegt. Ein Sprint geht über zwei Wochen und in jeder Woche gibt es zwei Daily Standups. Im Standup berichtet jede:r, was er/sie gemacht hat und welche Herausforderungen der Zielerfüllung im Weg stehen. Am Ende eines Sprints findet ein Review und ein Planning statt. Darin werden alle im Sprint bearbeiteten Tasks besprochen und der nächste Sprint geplant. Außerdem gibt es mit dem Kunden einmal pro Sprint ein virtuelles Treffen, um den Kunden auf dem neuesten Stand zu halten und um Feedback zu erhalten. Da die Teammitglieder über verschiedene Standorte verteilt sind, erfolgt die Kommunikation größtenteils asynchron über Slack. Meetings wie Standups und Sprint Reviews werden jedoch synchron mit Google Meet durchgeführt.
Neben den festen Sprint-Terminen tauschen wir uns auch regelmäßig untereinander aus. Beispielsweise treffen wir uns in Pair-Programming-Sessions, um gemeinsam an einer Aufgabe zu arbeiten oder Bugs zu beheben. Bei jedem neuen Feature führen wir Code Reviews durch, in denen man den neuen Code von anderen Entwickler:innen überprüft und ggf. Feedback dazu gibt. Hier stellen wir sicher, dass der Code ausreichend getestet und in dem Confluence-Wiki dokumentiert ist.
Aufgaben
Meine Aufgaben können grob in folgende Bereiche unterteilt werden: traditionelle Softwareentwicklung, Gestaltung von KI-Modellen, sowie Aufbau der Software-Infrastruktur.
Erweiterung des Test-Suites
Nach einer Einarbeitungsphase von zwei Wochen konnte ich mit meiner ersten Aufgabe anfangen: die bestehenden und teilweise veralteten Tests in der Codebase zu überarbeiten. Die Tests lassen sich zwischen Unit-Tests und Integration-Tests unterscheiden. Um aber überhaupt funktionale Tests schreiben zu können, muss man wissen, wie die zu testenden Codestellen funktionieren. Aus diesem Grund eignet sich die Aufgabe für Neueinsteiger:innen. Sie bestand für mich aus:
- Verständnis, wie HTTP-Anfragen an die Flask API strukturiert sind und wie diese intern verarbeitet werden.
- Schreiben von Tests mit dem pytest Framework.
- Herausforderungen lösen: Abhängigkeiten in stark verankerten Codestellen lösen.
Anonymisierung der Datenbasis
Das ISTS soll künftig auf einer Fachmesse ausgestellt werden. Aus datenschutzrechtlichen Gründen war es von dem Kunden gewünscht, vor der Ausstellung persönliche und betriebliche Informationen in der Datenbank zu anonymisieren. Betroffen sind zum Beispiel Personennamen, E-Mail-Adressen, und Maschinenbezeichnungen. Hierfür habe ich zusammen mit einer anderen Praktikantin ein Python-Skript entwickelt, um diesen Vorgang zu automatisieren:
- Anonymisierung von Personennamen: Extrahieren von Namen aus Datenbank und Ergänzung durch nicht enthaltene Namen.
- Verwendung von Python-Bibliothek beautifulsoup4, um Namenslisten im Internet zu extrahieren.
- Namensliste mit pandas so manipulieren, um sie zu normalisieren, zu taggen und in einer Regular-Expression zu verketten.
- Das resultierende RegEx verwenden, um betroffene Stellen zu ersetzen.
Integration von Clustering als KI-Service
Einer der KI-gestützten Features für das ISTS ist die Zusammenfassung von ähnlichen Aufträgen. Hier geht es um die Entwicklung und Integration von einem Clustering-Modell, um häufig auftretende Einträge zu gruppieren. Meine Aufgabe war es, den bereits entwickelten Trainingsablauf in unserem Trainings-Service einzubinden. Dieser ist eine auf der Google Cloud Platform (GCP) gehostete REST-API, der unsere Modelle in einer bestimmten Zeitrhythmus trainiert. Bei jedem Trainingsdurchlauf werden Hyperparameter und Performance-Metriken mit dem Modellversionierungstool MLFlow getrackt. Meine Aufgabe umfasste:
- Übersteigen des Time-Outs der maximalen Trainingsdauer im Microservice lösen.
- Hyperparameter-Tuning eines Clustering Modells (OPTICS).
- Das Modell vom Training bis hin zur Produktion bringen.
Umsetzung von Demonstrator-Infrastruktur
Wie bereits erwähnt, soll das ISTS in der nahen Zukunft auf einer Fachmesse vorgestellt werden. Da es aber kontinuierlich weiterentwickelt wird, ist es nötig, eine stabile Version für die Ausstellung zur Verfügung zu stellen. Daher wird eine separat laufende Instanz benötigt, eine sogenannte Demonstrator-Instanz.
Für einen lauffähigen Demonstrator werden folgende Kriterien voraus definiert: Erstens, der Demonstrator soll auf einen separaten Google Cloud Run Instanz laufen, jedoch vom gleichen Repository aus deploybar sein. Zweitens sollen sowohl Code-Abhängigkeiten als auch Applikationsvariablen je nach Instanz konfigurierbar sein. Dafür habe ich folgende Aufgaben übernommen:
- Einen Instanz von Quellcode bis zum Live-Service bringen und in verschiedenen Deployment-Umgebungen Applikationsabhängigkeiten sauber trennen.
- Erstellen einer Cloud-Run-Instanz mit dem Infrastructure-as-Code-Tool Terraform.
- Erweiterung der bestehenden Gitlab CI-Pipeline, um mehrere Deployment Targets zu ermöglichen.
- Anpassung des Inferenzvorgang, damit in der Demonstrator-Instanz nur als produktionsbereit gelabelte Modelle angewendet werden.
Reflexion
Alles in allem bin ich mit meinem Praktikum bei inovex sehr zufrieden. In diesen sechs Monaten habe ich als Teil eines agilen Teams spannende und abwechslungsreiche Aufgaben bearbeitet. Dabei konnte ich mich fachlich sowie persönlich weiterentwickeln, indem ich neue Technologien kennenlernte und diese in Zusammenarbeit mit meinen Teammitgliedern im Projekt implementierte.
Der tatsächliche Arbeitsalltag hat meine Erwartungen erfüllt. Ich konnte mich wie erwartet in das Python Ecosystem tiefer eintauchen und kann jetzt nachvollziehen, wie man von einfachen Jupyter-Notebooks aus eine ganze Webapplikation bauen kann, um Data Science to Production zu betreiben.
Durch die vielfältigen Aufgaben konnte ich außerdem Einblicke gewinnen, wie der Alltag der verschiedenen Rollen im Datenumfeld aussehen würde. Die Modellierungsaufgaben wie Hyperparameter-Tuning finde ich nicht so spannend, weshalb ich mir einen Job in der reinen Data Science weniger vorstellen kann. Dagegen haben mich die Infrastrukturaufgaben am meisten interessiert. Zum jetzigen Zeitpunkt kann ich mir daher durchaus vorstellen, mich auf Operations oder Data Engineering zu spezialisieren.
Ich habe durch die im Studium vermittelten Inhalte eine gute Grundlage für das Praktikum gehabt. Bei der täglichen Arbeit konnte ich keine auffälligen theoretischen oder fachlichen Defizite erkennen, die nicht im Studium behandelt wurden. Auch bei fremden Themen war ein unkomplizierter Einstieg möglich. An dieser Stelle muss ich die Sprachverarbeitung sowie Software-Engineering Veranstaltungen erwähnen, da ich die Inhalte dieser Vorlesungen am meisten im Arbeitsalltag konkret angewendet habe.
Abschließend war auch die Betreuung durch meinen Mentor sowie meine Teamlead sehr sinnvoll und passend, da sie mir einen schnellen Einstieg in die Unternehmensprozesse ermöglicht haben. Sie waren sehr hilfsbereit und haben sich immer Zeit für mich genommen. Ich freue mich darauf, zukünftig als Werkstudent weitere Erfahrungen bei inovex sammeln zu dürfen.
Wer mehr über das ISTS erfahren möchte, kann gerne hier weiterlesen.