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:
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
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;
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 |
---|---|
|
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 |
|
Ein LLM von Meta, das Top-Performance bietet und ideal für Chat-Anwendungen, Content-Erstellung und Unternehmensanwendungen ist. |
|
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. |
|
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. |
|
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. |
|
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:
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'
);
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
undcompletion
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'
);
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'
);
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:
Melden Sie sich bei Snowsight an.
Wählen Sie eine Rolle, die die Datenbankrolle SNOWFLAKE.CORTEX_USER hat.
Wählen Sie im Navigationsmenü die Option AI & ML » Studio aus.
Wählen Sie Fine-tune aus dem Feld Create Custom LLM.
Wählen Sie ein Basismodell aus dem Dropdown-Menü.
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.
Wählen Sie eine Datenbank aus, in der das Fine-Tuning-Modell gespeichert werden soll.
Geben Sie einen Namen für Ihr Fine-Tuning-Modell ein, und wählen Sie dann Let’s go aus.
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.
Wählen Sie die Spalte aus, die die Eingabeaufforderungen in Ihren Trainingsdaten enthält, und wählen Sie dann Next.
Wählen Sie die Spalte aus, die die Vervollständigungen in Ihren Trainingsdaten enthält, und wählen Sie dann Next aus.
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.
Ü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'
);
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.
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.
Rechtliche Hinweise¶
Die Datenklassifizierung der Eingaben und Ausgaben ist in der folgenden Tabelle aufgeführt.
Klassifizierung von Eingabedaten |
Klassifizierung von Ausgabedaten |
Benennung |
---|---|---|
Usage Data |
Customer Data |
Preview AI Features [1] |
Weitere Informationen dazu finden Sie unter KI und ML in Snowflake.