Ein grober Vergleich der Workflows von klassischem machine learning und generativer KI zeigt, dass die allgemeinen Schritte bei beiden ähnlich sind. Beide erfordern Datenerfassung, Feature-Engineering, Modelloptimierung, Deployment, Evaluierung usw., aber die Ausführungsdetails und der Zeitaufwand sind fundamental unterschiedlich. Am wichtigsten ist, dass generative KI einzigartige Quellen für technische Schulden einführt, die sich bei unsachgemäßer Verwaltung schnell anhäufen können, darunter:
In diesem Blog befassen wir uns nacheinander mit jeder Form der technischen Schuld. Letztendlich müssen sich Teams, die von klassischem ML zu generativer KI übergehen, dieser neuen Quellen technischer Schuld bewusst sein und ihre Entwicklungspraktiken entsprechend anpassen – indem sie mehr Zeit für Evaluierung, Stakeholder-Management, subjektive Qualitätsüberwachung und Instrumentierung aufwenden statt für die Datenbereinigung und das Feature-Engineering, die klassische ML-Projekte dominierten.
Um zu verstehen, wo das Fachgebiet heute steht, ist es nützlich, unsere Workflows für generative KI mit denen zu vergleichen, die wir für klassische Probleme des maschinellen Lernens verwenden. Das Folgende ist ein allgemeiner Überblick. Wie dieser Vergleich zeigt, bleiben die allgemeinen Workflow-Schritte zwar gleich, es gibt jedoch Unterschiede in den Ausführungsdetails, die dazu führen, dass verschiedene Schritte stärker betont werden. Wie wir sehen werden, führt die generative KI auch neue Formen der technischen Schuld ein, was Auswirkungen darauf hat, wie wir unsere Systeme in der Produktion warten.
| Workflow-Schritt | Klassisches ML | GenAI |
|---|---|---|
| Datenerfassung | Gesammelte Daten stellen reale Ereignisse dar, wie zum Beispiel Vertrieb im Einzelhandel oder Geräteausfälle. Häufig werden strukturierte Formate wie CSV und JSON verwendet. | Gesammelte Daten stellen kontextuelles Wissen dar, das einem Sprachmodell hilft, relevante Antworten zu geben. Sowohl strukturierte Daten (oft in Echtzeittabellen) als auch unstrukturierte Daten (Bilder, Videos, Textdateien) können verwendet werden. |
| Feature-Engineering/ Datentransformation | Datentransformationsschritte umfassen entweder die Erstellung neuer Features, um den Problembereich besser abzubilden (z. B. die Erstellung von Wochentags- und Wochenend-Features aus Zeitstempeldaten), oder die Durchführung statistischer Transformationen, damit Modelle besser zu den Daten passen (z. B. die Standardisierung kontinuierlicher Variablen für das k-Means-Clustering und die Durchführung einer logarithmischen Transformation von schiefverteilten Daten, damit diese einer Normalverteilung folgen). | Bei unstrukturierten Daten umfasst die Transformation das Chunking, die Erstellung von Einbettungsdarstellungen und (möglicherweise) das Hinzufügen von Metadaten wie Überschriften und Tags zu den Chunks. Bei strukturierten Daten kann dies die Denormalisierung von Tabellen umfassen, sodass große Sprachmodelle (LLMs) keine Tabellen-Joins berücksichtigen müssen. Das Hinzufügen von Metadatenbeschreibungen für Tabellen und Spalten ist ebenfalls wichtig. |
| Modell-Pipeline-Design | Wird in der Regel durch eine grundlegende Pipeline mit drei Schritten abgedeckt:
| Normalerweise umfasst dies einen Schritt zur Umschreibung von Abfragen, eine Form des Information Retrieval, möglicherweise Tool-Aufrufe und abschließende Sicherheitsprüfungen. Pipelines sind wesentlich komplexer, umfassen eine komplexere Infrastruktur wie Datenbanken und API-Integrationen und werden manchmal mit graphenartigen Strukturen gehandhabt. |
| Modelloptimierung | Die Modelloptimierung umfasst das Hyperparameter-Tuning mithilfe von Methoden wie Kreuzvalidierung, Grid-Search und Random-Search. | Während einige Hyperparameter wie Temperatur, Top-k und Top-p geändert werden können, fließt der größte Aufwand in das Tuning von Prompts, um das Verhalten des Modells zu steuern. Da eine LLM-Kette viele Schritte umfassen kann, kann ein KI-Ingenieur auch damit experimentieren, eine komplexe Operation in kleinere Komponenten aufzuteilen. |
| Fragen zur Bereitstellung | Modelle sind viel kleiner als Foundation-Modelle wie LLMs. Ganze ML-Anwendungen können auf einer CPU gehostet werden, ohne dass GPUs benötigt werden. Modellversionierung, Monitoring und Lineage sind wichtige Aspekte. Modellvorhersagen erfordern selten komplexe Ketten oder Graphen, daher werden Traces in der Regel nicht verwendet. | Da Foundation-Modelle sehr groß sind, können sie auf einer zentralen GPU gehostet und als API für mehrere KI-Anwendungen für Benutzer bereitgestellt werden. Diese Anwendungen fungieren als „Wrapper“ um die API des Foundation-Modells und werden auf kleineren CPUs gehostet. Anwendungsversionsverwaltung, Monitoring und Herkunftsnachverfolgung sind wichtige Aspekte. Da LLM-Ketten und -Graphen komplex sein können, ist zudem ein ordnungsgemäßes Tracing erforderlich, um Abfrageengpässe und Fehler zu identifizieren. |
| Bewertung | Für die Modelleistung können Data Scientists definierte quantitative Metriken wie den F1-Score für die Klassifizierung oder die Wurzel des mittleren quadratischen Fehlers für die Regression verwenden. | Die Korrektheit einer LLM-Ausgabe beruht auf subjektiven Beurteilungen, z. B. der Qualität einer Zusammenfassung oder Übersetzung. Daher wird die Antwortqualität in der Regel anhand von Richtlinien statt quantitativer Metriken beurteilt. |
Aus eigener Erfahrung bei der parallelen Bearbeitung eines Preisvorhersageprojekts und eines Projekts zur Erstellung eines Tool-aufrufenden Agenten haben wir festgestellt, dass es einige wesentliche Unterschiede in den Schritten der Modellentwicklung und -bereitstellung gibt.
Die innere Entwicklungsschleife bezieht sich typischerweise auf den iterativen Prozess, den Entwickler für maschinelles Lernen beim Erstellen und Verfeinern ihrer Modellpipelines durchlaufen. Dies geschieht in der Regel vor den Produktionstests und der Modellbereitstellung.
So verbringen Fachleute für klassisches ML und GenAI ihre Zeit in diesem Schritt unterschiedlich:
Zeitfresser bei der Entwicklung klassischer ML-Modelle
Zeitfresser bei der Entwicklung von generativen KI-Modellen und Pipelines
Die folgenden Diagramme vergleichen den Zeitaufwand für klassisches ML und generative KI im Modellentwicklungszyklus.
Im Gegensatz zum Modellentwicklungszyklus konzentriert sich der Modellbereitstellungszyklus nicht auf die Optimierung der Performance. Stattdessen konzentrieren sich die Ingenieure auf systematische Tests, die Bereitstellung und das Monitoring in Produktionsumgebungen.
Hier könnten Entwickler Konfigurationen in YAML-Dateien verschieben, um Projektaktualisierungen zu vereinfachen. Sie könnten auch Pipelines für die statische Datenverarbeitung refaktorisieren, um sie im Streaming-Verfahren auszuführen, und dabei ein robusteres Framework wie PySpark anstelle von Pandas verwenden. Schließlich müssen sie überlegen, wie sie Test-, Monitoring- und Feedbackprozesse einrichten, um die Modellqualität zu erhalten.
An diesem Punkt ist die Automatisierung unerlässlich, und kontinuierliche Integration und Bereitstellung ist eine nicht verhandelbare Anforderung. Für die Verwaltung von CI/CD für Daten- und KI-Projekte auf Databricks sind Databricks Asset Bundles in der Regel das Mittel der Wahl. Sie ermöglichen es, Databricks-Ressourcen (wie z. B. Jobs und Pipelines) als Quelldateien zu beschreiben, und bieten eine Möglichkeit, Metadaten zusammen mit den Quelldateien Ihres Projekts einzuschließen.
Wie in der Phase der Modellentwicklung sind die Aktivitäten, die in dieser Phase bei Projekten mit generativer KI im Vergleich zu klassischen ML-Projekten die meiste Zeit in Anspruch nehmen, nicht dieselben.
Zeitfresser bei der Bereitstellung klassischer ML-Modelle
for -Schleifen) Zeitfresser beim Deployment von generativen KI-Modellen
trace -Decorator für jede Funktion verwendet werden, um ihre Ein- und Ausgaben zu erfassen. Gleichzeitig können benutzerdefinierte MLflow Traces Spans innerhalb bestimmter Codeblöcke erstellt werden, um granularere Vorgänge zu protokollieren. Erst nachdem Entwickler mithilfe von Instrumentierung eine zuverlässige Wahrheitsquelle aus den Agentenausgaben aggregiert haben, können sie damit beginnen, Fehlermodi zu identifizieren und entsprechende Tests zu entwerfen.make_judge -API von MLflow oder der SIMBAAlignmentOptimizer verwendet werden.Technische Schulden entstehen, wenn Entwickler eine schnelle und unsaubere Lösung auf Kosten der langfristigen Wartbarkeit implementieren.
Technische Schulden bei klassischem ML
Dan Sculley et al. haben eine hervorragende Zusammenfassung der Arten von technischen Schulden geliefert, die diese Systeme anhäufen können. In ihrem Paper „Machine Learning: Die hochverzinsliche Kreditkarte der technischen Schulden“ teilen sie diese in drei große Bereiche auf:
Generative KI führt neue Formen technischer Schulden ein, von denen viele möglicherweise nicht offensichtlich sind. Dieser Abschnitt untersucht die Quellen dieser versteckten technischen Schulden.
Tools sind eine leistungsstarke Möglichkeit, die Fähigkeiten eines LLM zu erweitern. Wenn jedoch die Anzahl der verwendeten Tools zunimmt, kann es schwierig werden, sie zu verwalten.
Ein Tool-Wildwuchs stellt nicht nur ein Problem bei der Auffindbarkeit und Wiederverwendung dar, sondern kann sich auch negativ auf die Qualität eines generativen KI-Systems auswirken. Wenn sich die Tools unkontrolliert vermehren, treten zwei zentrale Fehlerquellen auf:
Die sauberste Lösung gegen einen Tool-Wildwuchs ist ein strategischer und minimalistischer Umgang mit den vom Team genutzten Tools.
Mit der richtigen Governance-Strategie lässt sich jedoch die Verwaltung mehrerer Tools und Zugriffe skalierbar gestalten, wenn immer mehr Teams GenAI in ihre Projekte und Systeme integrieren. Die Databricks-Produkte Unity Catalog und KI Gateway sind für diese Art von Scale ausgelegt.
Obwohl hochmoderne Modelle seitenlange Anweisungen verarbeiten können, können übermäßig komplexe Prompts zu Problemen wie widersprüchlichen Anweisungen oder veralteten Informationen führen. Dies ist insbesondere der Fall, wenn Prompts nicht bearbeitet, sondern im Laufe der Zeit von verschiedenen Fachexperten oder Entwicklern nur erweitert werden.
Wenn verschiedene Fehlermodi auftreten oder neue Abfragen zum Umfang hinzugefügt werden, ist es verlockend, einfach immer mehr Anweisungen zu einem LLM-Prompt hinzuzufügen. Ein Prompt könnte beispielsweise mit Anweisungen zur Bearbeitung von Finanzfragen beginnen und dann zu Fragen in den Bereichen Produkt, Engineering und Personalwesen verzweigen.
So wie eine „God Class“ im Software-Engineering keine gute Idee ist und aufgeteilt werden sollte, sollten auch Mega-Prompts in kleinere aufgeteilt werden. Tatsächlich erwähnt Anthropic dies in seinem Leitfaden für Prompt-Engineering, und generell gilt, dass mehrere kleinere Prompts anstelle eines langen, komplexen Prompts die Übersichtlichkeit, Genauigkeit und die Fehlerbehebung erleichtern.
Frameworks können helfen, Prompts überschaubar zu halten, indem sie Prompt-Versionen nachverfolgen und erwartete Ein- und Ausgaben erzwingen. Ein Beispiel für ein Tool zur Prompt-Versionierung ist die MLflow Prompt Registry, während Prompt-Optimierer wie DSPy auf Databricks ausgeführt werden können, um einen Prompt in eigenständige Module zu zerlegen, die einzeln oder als Ganzes optimiert werden können.
Es gibt einen Grund, warum Tracing in letzter Zeit so viel Aufmerksamkeit erhält: Die meisten LLM-Bibliotheken und Tracking-Tools bieten die Möglichkeit, die Ein- und Ausgaben einer LLM-Kette nachzuverfolgen. Wenn eine Antwort einen Fehler zurückgibt – die gefürchtete Antwort „Es tut mir leid, ich kann Ihre Frage nicht beantworten“ –, ist die Untersuchung der Ein- und Ausgaben von zwischengeschalteten LLM-Aufrufen entscheidend, um die Ursache zu ermitteln.
Ich habe einmal an einer Anwendung gearbeitet, bei der ich anfangs davon ausging, dass die SQL-Generierung der problematischste Schritt des Workflows wäre. Die Untersuchung meiner Traces zeigte jedoch ein anderes Bild: Die größte Fehlerquelle war tatsächlich ein Schritt zur Abfrageumschreibung, bei dem wir Entitäten in der Benutzerfrage in Entitäten aktualisiert haben, die unseren Datenbankwerten entsprachen. Das LLM schrieb Abfragen um, die nicht umgeschrieben werden mussten, oder begann, die ursprüngliche Abfrage mit allen möglichen zusätzlichen Informationen vollzustopfen. Dies brachte dann regelmäßig den nachfolgenden SQL-Generierungsprozess durcheinander. Das Tracing hat hier geholfen, das Problem schnell zu identifizieren.
Die Nachverfolgung der richtigen LLM-Aufrufe kann Zeit in Anspruch nehmen. Es reicht nicht aus, Tracing standardmäßig zu implementieren. Die ordnungsgemäße Instrumentierung einer App mit Observability mithilfe eines Frameworks wie MLflow Traces ist ein erster Schritt, um die Interaktionen von Agents transparenter zu machen.
LLMs sind bemerkenswert, weil man ihnen ein paar einfache Prompts geben, die Ergebnisse miteinander verketten und am Ende etwas erhalten kann, das Nuancen und Anweisungen wirklich gut zu verstehen scheint. Geht man diesen Weg jedoch zu weit, ohne die Antworten durch Nutzerfeedback zu fundieren, können sich schnell Qualitätsschulden aufbauen. Hier kann es helfen, so schnell wie möglich ein „Data Flywheel“ zu erstellen, das aus drei Schritten besteht:
Ich wurde an die Wichtigkeit von menschlichem Feedback erinnert, als ich eine Text-zu-SQL-Anwendung zum Abfrage von Sportstatistiken entwickelte. Der Fachexperte konnte erklären, wie ein Sportfan mit den Daten interagieren möchte, verdeutlichte, was ihnen wichtig ist, und lieferte weitere Einblicke, auf die ich, da ich selten Sport schaue, von selbst nie gekommen wäre. Ohne ihren Input hätte die von mir erstellte Anwendung den Bedürfnissen der Nutzer wahrscheinlich nicht entsprochen.
Obwohl das Erfassen von menschlichem Feedback von unschätzbarem Wert ist, ist es in der Regel extrem zeitaufwendig. Zuerst müssen Termine mit Fachexperten vereinbart, dann Bewertungsschemata zur Abstimmung von Expertenunterschieden erstellt und schließlich das Feedback auf Verbesserungspotenzial ausgewertet werden. Wenn die Feedback-Benutzeroberfläche in einer Umgebung gehostet wird, zu der Geschäftsanwender keinen Zugang haben, kann sich die Abstimmung mit den IT-Administratoren zur Bereitstellung der richtigen Zugriffsebene wie ein endloser Prozess anfühlen.
Die regelmäßige Absprache mit Endnutzern, Business-Sponsoren und angrenzenden Teams, um sicherzustellen, dass man das Richtige entwickelt, ist eine Grundvoraussetzung für alle Arten von Projekten. Bei Projekten mit generativer KI ist die Kommunikation mit den Stakeholdern jedoch entscheidender als je zuvor.
Warum häufige und intensive Kommunikation wichtig ist:
Es gibt viele andere Formen von technischer Schuld, die in Projekten mit generativer KI möglicherweise angegangen werden müssen, darunter die Durchsetzung angemessener Datenzugriffskontrollen, die Einrichtung von Leitplanken zur Gewährleistung der Sicherheit und zur Verhinderung von Prompt-Injections, die Vermeidung ausufernder Kosten und mehr. Ich habe hier nur diejenigen aufgeführt, die am wichtigsten erscheinen und leicht übersehen werden könnten.
Klassisches ML und generative KI sind verschiedene Ausprägungen desselben technischen Bereichs. Es ist zwar wichtig, sich der Unterschiede zwischen ihnen bewusst zu sein und die Auswirkungen dieser Unterschiede auf die Entwicklung und Wartung unserer Lösungen zu berücksichtigen, doch bestimmte Wahrheiten bleiben bestehen: Kommunikation schließt weiterhin Lücken, Monitoring beugt weiterhin Katastrophen vor, und saubere, wartbare Systeme sind auf lange Sicht immer noch leistungsfähiger als chaotische.
Möchten Sie den KI-Reifegrad Ihrer Organisation bewerten? Lesen Sie unseren Leitfaden: KI-Potenzial erschließen: Der Unternehmensleitfaden zur KI-Bereitschaft.
(Dieser Blogbeitrag wurde mit KI-gestützten Tools übersetzt.) Originalbeitrag
IA generativa
January 7, 2025/8 min de leitura

