LLMOps mit Prompt Flow und Azure DevOps

Large Language Operations oder LLMOps ist zum Eckpfeiler für effizientes Prompt Engineering und LLM-basierte Anwendungsentwicklung und -bereitstellung geworden. Da die Nachfrage nach LLM-basierten Anwendungen weiter steigt, benötigen Organisationen einen einheitlichen und optimierten Prozess für die Verwaltung ihres End-to-End-Lebenszyklus.

Azure Machine Learning ermöglicht Ihnen die Integration mit Azure DevOps, um den Lebenszyklus der LLM-basierten Anwendungsentwicklung mit Prompt Flow zu automatisieren.

Azure Machine Learning Prompt Flow bietet einen optimierten und strukturierten Ansatz für die Entwicklung von LLM-basierte Anwendungen. Der klar definierte Prozess und Lebenszyklus führt Sie durch den Prozess des Erstellens, Testens, Optimierens und Bereitstellens von Flows, an dessen Ende die Erstellung voll funktionsfähiger LLM-basierter Lösungen steht.

Features von LLMOps Prompt Flow

LLMOps mit prompt flow ist eine Vorlage und eine Anleitung für LLMOps, die Ihnen beim Erstellen von LLM-basierten Apps mithilfe von prompt flow helfen. Er zeichnet sich durch Folgendes aus:

  • Zentralisiertes Codehosting: Dieses Repository unterstützt das Hosten von Code für mehrere Flows basierend auf prompt flow und stellt ein einzelnes Repository für alle Ihre Flows bereit. Stellen Sie sich diese Plattform als ein einzelnes Repository vor, in dem sich Ihr gesamter prompt flow-Code befindet. Es ist wie eine Bibliothek für Ihre Flows. So können Sie einfacher verschiedene Projekte durchsuchen, auf verschiedene Projekte zugreifen und an verschiedenen Projekten zusammenarbeiten.

  • Lebenszyklusverwaltung: Jeder Flow verfügt über einen eigenen Lebenszyklus und ermöglicht dadurch einen reibungslosen Übergang von lokalen Experimenten zur Produktionsbereitstellung. Screenshot of pipeline.

  • Experimentieren mit Varianten und Hyperparametern: Experimentieren Sie mit mehreren Varianten und Hyperparametern, um Flowvarianten mit Leichtigkeit zu bewerten. Varianten und Hyperparameter sind wie Zutaten in einem Rezept. Mit dieser Plattform können Sie mit verschiedenen Kombinationen von Varianten in mehreren Knoten in einem Flow experimentieren.

  • Mehrere Bereitstellungsziele: Das Repository unterstützt die Bereitstellung von Flows in Azure App Service, Kubernetes und verwalteten Azure-Computeressourcen durch Konfiguration, um sicherzustellen, dass Flows nach Bedarf skaliert werden können. Außerdem werden Docker-Images generiert, die mit der Flow-Runtime und Ihren Flows für die Bereitstellung auf beliebigen Zielplattformen und Betriebssystemen bereitgestellt werden, die Docker unterstützen. Screenshot of endpoints.

  • A/B-Bereitstellung: Implementieren Sie nahtlos A/B-Bereitstellungen, sodass Sie unterschiedliche Flowversionen mühelos vergleichen können. Genau wie bei herkömmlichen A/B-Tests für Websites erleichtert diese Plattform die A/B-Bereitstellung für prompt flow. Das bedeutet, dass Sie verschiedene Versionen eines Flows in einer realen Umgebung ganz einfach vergleichen können, um die Version mit der besten Leistung zu bestimmen. Screenshot of deployments.

  • m:n-Beziehungen zwischen Datasets/Flows: Verwenden Sie mehrere Datasets für jeden Standard- und Auswertungsflow, um Vielseitigkeit bei Flowtests und -auswertungen zu gewährleisten. Die Plattform ist so konzipiert, dass sie für jeden Flow mehrere Datasets aufnehmen kann.

  • Bedingte Daten- und Modellregistrierung: Die Plattform erstellt eine neue Version für Datasets in Azure Machine Learning Data Asset und Flows in der Modellregistrierung, nur wenn es eine Änderung gibt, andernfalls nicht.

  • Umfassende Berichte: Erstellen Sie detaillierte Berichte für jede Variantenkonfiguration, sodass Sie fundierte Entscheidungen treffen können. Bietet eine detaillierte Metriksammlung sowie Massenausführungen von Experimenten und Varianten, wodurch datengesteuerte Entscheidungen in CSV- und HTML-Dateien ermöglicht werden. Screenshot of flow variants report.Screenshot of metrics report.

