Fonctions Large Language Model (LLM) (Cortex de Snowflake)

Cortex de Snowflake vous donne un accès instantané à de grands modèles de langage (Large Language Model, LLMs) formés par des chercheurs dans des entreprises telles que Mistral, Meta et Google. Il propose également des modèles que Snowflake a affinés pour des cas d’utilisation spécifiques.

Comme ces LLMs sont entièrement hébergés et gérés par Snowflake, leur utilisation ne nécessite aucune configuration. Vos données restent dans Snowflake, ce qui vous permet de bénéficier des performances, de l’évolutivité et de la gouvernance que vous attendez.

Les fonctionnalités de Cortex de Snowflake sont fournies sous forme de fonctions SQL et sont également disponibles en Python. Les fonctions disponibles sont résumées ci-dessous.

  • COMPLETE : à partir d’une invite, renvoie une réponse qui complète l’invite. Cette fonction accepte soit une seule invite, soit une conversation avec plusieurs invites et réponses.

  • EXTRACT_ANSWER : à partir d’une question et de données non structurées, renvoie la réponse à la question si elle peut être trouvée dans les données.

  • SENTIMENT : renvoie un score de sentiment, de -1 à 1, représentant le sentiment positif ou négatif détecté dans le texte donné.

  • SUMMARIZE : renvoie un résumé du texte donné.

  • TRANSLATE : traduit un texte donné de n’importe quelle langue prise en charge vers n’importe quelle autre.

Privilèges requis

Le rôle de base de données CORTEX_USER dans la base de données SNOWFLAKE comprend les privilèges qui permettent aux utilisateurs d’appeler les fonctions LLM Cortex de Snowflake. Par défaut, ce rôle de base de données n’est accordé qu’au rôle ACCOUNTADMIN. ACCOUNTADMIN doit propager ce rôle aux rôles des utilisateurs afin de leur permettre d’accéder aux fonctions LLM Cortex.

Le rôle de base de données SNOWFLAKE.CORTEX_USER ne peut pas être accordé directement à un utilisateur. Un utilisateur ayant le rôle ACCOUNTADMIN doit d’abord l’accorder à un rôle de compte, puis accorder le rôle de compte aux utilisateurs. Pour plus d’informations, voir Renommez les rôles de base de données en utilisant SNOWFLAKE..

Dans l’exemple suivant, vous êtes ACCOUNTADMIN et accordez à l’utilisateur some_user le rôle de base de données CORTEX_USER via le rôle de compte cortex_user_role, que vous créez à cet effet.

USE ROLE ACCOUNTADMIN;

CREATE ROLE cortex_user_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE cortex_user_role;

GRANT ROLE cortex_user_role TO USER some_user;
Copy

Vous pouvez également accorder l’accès aux fonctions LLM Cortex de Snowflake par le biais de rôles existants utilisés par des groupes d’utilisateurs spécifiques. (Voir Rôles utilisateur.) Par exemple, si vous avez créé un rôle analyst qui est utilisé comme rôle par défaut par les analystes de votre organisation, vous pouvez facilement accorder à ces utilisateurs l’accès aux fonctions LLM Cortext de Snowflake avec une seule instruction GRANT.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
Copy

Le pseudo-rôle PUBLIC est automatiquement accordé à tous les utilisateurs et rôles, de sorte que l’octroi de cortex_user_role à PUBLIC permet à tous les utilisateurs de votre compte d’utiliser les fonctions LLM Cortex de Snowflake.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Copy

Astuce

Soyez attentif au nombre d’utilisateurs auxquels vous accordez l’accès et à l’impact que leur utilisation des fonctions LLM Cortex de Snowflake peut avoir sur la consommation de calcul. Établir des politiques relatives à la finalité de l’utilisation (en particulier pour les modèles les plus coûteux) avant d’accorder un accès généralisé à ces fonctions.

Il faut s’attendre à ce que les utilisateurs explorent les nouvelles fonctionnalités, ce qui pourrait entraîner une hausse temporaire des coûts, avant de s’installer dans un modèle d’utilisation plus stable.

Disponibilité

Les fonctions LLM Cortex de Snowflake sont actuellement disponibles dans les régions suivantes.

Fonction
(Modèle)
AWS US Est
(Virginie du Nord)
AWS US Ouest
(Oregon)
AWS Europe
(Francfort)
Azure Est US 2
(Virginie)
Azure Europe de l’Ouest
(Pays-Bas)
COMPLETE
(mistral-large)

