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

1. Einführung

Warum ist das Fine-Tuning 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 Vielzahl von Informationen enthalten und viele Aufgaben ausführen, aber sie sind nur dann wirklich leistungsstark, wenn sie speziell trainiert werden. Durch die Feinabstimmung kann ein LLM trainiert werden, sodass Sie ein vortrainiertes LLM an Ihre spezifischen Anforderungen anpassen können.

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

Die überwachte Abstimmung verbessert die Leistung eines Modells, indem sie ihm eine neue Fähigkeit vermittelt. Anhand von Daten, die Hunderte von gelabelten Beispielen enthalten, lernt das Modell ein gewünschtes Verhalten oder eine gewünschte Aufgabe. Wir stellen ein mit Labels versehenes Dataset für Eingabetext (Prompt) und Ausgabetext (Antwort) bereit, um dem Modell beizubringen, wie die Antworten für unseren speziellen Anwendungsfall angepasst werden.

Weitere Informationen zur Modellanpassung

Umfang

Anwendungsbeispiel: Überschriften für Nachrichtenartikel generieren

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

In diesem Codelab führen Sie folgende Aufgaben aus:

  • Verwenden Sie BBC FULLTEXT DATA (bereitgestellt durch das öffentliche BigQuery-Dataset bigquery-public-data.bbc_news.fulltext).
  • Ein LLM (text-bison@002) wird für ein neues optimiertes Modell namens „bbc-news-summary-tuned“ optimiert und das Ergebnis wird mit der Antwort des Basismodells verglichen. Eine JSONL-Beispieldatei ist für dieses Codelab im Repository verfügbar. Sie können die Datei in Ihren Cloud Storage-Bucket hochladen und die folgenden Schritte zum Feinabstimmen ausführen:
  • Daten vorbereiten:Beginnen Sie mit einem Dataset aus Nachrichtenartikeln und den entsprechenden Überschriften, z. B. dem BBC News-Dataset, das im Beispielcode verwendet wird.
  • Vorab trainiertes Modell abstimmen:Wählen Sie ein Basismodell wie „text-bison@002“ aus und stimmen Sie es mit Ihren Nachrichtendaten mit dem Vertex AI SDK für Python ab.
  • Ergebnisse auswerten:Vergleichen Sie die Leistung Ihres feinabgestimmten Modells mit dem Basismodell, um die Verbesserung der Qualität der Überschriften zu sehen.
  • Modell bereitstellen und verwenden:Stellen Sie Ihr feinabgestimmtes Modell über einen API-Endpunkt zur Verfügung und lassen Sie automatisch Überschriften für neue Artikel generieren.

2. Hinweis

  1. Wählen Sie in der Google Cloud Console auf der Seite zur 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 wie bei Ihrem derzeit aktiven Google Cloud-Konto.

3. Large Language Model abstimmen

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

Sie können Ihr Modell in fünf Schritten für benutzerdefinierte Antworten abstimmen 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, die in der IPYNB-Datei im Repository beschrieben sind. 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 YOUR_BUCKET durch Ihren Bucket und laden Sie die Beispieldatei TRAIN.jsonl mit Trainingsdaten in den Bucket hoch. Die Beispieldaten für diesen Anwendungsfall sind über den oben genannten Link verfügbar.

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

Das Ergebnis dieses Schritts sollte so aussehen:

17274866af36a47c.png

6. Schritt 3: Large Language Model abstimmen

Sie können an dieser Stelle jedes Large Language Model abstimmen (je nach Verfügbarkeit) . In diesem Snippet wird das vortrainierte Modell „text-bison@002“ jedoch mit dem DataFrame abgestimmt, der die Trainingsdaten enthält, 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 dauert einige Stunden. Sie können den Fortschritt der Feinabstimmung über den Link zum Pipeline-Job im Ergebnis verfolgen.

7. Schritt 4: Vorhersagen mit dem neuen, feinabgestimmten Modell erstellen

Sobald der Job zum Feinabstimmen abgeschlossen ist, können Sie Vorhersagen mit Ihrem neuen Modell treffen. So erstellen Sie Vorhersagen mit Ihrem 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 mit dem Basismodell (text-bison@002) zum Vergleich Vorhersagen zu treffen:

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, entspricht der erste (der mit dem feinabgestimmten Modell generiert wurde) eher dem Stil der Titel, die im betreffenden Dataset verwendet werden.

