Anwendungsdesign für KI-Workloads in Azure
Es gibt viele Optionen, die Sie bei der Planung der Erstellung einer Anwendung mit KI-Funktionen berücksichtigen können. Ihre einzigartigen funktionalen und nichtfunktionalen Anforderungen helfen Ihnen, allgemeine Entscheidungen über Ihr Design einzugrenzen, z. B. ob es sich bei dem Anwendungsfall um herkömmliche maschinelles Lernen, generative, deterministische oder eine Kombination von KI-Typen handelt. Während Sie von allgemeinen Entwurfsbereichen zu Entwurfsbereichen auf niedrigerer Ebene wechseln, gibt es mehrere Möglichkeiten, die Sie auf dem Weg berücksichtigen sollten.
Wie im Artikel "Erste Schritte " erläutert, ist die Auswahl, ob Sie Ihr eigenes Modell erstellen oder ein vordefiniertes Modell verwenden möchten, eine der ersten wichtigen Entscheidungen, die Sie treffen möchten. Berücksichtigen Sie bei der Auswahl eines vorgefertigten Modells die folgenden Punkte:
Katalogquellen. Erkunden Sie Repositorys wie Hugging Face Model Hub, TensorFlow Hub oder Azure AI Studio-Modellkatalog, um vortrainierte Modelle zu finden. Diese Plattformen bieten einen umfangreichen Katalog von Modellen über verschiedene Aufgaben hinweg.
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. Sehen Sie sich die Architektur, die Schulungsdaten, die Leistung und die Lizenzierung des Modells an, um festzustellen, ob es für Ihre Aufgabe oder Domäne optimiert ist.
Anleitungen zur Auswahl einer Hostingplattform finden Sie unter Überlegungen zur Modellhostingplattform.
In diesem Artikel werden viele gängige Entwurfsbereiche und Faktoren erläutert, die bei wichtigen Entscheidungen zu Technologie und Ansatz berücksichtigt werden müssen.
Empfehlungen
Hier ist die Zusammenfassung der Empfehlungen in diesem Artikel.
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 dünn wie möglich, indem Sie Back-End-Dienste entwerfen, um übergreifende Bedenken wie Ratelimiting und Failovervorgänge zu behandeln. |
Blockieren des Zugriffs auf die Datenspeicher. | Code im KI-System sollte Ihre Datenspeicher nicht direkt berühren. Leiten Sie alle Datenanforderungen über eine API-Ebene weiter. Die APIs sollten für die jeweilige Aufgabe erstellt werden, die erforderlich ist. |
Isolieren Sie Ihre Modelle. | Verwenden Sie wie die Datenspeicher 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, z. B. PromptFlow, enthalten systemeigene Unterstützung zum Verteilen von APIs an den Dienst. |
Entwerfen Sie Komponenten, die unabhängig bereitgestellt werden können. | KI-Modelle, Datenpipelinen, Frontend-Komponenten und Microservices wie Datenvorverarbeitung, Featureextraktion und Ableitung sollten unabhängig bereitgestellt werden können, um die Flexibilität, Skalierbarkeit und Funktionalität Ihrer Workload 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, Modellleitung oder Benutzerauthentifizierung, sollten containerisiert werden. Dieser Ansatz ermöglicht eine unabhängige Bereitstellung und Skalierung, wodurch effizientere Updates und Wartungen erleichtert werden.
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, verhindert Versionskonflikte und stellt ein einheitliches Verhalten in verschiedenen Bereitstellungsumgebungen sicher.
Datenverarbeitungspipelinen: Alle Datenverarbeitungsaufgaben, die vor oder nach Modellableitungen folgen, wie Datenreinigung, Transformation und Featureextraktion, sollten containerisiert werden. Dieser Ansatz verbessert die Reproduzierbarkeit und vereinfacht die Verwaltung von Abhängigkeiten.
Infrastrukturdienste: Dienste, die Infrastrukturunterstützung bereitstellen, z. B. Datenbanken oder Zwischenspeicherungsebenen, können auch von der Containerisierung profitieren. Dieser Ansatz trägt dazu bei, die Versionskonsistenz aufrechtzuerhalten 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 Workloadkomponenten zu verlagern, aber es gibt Kompromisse. Gründe, die Sie möglicherweise verlagern, sind:
Latenzempfindlichkeit: Colocate AI-Komponenten mit anderen Diensten, z. B. API-Hosting, wenn eine niedrige Latenz wichtig ist. Wenn beispielsweise echtzeitbasierte Ableitung erforderlich ist, 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.
Datennähe: 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 für eine schnellere Verarbeitung und Ableitung verringern.
Ressourcenauslastung: Wenn bestimmte Komponenten ergänzende Ressourcenanforderungen haben, z. B. CPU und Arbeitsspeicher, können sie durch die Zuweisung der Ressourcennutzung optimiert werden. Beispielsweise kann ein Modell, das eine erhebliche Berechnung erfordert, Ressourcen mit einem Dienst teilen, der gleichzeitig niedrigere Anforderungen hat.
Kompromiss. Es gibt Kompromisse mit der Verlagerung von Komponenten, die berücksichtigt werden sollten. Möglicherweise verlieren Sie die Möglichkeit, Komponenten unabhängig bereitzustellen oder zu skalieren. Sie können auch das Risiko einer Fehlfunktion erhöhen, indem Sie den potenziellen Strahlradius von Vorfällen erhöhen.
Bewerten der Verwendung von Orchestratoren in generativen KI-Lösungen
Ein Orchestrator verwaltet den Workflow, der 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, z. B. Vorverarbeitung, Modellverkettung oder Nachverarbeitung.
Bedingte Logik: Entscheidungen müssen dynamisch basierend auf Modellausgaben getroffen werden, z. B. Routingergebnisse an verschiedene Modelle.
Skalierung und Ressourcenverwaltung: Sie müssen die Ressourcenzuordnung für Anwendungen mit hohem Volumen mithilfe der Modellskalierung basierend auf Bedarf verwalten.
Zustandsverwaltung: Sie müssen den Zustand und den Speicher von Benutzerinteraktionen verwalten.
Datenabruf: Sie müssen in der Lage sein, Augmentationsdaten aus dem Index abzurufen.
Überlegungen zur Verwendung mehrerer Modelle
Wenn Ihre Workload mehrere Modelle verwendet, ist die Verwendung eines Orchestrators unerlässlich. Der Orchestrator ist für das Weiterleiten von Daten und Anforderungen an das entsprechende Modell basierend auf dem Anwendungsfall verantwortlich. 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 beziehen sich auf kontextgebundene Funktionen, wobei viele Mikroservicestilmerkmale freigegeben werden, die Aufgaben in Verbindung mit einem Orchestrator ausführen. Der Orchestrator kann Aufgaben ankündigen, die an einem Pool von Agents oder Agents gesendet werden, um Funktionen beim Orchestrator zu registrieren. Beide Ansätze ermöglichen es dem Orchestrator, dynamisch zu entscheiden, wie die Abfrage unter den Agents aufgeteilt und weitergeleitet werden soll.
Agentische Ansätze sind ideal, wenn Sie eine gemeinsame UI-Oberfläche mit mehreren, sich entwickelnden Features haben, die in diese Erfahrung integriert werden können, um mehr Fähigkeiten und Erdungsdaten zum Fluss im Laufe der Zeit 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, z . B. Azure API Management, abstrakte Funktionen weg von APIs, die Abhängigkeiten zwischen dem anfordernden Dienst und der API entkoppeln. API-Gateways bieten die folgenden Vorteile für KI-Workloads:
Mehrere Microservices: Sie helfen Ihnen, mehrere AI-Modellendpunkte zu verwalten, und Sie müssen konsistente Richtlinien erzwingen, z. B. Ratelimiting und Authentifizierung.
Datenverkehrsmanagement: Sie helfen Ihnen, Apps mit hohem Datenverkehr effizient zu verwalten, indem Sie Anforderungen verwalten, Antworten zwischenspeichern und Lasten verteilen.
Sicherheit: Sie bieten zentrale Zugriffssteuerung, Protokollierung und Bedrohungsschutz für die APIs hinter dem Gateway.
Nutzen von KI-Anwendungsentwurfsmustern
Es gibt mehrere gängige Entwurfsmuster, die in der Branche für KI-Anwendungen etabliert wurden, mit denen Sie Ihr Design und Ihre Implementierung vereinfachen können. Zu diesen Entwurfsmustern gehören:
Modellenembling: Dieses Entwurfsmuster umfasst das Kombinieren von Vorhersagen aus mehreren Modellen, um die Genauigkeit und Robustheit zu verbessern und die Schwächen einzelner Modelle zu verringern.
Microservices-Architektur: Das Trennen von Komponenten in unabhängig bereitgestellte Dienste verbessert Skalierbarkeit und Wartung, sodass Teams gleichzeitig an verschiedenen Teilen der Anwendung arbeiten können.
Ereignisgesteuerte Architektur: Die Verwendung von Ereignissen zum Auslösen von Aktionen ermöglicht entkoppelte Komponenten und Echtzeitverarbeitung, wodurch das System reaktionsfähiger und anpassungsfähiger für die Änderung von Daten wird.
RAG-Muster- und Blockierungsstrategien
Das Rag-Muster (Retrieval-Augmented Generation) kombiniert generative Modelle mit Abrufsystemen, sodass das Modell auf externe Wissensquellen zugreifen kann, um den Kontext und die Genauigkeit zu verbessern. Ausführliche Anleitungen zu diesem Muster finden Sie in der Entwurfs- und Entwicklung einer RAG-Lösungsreihe . Es gibt zwei RAG-Ansätze:
Just-in-Time: Dieser Ansatz ruft relevante Informationen dynamisch zum Zeitpunkt einer Anforderung ab, um sicherzustellen, dass immer die neuesten Daten verwendet werden. Es ist vorteilhaft für Szenarien, die einen Echtzeitkontext erfordern, aber möglicherweise Latenzen einführen.
Vorab berechnet (zwischengespeichert): Diese Methode umfasst das Zwischenspeichern von Abrufergebnissen, wodurch die Reaktionszeiten reduziert werden, indem vorab berechnete Daten bereitgestellt werden. Es eignet sich für Szenarien mit hohem Bedarf, in denen konsistente Daten gespeichert werden können, aber möglicherweise nicht die aktuellsten Informationen widerspiegeln, was zu potenziellen Relevanzproblemen führt.
Bei der Verwendung eines RAG-Musters ist eine klar definierte Blockierungsstrategie entscheidend, um die Leistungseffizienz Ihrer Workload zu optimieren. Beginnen Sie mit den Anleitungen in der Design- und Entwicklung einer RAG-Lösungsreihe . Weitere Zu berücksichtigende Empfehlungen sind:
Implementieren Sie eine dynamische Blockierungsstrategie, die Datenblöcke basierend auf Datentyp, Abfragekomplexität und Benutzeranforderungen anpasst. Dies kann die Abrufeffizienz und kontextbezogene Erhaltung verbessern.
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. Durch klare Zeilendokumentation können Sie sicherstellen, dass Benutzer den Datenursprung, seine Transformationen und ihre Beiträge zur Ausgabe verstehen.
Gründe für die Verwendung von Entwurfsmustern
Erwägen Sie die Verwendung dieser Entwurfsmuster, wenn Ihr Anwendungsfall eine der Bedingungen erfüllt:
Komplexe Workflows: Beim Umgang mit komplexen Workflows oder Interaktionen zwischen mehreren KI-Modellen können Muster wie RAG oder Microservices dazu beitragen, Komplexität zu verwalten und eine klare Kommunikation zwischen Komponenten sicherzustellen.
Skalierbarkeitsanforderungen: Wenn die Nachfrage nach Ihrer Anwendung schwankt, ermöglicht die Verwendung eines Musters wie Microservices, dass einzelne Komponenten unabhängig skaliert werden können und dabei unterschiedliche Lasten berücksichtigen, 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 der Übernahme eines dieser Entwurfsmuster und sollten mit einem vereinfachten Design erstellt werden. Ebenso ist die Verwendung eines vereinfachten Designs, das 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 und wirkt sich nicht nur auf die Architektur, sondern auch auf Leistung, Skalierbarkeit und Wartung aus. Im Gegensatz dazu können Designanforderungen frameworkauswahlen einschränken und ein dynamisches Zusammenspiel zwischen den beiden schaffen. Die Verwendung des Semantischen Kernel-SDKs (SK) empfiehlt z. B. häufig ein mikroservicesbasiertes Design, bei dem jeder Agent oder jede Funktionalität innerhalb ihres eigenen Diensts gekapselt wird. Zu berücksichtigende Faktoren bei der Auswahl von Frameworks und Bibliotheken sind:
Anwendungsanforderungen: Die spezifischen Anforderungen der Anwendung, z. B. Echtzeitverarbeitung oder Batchverarbeitung, können die Auswahl des Frameworks einschränken. Wenn die Anwendung z. B. eine geringe Latenz erfordert, kann ein Framework mit asynchronen Funktionen erforderlich sein.
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, kann es erforderlich sein, den Entwurf zu überdenken oder ein anderes Framework auszuwählen.
Teamkompetenz: 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 und eine Auswahl eines vertrauteren Tools auffordern.
Entwerfen einer Strategie für Identitäten, Autorisierung und Zugriff
Im Allgemeinen sollten Sie identitäts-, Autorisierungs- und Zugriffsberechtigungen auf die gleiche Weise wie normalerweise Anwendungen entwerfen. Sie sollten einen Identitätsanbieter wie Microsoft Entra ID verwenden, um diese Bereiche so weit wie möglich zu verwalten. Es gibt jedoch einzigartige Herausforderungen für viele KI-Anwendungen, die besondere Berücksichtigung erfordern. Das Beibehalten von Zugriffssteuerungslisten (ACCESS Control Lists, ACLs) über das System ist manchmal schwierig oder sogar unmöglich, ohne eine neuartige Entwicklung einzuführen.
Lesen Sie die Anleitungen in der sicheren MULTI-Mandanten-RAG-Lösung , um zu erfahren, wie Sie Metadaten zur Sicherheitskürzung zu Dokumenten und Blöcken hinzufügen. Diese Einschränkung kann auf Sicherheitsgruppen oder ähnlichen Organisationskonstrukten basieren.
Berücksichtigen sie die nicht funktionsfähigen Anforderungen
Möglicherweise haben Sie aufgrund von Faktoren, die ki-Technologien inhärent sind, nicht funktionale Anforderungen für Ihre Workload. Zu den allgemeinen nicht funktionsfreien Anforderungen und ihren Herausforderungen gehören:
Latenz von Modellausschlüssen/Timeouts: KI-Anwendungen erfordern häufig Echtzeit- oder Echtzeitantworten. Das Entwerfen für eine geringe Latenz ist von entscheidender Bedeutung, was die Optimierung der Modellarchitektur, die Datenverarbeitungspipeline und Hardwareressourcen umfasst. 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.
Einschränkungen des Token- oder Anforderungsdurchsatzes: Viele KI-Dienste legen Beschränkungen für die Anzahl der Token oder den Durchsatz von Anforderungen fest, insbesondere bei Verwendung von cloudbasierten Modellen. Das Entwerfen für diese Einschränkungen erfordert eine sorgfältige Verwaltung von Eingabegrößen, Batchverarbeitungsanforderungen bei Bedarf und die Implementierung von Mechanismen zum Einschränken von Raten oder Warteschlangen, um Die Erwartungen der Benutzer zu verwalten und Dienstunterbrechungen zu verhindern.
Kosten- und Rückbuchungsszenarien: Das Entwerfen für Kostentransparenz umfasst die Implementierung von Nutzungsnachverfolgungs- und Berichterstellungsfeatures, mit denen Chargebackmodelle vereinfacht werden, sodass Organisationen Kosten für alle Abteilungen genau zuordnen können. Die Chargebackverwaltung wird normalerweise von einem API-Gateway wie Azure API Management behandelt.