Fine-Tuning (Snowflake Cortex)

Die Funktion Snowflake Cortex Fine-tuning bietet eine Möglichkeit, große Sprachmodelle für Ihre spezielle Aufgabe anzupassen. Unter diesem Thema wird beschrieben, wie das Feature funktioniert und wie Sie mit dem Fine-Tuning Ihres eigenen Modells beginnen können.

Überblick

Cortex Fine-tuning ermöglicht es Benutzern, das Parameter-effiziente Fine-Tuning (PEFT) zu nutzen, um maßgeschneiderte Adaptoren für die Verwendung mit vortrainierten Modellen bei spezielleren Aufgaben zu erstellen. Wenn Sie nicht die hohen Kosten für das Training eines großen Modells von Grund auf auf sich nehmen möchten, aber bessere Latenzzeiten und Ergebnisse benötigen, als Sie mit Prompt-Engineering- oder sogar RAG-Methoden (Retrieval Augmented Generation) erhalten, ist das Fine-Tuning eines bestehenden großen Modells eine Option. Beim Fine-Tuning können Sie anhand von Beispielen das Verhalten des Modells anpassen und das Wissen des Modells über domänenspezifische Aufgaben verbessern.

Cortex Fine-tuning ist ein vollständig verwalteter Service, mit dem Sie beliebte LLMs anhand Ihrer Daten innerhalb von Snowflake feinabstimmen können.

Cortex Fine-tuning-Features werden als Snowflake Cortex-Funktion FINETUNE mit den folgenden Argumenten bereitgestellt:

  • CREATE: Erstellt einen Fine-Tuning-Job mit den angegebenen Trainingsdaten.

  • SHOW: Listet alle Fine-Tuning-Jobs im aktuellen Konto auf.

  • DESCRIBE: Beschreibt den Fortschritt und den Status eines bestimmten Fine-Tuning-Jobs.

  • CANCEL: Bricht einen bestimmten Fine-Tuning-Job ab.

Hinweise zu Kosten

Die Funktion Snowflake Cortex Fine-tuning verursacht Kosten, die von der Anzahl der beim Training verwendeten Token abhängen. Darüber hinaus entstehen bei der Ausführung der AI_COMPLETE-Funktion auf einem Fine-Tuning-Modell Rechenkosten, die von der Anzahl der verarbeiteten Token abhängen. Die Kosten in Credits pro Million Token finden Sie in der Tabelle Snowflake Service Consumption Table.

Ein Token ist die kleinste Texteinheit, die von der Funktion Snowflake Cortex Fine-tuning verarbeitet wird und etwa vier Textzeichen entspricht. Das Verhältnis des ein-/ausgegebene Rohtextes zur Tokenanzahl kann je nach Modell variieren.

  • Für die Funktion COMPLETE, die neuen Text in der Antwort erzeugt, werden sowohl Eingabe- als auch Ausgabe-Token gezählt.

  • Trainierte Token für das Fine-Tuning werden wie folgt berechnet:

    Fine-tuning trained tokens = number of input tokens * number of epochs trained
    
    Copy

    Verwenden Sie die FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX), um die Anzahl der trainierten Token für Ihren Fine-Tunig-Job zu sehen.

  • Zusätzlich zu den Kosten für Tuning und Inferenz fallen die Standardkosten für -Speicher, und Warehouse-Kosten an, um die angepassten Adapter zu speichern und die SQL-Befehle auszuführen.

Verfolgen Sie den Credit-Verbrauch für das Fine-Tuning-Training

Um den Credit- und Token-Verbrauch für Fine-Tuning-Training zu sehen, verwenden Sie die Seite Ansicht CORTEX_FINE_TUNING_USAGE_HISTORY:

SELECT *
  FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FINE_TUNING_USAGE_HISTORY;
Copy

Weitere Hinweise

  • Fine-Tuning-Jobs sind oft langlaufend und nicht mit einer Arbeitsblattsitzung verbunden.

  • Die Anzahl der Zeilen im Trainings-/Validierungsdatensatz wird durch das Basismodell und die Anzahl der Trainingsepochen begrenzt. Die folgende Tabelle zeigt die Grenzwerte für 3 Epochen:

    Effective row count limit = 1 epoch limit for base model / number of epochs trained
    
    Copy

    Modell

    1 Epoche

    3 Epochen (Standard)

    llama3-8b

    186k

    62k

    llama3-70b

    21k

    7k

    llama3.1-8b

    150k

    50k

    llama3.1-70b

    13,5k

    4,5k

    mistral-7b

    45k

    15k

    mixtral-8x7b

    27k

    9k