Weitere Features zur Anpassung:

  • Bietet BYOF (Bring Your Own Flows). Eine vollständige Plattform für die Entwicklung mehrerer Anwendungsfälle im Zusammenhang mit LLM-basierten -Anwendungen.

  • Bietet konfigurationsbasierte Entwicklung. Es ist nicht erforderlich, umfangreiche Codebausteine zu schreiben.

  • Ermöglicht die Ausführung von Prompt-Experimenten und -Auswertungen lokal und in der Cloud.

  • Stellt Notebooks für die lokale Auswertung der Prompts bereit. Stellt eine Bibliothek mit Funktionen für lokale Experimente bereit.

  • Endpunkttests innerhalb der Pipeline nach der Bereitstellung, um die Verfügbarkeit und Bereitschaft zu überprüfen.

  • Ermöglicht optional menschliche Beteiligung (Human-in-the-Loop), um Prompt-Metriken vor der Bereitstellung zu überprüfen.

LLMOps mit prompt flow bietet Funktionen sowohl für einfache als auch für komplexe LLM-basierte Apps. Die Lösung lässt sich vollständig an die Anforderungen der Anwendung anpassen.

LLMOps-Phasen

Der Lebenszyklus umfasst vier verschiedene Phasen:

  • Initialisierung: In dieser Phase wird das Geschäftsziel eindeutig definiert, relevante Datenbeispiele werden erfasst, eine grundlegende Promptstruktur wird eingerichtet und ein Flow wird zur Verbesserung der Funktionalität erstellt.

  • Experimentieren: In dieser Phase wird ein Flow zum Abfragen von Daten angewendet, die Promptleistung wird bewertet und der Prompt bei Bedarf optimiert. Diese Schritte werden so lange durchlaufen, bis zufriedenstellende Ergebnisse erreicht werden.

  • Auswertung und Optimierung: In dieser Phase wird die Promptleistung mithilfe eines größeren Datasets gemessen, die Prompteffektivität ausgewertet und der Prompt entsprechend optimiert. Die nächste Phase wird eingeleitet, sobald die Ergebnisse den gewünschten Standards entsprechen.

  • Bereitstellung: In dieser Phase wird der Flow hinsichtlich seiner Effizienz und Effektivität optimiert, er wird in einer Produktionsumgebung einschließlich A/B-Bereitstellung bereitgestellt, seine Leistung wird überwacht, Benutzerfeedback wird gesammelt, und diese Informationen werden zur weiteren Verbesserung des Flows verwendet.

Durch die Einhaltung dieser strukturierten Vorgehensweise ermöglicht Prompt Flow ein sicheres Entwickeln sowie ein gründliches Testen, Optimieren und Bereitstellen von Flows, was zur Erstellung stabiler und ausgereifter KI-Anwendungen führt.

Die Vorlage für den LLMOps Prompt Flow formalisiert diese strukturierte Vorgehensweise mithilfe eines Code-First-Ansatzes und hilft Ihnen beim Erstellen LLM-basierter Apps mithilfe Prompt Flow sowie Tools und Prozessen, die für Prompt Flow relevant sind. Sie bietet eine Reihe von Features wie zentrales Codehosting, Lebenszyklusverwaltung, Experimentieren mit Varianten und Hyperparametern, A/B-Bereitstellung, Berichterstellung für alle Ausführungen und Experimente und mehr.

Das Repository für diesen Artikel ist unter Vorlage für LLMOps mit Prompt Flow verfügbar.

LLMOps-Prozessflow

