Large Language Models optimieren: So hebt Vertex AI LLMs auf die nächste Stufe

1. Einführung

Warum ist eine Optimierung wichtig?

Foundation Models werden für allgemeine Zwecke trainiert und erfüllen Aufgaben manchmal nicht so, wie Sie es sich wünschen. Dies kann daran liegen, dass es sich bei den Aufgaben, die das Modell ausführen soll, um spezialisierte Aufgaben handelt, die sich nur mit dem Prompt-Entwurf schwer in das Modell einarbeiten lassen. In diesen Fällen können Sie die Modellabstimmung verwenden, um die Leistung eines Modells bei bestimmten Aufgaben zu verbessern. Die Modellabstimmung kann auch dabei helfen, bestimmte Ausgabeanforderungen einzuhalten, wenn Anweisungen nicht ausreichen. Large Language Models (LLMs) können eine große Menge an Informationen enthalten und viele Aufgaben ausführen. Sie zeichnen sich jedoch nur durch spezielles Training aus. Durch die Abstimmung kann ein LLM trainiert werden, sodass Sie es an Ihre spezifischen Anforderungen anpassen können.

In diesem Codelab erfahren Sie, wie Sie mit dem Ansatz der überwachten Abstimmung ein LLM-Modell optimieren.

Überwachte Abstimmung verbessert die Leistung eines Modells, indem eine neue Fähigkeit vermittelt wird. Daten, die Hunderte von beschrifteten Beispielen enthalten, werden verwendet, um dem Modell beizubringen, ein gewünschtes Verhalten oder eine gewünschte Aufgabe nachzuahmen. Wir stellen ein Dataset mit Labels für Eingabetext (Prompt) und Ausgabetext (Antwort) bereit, um dem Modell zu vermitteln, wie die Antworten für unseren spezifischen Anwendungsfall angepasst werden können.

Weitere Informationen zur Modellanpassung finden Sie hier.

Inhalt

Anwendungsfall: Schlagzeilen für Nachrichtenartikel generieren

Angenommen, Sie möchten automatisch Schlagzeilen für Nachrichtenartikel erstellen. Mit Vertex AI können Sie ein LLM optimieren, das einen geeigneten zusammengefassten Titel in einem bestimmten Stil generiert und den Titel gemäß den Richtlinien des Nachrichtenkanals anpasst.

Aufgaben in diesem Codelab:

  • Verwenden Sie BBC FULLTEXT DATA (durch das öffentliche BigQuery-Dataset bigquery-public-data.bbc_news.fulltext zur Verfügung gestellt).
  • Ein LLM (text-bison@002) auf ein neues abgestimmtes Modell namens „bbc-news-summary-tuned“ abstimmen und vergleichen das Ergebnis mit der Antwort des Basismodells. Für dieses Codelab ist im Repository eine JSONL-Beispieldatei verfügbar. Sie können die Datei in Ihren Cloud Storage-Bucket hochladen und die folgenden Schritte zur Feinabstimmung ausführen:
  • Daten vorbereiten:Beginnen Sie mit einem Dataset aus Nachrichtenartikeln und den entsprechenden Schlagzeilen, z. B. dem Dataset „BBC News“ aus dem Beispielcode.
  • Vortrainiertes Modell optimieren:Wählen Sie ein Basismodell wie „text-bison@002“ aus und optimieren Sie diese mit Ihren Nachrichtendaten mit dem Vertex AI SDK for Python.
  • Ergebnisse auswerten:Vergleichen Sie die Leistung Ihres abgestimmten Modells mit der des Basismodells, um zu sehen, wie sich die Qualität der Anzeigentitelerstellung verbessert hat.
  • Modell bereitstellen und verwenden:Stellen Sie Ihr abgestimmtes Modell über einen API-Endpunkt zur Verfügung und generieren Sie automatisch Schlagzeilen für neue Artikel.

2. Hinweis

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für Ihr Google Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Öffnen Sie Colab Notebook und melden Sie sich in dem Konto an, in dem Sie aktuell ein aktives Google Cloud-Konto verwenden.

3. Large Language Model optimieren

In diesem Codelab wird das Vertex AI SDK for Python verwendet, um das Modell zu optimieren. Sie können die Feinabstimmung auch mit den anderen Optionen durchführen: HTTP, CURL-Befehl, Java SDK, Console.