Anforderungen an die Zugriffssteuerung

Um einen Fine-Tuning-Job auszuführen, benötigt die Rolle, die den Fine-Tuning-Job erstellt, die folgenden Berechtigungen:

Berechtigung

Objekt

Anmerkungen

USAGE

DATABASE

Die Datenbank, aus der die Trainings- (und Validierungs-)Daten abgefragt werden.

CREATE MODEL oder OWNERSHIP

SCHEMA

Das Schema, in dem das Modell gespeichert wird.

Das folgende SQL ist ein Beispiel für die Erteilung der Berechtigung CREATE MODEL an die Rolle my_role in my_schema.

GRANT CREATE MODEL ON SCHEMA my_schema TO ROLE my_role;
Copy

Um die Funktion FINETUNE verwenden zu können, muss die Rolle ACCOUNTADMIN dem Benutzer, der die Funktion aufrufen soll, die Datenbankrolle SNOWFLAKE.CORTEX_USER zuweisen. Weitere Informationen dazu finden Sie unter Erforderliche Berechtigungen für LLM-Funktionen.

Um anderen Rollen den Zugriff auf das Fine-Tuning-Modell zu ermöglichen, müssen Sie die Nutzung des Modells erlauben. Weitere Details dazu finden Sie unter Modellberechtigungen.

Verfügbare Modelle zum Fine-Tuning

Sie haben die folgenden Basismodelle, auf denen Sie ein Fine-Tuning ausführen können. Die für das Fine-Tuning verfügbaren Modelle können in Zukunft hinzugefügt und entfernt werden:

Name

Beschreibung

llama3-8b

Ein großes Sprachmodell von Meta, das sich ideal für Aufgaben eignet, die ein geringes bis mäßiges logisches Denken mit höherer Genauigkeit als das llama2-70b-chat-Modell erfordern, wie z. B. Textklassifizierung, Textzusammenfassung und Stimmungsanalyse.

llama3-70b

Ein LLM von Meta, das Top-Performance bietet und ideal für Chat-Anwendungen, Content-Erstellung und Unternehmensanwendungen ist.

llama3.1-8b

Ein großes Sprachmodell (Large Language Model) von Meta, das sich ideal für Aufgaben eignet, die eine geringe bis mittlere Denkleistung erfordern. Es ist ein leichtes, ultraschnelles Modell mit einem Kontextfenster von 24K.

llama3.1-70b

Ein Open-Source-Modell, das modernste Leistung bietet und ideal für Chat-Anwendungen, Content-Erstellung und Unternehmensanwendungen ist. Es ist ein hochleistungsfähiges, kosteneffizientes Modell, das verschiedene Anwendungsfälle ermöglicht.

mistral-7b

Ein 7 Milliarden Parameter großes Sprachmodell von Mistral AI, das sich ideal für Ihre einfachsten Zusammenfassungs-, Strukturierungs- und Fragebeantwortungsaufgaben eignet, die schnell erledigt werden müssen. Mit seinem 32K-Kontextfenster bietet es niedrige Latenzen und einen hohen Durchsatz bei der Verarbeitung mehrerer Textseiten.

mixtral-8x7b

Ein großes Sprachmodell von Mistral AI, das sich ideal für die Texterstellung, Klassifizierung und Beantwortung von Fragen eignet. Die Mistral-Modelle sind für niedrige Latenzen und geringen Arbeitsspeicherbedarf optimiert, was sich in einem höheren Durchsatz für Anwendungsfälle in großen Unternehmen niederschlägt.

Fine-Tuning eines Modells

Der gesamte Workflow für das Fine-Tuning eines Modells sieht wie folgt aus:

  1. Trainingsdaten vorbereiten

  2. Fine-Tuning-Job mit gewünschten Parametern starten

  3. Trainingjob überwachen