Screenshot of LLMOps prompt flow process.

  1. Dies ist die Initialisierungsphase. In ihr werden Abläufe entwickelt, Daten aufbereitet und kuratiert sowie LLMOps-bezogene Konfigurationsdateien aktualisiert.
  2. Nach der lokalen Entwicklung mithilfe von Visual Studio Code mit der Prompt Flow-Erweiterung wird ein Pull Request vom Feature- zum Entwicklungsbranch ausgelöst. Dadurch wird die Überprüfungspipeline für den Build ausgeführt. Außerdem werden die Experimentierflows ausgeführt.
  3. Der PR wird manuell genehmigt, und der Code wird mit dem Entwicklungsbranch gemergt.
  4. Nachdem der PR mit dem Entwicklungsbranch gemergt wurde, wird die CI-Pipeline für die Entwicklungsumgebung ausgeführt. Sie führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
  5. Nach Abschluss der CI-Pipelineausführung stellt ein CD-Trigger die Ausführung der CD-Pipeline sicher, die den Standardflow der Azure Machine Learning-Registrierung als einen Azure Machine Learning-Onlineendpunkt bereitstellt und Integrations- sowie Buildüberprüfungstests für den bereitgestellten Flow ausführt.
  6. Aus dem Entwicklungsbranch wird ein Releasebranch erstellt, oder es wird ein Pull Request vom Entwicklungs- zum Releasebranch ausgelöst.
  7. Der PR wird manuell genehmigt, und der Code wird mit dem Releasebranch gemergt. Nachdem der PR mit dem Releasebranch gemergt wurde, wird die CI-Pipeline für die Produktionsumgebung ausgeführt. Sie führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
  8. Nach Abschluss der CI-Pipelineausführung stellt ein CD-Trigger die Ausführung der CD-Pipeline sicher, die den Standardflow der Azure Machine Learning-Registrierung als einen Azure Machine Learning-Onlineendpunkt bereitstellt und Integrations- sowie Buildüberprüfungstests für den bereitgestellten Flow ausführt.

Ab diesem Punkt können Sie mehr über LLMOps mit Prompt Flow erfahren, indem Sie die umfangreichen Beispiele befolgen, die Ihnen beim Erstellen LLM-basierter Anwendungen mithilfe von Prompt Flow und Azure DevOps helfen. Das Hauptziel ist es, Unterstützung bei der Entwicklung derartiger Anwendungen zu bieten und dazu die Funktionen von prompt flow und LLMOps zu nutzen.

Tipp

Wir empfehlen Ihnen, zu verstehen, wie wir LLMOps in prompt flow integrieren.

Wichtig

Prompt-Flow ist aktuell als Public Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und nicht für Produktionsworkloads empfohlen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.
  • Ein Azure Machine Learning-Arbeitsbereich.
  • Git wird auf Ihrem lokalen Computer ausgeführt.
  • Eine Organisation in Azure DevOps Die Organisation in Azure DevOps hilft bei der Zusammenarbeit, beim Planen und Nachverfolgen von Arbeits- und Codefehlern, bei Problemen sowie beim Einrichten von Continuous Integration und Continuous Deployment.
  • Die Terraform-Erweiterung für Azure DevOps, wenn Sie Azure DevOps + Terraform zum Einrichten der Infrastruktur verwenden

Hinweis

Es wird mindestens die Git-Version 2.27 benötigt. Weitere Informationen zum Installieren des Git-Befehls finden Sie unter https://git-scm.com/downloads. Wählen Sie hier Ihr Betriebssystem aus.

Wichtig

Die CLI-Befehle in diesem Artikel wurden mithilfe von Bash getestet. Wenn Sie eine andere Shell verwenden, können Fehler auftreten.

Einrichten von Prompt Flow

Prompt Flow verwendet Verbindungsressourcen, um eine Verbindung zu Endpunkten wie Azure OpenAI, OpenAI oder Azure KI-Suche herzustellen. Zudem verwendet Prompt Flow die Runtime, um die Flows auszuführen. Diese Ressourcen sollten erstellt werden, bevor die Flows in Prompt Flow ausgeführt werden.

Einrichten von Verbindungen für prompt flow

