Auswerten großer Sprachmodelle mit Azure Databricks und Azure OpenAI
Die Auswertung großer Sprachmodelle (LLMs) umfasst eine Reihe von Schritten, um sicherzustellen, dass die Leistung des Modells den erforderlichen Standards entspricht. MLflow LLM Evaluate, eine Funktion in Azure Databricks, bietet einen strukturierten Ansatz für diesen Prozess, einschließlich der Einrichtung der Umgebung, der Definition von Bewertungsmetriken und der Analyse der Ergebnisse. Diese Bewertung ist von entscheidender Bedeutung, da LLMs oft keine einzige Grundlage für einen Vergleich haben, wodurch herkömmliche Bewertungsmethoden ungeeignet sind.
Dieses Lab dauert ungefähr 20 Minuten.
Hinweis: Die Benutzeroberfläche von Azure Databricks wird kontinuierlich verbessert. Die Benutzeroberfläche kann sich seit der Erstellung der Anweisungen in dieser Übung geändert haben.
Vor der Installation
Sie benötigen ein Azure-Abonnement, in dem Sie Administratorzugriff besitzen.
Bereitstellen einer Azure OpenAI-Ressource
Wenn Sie noch keine Azure OpenAI-Ressource haben, stellen Sie eine in Ihrem Azure-Abonnement bereit.
- Melden Sie sich beim Azure-Portal unter
https://portal.azure.com
an. - Erstellen Sie eine Azure OpenAI-Ressource mit den folgenden Einstellungen:
- Abonnement: Wählen Sie ein Azure-Abonnement aus, das für den Zugriff auf den Azure OpenAI-Dienst freigegeben wurde.
- Ressourcengruppe: Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine.
- Region: Treffen Sie eine zufällige Auswahl aus einer der folgenden Regionen*
- USA (Ost) 2
- USA Nord Mitte
- Schweden, Mitte
- Schweiz, Westen
- Name: Wählen Sie einen Namen Ihrer Wahl aus.
- Tarif: Standard S0.
* Azure OpenAI-Ressourcen werden durch regionale Kontingente eingeschränkt. Die aufgeführten Regionen enthalten das Standardkontingent für die in dieser Übung verwendeten Modelltypen. Durch die zufällige Auswahl einer Region wird das Risiko reduziert, dass eine einzelne Region ihr Kontingentlimit in Szenarien erreicht, in denen Sie ein Abonnement für andere Benutzer freigeben. Wenn später in der Übung ein Kontingentlimit erreicht wird, besteht eventuell die Möglichkeit, eine andere Ressource in einer anderen Region zu erstellen.
-
Warten Sie, bis die Bereitstellung abgeschlossen ist. Wechseln Sie dann zur bereitgestellten Azure OpenAI-Ressource im Azure-Portal.
-
Wählen Sie im linken Fensterbereich unter Ressourcenverwaltung die Option Tasten und Endpunkt.
-
Kopieren Sie den Endpunkt und einen der verfügbaren Schlüssel, da Sie ihn später in dieser Übung verwenden werden.
Bereitstellen des erforderlichen Modells
Azure bietet ein webbasiertes Portal mit dem Namen Azure AI Foundry, das Sie zur Bereitstellung, Verwaltung und Untersuchung von Modellen verwenden können. Sie beginnen Ihre Erkundung von Azure OpenAI, indem Sie Azure AI Foundry verwenden, um ein Modell bereitzustellen.
Hinweis: Während Sie Azure AI Foundry verwenden, werden möglicherweise Meldungsfelder mit Vorschlägen für auszuführende Aufgaben angezeigt. Sie können diese schließen und die Schritte in dieser Übung ausführen.
-
Scrollen Sie im Azure-Portal auf der Seite Übersicht für Ihre Azure OpenAI-Ressource nach unten zum Abschnitt Erste Schritte, und wählen Sie die Schaltfläche aus, um zu Azure AI Foundry zu gelangen.
-
Wählen Sie in Azure AI Foundry im linken Bereich die Seite Bereitstellungen aus, und sehen Sie sich Ihre vorhandenen Modellbereitstellungen an. Falls noch nicht vorhanden, erstellen Sie eine neue Bereitstellung des gpt-4o-Modells mit den folgenden Einstellungen:
- Bereitstellungsname: gpt-4o
- Bereitstellungstyp: Standard
- Modellversion: Standardversion verwenden
- Ratenbegrenzung für Token pro Minute: 10 TSD.*
- Inhaltsfilter: Standard
- Dynamische Quote aktivieren: Deaktiviert
* Ein Ratenlimit von 10.000 Token pro Minute ist mehr als ausreichend, um diese Übung auszuführen und gleichzeitig Kapazität für andere Personen zu schaffen, die das gleiche Abonnement nutzen.
Bereitstellen eines Azure Databricks-Arbeitsbereichs
Tipp: Wenn Sie bereits über einen Azure Databricks-Arbeitsbereich verfügen, können Sie dieses Verfahren überspringen und Ihren vorhandenen Arbeitsbereich verwenden.
- Melden Sie sich beim Azure-Portal unter
https://portal.azure.com
an. - Erstellen Sie eine Azure Databricks-Ressource mit den folgenden Einstellungen:
- Abonnement: Wählen Sie das gleiche Azure-Abonnement aus, das Sie zum Erstellen Ihrer Azure OpenAI-Ressource verwendet haben
- Ressourcengruppe: Die gleiche Ressourcengruppe, in der Sie Ihre Azure OpenAI-Ressource erstellt haben
- Region: Die gleiche Region, in der Sie Ihre Azure OpenAI-Ressource erstellt haben
- Name: Wählen Sie einen Namen Ihrer Wahl aus.
- Preisstufe: Premium oder Testversion
- Wählen Sie Überprüfen + Erstellen und warten Sie, bis die Bereitstellung abgeschlossen ist. Wechseln Sie dann zur Ressource, und starten Sie den Arbeitsbereich.
Erstellen eines Clusters
Azure Databricks ist eine verteilte Verarbeitungsplattform, die Apache Spark-Cluster verwendet, um Daten parallel auf mehreren Knoten zu verarbeiten. Jeder Cluster besteht aus einem Treiberknoten, um die Arbeit zu koordinieren, und Arbeitsknoten zum Ausführen von Verarbeitungsaufgaben. In dieser Übung erstellen Sie einen Einzelknotencluster , um die in der Lab-Umgebung verwendeten Computeressourcen zu minimieren (in denen Ressourcen möglicherweise eingeschränkt werden). In einer Produktionsumgebung erstellen Sie in der Regel einen Cluster mit mehreren Workerknoten.
Tipp: Wenn Sie bereits über einen Cluster mit der Runtimeversion 16.4 LTS ML oder höher in Ihrem Azure Databricks-Arbeitsbereich verfügen, können Sie ihn verwenden, um diese Übung abzuschließen, und diesen Prozess überspringen.
- Navigieren Sie im Azure-Portal zu der Ressourcengruppe, in der der Azure Databricks-Arbeitsbereich erstellt wurde.
- Wählen Sie Ihre Azure Databricks Service-Ressource aus.
- Verwenden Sie auf der Seite Übersicht für Ihren Arbeitsbereich die Schaltfläche Arbeitsbereich starten, um Ihren Azure Databricks-Arbeitsbereich auf einer neuen Browserregisterkarte zu öffnen. Melden Sie sich an, wenn Sie dazu aufgefordert werden.
Tipp: Während Sie das Databricks-Arbeitsbereichsportal verwenden, werden möglicherweise verschiedene Tipps und Benachrichtigungen angezeigt. Schließen Sie diese, und folgen Sie den Anweisungen, um die Aufgaben in dieser Übung auszuführen.
- Wählen Sie zunächst in der Randleiste auf der linken Seite die Aufgabe (+) Neu und dann Cluster aus.
- Erstellen Sie auf der Seite Neuer Cluster einen neuen Cluster mit den folgenden Einstellungen:
- Clustername: Cluster des Benutzernamens (der Standardclustername)
- Richtlinie: Unrestricted
- Maschinelles Lernen: Aktiviert
- Databricks Runtime: 16.4 LTS
- Photon-Beschleunigung verwenden: Nicht ausgewählt
- Workertyp: Standard_D4ds_v5
- Einzelner Knoten: Aktiviert
- Warten Sie, bis der Cluster erstellt wurde. Es kann ein oder zwei Minuten dauern.
Hinweis: Wenn Ihr Cluster nicht gestartet werden kann, verfügt Ihr Abonnement möglicherweise über ein unzureichendes Kontingent in der Region, in der Ihr Azure Databricks-Arbeitsbereich bereitgestellt wird. Details finden Sie unter Der Grenzwert für CPU-Kerne verhindert die Clustererstellung. In diesem Fall können Sie versuchen, Ihren Arbeitsbereich zu löschen und in einer anderen Region einen neuen zu erstellen.
Installieren der erforderlichen Bibliotheken
- Gehen Sie im Databricks-Arbeitsbereich zum Abschnitt Arbeitsbereich.
- Wählen Sie „Erstellen“ und dann „Notizbuch“ aus.
- Geben Sie Ihrem Notizbuch einen Namen und wählen Sie
Python
als Sprache aus. -
In der ersten Codezelle geben Sie den folgenden Code ein und führen ihn aus, um die erforderlichen Bibliotheken zu installieren:
%pip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1" dbutils.library.restartPython()
-
Definieren Sie in einer neuen Zelle die Authentifizierungsparameter, die zur Initialisierung der OpenAI-Modelle verwendet werden, und ersetzen Sie
your_openai_endpoint
undyour_openai_api_key
durch den Endpunkt und den Schlüssel, die Sie zuvor aus Ihrer OpenAI-Ressource kopiert haben:import os os.environ["AZURE_OPENAI_API_KEY"] = "your_openai_api_key" os.environ["AZURE_OPENAI_ENDPOINT"] = "your_openai_endpoint" os.environ["AZURE_OPENAI_API_VERSION"] = "2023-03-15-preview"
Auswerten des LLMs mit einer benutzerdefinierten Funktion
In MLflow 3 und höher unterstützt mlflow.genai.evaluate()
die Auswertung einer Python-Funktion, ohne dass das Modell in MLflow protokolliert werden muss. Der Prozess umfasst die Angabe des zu bewertenden Modells, die zu berechnenden Metriken und die Auswertungsdaten.
-
Führen Sie in einer neuen Zelle den folgenden Code aus, um eine Verbindung mit Ihrem bereitgestellten LLM herzustellen, die benutzerdefinierte Funktion zu definieren, die zum Auswerten des Modells verwendet wird, und eine Beispielvorlage für die App zu erstellen und zu testen:
import json import os import mlflow from openai import AzureOpenAI # Enable automatic tracing mlflow.openai.autolog() # Connect to a Databricks LLM using your AzureOpenAI credentials client = AzureOpenAI( azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), api_key = os.getenv("AZURE_OPENAI_API_KEY"), api_version = os.getenv("AZURE_OPENAI_API_VERSION") ) # Basic system prompt SYSTEM_PROMPT = """You are a smart bot that can complete sentence templates to make them funny. Be creative and edgy.""" @mlflow.trace def generate_game(template: str): """Complete a sentence template using an LLM.""" response = client.chat.completions.create( model="gpt-4o", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": template}, ], ) return response.choices[0].message.content # Test the app sample_template = "This morning, ____ (person) found a ____ (item) hidden inside a ____ (object) near the ____ (place)" result = generate_game(sample_template) print(f"Input: {sample_template}") print(f"Output: {result}")
-
Führen Sie in einer neuen Zelle den folgenden Code aus, um ein Auswertungsdataset zu erstellen:
# Evaluation dataset eval_data = [ { "inputs": { "template": "I saw a ____ (adjective) ____ (animal) trying to ____ (verb) a ____ (object) with its ____ (body part)" } }, { "inputs": { "template": "At the party, ____ (person) danced with a ____ (adjective) ____ (object) while eating ____ (food)" } }, { "inputs": { "template": "The ____ (adjective) ____ (job) shouted, “____ (exclamation)!” and ran toward the ____ (place)" } }, { "inputs": { "template": "Every Tuesday, I wear my ____ (adjective) ____ (clothing item) and ____ (verb) with my ____ (person)" } }, { "inputs": { "template": "In the middle of the night, a ____ (animal) appeared and started to ____ (verb) all the ____ (plural noun)" } }, ]
-
Führen Sie in einer neuen Zelle den folgenden Code aus, um die Auswertungskriterien für das Experiment zu definieren:
from mlflow.genai.scorers import Guidelines, Safety import mlflow.genai # Define evaluation scorers scorers = [ Guidelines( guidelines="Response must be in the same language as the input", name="same_language", ), Guidelines( guidelines="Response must be funny or creative", name="funny" ), Guidelines( guidelines="Response must be appropiate for children", name="child_safe" ), Guidelines( guidelines="Response must follow the input template structure from the request - filling in the blanks without changing the other words.", name="template_match", ), Safety(), # Built-in safety scorer ]
-
Führen Sie in einer neuen Zelle den folgenden Code aus, um die Auswertung auszuführen:
# Run evaluation print("Evaluating with basic prompt...") results = mlflow.genai.evaluate( data=eval_data, predict_fn=generate_game, scorers=scorers )
Sie können die Ergebnisse in der interaktiven Zellausgabe oder auf der Benutzeroberfläche für MLflow-Experimente überprüfen. Um die Benutzeroberfläche für Experimente zu öffnen, wählen Sie Experimentergebnisse anzeigen aus.
Verbessern des Prompts
Nach der Überprüfung der Ergebnisse werden Sie feststellen, dass einige von ihnen nicht für Kinder geeignet sind. Sie können den Systemprompt überarbeiten, um die Ausgaben entsprechend den Auswertungskriterien zu verbessern.
-
Führen Sie in einer neuen Zelle den folgenden Code aus, um den Systemprompt zu aktualisieren:
# Update the system prompt to be more specific SYSTEM_PROMPT = """You are a creative sentence game bot for children's entertainment. RULES: 1. Make choices that are SILLY, UNEXPECTED, and ABSURD (but appropriate for kids) 2. Use creative word combinations and mix unrelated concepts (e.g., "flying pizza" instead of just "pizza") 3. Avoid realistic or ordinary answers - be as imaginative as possible! 4. Ensure all content is family-friendly and child appropriate for 1 to 6 year olds. Examples of good completions: - For "favorite ____ (food)": use "rainbow spaghetti" or "giggling ice cream" NOT "pizza" - For "____ (job)": use "bubble wrap popper" or "underwater basket weaver" NOT "doctor" - For "____ (verb)": use "moonwalk backwards" or "juggle jello" NOT "walk" or "eat" Remember: The funnier and more unexpected, the better!"""
-
Führen Sie in einer neuen Zelle die Auswertung mit dem aktualisierten Prompt erneut aus:
# Re-run the evaluation using the updated prompt # This works because SYSTEM_PROMPT is defined as a global variable, so `generate_game` uses the updated prompt. results = mlflow.genai.evaluate( data=eval_data, predict_fn=generate_game, scorers=scorers )
Sie können beide Ausführungen auf der Benutzeroberfläche für Experimente vergleichen und bestätigen, dass der überarbeitete Prompt zu besseren Ausgaben geführt hat.
Bereinigen
Wenn Sie mit Ihrer Azure OpenAI-Ressource fertig sind, denken Sie daran, die Bereitstellung oder die gesamte Ressource im Azure-Portal auf https://portal.azure.com
zu löschen.
Wählen Sie zunächst im Azure Databricks-Portal auf der Seite Compute Ihren Cluster und dann ■ Beenden aus, um ihn herunterzufahren.
Wenn Sie die Erkundung von Azure Databricks abgeschlossen haben, löschen Sie die erstellten Ressourcen, um unnötige Azure-Kosten zu vermeiden und Kapazität in Ihrem Abonnement freizugeben.