Sobald das Training abgeschlossen ist, können Sie den von Cortex Fine-tuning bereitgestellten Modellnamen verwenden, um die Inferenz für Ihr Modell auszuführen.

Bereiten Sie die Fine-Tuning-Daten vor

Die Fine-Tuning-Daten müssen aus einer Snowflake-Tabelle oder -Ansicht stammen und das Abfrageergebnis muss Spalten namens prompt und completion enthalten. Wenn Ihre Tabelle oder Ansicht keine Spalten mit den erforderlichen Namen enthält, verwenden Sie einen Spaltenalias in Ihrer Abfrage, um sie zu benennen. Diese Abfrage wird als Parameter an die Funktion FINETUNE übergeben. Sie erhalten eine Fehlermeldung, wenn in den Ergebnissen die Spaltennamen prompt und completion fehlen.

Bemerkung

Alle Spalten bis auf die Spalten „prompt“ (Prompt) und „completion“ (Vervollständigung, Antwort) werden von der FINETUNE-Funktion ignoriert. Snowflake empfiehlt die Verwendung einer Abfrage, die nur die von Ihnen benötigten Spalten auswählt.

Der folgende Code ruft die FINETUNE-Funktion auf und verwendet die SELECT ... AS-Syntax, um zwei der Spalten im Abfrageergebnis auf prompt und completion zu setzen.

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'my_tuned_model',
  'mistral-7b',
  'SELECT a AS prompt, d AS completion FROM train',
  'SELECT a AS prompt, d AS completion FROM validation'
);
Copy

Bemerkung

Um Antworten zu erhalten, die einem von Ihnen definierten Schema folgen, verwenden Sie strukturierte Ausgaben, um Fine-Tuning-Daten zu erzeugen. Weitere Informationen über strukturierte Ausgaben finden Sie unter Strukturierte AI_COMPLETE-Ausgaben.

Ein Prompt ist eine Eingabe für das LLM und „completion“ ist die Vervollständigung oder Antwort des LLM. Ihre Trainingsdaten sollten Paare von Prompts und Antworten enthalten, die zeigen, wie das Modell auf bestimmte Prompts reagieren soll.

Im Folgenden finden Sie zusätzliche Empfehlungen und Anforderungen an Ihre Trainingsdaten, um eine optimale Leistung beim Fine-Tuning zu erzielen.

  • Beginnen Sie mit ein paar hundert Beispielen. Wenn Sie mit zu vielen Beispielen beginnen, kann sich die Fine-Tuning-Zeit drastisch erhöhen, ohne dass sich die Leistung verbessert.

  • Für jedes Beispiel dürfen Sie nur einen Teil des zugewiesenen Kontextfensters für das Basismodell verwenden, das Sie optimieren. Das Kontextfenster wird in Form von Token definiert. Ein Token ist die kleinste Texteinheit, die von den Snowflake Cortex-Funktionen verarbeitet wird, und entspricht etwa vier Textzeichen. Paare von Prompts und Antworten, die diese Grenze überschreiten, werden abgeschnitten, was sich negativ auf die Qualität des trainierten Modells auswirken kann.

  • Die folgende Tabelle definiert den Teil des Kontextfensters, der für prompt und completion für jedes Basismodell vorgesehen ist:

    Modell

    Kontextfenster

    Eingabekontext (Prompt)

    Ausgabekontext (Antwort)

    lama3-8b

    8k

    6k

    2k

    lama3-70b

    8k

    6k

    2k

    llama3.1-8b

    24k

    20k

    4k

    llama3.1-70b

    8k

    6k

    2k

    mistral-7b

    32k

    28k

    4k

    mixtral-8x7b

    32k

    28k

    4k

Fine-Tuning-Job starten beginnen

Sie können einen Fine-Tuning-Job starten, indem Sie die Funktion SNOWFLAKE.CORTEX.FINETUNE aufrufen und „CREATE“ als erstes Argument übergeben oder die Snowsight verwenden.

Verwenden von SQL

Im folgenden Beispiel wird das Modell mistral-7b als Basismodell verwendet, um einen Job mit dem Modellausgabenamen my_tuned_model und die Abfrage von Trainings- und Validierungsdaten aus den Tabellen my_training_data bzw. my_validation_data zu erstellen.