Verbindungen können über die Benutzeroberfläche für das Prompt Flow-Portal oder mithilfe der REST-API erstellt werden. Befolgen Sie die Anleitung zum Herstellen von Verbindungen für Prompt Flow.

Klicken Sie auf den Link, um mehr über Verbindungen zu erfahren.

Hinweis

Die Beispielflows verwenden eine Verbinden mit dem Namen „aoai“, die erstellt werden sollte, um die Flows auszuführen.

Einrichten von Compute und Runtime für Prompt Flow

Die Runtime kann über die Benutzeroberfläche für das Prompt Flow-Portal oder mithilfe der REST-API erstellt werden. Befolgen Sie die Anleitung zum Einrichten von Compute und Runtime für Prompt Flow.

Klicken Sie auf den Link, um mehr über die Runtime zu erfahren.

Hinweis

In der Datei „LLMOps_config.json“, die weiter unten erläuterten wird, sollte derselbe Runtimename verwendet werden.

Einrichten des Azure-Dienstprinzipals

Bei einem Azure-Dienstprinzipal handelt es sich um eine Sicherheitsidentität, die Anwendungen, Dienste und Automatisierungstools für den Zugriff auf Azure-Ressourcen verwenden. Er stellt eine Anwendung oder einen Dienst dar, die oder der sich bei Azure authentifizieren und in Ihrem Auftrag auf Ressourcen zugreifen muss. Befolgen Sie die Anleitung zum Erstellen eines Dienstprinzipals in Azure.

Mit diesem Dienstprinzipal wird später die Azure DevOps-Dienstverbindung und Azure DevOps für das Authentifizieren bei Azure-Diensten sowie das Herstellen einer Verbindung mit Azure-Diensten konfiguriert. Die Aufträge für experiment and evaluation runs werden Prompt Flow unter der Identität dieses Dienstprinzipals ausgeführt. Darüber hinaus werden compute und runtime mit demselben Dienstprinzipal erstellt.

Tipp

Die Einrichtung stellt owner-Berechtigungen für den Dienstprinzipal bereit.

  • Dies liegt daran, dass die CD-Pipeline zum Lesen von Verbindungsinformationen automatisch Zugriff auf den neu bereitgestellten Endpunkt und Arbeitsbereich von Azure Machine Learning bietet.
  • Außerdem wird er mit den Geheimnisberechtigungen get und list der Schlüsseltresorrichtlinie hinzugefügt, die dem Azure Machine Learning-Arbeitsbereich zugeordnet ist.

Die Berechtigung „Besitzer“ kann in den Berechtigungen auf contributor-Ebene geändert werden, indem Sie den YAML-Code der Pipeline ändern und den Schritt im Zusammenhang mit den Berechtigungen entfernen.

Einrichten von Azure DevOps

Für die Einrichtung des LLMOps-Prozesses mit Azure DevOps sollten mehrere Schritte durchgeführt werden.

Erstellen eines neuen Azure DevOps-Projekts

Befolgen Sie die Anleitung zum Erstellen eines neuen Azure DevOps-Projekts mit der Azure DevOps-Benutzeroberfläche.

Einrichten der Authentifizierung zwischen Azure DevOps und Azure

Befolgen Sie die Anleitung zum Verwenden des zuvor erstellten Dienstprinzipals sowie zum Einrichten der Authentifizierung zwischen Azure DevOps und Azure-Diensten.

In diesem Schritt wird eine neue Azure DevOps-Dienstverbindung konfiguriert, die die Informationen des Dienstprinzipals speichert. Die Pipelines im Projekt können die Verbindungsinformationen über den Verbindungsnamen lesen. Dadurch können Sie die Schritte für die Azure DevOps-Pipeline so konfigurieren, dass automatische eine Verbindung mit Azure hergestellt wird.

Erstellen einer Azure DevOps-Variablengruppe

Befolgen Sie die Anleitung zum Erstellen einer neuen Variablengruppe sowie zum Hinzuzufügen einer Variablen im Zusammenhang mit der Azure DevOps-Dienstverbindung.

Der Dienstprinzipalname ist für die Pipelines automatisch als Umgebungsvariable verfügbar.

