Mise au point (Snowflake Cortex)¶
La fonction Snowflake Cortex Fine-tuning permet de personnaliser de grands modèles de langage pour votre tâche spécifique. Cette rubrique décrit le fonctionnement de cette fonction et explique comment commencer à créer votre propre modèle mis au point.
Vue d’ensemble¶
Cortex Fine-tuning permet aux utilisateurs de tirer parti d’une mise au point efficace des paramètres (PEFT) pour créer des adaptateurs personnalisés à utiliser avec des modèles pré-entraînés pour des tâches plus spécialisées. Si vous ne voulez pas supporter le coût élevé de l’entraînement d’un grand modèle à partir de zéro, mais que vous avez besoin d’une meilleure latence et de meilleurs résultats que ceux que vous obtenez avec les méthodes d’ingénierie rapide ou même de génération augmentée par récupération (RAG), vous pouvez mettre au point un grand modèle existant. La mise au point vous permet d’utiliser des exemples pour ajuster le comportement du modèle et améliorer sa connaissance des tâches spécifiques au domaine.
Cortex Fine-tuning est un service entièrement géré qui vous permet d’affiner les LLMs populaires en utilisant vos données, le tout au sein de Snowflake.
Les fonctionnalités Cortex Fine-tuning sont fournies sous la forme d’une fonction de Snowflake Cortex, FINETUNE, avec les arguments suivants :
Considérations relatives aux clients¶
Les fonctions Snowflake Cortex Fine-tuning entraîne des coûts de calcul basés sur le nombre de jetons utilisés lors de l’entraînement. De plus, l’exécution de la fonction AI_COMPLETE sur un modèle affiné entraîne des coûts de calcul basés sur le nombre de jetons traités. Reportez-vous à la table de consommation des services Snowflake pour chaque coût en crédits par million de jetons.
Un jeton est la plus petite unité de texte traitée par la fonction Snowflake Cortex Fine-tuning, correspondant approximativement à quatre caractères de texte. L’équivalence du texte brut d’entrée ou de sortie en jetons peut varier selon le modèle.
Pour la fonction COMPLETE qui génère un nouveau texte dans la réponse, les jetons d’entrée et de sortie sont comptés.
Les jetons entraînés pour la mise au point sont calculés comme suit :
Fine-tuning trained tokens = number of input tokens * number of epochs trained
Utilisez le FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX) pour voir le nombre de jetons formés pour votre travail de mise au point.
Outre les frais d’affinage et d’inférence, les coûts standard du stockage et de l”entrepôt s’appliquent pour le stockage des adaptateurs personnalisés et l’exécution des commandes SQL.
Suivi de la consommation des crédits pour la formation d’affinage¶
Pour voir la consommation de crédits et de jetons pour les travaux de formation d’affinage, utilisez Vue CORTEX_FINE_TUNING_USAGE_HISTORY :
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FINE_TUNING_USAGE_HISTORY;
Autres considérations¶
Les tâches de mise au point sont souvent de longue haleine et ne sont pas rattachées à une session de feuille de calcul.
Le nombre de lignes dans le jeu de données de formation/validation est limité par le modèle de base et le nombre d’époques de formation. Le tableau suivant montre les limites pour 3 époques :
Effective row count limit = 1 epoch limit for base model / number of epochs trained
Modèle
1 époque
3 époques (par défaut)
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
Exigences en matière de contrôle d’accès¶
Pour exécuter une tâche de mise au point, le rôle qui crée la tâche de mise au point doit disposer des privilèges suivants :
Privilège |
Objet |
Remarques |
---|---|---|
USAGE |
DATABASE |
La base de données à partir de laquelle les données d’entraînement (et de validation) sont interrogées. |
CREATE MODEL ou OWNERSHIP |
SCHEMA |
Le schéma dans lequel le modèle est enregistré. |
Le SQL suivant est un exemple d’octroi du privilège CREATE MODEL à un rôle, my_role
, sur my_schema
.
GRANT CREATE MODEL ON SCHEMA my_schema TO ROLE my_role;
En outre, pour utiliser la fonction FINETUNE, le rôle ACCOUNTADMIN doit accorder le rôle de base de données SNOWFLAKE.CORTEX_USER à l’utilisateur qui appellera la fonction. Voir la rubrique Privilèges requis pour les fonctions LLM pour plus de détails.
Pour donner à d’autres rôles l’accès à l’utilisation du modèle affiné, vous devez accorder l’utilisation du modèle. Pour plus de détails, voir Privilèges des modèles.
Modèles disponibles pour un réglage précis¶
Vous disposez des modèles de base suivants que vous pouvez régler avec la fonction de réglage fin. Les modèles disponibles pour la mise au point peuvent être ajoutés ou supprimés à l’avenir :
Nom |
Description |
---|---|
|
Un grand modèle de langage de Meta qui est idéal pour les tâches qui nécessitent un raisonnement faible à modéré avec une meilleure précision que le modèle |
|
Un LLM de Meta qui offre des performances de pointe idéales pour les applications de chat, la création de contenu et les applications d’entreprise. |
|
Un grand modèle de langage de Meta qui est idéal pour les tâches qui nécessitent un raisonnement faible à modéré. C’est un modèle léger et ultrarapide avec une fenêtre contextuelle de 24K. |
|
Un modèle open source qui offre des performances de pointe idéales pour les applications de chat, la création de contenu et les applications d’entreprise. Il s’agit d’un modèle très performant et d’un bon rapport coût-efficacité qui permet divers cas d’utilisation. |
|
7 milliards de paramètres d’un grand modèle de langage de Mistral AI qui est idéal pour vos tâches les plus simples de résumé, de structuration et de réponse aux questions qui doivent être effectuées rapidement. Il offre une faible latence et un traitement à haut débit pour plusieurs pages de texte grâce à sa fenêtre contextuelle de 32 Ko. |
|
Un grand modèle de langage de Mistral AI qui est idéal pour la génération de textes, la classification et la réponse aux questions. Les modèles Mistral sont optimisés pour une faible latence avec de faibles besoins en mémoire, ce qui se traduit par un débit plus élevé pour les cas d’utilisation en entreprise. |
Comment affiner un modèle¶
Le workflow global pour la mise au point d’un modèle est le suivant :
Une fois l’entraînement terminé, vous pouvez utiliser le nom du modèle fourni par Cortex Fine-tuning pour lancer l’inférence sur votre modèle.
Préparer les données d’affinage¶
Les données d’affinage doivent provenir d’une table ou d’une vue Snowflake et le résultat de la requête doit contenir des colonnes nommées prompt
et completion
. Si votre table ou votre vue ne contient pas de colonnes portant les noms requis, utilisez un alias de colonne dans votre requête pour les nommer. Cette requête est donnée en paramètre à la fonction FINETUNE. Vous obtiendrez une erreur si les résultats ne contiennent pas les noms des colonnes prompt
et completion
.
Note
Toutes les colonnes autres que les colonnes d’invite et d’achèvement seront ignorées par la fonction FINETUNE. Snowflake recommande d’utiliser une requête qui ne sélectionne que les colonnes dont vous avez besoin.
Le code suivant appelle la fonction FINETUNE et utilise la syntaxe SELECT ... AS
pour définir deux des colonnes de l’ensemble de résultats de la requête à prompt
et completion
.
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'
);
Note
Pour obtenir des réponses qui suivent un schéma que vous avez défini, utilisez des sorties structurées pour générer des données d’affinage. Pour plus d’informations sur les sorties structurées, voir Sorties structurées AI_COMPLETE.
Une invite est une entrée sur le LLM et l’achèvement est la réponse du LLM. Vos données d’entraînement doivent inclure des paires d’invites et d’achèvements qui montrent comment vous souhaitez que le modèle réponde à des invites particulières.
Vous trouverez ci-dessous des recommandations et des exigences supplémentaires concernant vos données d’entraînement afin d’obtenir des performances optimales grâce à la mise au point.
Commencez par quelques centaines d’exemples. Si vous commencez par un trop grand nombre d’exemples, vous risquez d’augmenter considérablement la durée du réglage, avec une amélioration minime des performances.
Pour chaque exemple, vous ne devez utiliser qu’une partie de la fenêtre contextuelle allouée pour le modèle de base que vous réglez. La fenêtre contextuelle est définie en termes de jetons. Un jeton est la plus petite unité de texte traitée par les fonctions Snowflake Cortex, correspondant approximativement à quatre caractères de texte. Les paires prompt-réponse qui dépassent cette limite seront tronquées, ce qui peut nuire à la qualité du modèle entraîné.
La portion de la fenêtre contextuelle allouée à
prompt
etcompletion
pour chaque modèle de base est définie dans le tableau suivant :Modèle
Fenêtre contextuelle
Contexte d’entrée (invite)
Contexte de sortie (achèvement)
llama3-8b
8k
6k
2k
llama3-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
Lancer la tâche de mise au point¶
Vous pouvez commencer une tâche de mise au point en appelant la fonction SNOWFLAKE.CORTEX.FINETUNE et en passant dans “CREATE” comme premier argument ou en utilisant Snowsight.
Utiliser SQL¶
Cet exemple utilise le modèle mistral-7b
comme modèle de base pour créer une tâche dont le nom de sortie du modèle est my_tuned_model
et dont les données d’entraînement et de validation font l’objet d’une requête à partir des tables my_training_data
et my_validation_data
respectivement.
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'
);
Vous pouvez utiliser des chemins absolus pour chacun des objets de la base de données, tels que le modèle ou les données, si vous souhaitez utiliser une base de données et un schéma différents pour chacun d’entre eux. L’exemple suivant montre la création d’une tâche de mise au point avec les données de la base de données et du schéma mydb2.myschema2
et l’enregistrement du modèle mis au point dans la base et le schéma mydb.myschema
.
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'
);
La fonction SNOWFLAKE.CORTEX.FINETUNE avec “CREATE” comme premier argument renvoie un ID de modèle mis au point comme sortie. Utilisez cet ID pour obtenir le statut ou l’état d’avancement d’une tâche en utilisant la fonction SNOWFLAKE.CORTEX.FINETUNE avec “DESCRIBE” comme premier argument.
Utiliser Snowsight¶
Suivez ces étapes pour créer une tâche de mise au point dans la Snowsight :
Connectez-vous à Snowsight.
Choisissez un rôle auquel est accordé le rôle SNOWFLAKE.CORTEX_USER de base de données.
Dans le menu de navigation, sélectionnez AI & ML » Studio.
Sélectionnez Fine-tune dans la boîte Create Custom LLM.
Sélectionnez un modèle de base à l’aide du menu déroulant.
Sélectionnez le rôle sous lequel la tâche de mise au point sera exécutée et l’entrepôt dans lequel elle sera exécutée. Le rôle doit se voir attribué le rôle de base de données SNOWFLAKE.CORTEX_USER.
Sélectionnez une base de données dans laquelle stocker le modèle affiné.
Entrez un nom pour votre modèle affiné, puis sélectionnez Let’s go.
Sélectionnez la table ou la vue qui contient vos données d’entraînement, puis sélectionnez Next. Les données d’entraînement peuvent provenir de n’importe quelle base de données ou schéma auquel le rôle a accès.
Sélectionnez la colonne qui contient les invites dans vos données d’entraînement, puis sélectionnez Next.
Sélectionnez la colonne qui contient les complétions dans vos données d’entraînement, puis sélectionnez Next.
Si vous disposez d’un ensemble de données de validation, sélectionnez la table ou la vue qui contient vos données de validation, puis sélectionnez Next. Si vous n’avez pas de données de validation distinctes, sélectionnez Skip this option.
Vérifiez vos choix, puis sélectionnez Start training.
L’étape finale confirme que votre tâche de mise au point a commencé et affiche le Job ID. Utilisez cet ID pour obtenir le statut ou l’état d’avancement d’une tâche en utilisant la fonction SNOWFLAKE.CORTEX.FINETUNE avec “DESCRIBE” comme premier argument.
Gérer des travaux d’affinage¶
Les tâches de mise au point sont de longue durée, ce qui signifie qu’elles ne sont pas liées à une session de la feuille de calcul. Vous pouvez vérifier le statut de votre travail d’affinage à l’aide de la fonction SNOWFLAKE.CORTEX.FINETUNE avec SHOW ou “DESCRIBE” comme premier argument.
Si vous n’avez plus besoin d’un travail d’affinage, vous pouvez y mettre fin en utilisant la fonction SNOWFLAKE.CORTEX.FINETUNE avec CANCEL comme premier argument et l’ID du travail comme second argument.
Analyser des modèles affinés¶
Une fois le travail d’affinage terminé, vous pouvez analyser les résultats du processus de formation en examinant les artefacts du modèle affiné. Le privilège OWNERSHIP sur le modèle est requis pour accéder aux artefacts du modèle affiné ; pour plus de détails, voir Privilèges des modèles.
Les artefacts comprennent un fichier training_results.csv
. Ce fichier CSV contient une ligne d’en-tête suivie d’une ligne pour chaque étape de formation enregistrée par le travail d’affinage. Le fichier contient les colonnes suivantes :
Nom de la colonne
Description
step
Nombre d’étapes de formation accomplies dans l’ensemble du processus de formation. Commence à 1.
epoch
L’époque dans le processus de formation. Commence à 1.
training_loss
La perte pour le lot de formation. Un chiffre plus bas indique une meilleure adéquation entre le modèle et les données.
validation_loss
La perte sur le jeu de données de validation. Celle-ci n’est disponible qu’à la dernière étape de chaque époque.
Le fichier training_results.csv
se trouve dans le l’UI du registre de modèles dans Snowsight et on peut y accéder directement via SQL ou l’API Python. Pour plus d’informations, voir Utilisation d’artefacts de modèles.
Utiliser votre modèle mis au point pour l’inférence¶
Utilisez la fonction COMPLETE LLM avec le nom de votre modèle mis au point pour faire des inférences.
Cet exemple montre un appel à la fonction COMPLETE avec le nom de votre modèle mis au point.
SELECT SNOWFLAKE.CORTEX.COMPLETE(
'my_tuned_model',
'How to fine-tune mistral models'
);
Vous trouverez ci-dessous un extrait de la sortie de l’appel d’exemple :
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 ...
Limites et problèmes connus¶
Les tâches de mise au point ne peuvent être listées qu’au niveau du compte.
Les tâches de mise au point renvoyées par FINETUNE ('SHOW') (SNOWFLAKE.CORTEX) ne sont pas permanentes et peuvent faire l’objet d’un ramassage périodique.
Si un modèle de base est retiré des fonctions LLM Cortex, votre modèle mis au point ne fonctionnera plus.
Réplication des modèles¶
Inférence interrégionale ne prend pas en charge les modèles affinés. L’inférence doit avoir lieu dans la même région où se trouve l’objet modèle. Vous pouvez utiliser la réplication de base de données pour répliquer l’objet de modèle affiné dans une région à partir de laquelle vous souhaitez effectuer une inférence si elle est différente de la région dans laquelle le modèle a été formé.
Par exemple, si vous créez un modèle affiné basé sur mistral-7b
dans votre compte dans la région Ouest 2 AWS US, vous pouvez utiliser le partage de données pour le partager avec un autre compte dans cette région, ou vous pouvez utiliser la réplication de base de données pour répliquer le modèle sur un autre compte de votre organisation dans une autre région qui prend en charge le modèle mistral-7b
, tel que l’Europe de l’Ouest AWS. Pour plus de détails sur la réplication d’objets, consultez Réplication des bases de données et des objets de compte sur plusieurs comptes.
Avis juridiques¶
La classification des données d’entrées et de sorties est présentée dans la table suivante.
Classification des données d’entrée |
Classification des données de sortie |
Désignation |
---|---|---|
Usage Data |
Customer Data |
Les fonctions généralement disponibles sont des fonctions AI couvertes. Les fonctions d’aperçu sont les fonctions AI d’aperçu. [1] |
Pour plus d’informations, reportez-vous à Snowflake AI et ML.