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.

Übersicht

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 auf, auf die die aktuelle Rolle Zugriff hat.

  • 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 Funktion COMPLETE auf einem Fine-Tuning-Modell Kosten, 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.

Weitere Hinweise

  • Zusätzlich zu den Kosten, die für Tuning und Inferenz anfallen, entstehen die normalen Speicher- und Warehouse-Kosten für das Speichern der angepassten Adaptoren sowie für das Ausführen aller SQL-Befehle.

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

  • Die folgenden Beschränkungen gelten für die Größe des Trainings-/Validierungsdatensatzes für jedes Modell:

    Modell

    Beschränkung der Trainingsdaten

    llama3-8b

    1 GB

    llama3-70b

    250 MB

    llama3.1-8b

    1 GB

    llama3.1-70b

    250 MB

    mistral-7b

    1 GB

    mixtral-8x7b

    250 MB

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 und USAGE) 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 Berechtigungen von Modellen.

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 128K.

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 mit einem Kontextfenster von 128 K verschiedene Anwendungsfälle ermöglicht. llama3-70b wird weiterhin unterstützt und hat ein Kontextfenster von 8 K.

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.

Trainingsdaten vorbereiten

Die Trainingsdaten 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

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.

  • 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

    128k

    120k

    8k

    llama3.1-70b

    128k

    120k

    8k

    mistral-7b

    32k

    28k

    4k

    mistral-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.

Verwalten von Fine-Tuning-Modellen

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 die Funktion SNOWFLAKE.CORTEX.FINETUNE mit ‚CANCEL‘ als erstem Argument und der Job-ID als zweitem Argument verwenden, um ihn zu beenden.

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.