COMPLETE
(mixtral-8x7b)

COMPLETE
(llama2-chat-70b)

COMPLETE
(mistral-7b)

COMPLETE
(gemma-7b)

EXTRACT_ANSWER

SENTIMENT

SUMMARIZE

TRANSLATE

Considérations relatives aux clients

Les fonctions Snowflake Cortex LLM ont un coût de calcul basé sur le nombre de jetons traités. Le tableau ci-dessous indique le coût en crédits par 1 million de jetons pour chaque fonction.

Note

Un jeton est la plus petite unité de texte traitée par les fonctions Snowflake Cortex LLM, 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 les fonctions qui génèrent un nouveau texte dans la réponse (COMPLETE, SUMMARIZE et TRANSLATE), les jetons d’entrée et de sortie sont comptés.

  • Pour les fonctions qui n’extraient que des informations de l’entrée (EXTRACT_ANSWER et SENTIMENT), seuls les jetons d’entrée sont comptés.

  • Pour EXTRACT_ANSWER, le nombre de jetons facturables est la somme du nombre de jetons dans les champs from_text et question.

Pour des informations générales sur les coûts de calcul, consultez Comprendre le coût du calcul.

Note

Snowflake recommande d’exécuter les requêtes qui appellent une fonction Snowflake Cortex LLM avec un entrepôt plus petit (pas plus grand que MEDIUM), car les entrepôts plus grands n’augmentent pas les performances. Le coût associé au maintien d’un entrepôt actif continuera à s’appliquer lors de l’exécution d’une requête qui appelle une fonction Snowflake Cortex LLM.

Fonction (modèle)

Crédits Snowflake par million de jetons

COMPLETE (mistral-large)

5,10

COMPLETE (mixtral-8x7b)

0,50

COMPLETE (llama2-70b-chat)

0,45

COMPLETE (mistral-7b)

0,12

COMPLETE (gemma-7b)

0,12

EXTRACT_ANSWER

0,08

SENTIMENT

0,08

SUMMARIZE

0,10

TRANSLATE

0,33

L’utilisation de fonctions Snowflake Cortex LLM apparaît dans la vue METERING_DAILY_HISTORY Utilisation de l’organisation de Snowflake avec un type de service AI_SERVICES. Pour afficher la consommation de crédits pour les services AI pour tous les comptes d’une organisation, utilisez la requête suivante.

SELECT * FROM SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY
    WHERE service_type ILIKE '%ai_services%';
Copy

Note

La mise à jour de la vue SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY peut prendre jusqu’à quatre heures.

Quotas d’utilisation

Afin de garantir un niveau de performance élevé à tous les clients de Snowflake, les fonctions Snowflake Cortex LLM sont soumises à des quotas d’utilisation au-delà desquels les requêtes peuvent être limitées. Snowflake peut ajuster ces quotas de temps à autre. Les quotas indiqués dans le tableau ci-dessous sont appliqués par compte.

Fonction (modèle)

Jetons traités par minute (TPM)

Lignes traitées par minute (RPM)

COMPLETE (mistral-large)

200,000

100

COMPLETE (mixtral-8x7b)

300,000

400

COMPLETE (llama2-70b-chat)

300,000

400

COMPLETE (mistral-7b)

300,000

500

COMPLETE (gemma-7b)

300,000

500

EXTRACT_ANSWER

1,000,000

3,000

SENTIMENT

1,000,000

5,000

SUMMARIZE

300,000

500

TRANSLATE

1,000,000

2,000

Note

Les comptes Snowflake à la demande sans méthode de paiement valide (tels que les comptes d’essai) sont limités à environ un crédit par jour dans l’utilisation de la fonction Snowflake Cortex LLM. Pour lever cette restriction, convertissez votre compte d’essai en compte payant.

Gestion des coûts et de la limitation

Pendant cette avant-première, Snowflake recommande d’utiliser une taille d’entrepôt ne dépassant pas MEDIUM lors de l’appel des fonctions Snowflake Cortex LLM. L’utilisation d’un entrepôt plus grand que nécessaire n’augmente pas les performances, mais peut entraîner des coûts inutiles et un risque plus élevé de limitation. Cette recommandation pourrait ne plus s’appliquer à l’avenir en raison des prochaines mises à jour du produit.

Restrictions du modèle

Les modèles utilisés par Snowflake Cortex sont limités en taille comme décrit dans le tableau ci-dessous. Les tailles sont données en jetons. Les jetons correspondent généralement à des mots, mais tous les jetons ne sont pas des mots, de sorte que le nombre de mots correspondant à une limite est légèrement inférieur au nombre de jetons. Les entrées qui dépassent la limite entraînent une erreur.

