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

1. Einführung

Warum ist die Feinabstimmung wichtig?

Foundation Models werden für allgemeine Zwecke trainiert und führen manchmal Aufgaben nicht so gut aus, wie Sie es sich wünschen würden. Das kann daran liegen, dass die Aufgaben, die das Modell ausführen soll, spezielle Aufgaben sind, bei denen es schwierig ist, ein Modell nur mit Prompt-Design zu trainieren. In diesen Fällen können Sie die Modellabstimmung verwenden, um die Leistung eines Modells für bestimmte Aufgaben zu verbessern. Die Modellabstimmung kann auch dabei helfen, bestimmte Ausgabeanforderungen einzuhalten, wenn die Anleitungen nicht ausreichen. Large Language Models (LLMs) können eine enorme Menge an Informationen haben und viele Aufgaben ausführen, aber sie eignen sich nur dann, wenn sie speziell trainiert werden. Mit der Feinabstimmung können Sie ein LLM trainieren und so ein vortrainiertes LLM an Ihre spezifischen Anforderungen anpassen.

In diesem Codelab erfahren Sie, wie Sie mithilfe der überwachten Optimierung eine Feinabstimmung für ein LLM-Modell vornehmen.

Die überwachte Abstimmung verbessert die Leistung eines Modells, indem sie ihm eine neue Fähigkeit vermittelt. Daten, die Hunderte von mit Labels versehenen Beispielen enthalten, werden verwendet, um dem Modell beizubringen, ein gewünschtes Verhalten oder eine gewünschte Aufgabe nachzuahmen. Wir stellen einen Dataset mit Labels für Eingabetext (Prompt) und Ausgabetext (Antwort) bereit, um dem Modell beizubringen, wie es die Antworten für unseren spezifischen Anwendungsfall anpassen soll.

Weitere Informationen zur Modellanpassung

Umfang

Anwendungsfall: Schlagzeilen für Nachrichtenartikel generieren

Angenommen, Sie möchten automatisch Schlagzeilen für Nachrichtenartikel generieren. 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.

In diesem Codelab führen Sie folgende Schritte aus:

  • Verwenden Sie BBC FULLTEXT DATA (verfügbar über das öffentliche BigQuery-Dataset bigquery-public-data.bbc_news.fulltext).
  • Optimieren Sie ein LLM (text-bison@002) zu einem neuen optimierten Modell namens „bbc-news-summary-tuned“ und vergleichen Sie das Ergebnis mit der Antwort des Basismodells. Eine Beispiel-JSONL-Datei für dieses Codelab ist im Repository 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 Datensatz mit Nachrichtenartikeln und den zugehörigen Überschriften, z. B. dem BBC News-Datensatz, der im Beispielcode verwendet wird.
  • Vorab trainiertes Modell optimieren:Wählen Sie ein Basismodell wie „text-bison@002“ aus und optimieren Sie es mit Ihren Nachrichtendaten mit dem Vertex AI SDK für Python.
  • Ergebnisse auswerten:Vergleichen Sie die Leistung des optimierten Modells mit dem Basismodell, um die Verbesserung der Qualität der Headline-Generierung zu sehen.
  • Modell bereitstellen und verwenden:Stellen Sie Ihr optimiertes 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 der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Öffnen Sie Colab Notebook und melden Sie sich mit demselben Konto an, das Sie für Ihr derzeit 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 vornehmen: HTTP, CURL-Befehl, Java SDK, Console.

In fünf Schritten können Sie Ihr Modell für personalisierte Antworten optimieren und bewerten. Den vollständigen Code finden Sie in der Datei llm_fine_tuning_supervised.ipynb im 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 beschrieben. Ersetzen Sie PROJECT_ID und BUCKET_NAME 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 DEIN_BUCKET durch Ihren Bucket und laden Sie die Beispieldatei mit Trainingsdaten TRAIN.jsonl in den Bucket hoch. Die Beispieldaten für diesen Anwendungsfall finden Sie unter dem oben genannten Link.

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

Dies sollte zu folgendem Ergebnis führen:

17274866af36a47c.png

6. Schritt 3: Large Language Model optimieren

Sie können jetzt jedes Large Language Model optimieren (je nach Verfügbarkeit des Supports) . In diesem Snippet passen wir jedoch das vortrainierte Modell „text-bison@002“ mit dem Datenframe an, der die im vorherigen Schritt geladenen Trainingsdaten enthält:

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 dauert einige Stunden. Sie können den Fortschritt der Feinabstimmung über den Link zum Pipeline-Job im Ergebnis verfolgen.

7. Schritt 4: Mit dem neuen optimierten Modell eine Vorhersage treffen

Sobald die Feinabstimmung abgeschlossen ist, können Sie mit Ihrem neuen Modell Vorhersagen treffen. So erstellen Sie eine Vorhersage mit dem neuen abgestimmten Modell:

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 Prognose mit dem Basismodell (text-bison@002) zu erstellen:

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