Sie können Ihr Modell in 5 Schritten für benutzerdefinierte Antworten optimieren und bewerten. Sie finden den vollständigen Code in der Datei llm_fine_tuning_supervised.ipynb aus dem Repository.

4. Schritt 1: Abhängigkeiten installieren und importieren

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

Führen Sie die restlichen Schritte aus, wie in der Ipynb-Datei im Repository gezeigt. Ersetzen Sie PROJECT_ID und BUCKET_NAME dabei durch Ihre Anmeldedaten.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec

5. Schritt 2: Trainingsdaten vorbereiten und laden

Ersetzen Sie YOUR_BUCKET durch Ihren Bucket und laden Sie die Beispieldatei TRAIN.jsonl mit den Trainingsdaten hoch. Die Beispieldaten wurden für diesen Anwendungsfall unter dem oben genannten Link bereitgestellt.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

Dieser Schritt sollte zu folgendem Ergebnis führen:

17274866af36a47c.png

6. Schritt 3: Large Language Model optimieren

An diesem Punkt können Sie jedes Large Language Model abstimmen (je nach Supportverfügbarkeit) . In diesem Snippet optimieren wir jedoch das vortrainierte Modell "text-bison@002". durch den Dataframe mit den Trainingsdaten, die wir im vorherigen Schritt geladen haben:

model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)

Dieser Schritt kann einige Stunden dauern. Sie können den Fortschritt der Feinabstimmung über den Pipelinejob-Link im Ergebnis verfolgen.

7. Schritt 4: Vorhersage mit dem neuen, abgestimmten Modell

Sobald der Abstimmungsjob abgeschlossen ist, können Sie mit Ihrem neuen Modell Vorhersagen treffen. So führen Sie eine Vorhersage mit Ihrem neuen abgestimmten Modell durch:

response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Sie sollten folgendes Ergebnis sehen:

67061c36b7ba39b7.png

Führen Sie die folgenden Befehle aus, um eine Vorhersage mit dem Basismodell (text-bison@002) zum Vergleich durchzuführen:

base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Sie sollten folgendes Ergebnis sehen:

22ec58e4261405d6.png

Obwohl beide generierten Titel angemessen aussehen, ist der erste (mit dem abgestimmten Modell generierte) mehr auf den Stil der Titel abgestimmt, die im betreffenden Dataset verwendet werden.

Abgestimmtes Modell laden

Möglicherweise ist es einfacher, ein gerade abgestimmtes Modell zu laden. Denken Sie jedoch daran, dass in Schritt 3 der Aufruf im Bereich des Codes selbst erfolgt, sodass das abgestimmte Modell weiterhin in der Variablen "tune_model" enthalten ist. Aber was ist, wenn Sie ein Modell aufrufen möchten, das in der Vergangenheit abgestimmt wurde?

Dazu können Sie die Methode get_tuned_model() im LLM mit der vollständigen ENDPOINT-URL des bereitgestellten, abgestimmten Modells aus Vertex AI Model Registry aufrufen. Beachten Sie, dass Sie in diesem Fall die PROJECT_NUMBER und die MODEL_NUMBER anstelle der jeweiligen IDs eingeben.

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. Schritt 5: Neues abgestimmtes Modell bewerten

Die Bewertung ist ein entscheidender Aspekt bei der Beurteilung der Qualität und Relevanz der generierten Antworten. Dabei wird die Ausgabe eines generativen Sprachmodells auf Kohärenz, Genauigkeit und Übereinstimmung mit dem Prompt geprüft. Die Modellbewertung hilft Ihnen, Verbesserungsmöglichkeiten zu identifizieren, die Modellleistung zu optimieren und sicherzustellen, dass der generierte Text die gewünschten Standards in Bezug auf Qualität und Nützlichkeit erfüllt. Weitere Informationen dazu finden Sie in der Dokumentation. Zunächst sehen wir uns an, wie wir einige Bewertungsmesswerte für das abgestimmte Modell erhalten und mit dem Basismodell vergleichen können.

  1. Laden Sie das EVALUATION-Dataset:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. Definieren Sie die Bewertungsspezifikation für eine Aufgabe zur Textzusammenfassung für das abgestimmte Modell.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Dieser Schritt kann einige Minuten dauern. Sie können den Fortschritt über den Pipelinejob-Link im Ergebnis verfolgen. Nach Abschluss des Vorgangs sollten Sie das folgende Bewertungsergebnis sehen:

