Entraînement et inférence de modèles¶
Note
L’API Snowflake Feature Store est disponible dans le paquet Snowpark ML Python (snowflake-ml-python
) v1.5.0 et ultérieure.
Générer des tables pour l’entraînement¶
Vous pouvez générer un ensemble de données d’entraînement avec la méthode generate_training_set
du Feature Store, qui enrichit le DataFrame Snowpark contenant les données sources avec les valeurs des fonctions dérivées. Pour sélectionner un sous-ensemble de fonctionnalités dans une vue de fonctionnalités, utilisez fv.slice
.
Pour les fonctions de séries temporelles, fournissez le nom de la colonne d’horodatage afin d’automatiser la recherche de la valeur de la fonction à un moment donné.
training_set = fs.generate_training_set(
spine_df=MySourceDataFrame,
features=[registered_fv],
save_as="data_20240101", # optional
spine_timestamp_col="TS", # optional
spine_label_cols=["LABEL1", "LABEL2"], # optional
include_feature_view_timestamp_col=False, # optional
)
Note
Ici, spine_df
(MySourceDataFrame
) est un DataFrame contenant des IDs d’entités dans les données sources, l’horodatage, les colonnes de libellés et toutes les colonnes supplémentaires contenant des données d’entraînement. Les fonctionnalités demandées sont extraites de la liste des IDsd’entités, avec une exactitude ponctuelle par rapport à l’horodatage fourni.
Les ensembles d’entraînement sont éphémères par défaut ; ils n’existent que sous forme de DataFrames Snowpark et ne sont pas matérialisés. Pour matérialiser l’ensemble d’apprentissage dans une table, spécifiez l’argument save_as
avec un nom de table valide et non existant. L’ensemble d’entraînement est écrit dans la table nouvellement créée.
Les tables matérialisées ne garantissent actuellement pas l’immuabilité et ont une prise en charge limitée des métadonnées. Si vous avez besoin de ces fonctionnalités, pensez à utiliser Ensembles de données Snowflake plutôt.
Note
L’API generate_training_set
est disponible dans snowflake-ml-python
version 1.5.4
ou une version ultérieure.
Générer des ensembles de données Snowflake pour l’entraînement¶
Vous pouvez générer un ensemble de données Snowflake en utilisant la méthode generate_dataset
de la boutique de fonctionnalités. La signature de la méthode est similaire à generate_training_set
; les principales différences sont l’argument name
, l’argument version
facultatif, et des champs de métadonnées supplémentaires. generate_dataset
matérialise toujours le résultat.
Les ensembles de données Snowflake fournissent un instantané de données immuable basé sur un fichier, ce qui contribue à garantir la reproductibilité du modèle et l’ingestion efficace des données pour les grands ensembles de données et/ou l’entraînement distribué. Les ensembles de données bénéficient également d’une prise en charge étendue des métadonnées pour une découverte et une consommation plus faciles.
Le code suivant illustre la génération d’un ensemble de données à partir d’une vue d’entités :
dataset: Dataset = fs.generate_dataset(
name="MY_DATASET",
spine_df=MySourceDataFrame,
features=[registered_fv],
version="v1", # optional
spine_timestamp_col="TS", # optional
spine_label_cols=["LABEL1", "LABEL2"], # optional
include_feature_view_timestamp_col=False, # optional
desc="my new dataset", # optional
)
Entraînement de modèle¶
Après avoir créé un ensemble de données d’entraînement, vous pouvez le transmettre à votre modèle lors de l’entraînement comme suit.
Si vous avez généré un DataFrame Snowpark, transmettez-le directement à votre modèle :
my_model = train_my_model(training_set)
Si vous avez généré un ensemble de données Snowflake, convertissez-le en DataFrame Snowpark et transmettez-le à votre modèle :
my_model = train_my_model(dataset.read.to_snowpark_dataframe())
Une fois entraîné, le modèle peut ensuite être enregistré dans le Snowflake Model Registry.
Récupérer des caractéristiques et faire des prédictions¶
Si vous avez créé un modèle dans votre session Python, vous pouvez récupérer la vue de caractéristique dans le Feature Store et la transmettre à votre modèle pour la prédiction, comme illustré ici :
prediction_df: snowpark.DataFrame = fs.retrieve_feature_values(
spine_df=prediction_source_dataframe,
features=[registered_fv],
spine_timestamp_col="TS",
exclude_columns=[],
)
# predict with your previously trained model
my_model.predict(prediction_df)
Vous pouvez exclure les colonnes spécifiées à l’aide de l’argument exclude_columns
ou inclure la colonne d’horodatage dans la vue de caractéristique en définissant include_feature_view_timestamp_col
.