USE DATABASE mydb;
USE SCHEMA myschema;

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'my_tuned_model',
  'mistral-7b',
  'SELECT prompt, completion FROM my_training_data',
  'SELECT prompt, completion FROM my_validation_data'
);
Copy

Sie können absolute Pfade für jedes der Datenbankobjekte wie das Modell oder die Daten verwenden, wenn Sie jeweils eine andere Datenbank und ein anderes Schema verwenden möchten. Das folgende Beispiel zeigt, wie Sie einen Fine-Tuning-Job mit Daten aus der Datenbank und dem Schema mydb2.myschema2 erstellen und das optimierte Modell in der Datenbank und dem Schema mydb.myschema speichern.

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'mydb.myschema.my_tuned_model',
  'mistral-7b',
  'SELECT prompt, completion FROM mydb2.myschema2.my_training_data',
  'SELECT prompt, completion FROM mydb2.myschema2.my_validation_data'
);
Copy

Die Funktion SNOWFLAKE.CORTEX.FINETUNE mit ‚CREATE‘ als erstem Argument liefert eine Fine-Tuning-Modell-ID als Ausgabe. Verwenden Sie diese ID, um den Status oder den Jobfortschritt mit der Funktion SNOWFLAKE.CORTEX.FINETUNE mit ‚DESCRIBE‘ als erstem Argument abzurufen.

Verwenden von Snowsight

Gehen Sie folgendermaßen vor, um einen Fine-Tuning-Job im der Snowsight zu erstellen:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie eine Rolle, die die Datenbankrolle SNOWFLAKE.CORTEX_USER hat.

  3. Wählen Sie im Navigationsmenü die Option AI & ML » Studio aus.

  4. Wählen Sie Fine-tune aus dem Feld Create Custom LLM.

  5. Wählen Sie ein Basismodell aus dem Dropdown-Menü.

  6. Wählen Sie die Rolle, unter der der Fine-Tuning-Job ausgeführt werden soll, und das Warehouse, in dem er ausgeführt werden soll. Der Rolle muss die Datenbankrolle SNOWFLAKE.CORTEX_USER zugewiesen sein.

  7. Wählen Sie eine Datenbank aus, in der das Fine-Tuning-Modell gespeichert werden soll.

  8. Geben Sie einen Namen für Ihr Fine-Tuning-Modell ein, und wählen Sie dann Let’s go aus.

  9. Wählen Sie die Tabelle oder Ansicht aus, die Ihre Trainingsdaten enthält, und wählen Sie dann Next aus. Die Trainingsdaten können aus jeder Datenbank oder jedem Schema stammen, auf das die Rolle Zugriff hat.

  10. Wählen Sie die Spalte aus, die die Eingabeaufforderungen in Ihren Trainingsdaten enthält, und wählen Sie dann Next.

  11. Wählen Sie die Spalte aus, die die Vervollständigungen in Ihren Trainingsdaten enthält, und wählen Sie dann Next aus.

  12. Wenn Sie einen Validierungsdatensatz haben, wählen Sie die Tabelle oder Ansicht aus, die Ihre Validierungsdaten enthält, und wählen Sie dann Next aus. Wenn Sie keine separaten Validierungsdaten haben, wählen Sie Skip this option aus.

  13. Überprüfen Sie Ihre Auswahl und wählen Sie dann Start training.

Der letzte Schritt bestätigt, dass Ihr Fine-Tuning-Job begonnen hat und zeigt die Job ID an. Verwenden Sie diese ID, um den Status oder den Jobfortschritt mit der Funktion SNOWFLAKE.CORTEX.FINETUNE mit ‚DESCRIBE‘ als erstem Argument abzurufen.

Fine-Tuning-Jobs verwalten

Fine-Tuning-Jobs sind langlaufend, d. h. sie sind nicht an eine Arbeitsblattsitzung gebunden. Sie können den Status Ihres Fine-Tuning-Jobs überprüfen, indem Sie die Funktion SNOWFLAKE.CORTEX.FINETUNE mit SHOW oder ‚DESCRIBE‘ als erstem Argument verwenden.

Wenn Sie einen Fine-Tuning-Job nicht mehr benötigen, können Sie den Auftrag mit der Funktion SNOWFLAKE.CORTEX.FINETUNE mit CANCEL als erstem Argument und der Auftrags-ID als zweitem Argument beenden.

