Anwendungsdesign für KI-Workloads in Azure
Es gibt viele Optionen, die Sie berücksichtigen sollten, wenn Sie eine Anwendung mit KI-Funktionen erstellen. Ihre einzigartigen funktionalen und nichtfunktionalen Anforderungen, z. B. ob es sich bei dem Anwendungsfall um traditionelles maschinelles Lernen, generative, deterministisch oder eine Kombination aus KI-Typen handelt, helfen Ihnen, allgemeine Entscheidungen über Ihr Design einzugrenzen. Sie werden diese Entscheidungen berücksichtigen, wenn Sie von High-Level-Designbereichen zu Designbereichen auf niedrigerer Ebene übergehen.
Wie im Artikel Erste Schritte erläutert, ist die Entscheidung, ob Sie Ihr eigenes Modell erstellen oder ein vordefiniertes Modell verwenden, eine der ersten wichtigen Entscheidungen, die Sie treffen müssen. Wenn Sie ein vorgefertigtes Modell verwenden, sollten Sie die folgenden Punkte berücksichtigen:
Katalogquellen. Erkunden Sie Repositorys wie den Hugging Face Model Hub, TensorFlow Hub und den Azure AI Foundry-Portalmodellkatalog, um vortrainierte Modelle zu finden. Diese Plattformen bieten einen umfangreichen Katalog von Modellen für verschiedene Aufgaben.
Lizenzierung: Stellen Sie sicher, dass die Lizenzbedingungen des Modells Ihren Sicherheits-, Compliance- und Anwendungszielen entsprechen, insbesondere, wenn Sie beabsichtigen, die Anwendung zu verteilen oder in andere Dienste zu integrieren.
Wichtige Komponenten. Schauen Sie sich die Architektur, Schulungsdaten, Leistung und Lizenzierung des Modells an, um festzustellen, ob sie für Ihre Aufgabe oder Domäne optimiert ist.
Anleitungen zur Auswahl einer Hostingplattform finden Sie unter Überlegungen zur Modell-Hosting- und Inferenzplattform.
In diesem Artikel werden allgemeine Entwurfsbereiche und Faktoren beschrieben, die Sie berücksichtigen sollten, wenn Sie Entscheidungen zu Technologie und Ansatz treffen.
Empfehlungen
In der folgenden Tabelle sind die Empfehlungen in diesem Artikel zusammengefasst.
Empfehlung | Beschreibung |
---|---|
Priorisieren Sie Off-the-Shelf-Lösungen. | Verwenden Sie wann immer praktisch Plattform-as-a-Service-Lösungen (PaaS), um Arbeitsauslastungsfunktionen zu verarbeiten. Verwenden Sie vordefinierte und vortrainierte Modelle, wenn möglich, um die Betriebs- und Entwicklungslast für Ihre Arbeitsauslastung und Ihre Betriebsteams zu minimieren. |
Abstrakte Funktionen und Funktionen, die vom Client entfernt sind. | Halten Sie den Client so schlank wie möglich, indem Sie Backend-Dienste entwerfen, die übergreifende Belange wie Ratenbegrenzungen und Failover-Vorgänge behandeln. |
Blockieren des Zugriffs auf die Datenspeicher. | Code im KI-System sollte nicht direkt auf Ihre Datenspeicher zugreifen. Leiten Sie alle Datenanforderungen über eine API-Ebene weiter. Die APIs sollten speziell für die erforderliche Aufgabe erstellt werden. |
Isolieren Sie Ihre Modelle. | Verwenden Sie wie bei den Datenspeichern eine API-Ebene, um als Gateway für Anforderungen an das Modell zu fungieren. Einige PaaS-Lösungen wie Azure OpenAI Service und Azure Machine Learning verwenden zu diesem Zweck SDKs. Viele Tools, wie Prompt Flow, enthalten native Unterstützung für die Weitergabe von APIs an den Dienst. |
Entwerfen Sie Komponenten, die unabhängig bereitgestellt werden können. | KI-Modelle, Daten-Pipelines, Front-End-Komponenten und Microservices wie Datenvorverarbeitung, Funktionsextraktion und Ableitung von Schlussfolgerungen sollten unabhängig voneinander bereitgestellt werden können, um die Flexibilität, Skalierbarkeit und Bedienbarkeit Ihres Workloads zu optimieren. |
Containerisieren von Komponenten
Um sicherzustellen, dass Ihre unabhängig bereitgestellten Komponenten vollständig eigenständig sind und Ihre Bereitstellungen optimieren möchten, sollten Sie die Containerisierung als Teil Ihrer Entwurfsstrategie in Betracht ziehen. Die folgenden Komponenten sollten containerisiert werden:
Microservices. Einzelne Microservices, die bestimmte Funktionen der Anwendung verarbeiten, z. B. Datenverarbeitung, Modellinferenz und Benutzerauthentifizierung, sollten containerisiert werden. Dieser Ansatz ermöglicht eine unabhängige Bereitstellung und Skalierung und erleichtert effizientere Updates und Wartung.
KI-Modelle. Containerisieren Sie KI-Modelle, um sicherzustellen, dass alle Abhängigkeiten, Bibliotheken und Konfigurationen gebündelt sind. Dieser Ansatz isoliert die Modellumgebung vom Hostsystem, um Versionskonflikte zu verhindern und ein einheitliches Verhalten in verschiedenen Bereitstellungsumgebungen sicherzustellen.
Pipelines zur Datenverarbeitung. Alle Datenverarbeitungsaufgaben, die einer Modelleinleitung vorausgehen oder folgen, wie z. B. Datenreinigung, Transformation und Featureextraktion, sollten containerisiert werden. Dieser Ansatz verbessert die Reproduzierbarkeit und vereinfacht die Verwaltung von Abhängigkeiten.
Infrastructure-as-a-Service. Dienste, die Infrastrukturunterstützung bereitstellen, z. B. Datenbanken und Zwischenspeicherungsebenen, können auch von der Containerisierung profitieren. Die Containerisierung dieser Dienste trägt dazu bei, die Versionskonsistenz zu gewährleisten und die Skalierung und Verwaltung dieser Komponenten zu vereinfachen.
Gemeinsames Verlagern von KI-Komponenten mit anderen Workloadkomponenten
Es gibt mehrere gute Gründe, Ihre KI-Komponenten mit anderen Workload-Komponenten zusammenzulegen, doch es gibt Kompromisse, die damit verbunden sind. Aus den folgenden Gründen können Sie sich für die Co-Location von Komponenten entscheiden:
Latenzempfindlichkeit. Platzieren Sie AI-Komponenten zusammen mit anderen Diensten, wie zum Beispiel API-Hosting, wenn eine geringe Latenz wichtig ist. Wenn Sie beispielsweise echtzeitbasierte Ableitungen benötigen, um die Benutzererfahrung zu verbessern, kann das Platzieren von KI-Modellen in der Nähe der API die Zeit minimieren, die zum Abrufen von Ergebnissen benötigt wird.
Datenabstand. Wenn KI-Modelle häufigen Zugriff auf bestimmte Datasets erfordern, z. B. einen Suchindex, können die Zuordnung dieser Komponenten die Leistung verbessern und den Aufwand der Datenübertragung verringern, um die Verarbeitung und Ableitung zu beschleunigen.
Ressourcenauslastung. Wenn bestimmte Komponenten komplementäre Ressourcenanforderungen haben, wie z. B. CPU und Arbeitsspeicher, kann ihre gemeinsame Platzierung die Ressourcennutzung optimieren. Beispielsweise kann ein Modell, das eine erhebliche Berechnung erfordert, Ressourcen mit einem Dienst teilen, der gleichzeitig niedrigere Anforderungen hat.
Kompromiss. Bei der Entscheidung für die Zusammenlegung von Komponenten müssen Sie Kompromisse eingehen. Möglicherweise verlieren Sie die Möglichkeit, Komponenten unabhängig bereitzustellen oder zu skalieren. Sie könnten auch das Risiko von Fehlfunktionen erhöhen, indem Sie den potenziellen Radius von Vorfällen vergrößern.
Bewerten der Verwendung von Orchestratoren in generativen KI-Lösungen
Ein Orchestrator verwaltet einen Workflow, indem er die Kommunikation zwischen den verschiedenen Komponenten der KI-Lösung koordiniert, die sonst in komplexen Workloads schwer zu verwalten wäre. Es wird empfohlen, einen Orchestrator in Ihr Design zu integrieren, wenn Ihre Workload eines der folgenden Merkmale aufweist:
Komplexe Workflows. Der Workflow umfasst mehrere Schritte, wie Vorverarbeitung, Modellverkettung oder Nachbearbeitung.
Bedingte Logik. Entscheidungen, wie das Weiterleiten von Resultaten an verschiedene Modelle, müssen dynamisch basierend auf Modelloutputs getroffen werden.
Skalierung und Ressourcenverwaltung. Sie müssen die Ressourcenzuordnung für Anwendungen mit hohem Volumen mithilfe der Modellskalierung verwalten, die auf Bedarf basiert.
Status-Management. Sie müssen den Zustand und den Speicher von Benutzerinteraktionen verwalten.
Datenabruf. Sie müssen in der Lage sein, Erweiterungsdaten aus dem Index abzurufen.
Überlegungen zur Verwendung mehrerer Modelle
Wenn Ihre Workload mehrere Modelle verwendet, ist ein Orchestrator unerlässlich. Der Orchestrator leitet Daten und Anfragen an das entsprechende Modell basierend auf dem Anwendungsfall weiter. Planen Sie den Datenfluss zwischen Modellen, um sicherzustellen, dass Ausgaben aus einem Modell als Eingaben für ein anderes dienen können. Die Planung kann datentransformations- oder Anreicherungsprozesse umfassen.
Orchestrierung und Agenten
Für generative KI-Workloads sollten Sie einen agentbasierten, manchmal als agentisch bezeichneten Ansatz für Ihr Design in Betracht ziehen, um Ihrer Orchestrierung Erweiterung hinzuzufügen. Agents stellen kontextgebundene Funktionen bereit. Sie haben viele Eigenschaften mit Microservices gemeinsam und führen Aufgaben in Verbindung mit einem Orchestrator aus. Der Orchestrator kann Aufgaben für einen Pool von Agents ankündigen, oder Agents können Funktionen beim Orchestrator registrieren. Beide Ansätze erlauben es dem Orchestrator, dynamisch zu bestimmen, wie die Abfrage unter den Agenten aufgeteilt und geroutet werden soll.
Agentenansätze sind ideal, wenn Sie über eine gemeinsame Oberfläche mit mehreren, sich entwickelnden Funktionen verfügen, die im Laufe der Zeit in den Flow integriert werden können, um weitere Fähigkeiten und Basisdaten hinzuzufügen.
Bei komplexen Workloads mit vielen Agents ist es effizienter, Agents die dynamische Zusammenarbeit zu ermöglichen, anstatt einen Orchestrator zu verwenden, um Aufgaben aufzulösen und ihnen zuzuweisen.
Die Kommunikation zwischen Orchestrator und Agents sollte einem Themenwarteschlangenmuster folgen, bei dem Agents Abonnenten eines Themas sind und der Orchestrator Aufgaben über eine Warteschlange sendet.
Die Verwendung eines agentischen Ansatzes funktioniert am besten mit einem Orchestrierungsmuster und nicht mit einem Choreographiemuster.
Weitere Informationen finden Sie unter Überlegungen zur Orchestrierungsplattform.
Bewerten der Verwendung von API-Gateways
API-Gateways wie Azure API Management abstrahieren Funktionen von APIs, wodurch die Abhängigkeiten zwischen dem anfragenden Dienst und der API entkoppelt werden. API-Gateways bieten die folgenden Vorteile für KI-Workloads:
Mehrere Microservices. Gateways helfen Ihnen, mehrere KI-Modellendpunkte zu verwalten, wenn Sie konsistente Richtlinien erzwingen müssen, z. B. Ratelimiting und Authentifizierung.
Traffic-Management. Gateways helfen Ihnen, Apps mit hohem Datenverkehr effizient zu verwalten, indem Sie Anforderungen verwalten, Antworten zwischenspeichern und Lasten verteilen.
Sicherheit. Gateways bieten zentralisierte Zugriffssteuerung, Protokollierung und Bedrohungsschutz für die APIs hinter dem Gateway.
Verwenden von KI-Anwendungsentwurfsmustern
Mehrere gängige Designmuster wurden in der Branche für KI-Anwendungen etabliert. Sie können sie verwenden, um Ihr Design und Ihre Implementierung zu vereinfachen. Zu diesen Entwurfsmustern gehören:
Modell-Ensembling. Dieses Entwurfsmuster umfasst das Kombinieren von Vorhersagen aus mehreren Modellen, um die Genauigkeit und Robustheit zu verbessern, indem die Schwächen einzelner Modelle gemildert werden.
Microservices-Architektur. Durch das Trennen von Komponenten in unabhängig bereitgestellte Dienste wird die Skalierbarkeit und Wartung verbessert. Es ermöglicht Teams, gleichzeitig an verschiedenen Teilen der Anwendung zu arbeiten.
Ereignisgesteuerte Architektur. Die Verwendung von Ereignissen zum Auslösen von Aktionen ermöglicht entkoppelte Komponenten und Echtzeitverarbeitung, um das System reaktionsfähiger und anpassungsfähiger für die Änderung von Daten zu machen.
RAG-Muster- und Blockierungsstrategien
Das muster der Retrieval-Augmented Generation (RAG) kombiniert generative Modelle mit Abrufsystemen, die es dem Modell ermöglichen, auf externe Wissensquellen zuzugreifen, um den Kontext und die Genauigkeit zu verbessern. In der Artikelserie Entwerfen und entwickeln einer RAG-Lösung finden Sie eine ausführliche Anleitung zu diesem Muster. Es gibt zwei RAG-Ansätze:
Just-in-Time. Dieser Ansatz ruft relevante Informationen zum Zeitpunkt einer Anforderung dynamisch ab, um sicherzustellen, dass die neuesten Daten immer verwendet werden. Es ist vorteilhaft in Szenarien, die einen Echtzeitkontext erfordern, aber es kann zu Latenz führen.
Vorkalkuliert (zwischengespeichert). Diese Methode umfasst das Zwischenspeichern von Abrufergebnissen, um die Reaktionszeiten zu reduzieren, indem vorab berechnete Daten bereitgestellt werden. Es eignet sich für Szenarien mit hohem Bedarf, in denen konsistente Daten gespeichert werden können. Die Daten spiegeln möglicherweise nicht die aktuellsten Informationen wider, was zu Relevanzproblemen führen könnte.
Wenn Sie ein RAG-Muster verwenden, ist eine klar definierte Chunking-Strategie entscheidend, um die Leistungseffizienz Ihrer Workload zu optimieren. Beginnen Sie mit der Anleitung aus der Serie Entwerfen und entwickeln einer RAG-Lösung. Im Folgenden finden Sie einige zusätzliche Empfehlungen, die Sie berücksichtigen sollten:
Implementieren Sie eine dynamische Blockierungsstrategie, die Datenblöcke basierend auf Datentyp, Abfragekomplexität und Benutzeranforderungen anpasst. Dadurch kann die Abrufeffizienz und die Kontexterhaltung verbessert werden.
Integrieren Sie Feedbackschleifen, um Blockierungsstrategien basierend auf Leistungsdaten zu verfeinern.
Bewahren Sie die Datenlinie für Blöcke auf, indem Sie Metadaten und eindeutige Bezeichner verwalten, die mit der Erdungsquelle verknüpft sind. Eine klare Dokumentation der Datenherkunft hilft dabei sicherzustellen, dass Benutzer den Ursprung der Daten, deren Transformationen und ihren Beitrag zur Ausgabe verstehen.
Gründe für die Verwendung von Entwurfsmustern
Erwägen Sie die Verwendung dieser Entwurfsmuster, wenn Ihr Anwendungsfall die beschriebene Bedingung erfüllt:
Komplexe Workflows. Wenn Sie komplexe Workflows oder Interaktionen zwischen mehreren KI-Modellen haben, können Muster wie RAG oder Microservices dabei helfen, Komplexität zu verwalten und eine klare Kommunikation zwischen Komponenten sicherzustellen.
Skalierbarkeitsanforderungen. Wenn die Nachfrage nach Ihrer Anwendung schwankt, ermöglicht ein Muster wie Microservices, dass einzelne Komponenten unabhängig voneinander skaliert werden können, um unterschiedliche Lasten aufzunehmen, ohne die Gesamtleistung des Systems zu beeinträchtigen.
Datengesteuerte Anwendungen. Wenn Ihre Anwendung umfangreiche Datenverarbeitung erfordert, kann eine ereignisgesteuerte Architektur Echtzeit-Reaktionsfähigkeit und effiziente Datenverarbeitung bieten.
Hinweis
Kleinere Anwendungen oder POCs profitieren in der Regel nicht von diesen Entwurfsmustern. Diese Anwendungen sollten auf Einfachheit ausgelegt sein. Ebenso ist die Verwendung eines einfachen Entwurfs, der später umgestaltet werden kann, ein besserer Ansatz als die Übernahme eines komplexen Entwurfsmusters, wenn Sie Ressourceneinschränkungen (Budget, Zeit oder Mitarbeiteranzahl) haben.
Auswählen der richtigen Frameworks und Bibliotheken
Die Wahl von Frameworks und Bibliotheken ist eng mit dem Anwendungsdesign verbunden. Sie wirken sich auf Leistung, Skalierbarkeit und Wartung aus. Designanforderungen können ihre Framework-Auswahl jedoch einschränken. Die Verwendung des Semantischen Kernel SDK fördert z. B. häufig ein mikroservicesbasiertes Design, bei dem jeder Agent oder jede Funktion in seinem eigenen Dienst gekapselt wird. Berücksichtigen Sie diese Faktoren, wenn Sie Frameworks und Bibliotheken auswählen:
Anwendungsanforderungen. Die Anforderungen der Anwendung, z. B. Echtzeitverarbeitung oder Batchverarbeitung, können die Auswahl des Frameworks einschränken. Wenn die Anwendung beispielsweise eine geringe Latenz erfordert, müssen Sie möglicherweise ein Framework verwenden, das über asynchrone Funktionen verfügt.
Integrationsanforderungen. Für das Design sind möglicherweise bestimmte Integrationen mit anderen Systemen oder Diensten erforderlich. Wenn ein Framework die erforderlichen Protokolle oder Datenformate nicht unterstützt, müssen Sie den Entwurf möglicherweise überdenken oder ein anderes Framework auswählen.
Fachwissen des Teams. Die Fähigkeiten des Entwicklungsteams können die Framework-Auswahl einschränken. Ein Design, das auf einem weniger vertrauten Framework basiert, kann zu einer erhöhten Entwicklungszeit und Komplexität führen, sodass Sie ein vertrautes Tool verwenden möchten.
Entwerfen einer Strategie für Identitäten, Autorisierung und Zugriff
Im Allgemeinen sollten Sie Identität, Autorisierung und Zugriff auf die gleiche Weise angehen, als würden Sie gewöhnlicherweise Anwendungen entwerfen. Sie sollten einen Identitätsanbieter wie Microsoft Entra ID verwenden, um diese Bereiche so weit wie möglich zu verwalten. Viele KI-Anwendungen haben jedoch einzigartige Herausforderungen, die besondere Berücksichtigung erfordern. Es ist manchmal schwierig oder sogar unmöglich, Zugriffssteuerungslisten (ACLs) im System ohne neue Entwicklungen beizubehalten.
Siehe Anleitung zum Entwurf einer sicheren mandantenfähigen RAG-Ableitungslösung, um zu erfahren, wie Sie Dokumente und Chunks mit sicherheitsrelevanten Metadaten versehen können. Diese Einschränkung kann auf Sicherheitsgruppen oder ähnlichen Organisationskonstrukten basieren.
Berücksichtigen Sie nicht-funktionale Anforderungen
Ihre Arbeitsauslastung kann nicht-funktionale Anforderungen haben, die aufgrund von Faktoren, die KI-Technologien inhärent sind, Herausforderungen darstellen. Im Folgenden finden Sie einige häufige nicht funktionsfähige Anforderungen und deren Herausforderungen:
Latenz der Modellableitung/Zeitüberschreitungen. KI-Anwendungen erfordern häufig Echtzeit- oder Nahezu-Echtzeitantworten. Das Design für geringe Latenzzeiten ist entscheidend. Es umfasst die Optimierung der Modellarchitektur, der Datenverarbeitungspipeline und der Hardwareressourcen. Die Implementierung von Caching-Strategien und die Sicherstellung des effizienten Ladens von Modellen sind ebenfalls unerlässlich, um Timeouts zu vermeiden und zeitnahe Antworten bereitzustellen.
Token- oder Anfrage-Durchsatzbeschränkungen. Viele KI-Dienste legen Beschränkungen für die Anzahl der Token oder den Durchsatz von Anforderungen fest, insbesondere bei cloudbasierten Modellen. Das Design für diese Beschränkungen erfordert eine sorgfältige Verwaltung der Eingabegrößen, das Batching von Anfragen, wenn dies erforderlich ist, und möglicherweise die Implementierung von Mechanismen zur Begrenzung der Rate oder der Warteschlange, um die Erwartungen der Benutzer zu erfüllen und Dienstunterbrechungen zu vermeiden.
Kosten- und Rückbuchungsszenarien. Die Gestaltung für Kostentransparenz bedeutet die Implementierung von Nachverfolgungs- und Berichtsfunktionen zur Nutzung, die Chargeback-Modelle unterstützen. Mit diesen Funktionen können Organisationen Kosten genau auf verschiedene Abteilungen verteilen. Die Verwaltung von Rückbuchungen erfolgt in der Regel über ein API-Gateway, wie Azure API Management.