Feinabstimmung und Bewertung verwenden, um die Modelleistung zu verbessern
In dieser Anleitung wird gezeigt, wie Sie ein BigQuery ML-Remote-Modell erstellen, das auf ein Vertex AI-gemini-2.0-flash-001
-Modell verweist.
Anschließend verwenden Sie
Überwachte Abstimmung um das Modell mit neuen Trainingsdaten zu optimieren, gefolgt von der Bewertung des Modells mit der ML.EVALUATE
Funktion “
Die Abstimmung kann Ihnen bei der Behebung von Szenarien helfen, in denen Sie das gehostete Vertex AI-Modell anpassen müssen, z. B. wenn das erwartete Verhalten des Modells schwierig zu definieren ist in einem Prompt oder wenn Prompts nicht die erwarteten Ergebnisse generieren, d. h. Ergebnisse die konsistent genug sind. Die überwachte Abstimmung wirkt sich auch so auf das Modell aus:
- Leitet das Modell so, dass bestimmte Antwortstile zurückgegeben werden, z. B. mit prägnanteren oder ausführlicheren Antworten.
- Bringt dem Modell neue Verhaltensweisen bei, z. B. das Beantworten von Prompts als eine bestimmte Persona.
- Das Modell wird mit neuen Informationen aktualisiert.
In dieser Anleitung soll das Modell Text generieren, dessen Stil und Inhalt so genau wie möglich mit den bereitgestellten Grundwahrheitsinhalten übereinstimmen.
Erforderliche Rollen
Zum Ausführen dieser Anleitung benötigen Sie die folgenden IAM-Rollen (Identity and Access Management):
- BigQuery-Datasets, ‑Verbindungen und ‑Modelle erstellen und verwenden: BigQuery-Administrator (
roles/bigquery.admin
). - Gewähren Sie dem Dienstkonto der Verbindung Berechtigungen: „Projekt-IAM-Administrator“ (
roles/resourcemanager.projectIamAdmin
).
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Ausführen der Aufgaben in diesem Dokument erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
- Dataset erstellen:
bigquery.datasets.create
- Tabelle erstellen:
bigquery.tables.create
- Verbindung erstellen, delegieren und verwenden:
bigquery.connections.*
- Standardverbindung festlegen:
bigquery.config.*
- Dienstkontoberechtigungen festlegen:
resourcemanager.projects.getIamPolicy
undresourcemanager.projects.setIamPolicy
- Modell erstellen und Inferenz ausführen:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Hinweise
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
- Vertex AI: You incur costs for calls to and
supervised tuning of the
gemini-1.0-flash-002
model.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Weitere Informationen finden Sie in den folgenden Ressourcen:
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset zum Speichern Ihres ML-Modells.
Console
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorial
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.
Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
bq
Wenn Sie ein neues Dataset erstellen möchten, verwenden Sie den Befehl bq mk
mit dem Flag --location
. Eine vollständige Liste der möglichen Parameter finden Sie in der bq mk --dataset
-Befehlsreferenz.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorial
, wobei der Datenspeicherort aufUS
und die Beschreibung aufBigQuery ML tutorial dataset
festgelegt ist:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anstelle des Flags
--dataset
verwendet der Befehl die verkürzte Form-d
. Wenn Sie-d
und--dataset
auslassen, wird standardmäßig ein Dataset erstellt.Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
API
Rufen Sie die Methode datasets.insert
mit einer definierten Dataset-Ressource auf.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Testtabellen erstellen
Erstellen Sie Tabellen mit Trainings- und Bewertungsdaten basierend auf dem öffentlichen Dataset task955_wiki_auto_style_transfer von Hugging Face.
Öffnen Sie Cloud Shell.
Führen Sie in Cloud Shell die folgenden Befehle aus, um Tabellen mit Test- und Bewertungsdaten zu erstellen:
python3 -m pip install pandas pyarrow fsspec huggingface_hub python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);" python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);" bq rm -t bqml_tutorial.wiki_auto_style_transfer_train bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
Basismodell erstellen
Erstellen Sie ein Remote-Modell über dem gemini-1.0-flash-002
-Modell von Vertex AI.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Query Editor die folgende Anweisung aus, um ein Remote-Modell zu erstellen:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT ='gemini-2.0-flash-001');
Die Abfrage dauert mehrere Sekunden. Anschließend wird das Modell
gemini_baseline
imbqml_tutorial
-Dataset des Bereichs Explorer angezeigt. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.
Leistung des Basismodells prüfen
Führen Sie die ML.GENERATE_TEXT
-Funktion
mit dem Remote-Modell aus, um zu sehen, wie es mit den Bewertungsdaten ohne
Feinabstimmung funktioniert.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Wenn Sie die Ausgabedaten untersuchen und die Werte für
ml_generate_text_llm_result
undground_truth
vergleichen, sehen Sie, dass das Basismodell zwar Text generiert, der die Fakten im Referenzinhalt genau widerspiegelt, der Stil des Texts jedoch recht unterschiedlich ist.
Basismodell bewerten
Wenn Sie die Modellleistung genauer bewerten möchten, verwenden Sie die Funktion ML.EVALUATE
.
Diese Funktion berechnet Modellmesswerte, mit denen die Genauigkeit und Qualität des generierten Texts gemessen werden, um die Antworten des Modells mit idealen Antworten zu vergleichen.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS input_text, output AS output_text FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
Die Ausgabe sieht dann ungefähr so aus:
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.23317359667074181 | 0.37809145226740043 | 0.45902937167791508 | 0.40956844061733139 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Die Leistung des Basismodells ist nicht schlecht, aber die Ähnlichkeit des generierten Texts mit der Ground Truth ist anhand der Bewertungs-Messwerte gering. Das deutet darauf hin, dass es sich lohnt, eine überwachte Abstimmung vorzunehmen, um zu sehen, ob sich die Modellleistung für diesen Anwendungsfall verbessern lässt.
Abgestimmtes Modell erstellen
Erstellen Sie ein Remote-Modell, das dem ähnelt, das Sie unter Modell erstellen erstellt haben, aber geben Sie dieses Mal die AS SELECT
-Klausel an, um die Trainingsdaten bereitzustellen, damit das Modell optimiert wird.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Query Editor die folgende Anweisung aus, um eine Remote-Modell zu erstellen:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned` REMOTE WITH CONNECTION DEFAULT OPTIONS ( endpoint = 'gemini-2.0-flash-001', max_iterations = 500, data_split_method = 'no_split') AS SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_train`;
Die Abfrage dauert einige Minuten. Anschließend wird das Modell
gemini_tuned
imbqml_tutorial
-Dataset des Bereichs Explorer angezeigt. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.
Leistung des abgestimmten Modells prüfen
Führen Sie die Funktion ML.GENERATE_TEXT
aus, um die Leistung des abgestimmten Modells für die
Bewertungsdaten zu sehen.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Bei der Überprüfung der Ausgabedaten stellen Sie fest, dass das abgestimmte Modell Text erzeugt, der stilistisch viel ähnlicher ist als der Inhalt der Grundwahrheit.
Abgestimmtes Modell bewerten
Mit der Funktion ML.EVALUATE
können Sie die Antworten des abgestimmten Modells mit den idealen Antworten vergleichen.
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Führen Sie im Abfrageeditor folgende Abfrage aus:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
Die Ausgabe sieht dann ungefähr so aus:
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.416868792119966 | 0.642001000843349 | 0.55910008048151372 | 0.5907226262084847 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Obwohl im Trainings-Dataset nur 1.408 Beispiele verwendet wurden,hat sich die Leistung deutlich verbessert, wie die höheren Bewertungsmesswerte zeigen.
Bereinigen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.