Inférence dans les entrepôts Snowflake¶
Le site Snowflake Model Registry exécute par défaut les méthodes du modèle dans un entrepôt. L’exécution de modèles dans un entrepôt est appropriée pour les modèles avec CPU uniquement de taille petite à moyenne dont les dépendances peuvent être satisfaites par des paquets disponibles dans le canal Conda de Snowflake.
Note
Vous pouvez également exécuter des modèles sur un pool de calcul Snowpark Container Services (SPCS). Cette approche est plus appropriée pour les grands modèles qui peuvent bénéficier d’une inférence distribuée. Pour plus d’informations, voir Model Serving dans Snowpark Container Services.
Pour commencer, connectez le modèle dans le registre des modèles. Seuls les modèles qui ont été connectés au registre sont disponibles pour l’inférence. Connecter un modèle, ou charger un modèle existant à partir du registre au moyen de registry.get_model(...).version(...)
, renvoie un objet ModelVersion
sur lequel vous pouvez appeler la méthode run
.
Inférence à partir de Python¶
Pour appeler une méthode d’une version de modèle, utilisez mv.run
, où mv
est un objet ModelVersion
. Spécifiez le nom de la fonction à appeler et transmettez un DataFrame Snowpark ou pandas qui contient les données d’inférence, ainsi que tous les paramètres requis. La méthode est exécutée dans un entrepôt Snowflake.
La valeur de retour de la méthode est un DataFrame Snowpark ou pandas, correspondant au type de DataFrame transmis. Les DataFrames Snowpark sont évalués paresseusement, de sorte que la méthode n’est exécutée que lorsque la méthode collect
, show
ou to_pandas
du DataFrame est appelée.
Note
L’invocation d’une méthode l’exécute dans l’entrepôt spécifié dans la session que vous utilisez pour vous connecter au registre. Voir Spécification d’un entrepôt..
L’exemple suivant illustre l’exécution de la méthode predict
d’un modèle. La méthode predict
de ce modèle ne nécessite aucun paramètre en dehors des données d’inférence (test_features
ici). Si c’était le cas, ils seraient transmis en tant qu’arguments supplémentaires après les données d’inférence.
remote_prediction = mv.run(test_features, function_name="predict")
remote_prediction.show() # assuming test_features is Snowpark DataFrame
Pour voir quelles méthodes peuvent être appelées sur un modèle donné, appelez mv.show_functions
. La valeur de retour de cette méthode est une liste d’objets ModelFunctionInfo
. Chacun de ces objets comprend les attributs suivants :
name
: Le nom de la fonction qui peut être appelée depuis Python ou SQL.target_method
: le nom de la méthode Python dans le modèle original enregistré.
Inférence à partir de SQL¶
Utilisez la syntaxe model_name!method_name(...)
pour appeler ou invoquer les méthodes d’un modèle. Les méthodes disponibles sur un modèle sont déterminées par la classe de modèle Python sous-jacente. Par exemple, de nombreux types de modèles utilisent une méthode appelée « prédire » pour l’inférence.
Pour appeler une méthode du modèle par défaut, utilisez la syntaxe suivante. Incluez les arguments de la méthode entre parenthèses et spécifiez la table contenant les données d’inférence dans la clause FROM
.
SELECT <model_name>!<method_name>(...) FROM <table_name>;
Pour invoquer une méthode à partir d’une version spécifique d’un modèle, créez un alias vers la version spécifique du modèle et appelez la méthode par l’intermédiaire de l’alias.
Utilisez la syntaxe suivante pour appeler une méthode à partir d’une version spécifique d’un modèle.
WITH <model_version_alias> AS MODEL <model_name> VERSION <version_or_alias_name>
SELECT <model_version_alias>!<method_name>(...) FROM <table_name>;
L’exemple suivant utilise l’alias LAST
pour appeler la dernière version d’un modèle.
WITH latest AS MODEL my_model VERSION LAST
SELECT latest!predict(...) FROM my_table;
Astuce
Voir la référence de l’API SQL du modèle complet ici.