Feinabgestimmtes Modell laden

Es kann einfacher sein, ein Modell zu laden, das Sie gerade feinabgestimmt haben. Denken Sie aber daran, dass sie in Schritt 3 im Bereich des Codes selbst aufgerufen wird. Das abgestimmte Modell ist also weiterhin in der Variablen „tuned_model“ enthalten. Was aber, wenn Sie ein Modell aufrufen möchten, das in der Vergangenheit abgestimmt wurde?

Dazu können Sie die Methode „get_tuned_model()“ für das LLM mit der vollständigen ENDPOINT-URL des bereitgestellten feinabgestimmten Modells aus der Vertex AI Model Registry aufrufen. In diesem Fall geben Sie die PROJECT_NUMBER und die MODEL_NUMBER 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: Neues, feinabgestimmtes Modell bewerten

Die Bewertung ist ein wichtiger Aspekt bei der Beurteilung der Qualität und Relevanz der generierten Antwort. Dabei wird die Ausgabe eines generativen Sprachmodells untersucht, um ihre Kohärenz, Richtigkeit und Übereinstimmung mit dem bereitgestellten Prompt zu bestimmen. Die Modellevaluierung hilft, verbesserungswürdige Bereiche zu identifizieren, die Modellleistung zu optimieren und sicherzustellen, dass der generierte Text den gewünschten Qualitäts- und Nützlichkeitsstandards entspricht. Weitere Informationen dazu finden Sie in der Dokumentation. Sehen wir uns nun an, wie wir einige Bewertungsmetriken für das feinabgestimmte Modell abrufen 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 Textzusammenfassungsaufgabe für das feinabgestimmte 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 des Vorgangs sollte das folgende Ergebnis angezeigt werden:

387843d6c970e02.png

Der Messwert rougeLSum im Bewertungsergebnis gibt den ROUGE-L-Wert für die Zusammenfassung an. ROUGE-L ist ein auf dem Recall basierender Messwert, der die Überschneidung zwischen einer Zusammenfassung und einer Referenzzusammenfassung misst. Sie wird berechnet, indem die längste gemeinsame Untersequenz (Longest Common Subsequence, 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 der Zusammenfassungswert für das feinabgestimmte 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 Hinweise

  • Modellunterstützung:Die aktuelle Kompatibilität finden Sie immer in der Dokumentation des Modells.
  • Schnelle Entwicklung:Der Bereich der LLMs entwickelt sich rasant weiter. Ein neueres, leistungsstärkeres Modell kann möglicherweise ein feinabgestimmtes Modell übertreffen, das auf einer älteren Basis basiert. Sie können diese Techniken zur Feinabstimmung auf neuere Modelle anwenden, sobald die Funktion verfügbar ist.
  • LoRA:LoRA ist eine Technik zum effizienten Fine-Tuning von LLMs. Dazu werden trainierbare Zerlegungsmatrizen mit niedrigem Rang in die Ebenen des vorhandenen vortrainierten Modells eingefügt. Weitere Informationen Anstatt alle Parameter eines umfangreichen LLM zu aktualisieren, werden bei LoRA kleinere Matrizen gelernt, die den Gewichtungsmatrizen des ursprünglichen Modells hinzugefügt oder mit ihnen multipliziert werden. Dadurch wird die Anzahl der zusätzlichen Parameter, die beim Fine-Tuning 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. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
  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, zum Tab „Modell bereitstellen und testen“ wechseln, die Bereitstellung des Endpunkts aufheben und das bereitgestellte optimierte Modell löschen.

11. Glückwunsch

Glückwunsch! Sie haben mit Vertex AI erfolgreich ein LLM-Modell abgestimmt. 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 abzustimmen.

Sehen Sie sich die GitHub-Repositories an und probieren Sie den Beispielcode aus, um das Feinabstimmen und die Bewertung selbst zu erleben. Überlegen Sie, wie sich feinabgestimmte LLMs für Ihre spezifischen Anforderungen einsetzen lassen, z. B. zum Generieren von zielgerichteten Marketingtexten, zum Zusammenfassen komplexer Dokumente oder zum Übersetzen von Sprachen mit kulturellen Nuancen. Nutzen Sie die umfassende Suite von Tools und Diensten, die von Vertex AI angeboten werden, um Ihre feinabgestimmten Modelle ganz einfach zu erstellen, zu trainieren, zu bewerten und bereitzustellen.