Fonction

Modèle

Fenêtre contextuelle (jetons)

COMPLETE

mistral-large

32,000

mixtral-8x7b

32,000

llama-2-70b-chat

4,096

mistral-7b

32,000

gemma-7b

8,000

EXTRACT_ANSWER

Modèle géré par Snowflake

2 048 pour le texte
64 pour la question

SENTIMENT

Modèle géré par Snowflake

512

SUMMARIZE

Modèle géré par Snowflake

32,000

TRANSLATE

Modèle géré par Snowflake

1,024

Choix d’un modèle

La fonction Snowflake Cortex COMPLETE prend en charge plusieurs modèles dont la capacité, la latence et le coût varient. Ces modèles ont été soigneusement choisis pour correspondre aux cas d’utilisation courants des clients. Pour obtenir la meilleure performance par crédit, choisissez un modèle qui correspond bien à la taille du contenu et à la complexité de votre tâche. Voici un bref aperçu des modèles disponibles.

  • mistral-large est un modèle de premier plan qui obtient de bons résultats pour toute une série de critères (voir tableau ci-dessous). Il dispose d’une fenêtre contextuelle de 32 000 jetons (environ 24 000 mots), ce qui lui permet de s’engager dans un raisonnement complexe au cours de conversations prolongées. Il s’agit également du modèle le plus gourmand en ressources informatiques parmi ceux proposés par Snowflake Cortex, et donc le plus coûteux à exploiter.

  • mixtral-8x7b offre une faible latence et des résultats de haute qualité, tout en prenant en charge une longueur de contexte de 32 000 jetons. Il est idéal pour de nombreux cas d’utilisation de la production en entreprise.

  • llama2-70b-chat est bien adapté aux tâches complexes et à grande échelle qui nécessitent un raisonnement modéré, comme l’extraction de données ou l’aide à la rédaction de descriptions de tâches.

  • mistral-7b et gemma-7b sont capables d’exécuter des tâches simples rapidement et avec un meilleur rapport coût-efficacité.

    • mistral-7b est idéal pour les tâches de résumé et de classification les plus simples qui nécessitent un degré de personnalisation moindre. Sa limite de jetons 32 000 lui permet de traiter plusieurs pages de texte.

    • gemma-7b est adapté aux tâches simples de complétion de code et de texte. Il dispose d’une fenêtre contextuelle de 8 000 jetons, mais il est étonnamment performant dans cette limite et tout à fait rentable.

Si vous ne savez pas par où commencer, essayez d’abord mistral-large, que vous utilisiez déjà un autre modèle de premier plan ou que vous découvriez LLMs. Il s’agit du modèle le plus polyvalent proposé par Snowflake Cortex, qui vous donnera une bonne idée de ce qu’un modèle de pointe peut faire. Ses résultats peuvent servir de référence pour l’évaluation des autres modèles.

Pour vous aider à prendre votre décision, le tableau suivant fournit des informations sur les performances des modèles les plus courants sur différents benchmarks, y compris les modèles proposés par Snowflake Cortex COMPLETE ainsi que quelques autres modèles courants.

Modèle

Fenêtre contextuelle
(Jetons)
MMLU
(Raisonnement)
Benchmark MT
(Instruction suivante)
HumanEval
(Codage)
Spider 1.0
(SQL)

GPT 4 Turbo *

32,000

86,4

8,96

67

86,6

mistral-large

32,000

81,2

-

45,1

81

Claude 2 *

100,000

78,5

8,06

71,2

-

mixtral-8x7b

32,000

70,6

8,30

40,2

-

GPT 3.5 Turbo *

4,097

70

8,39

48,1

-

llama-2-70b-chat

4,096

68,9

6,86

30,5

-

mistral-7b

32,000

62,5

6,84

26,2

-

gemma-7b

8,000

64,3

-

32,3

-

llama2-7b *

4,096

45,3

6,27

12,2

-

*Fourni à titre de comparaison ; non disponible dans Snowflake Cortex COMPLETE.

Aperçu des fonctions LLM

COMPLETE

À partir d’une invite, la fonction COMPLETE qui suit les instructions génère une réponse en utilisant le modèle linguistique de votre choix. Dans le cas d’utilisation le plus simple, l’invite est une simple chaîne de caractères. Vous pouvez également fournir une conversation comprenant plusieurs invites et réponses pour une utilisation interactive de type chat, et dans cette forme de la fonction, vous pouvez également spécifier des options d’hyperparamètres pour personnaliser le style et la taille de la sortie.

