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

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

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

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

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

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.