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.

Vorbereitung

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.

  1. Melden Sie sich beim Azure-Portal unter https://portal.azure.com an.
  2. 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.

  1. Warten Sie, bis die Bereitstellung abgeschlossen ist. Wechseln Sie dann zur bereitgestellten Azure OpenAI-Ressource im Azure-Portal.

  2. Wählen Sie im linken Fensterbereich unter Ressourcenverwaltung die Option Tasten und Endpunkt.

  3. 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 namens Azure AI Studio, das Sie zur Bereitstellung, Verwaltung und Untersuchung von Modellen verwenden können. Sie beginnen Ihre Erkundung von Azure OpenAI, indem Sie Azure AI Studio verwenden, um ein Modell bereitzustellen.

Hinweis: Während Sie Azure AI Studio 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.

  1. Scrollen Sie im Azure-Portal auf der Seite Übersicht für Ihre Azure OpenAI-Ressource nach unten zum Abschnitt Erste Schritte und klicken Sie auf die Schaltfläche, um zu Azure AI Studio zu gelangen.

  2. Wählen Sie in Azure AI Studio im linken Bereich die Seite “Deployments” aus und sehen Sie sich Ihre vorhandenen Modellbereitstellungen an. Falls noch nicht vorhanden, erstellen Sie eine neue Bereitstellung des gpt-35-turbo-Modells mit den folgenden Einstellungen:

    • Bereitstellungsname: gpt-35-turbo
    • Modell: gpt-35-turbo
    • Modellversion: Standard
    • Bereitstellungstyp: Standard
    • Ratenlimit für Token pro Minute: 5K*
    • Inhaltsfilter: Standard
    • Dynamische Quote aktivieren: Deaktiviert

* Ein Ratenlimit von 5.000 Token pro Minute ist mehr als ausreichend, um diese Aufgabe zu erfüllen 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.

  1. Melden Sie sich beim Azure-Portal unter https://portal.azure.com an.
  2. 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
  3. 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 einer Runtime 13.3 LTS ML oder einer höheren Runtimeversion in Ihrem Azure Databricks-Arbeitsbereich verfügen, können Sie ihn verwenden, um diese Übung abzuschließen, und dieses Verfahren überspringen.

  1. Navigieren Sie im Azure-Portal zu der Ressourcengruppe, in der der Azure Databricks-Arbeitsbereich erstellt wurde.
  2. Wählen Sie Ihre Azure Databricks Service-Ressource aus.
  3. 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.

  1. Wählen Sie zunächst in der Randleiste auf der linken Seite die Aufgabe (+) Neu und dann Cluster aus.
  2. Erstellen Sie auf der Seite Neuer Cluster einen neuen Cluster mit den folgenden Einstellungen:
    • Clustername: Cluster des Benutzernamens (der Standardclustername)
    • Richtlinie: Unrestricted
    • Clustermodus: Einzelknoten
    • Zugriffsmodus: Einzelner Benutzer (Ihr Benutzerkonto ist ausgewählt)
    • Databricks-Runtimeversion: Wählen Sie die ML-Edition der neuesten Nicht-Betaversion der Runtime aus (Nicht eine Standard-Runtimeversion), die folgende Kriterien erfüllt:
      • Verwendet keine GPU
      • Umfasst Scala > 2.11
      • Umfasst Spark > 3.4
    • Photon-Beschleunigung verwenden: Nicht ausgewählt
    • Knotentyp: Standard_D4ds_v5
    • Beenden nach 20 Minuten Inaktivität
  3. 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

  1. Wählen Sie auf der Seite Ihres Clusters die Registerkarte „Bibliotheken“ aus.

  2. Wählen Sie „Neu installieren“ aus.

  3. Wählen Sie PyPI als Bibliotheksquelle aus und installieren Sie openai==1.42.0.

Erstellen eines neuen Notebooks

  1. Verwenden Sie in der Randleiste den Link ** (+) Neu, um ein **Notebook zu erstellen.

  2. Benennen Sie Ihr Notebook und wählen Sie in der Dropdown-Liste Verbinden Ihren Cluster aus, falls er nicht bereits ausgewählt ist. Wenn der Cluster nicht ausgeführt wird, kann es eine Minute dauern, bis er gestartet wird.

  3. Führen Sie in der ersten Zelle des Notebooks den folgenden Code mit den zu Beginn dieser Übung kopierten Zugangsdaten aus, um persistente Umgebungsvariablen für die Authentifizierung bei der Verwendung von Azure OpenAI-Ressourcen zuzuweisen:

     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 2.8.0 und höher unterstützt mlflow.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, bei denen es sich in der Regel um einen Pandas-DataFrame handelt.

  1. Führen Sie in einer neuen Zelle den folgenden Code aus, um einen Beispiel-Auswertungsdataframe zu definieren:

     import pandas as pd
    
     eval_data = pd.DataFrame(
         {
             "inputs": [
                 "What is MLflow?",
                 "What is Spark?",
             ],
             "ground_truth": [
                 "MLflow is an open-source platform for managing the end-to-end machine learning (ML) lifecycle. It was developed by Databricks, a company that specializes in big data and machine learning solutions. MLflow is designed to address the challenges that data scientists and machine learning engineers face when developing, training, and deploying machine learning models.",
                 "Apache Spark is an open-source, distributed computing system designed for big data processing and analytics. It was developed in response to limitations of the Hadoop MapReduce computing model, offering improvements in speed and ease of use. Spark provides libraries for various tasks such as data ingestion, processing, and analysis through its components like Spark SQL for structured data, Spark Streaming for real-time data processing, and MLlib for machine learning tasks",
             ],
         }
     )
    
  2. Führen Sie in einer neuen Zelle den folgenden Code aus, um einen Client für Ihre Azure OpenAI-Ressource zu initialisieren und Ihre angepasste Funktion zu definieren:

     import os
     import pandas as pd
     from openai import AzureOpenAI
    
     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")
     )
    
     def openai_qa(inputs):
         answers = []
         system_prompt = "Please answer the following question in formal language."
         for index, row in inputs.iterrows():
             completion = client.chat.completions.create(
                 model="gpt-35-turbo",
                 messages=[
                     {"role": "system", "content": system_prompt},
                     {"role": "user", "content": "{row}"},
                 ],
             )
             answers.append(completion.choices[0].message.content)
    
         return answers
    
    
  3. Führen Sie in einer neuen Zelle den folgenden Code aus, um ein Experiment zu erstellen und die benutzerdefinierte Funktion mit den Auswertungsdaten auszuwerten:

     import mlflow
    
     with mlflow.start_run() as run:
         results = mlflow.evaluate(
             openai_qa,
             eval_data,
             model_type="question-answering",
         )
    

    Sobald die Ausführung erfolgreich war, wird ein Link zur Experimentseite generiert, auf der Sie die Modellmetriken überprüfen können. Für model_type="question-answering" sind die Standardmetriken toxicity, ari_grade_level und flesch_kincaid_grade_level.

Bereinigung

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.