387843d6c970e02.png

Der Messwert rougeLSum im Bewertungsergebnis gibt den ROUGE-L-Wert für die Zusammenfassung an. ROUGE-L ist ein Recall-basierter Messwert, der die Überschneidung zwischen einer Zusammenfassung und einer Referenzzusammenfassung misst. Sie wird berechnet, indem die längste gemeinsame Teilsequenz (LCS) zwischen den beiden Zusammenfassungen durch die Länge der Referenzzusammenfassung geteilt wird.

Der rougeLSum-Wert im angegebenen Ausdruck ist 0,36600753600753694. Das bedeutet, dass die Zusammenfassung eine Überschneidung von 36,6% mit der Referenzzusammenfassung aufweist.

Wenn Sie den Bewertungsschritt für das Basismodell ausführen, werden Sie feststellen, dass die Gesamtpunktzahl für das abgestimmte Modell relativ höher ist.

Sie finden die Bewertungsergebnisse im Cloud Storage-Ausgabeverzeichnis, das Sie beim Erstellen des Bewertungsjobs angegeben haben. Die Datei heißt evaluation_metrics.json. Für abgestimmte Modelle können Sie sich die Bewertungsergebnisse auch in der Google Cloud Console auf der Vertex AI-Seite Model Registry ansehen.

9. Wichtige Aspekte

  • Modellunterstützung:Die aktuelle Kompatibilität finden Sie immer in der Modelldokumentation.
  • Schnelle Entwicklung:LLMs entwickeln sich schnell weiter. Ein neueres, leistungsfähigeres Modell könnte die Leistung eines fein abgestimmten Modells, das auf einer älteren Basis aufbaut, potenziell übertreffen. Die gute Nachricht ist, dass Sie diese Feinabstimmungstechniken auf neuere Modelle anwenden können, sobald die entsprechende Funktion verfügbar ist.
  • LoRA:LoRA ist eine Technik für die effiziente Feinabstimmung von LLMs. Dazu werden trainierbare, niedrigrangige Zersetzungsmatrizen in die Schichten des vorhandenen vortrainierten Modells eingebaut. Weitere Informationen Anstatt alle Parameter eines riesigen LLM zu aktualisieren, lernt LoRA kleinere Matrizen, die zu den Gewichtungsmatrizen des ursprünglichen Modells addiert oder mit diesen multipliziert werden. Dadurch wird die Anzahl der zusätzlichen Parameter, die bei der Feinabstimmung eingeführt werden, erheblich reduziert.

10. Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Codelab verwendeten Ressourcen in Rechnung gestellt werden:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.
  4. Alternativ können Sie die Modell-Registry aufrufen, zum Tab „Modell bereitstellen und testen“ gehen, die Bereitstellung des Endpunkts aufheben und das bereitgestellte abgestimmte Modell löschen.

11. Glückwunsch

Glückwunsch! Sie haben mithilfe von Vertex AI erfolgreich ein LLM-Modell optimiert. Die Feinabstimmung ist eine leistungsstarke Technik, mit der Sie LLMs an Ihren Bereich und Ihre Aufgaben anpassen können. Mit Vertex AI haben Sie die Tools und Ressourcen, die Sie benötigen, um Ihre Modelle effizient und effektiv zu optimieren.

Sehen Sie sich die GitHub-Repositories an und experimentieren Sie mit dem Beispielcode, um die Optimierung und Evaluierung aus erster Hand zu erleben. Überlegen Sie, wie genau abgestimmte LLMs Ihre spezifischen Anforderungen erfüllen können – vom Erstellen zielgerichteter Marketingtexte über das Zusammenfassen komplexer Dokumente bis hin zum Übersetzen von Sprachen mit kulturellen Nuancen. Mit der umfassenden Suite von Tools und Diensten von Vertex AI können Sie Ihre fein abgestimmten Modelle ganz einfach erstellen, trainieren, bewerten und bereitstellen.