Auch wenn beide generierten Titel angemessen sind, passt der erste (der mit dem optimierten Modell generiert wurde) besser zum Stil der Titel, die im betreffenden Datensatz verwendet werden.

Optimiertes Modell laden

Es ist möglicherweise einfacher, ein Modell zu laden, das Sie gerade optimiert haben. Denken Sie aber daran, dass es in Schritt 3 im Code selbst aufgerufen wird, sodass das optimierte Modell weiterhin in der Variablen „tuned_model“ gespeichert ist. Was aber, wenn Sie ein Modell aufrufen möchten, das in der Vergangenheit optimiert wurde?

Dazu können Sie die Methode „get_tuned_model()“ auf dem LLM mit der vollständigen ENDPOINT-URL des bereitgestellten optimierten Modells aus der Vertex AI Model Registry aufrufen. In diesem Fall geben Sie die PROJEKTNUMMER und die MODELLNUMMER anstelle der entsprechenden IDs ein.

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: Optimiertes Modell bewerten

Die Bewertung ist ein entscheidender Aspekt bei der Beurteilung der Qualität und Relevanz der generierten Antwort. Dabei wird die Ausgabe eines generativen Sprachmodells untersucht, um ihre Kohärenz, Genauigkeit und Übereinstimmung mit dem bereitgestellten Prompt zu bestimmen. Mit der Modellbewertung können Sie Verbesserungsmöglichkeiten ermitteln, die Modellleistung optimieren und dafür sorgen, dass der generierte Text die gewünschten Qualitäts- und Nützlichkeitsstandards erfüllt. Weitere Informationen finden Sie in der Dokumentation. Sehen wir uns an, wie wir einige Bewertungsmesswerte für das optimierte Modell abrufen und mit dem Basismodell vergleichen können.

  1. Laden Sie das BEWERTUNGS-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 Textzusammenfassungsaufgabe für das optimierte Modell.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Dieser Schritt kann einige Minuten dauern. Sie können den Fortschritt über den Link zum Pipeline-Job im Ergebnis verfolgen. Nach Abschluss sollte das folgende Bewertungsergebnis angezeigt werden:

387843d6c970e02.png

Der Messwert rougeLSum im Bewertungsergebnis gibt den ROUGE-L-Wert für die Zusammenfassung an. ROUGE-L ist ein rückrufbasierter Messwert, der die Überschneidung zwischen einer Zusammenfassung und einer Referenzzusammenfassung misst. Er wird berechnet, indem die längste gemeinsame Untersequenz (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 zu 36,6% mit der Referenzzusammenfassung übereinstimmt.

Wenn Sie den Bewertungsschritt für das Basismodell ausführen, sehen Sie, dass die Zusammenfassungsbewertung für das optimierte 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. Bei optimierten Modellen können Sie auch Bewertungsergebnisse in der Google Cloud Console auf der Seite Vertex AI Model Registry aufrufen.

9. Wichtige Aspekte

  • Modellsupport:In der Modelldokumentation finden Sie immer die neuesten Informationen zur Kompatibilität.
  • Schnelle Entwicklung: Das Gebiet der LL.M.-Abschlüsse entwickelt sich schnell. Ein neueres, leistungsstärkeres Modell kann potenziell besser abschneiden als ein optimiertes Modell, das auf einer älteren Basis basiert. Die gute Nachricht ist, dass Sie diese Techniken zur Feinabstimmung auf neuere Modelle anwenden können, sobald die Funktion verfügbar ist.
  • LoRA: LoRA ist eine Methode zur effizienten Feinabstimmung von LLMs. Dazu werden trainierbare, Low-Rank-Zerlegungsmatrizen in die Schichten des vorhandenen vortrainierten Modells eingeführt. Weitere Informationen Anstatt alle Parameter eines riesigen LLM zu aktualisieren, lernt LoRA kleinere Matrizen, die den Gewichtungsmatrizen des ursprünglichen Modells hinzugefügt oder mit ihnen 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 Model Registry aufrufen, den Tab „Bereitstellen und Testen von Modellen“ aufrufen, die Bereitstellung des Endpunkts aufheben und das bereitgestellte optimierte Modell löschen.

11. Glückwunsch

Glückwunsch! Sie haben mit Vertex AI ein LLM-Modell optimiert. Die Feinabstimmung ist eine leistungsstarke Methode, mit der Sie LLMs an Ihre Domain und 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 Feintuning und Bewertung aus erster Hand zu erleben. Überlegen Sie, wie Sie mit optimierten LLMs Ihre spezifischen Anforderungen erfüllen können, z. B. beim Erstellen von zielgerichteten Marketingtexten, Zusammenfassen komplexer Dokumente oder Übersetzen von Sprachen mit kulturellen Nuancen. Mit der umfassenden Palette von Tools und Diensten von Vertex AI können Sie Ihre optimierten Modelle ganz einfach erstellen, trainieren, bewerten und bereitstellen.