La fonction COMPLETE prend en charge les modèles suivants. Différents modèles peuvent avoir des coûts et des quotas <label-cortex_llm_quotas> différents.

  • mistral-large

  • mixtral-8x7b

  • llama2-70b-chat

  • mistral-7b

  • gemma-7b

Voir COMPLETE (SNOWFLAKE.CORTEX) pour la syntaxe et les exemples.

EXTRACT_ANSWER

La fonction EXTRACT_ANSWER permet d’extraire d’un document textuel une réponse à une question donnée. Le document peut être un document en anglais ou une représentation sous forme de chaîne d’un objet de données semi-structurées (JSON).

Voir EXTRACT_ANSWER (SNOWFLAKE.CORTEX) pour la syntaxe et les exemples.

SENTIMENT

La fonction SENTIMENT renvoie le sentiment sous la forme d’un score compris entre -1 et 1 (-1 étant le plus négatif et 1 le plus positif, avec des valeurs autour de 0 neutres) pour le texte d’entrée en langue anglaise donné.

Voir SENTIMENT (SNOWFLAKE.CORTEX) pour la syntaxe et les exemples.

SUMMARIZE

La fonction SUMMARIZE renvoie un résumé du texte anglais donné.

Voir SUMMARIZE (SNOWFLAKE.CORTEX) pour la syntaxe et les exemples.

TRANSLATE

La fonction TRANSLATE traduit le texte de la langue source indiquée ou détectée vers une langue cible.

Voir TRANSLATE (SNOWFLAKE.CORTEX) pour la syntaxe et les exemples.

Conditions d’erreur

Les fonctions Snowflake Cortex LLM peuvent produire les messages d’erreur suivants.

Message

Explication

too many requests

L’instruction a été rejetée en raison d’une charge excessive du système. Veuillez réessayer la requête.

invalid options object

L’objet options transmis à la fonction contient des options ou des valeurs non valides.

budget exceeded

Le budget de consommation du modèle a été dépassé.

unknown model "<nom du modèle>"

Le modèle spécifié n’existe pas.

invalid language "<langage>"

La langue spécifiée n’est pas prise en charge par la fonction TRANSLATE.

max tokens of <count> exceeded

La requête a dépassé le nombre maximum de jetons pris en charge par le modèle (voir Restrictions du modèle).

all requests were throttled by remote service

Le nombre de requêtes dépasse la limite <label-cortex_llm_quotas>. Veuillez réessayer plus tard.

Utilisation de Snowflake Cortex LLM avec Python

Les fonctions Snowflake Cortex LLM sont disponibles dans Snowpark ML à partir de la version 1.1.2. Voir Installation de Snowpark ML pour les instructions sur la configuration de Snowpark ML.

Si vous exécutez votre script Python en dehors de Snowflake, vous devez créer une session Snowpark pour utiliser ces fonctions. Pour obtenir des instructions, voir Connexion à Snowflake.

L’exemple Python suivant illustre l’appel de fonctions Snowflake Cortex LLM sur des valeurs uniques :

from snowflake.cortex import Complete, ExtractAnswer, Sentiment, Summarize, Translate

text = """
    The Snowflake company was co-founded by Thierry Cruanes, Marcin Zukowski,
    and Benoit Dageville in 2012 and is headquartered in Bozeman, Montana.
"""

print(Complete("llama2-70b-chat", "how do snowflakes get their unique patterns?"))
print(ExtractAnswer(text, "When was snowflake founded?"))
print(Sentiment("I really enjoyed this restaurant. Fantastic service!"))
print(Summarize(text))
print(Translate(text, "en", "fr"))
Copy

Vous pouvez également appeler une fonction LLM sur une colonne du tableau, comme indiqué ci-dessous. Cet exemple nécessite un objet session (stocké dans session) et une table articles contenant une colonne de texte abstract_text, et crée une nouvelle colonne abstract_summary contenant un résumé de l’abrégé.

from snowflake.cortex import Summarize
from snowflake.snowpark.functions import col

article_df = session.table("articles")
article_df = article_df.withColumn(
    "abstract_summary",
    Summarize(col("abstract_text"))
)
article_df.collect()
Copy

Note

La forme avancée de COMPLETE de type chat (multi-message) n’est actuellement pas prise en charge par Python.