Fine-Tuning-Modelle analysieren

Nach Abschluss eines Fine-Tuning-Jobs können Sie die Ergebnisse des Trainingsprozesses analysieren, indem Sie die Artefakte des Fine-Tuning-Modells untersuchen. Die Berechtigung OWNERSHIP auf dem Modell ist erforderlich, um auf die Artefakte des Fine-Tuning-Modells zuzugreifen; Einzelheiten dazu finden Sie unter Modellberechtigungen.

Zu den Artefakten gehört eine training_results.csv-Datei. Diese CSV-Datei enthält einen Header, gefolgt von einer Zeile für jeden Trainingsschritt, der durch den Fine-Tuning-Job aufgezeichnet wurde. Die Datei enthält die folgenden Spalten:

Spaltenname

Beschreibung

step

Anzahl der abgeschlossenen Trainingsschritte im gesamten Trainingsprozess. Beginnt mit 1.

Epoche

Die Epoche im Trainingsprozess. Beginnt mit 1.

training_loss

Der Verlust für den Trainings-Batch. Eine niedrigere Zahl weist auf eine bessere Übereinstimmung zwischen dem Modell und den Daten hin.

validation_loss

Der Verlust im Validierungsdatensatz. Dies ist nur beim letzten Schritt in jeder Epoche verfügbar.

Die Datei training_results.csv befindet sich in der Model Registry UI in Snowsight und kann direkt über SQL oder Python-API aufgerufen werden. Weitere Informationen dazu finden Sie unter Verwenden von Modellartefakten.

Fine-Tuning-Modell für Inferenz verwenden

Verwenden Sie die COMPLETE LLM-Funktion mit dem Namen Ihres Fine-Tuning-Modells, um Inferenzen (Schlussfolgerungen) zu erstellen.

Das folgende Beispiel zeigt einen Aufruf der Funktion COMPLETE mit dem Namen Ihres Fine-Tuning-Modells.

SELECT SNOWFLAKE.CORTEX.COMPLETE(
  'my_tuned_model',
  'How to fine-tune mistral models'
);
Copy

Im Folgenden sehen Sie einen Codeausschnitt der Ausgabe des Beispielaufrufs:

Mistral models are a type of deep learning model used for image recognition and classification. Fine-tuning a Mistral model involves adjusting the model's parameters to ...

Einschränkungen und bekannte Probleme

  • Fine-Tuning-Jobs sind nur auf Kontoebene auflistbar.

  • Fine-Tuning-Jobs, die von FINETUNE ('SHOW') (SNOWFLAKE.CORTEX) zurückgegeben werden, sind nicht permanent und können in regelmäßigen Abständen bereinigt werden (Garbage-Collector).

  • Wenn ein Basismodell aus den Cortex LLM-Funktionen entfernt wird, funktioniert Ihr Fine-Tuning-Modell nicht mehr.

Freigeben von Modellen

Fine-Tunig-Modelle können über Datenfreigabe an andere Konten mit der USAGE-Berechtigung weitergegeben werden.

Replikation von Modellen

Regionenübergreifende Inferenz unterstützt keine Fine-Tuning-Modelle. Die Inferenz muss in derselben Region stattfinden, in der sich das Modellobjekt befindet. Sie können die Datenbankreplikation verwenden, um das Fine-Tuning-Modellobjekt in eine Region zu replizieren, aus der Sie Schlüsse ziehen möchten, wenn diese sich von der Region unterscheidet, in der das Modell trainiert wurde.

Wenn Sie beispielsweise ein Fine-Tuning-Modell auf der Grundlage von mistral-7b in Ihrem Konto in der Region AWS US West 2 erstellen, können Sie Datenfreigabe verwenden, um es mit einem anderen Konto in dieser Region zu teilen, oder Sie können Datenbankreplikation verwenden, um das Modell auf ein anderes Konto Ihres Unternehmens in einer anderen Region zu replizieren, die das Modell mistral-7b unterstützt, z. B. AWS Europe West. Weitere Informationen zur Replikation von Objekten finden Sie unter Replizieren von Datenbanken und Kontoobjekten über mehrere Konten hinweg.