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 :

  • CREATE : crée une tâche de mise au point avec les données d’entraînement données.

  • SHOW : répertorie toutes les tâches de mise au point auxquelles le rôle actuel a accès.

  • DESCRIBE : décrit la progression et le statut d’une tâche de mise au point particulière.

  • CANCEL : annule une tâche de mise au point donnée.

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 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
    
    Copy

    Utilisez le FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX) pour voir le nombre de jetons formés pour votre travail de mise au point.

Autres considérations

  • En plus des frais encourus pour le réglage et l’inférence, il y a des frais normaux de stockage et d”entrepôt pour le stockage des adaptateurs personnalisés de sortie, ainsi que pour l’exécution de toute commande SQL.

  • Les tâches de mise au point sont souvent de longue haleine et ne sont pas rattachées à une session de feuille de calcul.

  • Les limites suivantes s’appliquent à la taille de l’ensemble de données d’entraînement/validation pour chaque modèle :

    Modèle

    Limite des données d’entraînement

    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

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 et USAGE) 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;
Copy

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

llama3-8b

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 llama2-70b-chat, comme la classification de texte, le résumé et l’analyse de sentiments.

llama3-70b

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.

llama3.1-8b

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 ultra-rapide avec une fenêtre contextuelle de 128K.

llama3.1-70b

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 hautement performant et rentable qui permet divers cas d’utilisation avec une fenêtre contextuelle de 128K. llama3-70b est toujours pris en charge et dispose d’une fenêtre contextuelle de 8K.

mistral-7b

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.

mixtral-8x7b

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 :

  1. Préparez les données d’entraînement.

  2. Lancez la tâche de mise au point avec les paramètres requis.

  3. Surveillez la tâche d’entraînement.

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’entraînement

Les données d’entraînement 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'
);
Copy

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.

  • La portion de la fenêtre contextuelle allouée à prompt et completion 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

    128k

    120k

    8k

    llama3.1-70b

    128k

    120k

    8k

    mistral-7b

    32k

    28k

    4k

    mistral-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'
);
Copy

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'
);
Copy

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 :

  1. Connectez-vous à Snowsight.

  2. Choisissez un rôle auquel est accordé le rôle SNOWFLAKE.CORTEX_USER de base de données.

  3. Dans le menu de navigation, sélectionnez AI & ML » Studio.

  4. Sélectionnez Fine-tune dans la boîte Create Custom LLM.

  5. Sélectionnez un modèle de base à l’aide du menu déroulant.

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

  7. Sélectionnez une base de données dans laquelle stocker le modèle affiné.

  8. Entrez un nom pour votre modèle affiné, puis sélectionnez Let’s go.

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

  10. Sélectionnez la colonne qui contient les invites dans vos données d’entraînement, puis sélectionnez Next.

  11. Sélectionnez la colonne qui contient les complétions dans vos données d’entraînement, puis sélectionnez Next.

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

  13. 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 modèles mis au point

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 tâche de réglage fin en utilisant la fonction SNOWFLAKE.CORTEX.FINETUNE avec “SHOW” ou “DESCRIBE” comme premier argument.

Si vous n’avez plus besoin d’une tâche de mise au point, vous pouvez utiliser la fonction SNOWFLAKE.CORTEX.FINETUNE avec “CANCEL” comme premier argument et l’ID de tâche comme second argument pour y mettre fin.

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'
);
Copy

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.

Partage de modèles

Les modèles affinés peuvent être partagés avec d’autres comptes à l’aide du privilège USAGE via Partage de données.

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.