Konfigurieren von Azure DevOps-Repositorys und -Pipelines

Dieses Repository verwendet die beiden Branches main und development für Codeaktionen und die Ausführung von Pipelines anstelle von Änderungen am enthaltenen Code. Befolgen Sie die Anleitung zum Einrichten Ihres eigenen lokalen Repository sowie Ihres eigenen Remoterepositorys, um Code aus diesem Repository zu verwenden.

Die Schritte umfassen das Klonen der main und development branches aus dem Repository sowie das Zuordnen des Codes, damit dieser auf das neue Azure DevOps-Repository verweist. Neben der Codemigration werden die PR- und Entwicklungspipelines so konfiguriert, dass sie automatisch basierend auf der PR-Erstellung und den Mergetriggern ausgeführt werden.

Die Richtlinie für den Entwicklungsbranch sollte zudem so konfiguriert werden, dass die PR-Pipeline für alle Pull Requests ausgeführt wird, die von einem Featurebranch aus auf einem Entwicklungsbranch ausgelöst werden. Die „dev“-Pipeline wird ausgeführt, wenn der PR mit dem Entwicklungsbranch gemergt wird. Die „dev“-Pipeline besteht aus CI- und CD-Phasen.

Zudem ist der Human-in-the-Loop-Ansatz in die Pipelines implementiert. Nachdem die CI-Phase in der dev-Pipeline ausgeführt wurde, folgt nach der manuellen Genehmigung die CD-Phase. Die Genehmigung sollte über die Benutzeroberfläche für die Buildausführung der Azure DevOps-Pipeline erfolgen. Nach dem Standardtimeout von 60 Minuten wird die Pipeline abgelehnt, und die CD-Phase wird nicht ausgeführt. Die manuelle Genehmigung führt zur Ausführung der CD-Schritte für die Pipeline. Die manuelle Genehmigung ist so konfiguriert, dass Benachrichtigungen an replace@youremail.com gesendet werden. Dies sollte durch eine entsprechende E-Mail-ID ersetzt werden.

Testen der Pipelines

Befolgen Sie die Anleitung zum Testen der Pipelines.

Führen Sie die folgenden Schritte durch:

  1. Lösen Sie einen PR (Pull Request) von einem Feature- zu einem Entwicklungsbranch aus.
  2. Die PR-Pipeline sollte durch die Konfiguration für die Branchrichtlinien automatisch ausgeführt werden.
  3. Der PR wird daraufhin mit dem Entwicklungsbranch gemergt.
  4. Die zugeordnete „dev“-Pipeline wird ausgeführt. Dies führt zur vollständigen CI- und CD-Ausführung sowie zur Bereitstellung oder Aktualisierung vorhandener Azure Machine Learning-Endpunkte.

Die Testausgaben sollten diesen ähneln.

Lokale Ausführung

Führen Sie die folgenden Installationsschritte aus, um die Funktionen der lokalen Ausführung zu nutzen:

  1. Klonen des Repositorys: Klonen Sie zunächst das Repository der Vorlage aus dem GitHub-Repository.
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. Einrichten der ENV-Datei: Erstellen Sie auf oberster Ordnerebene eine ENV-Datei, und geben Sie Informationen für die erwähnten Elemente an. Fügen Sie beliebig viele Verbindungsnamen hinzu. Alle Flowbeispiele in diesem Repository verwenden die AzureOpenAI-Verbindung mit dem Namen aoai. Fügen Sie die Zeile aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"} mit den aktualisierten Werten für api_key und api_base hinzu. Wenn in Ihren Flows zusätzliche Verbindungen mit unterschiedlichen Namen verwendet werden, sollten diese entsprechend hinzugefügt werden. Derzeit wird der Flow mit AzureOpenAI als Anbieter unterstützt.

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. Bereiten Sie die lokale Conda-Umgebung oder die virtuelle Umgebung vor, um die Abhängigkeiten zu installieren.

python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv

  1. Importieren oder schreiben Sie Ihre Flows anhand dieser Dokumentation in die Vorlage.

  2. Schreiben Sie Python-Skripts, die den Beispielen im local_execution-Ordner ähneln.

Nächste Schritte