Créer et proposer des fonctionnalités en ligne

Créez et proposez des fonctionnalités en ligne pour les workflows d’inférence de machine learning sensibles à la latence. Activez des fonctionnalités en ligne sur une vue des fonctionnalités que vous créez, ou mettez à jour une vue des fonctionnalités existante pour activer la diffusion en ligne.

Important

Vous devez disposer de la version 9.26 ou ultérieure de Snowflake et de la version 1.18.0 de snowflake-ml-python pour utiliser la mise à disposition de fonctionnalités en ligne.

La mise en disposition de fonctionnalités en ligne offre les avantages suivants :

  • Recherches de points à faible latence pour l’inférence en temps réel

  • Synchronisation automatique des données à partir de sources hors ligne

  • Infrastructure et maintenance entièrement gérées

  • Mise à l’échelle flexible pour les charges de travail exigeantes

La mise à disposition de fonctionnalités en ligne est prise en charge par les tables de fonctionnalités en ligne.

Niveau d’actualisation des données

Une vue des fonctionnalités avec mise à disposition de fonctionnalités en ligne synchronise automatiquement les données du magasin hors ligne.

Utilisez le paramètre target_lag pour configurer la fréquence de synchronisation des données vers votre table des fonctionnalités en ligne. Vous pouvez définir cette valeur entre 10 secondes minimum et 8 jours maximum.

Modes d’actualisation

Snowflake utilise les modes d’actualisation suivants pour mettre à jour les données :

  • Actualisation incrémentielle : Il s’agit du mode privilégié et le plus efficace. Snowflake suit les modifications apportées aux sources et fusionne uniquement les lignes nouvelles ou mises à jour dans le magasin en ligne. Cela réduit les coûts de calcul et d’E/S.

  • Actualisation complète : Ce mode détruit toutes les données existantes dans la table et recharge tout à partir de la source. Il consomme plus de ressources et est utilisé lorsqu’une actualisation incrémentielle n’est pas possible.

Vous pouvez explicitement définir le mode d’actualisation sur INCREMENTAL ou FULL, ou bien le définir sur AUTO pour permettre à Snowflake de déterminer le mode d’actualisation disponible le plus efficace.

Traitement des données de séries chronologiques

Pour assurer la cohérence des données, vous pouvez spécifier une timestamp_col. Lorsque plusieurs lignes avec la même clé primaire sont trouvées dans la source, Snowflake n’ingère que la version avec l’horodatage le plus récent. Si vous ne spécifiez pas de colonne d’horodatage, la ligne la plus récemment traitée est prioritaire.

Fournir un accès pour créer et proposer des fonctionnalités en ligne

Avant de commencer à utiliser le magasin de fonctionnalités en ligne, vous devez fournir les autorisations nécessaires aux rôles concernés.

Pour fournir des autorisations, utilisez le script de contrôle d’accès décrit dans Configurer le contrôle d’accès en SQL. Après avoir exécuté le script, accordez les privilèges suivants :

GRANT CREATE ONLINE FEATURE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

GRANT SELECT, MONITOR ON FUTURE ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, MONITOR ON ALL ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Copy

Gérer et proposer des fonctionnalités en ligne à l’aide de l’API Python

L’exemple suivant montre comment configurer la mise à disposition de fonctionnalités en ligne lors de la création d’une nouvelle vue des fonctionnalités. Vous pouvez utiliser l’objet OnlineConfig pour spécifier les paramètres de la mise à disposition en ligne, tels que le décalage d’actualisation des données cibles.

from snowflake.ml.feature_store import FeatureView
from snowflake.ml.feature_store.feature_view import OnlineConfig

online_config = OnlineConfig(enable=True, target_lag="30 seconds")

fv = FeatureView(
    name="MY_FV",
    entities=[entity],
    feature_df=my_df, # Snowpark DataFrame containing feature transformations
    timestamp_col="ts", # optional timestamp column name in the dataframe
    refresh_freq="5 minutes",
    refresh_mode="AUTO", # refresh mode of the feature data
    desc="my feature view", # optional description
    online_config=online_config
)

fv = fs.register_feature_view(feature_view=fv, version="v1")
Copy

Voici les paramètres de OnlineConfig :

Paramètre

Type

Description

Par défaut

enable

Booléen, facultatif

Spécifie si la mise à disposition de fonctionnalités en ligne doit être activée pour la vue des fonctionnalités.

Par défaut : Faux

target_lag

Chaîne, facultatif

Chaîne au format « <num> (seconds|minutes|hours|days|s|m|h|d) » spécifiant le décalage d’actualisation des données cibles.

Par défaut : 10 secondes

Note

refresh_freq et OnlineConfig.target_lag agissent indépendamment. Dans l’exemple ci-dessus, le décalage effectif de propagation des données cibles à partir des données sources représentées par my_df vers le magasin de données en ligne sera refresh_freq + online_config.target_lag.

Mettre à jour une vue des fonctionnalités pour activer/désactiver la mise à disposition de fonctionnalités en ligne

Pour les vues de fonctionnalités existantes, vous pouvez mettre à jour la configuration de la mise à disposition de fonctionnalités en ligne à l’aide de la méthode update_feature_view. Vous pouvez utiliser cette méthode pour activer la mise à disposition de fonctionnalités en ligne pour les vues de fonctionnalités existantes.

Utilisez le code suivant pour activer la mise à disposition de fonctionnalités en ligne.

# Enable online feature serving

fs.update_feature_view(
    name="<name>",
    version="<version>",
    online_config=OnlineConfig(enable=True, target_lag="5 minutes")
)
Copy

Utilisez le code suivant pour désactiver la mise à disposition de fonctionnalités en ligne.

# Disable online feature serving

fs.update_feature_view(
    name="<name>",
    version="<version>",
    online_config=OnlineConfig(enable=False)
)
Copy

Récupérer des fonctionnalités à partir d’un stockage en ligne

Pour récupérer les valeurs de fonctionnalités à partir d’un stockage en ligne pour un échantillon donné, utilisez la méthode read_feature_view et transmettez la liste des noms des fonctionnalités ainsi que les clés de jointure de l’échantillon :

fs.read_feature_view(
    feature_view=fv,
    keys=[["<k_1>", "<k_2>"]],
    feature_names=["<feature1>", "<feature2>", "<feature3>"],
    store_type=StoreType.ONLINE
)
Copy

Suspendre/reprendre l’actualisation des données en ligne

Utilisez le code suivant pour suspendre temporairement l’actualisation des données.

fs.suspend_feature_view(feature_view=fv)
Copy

Utilisez le code suivant pour reprendre l’actualisation des données.

fs.resume_feature_view(feature_view=fv)
Copy

Ces opérations suspendent/reprennent à la fois la vue des fonctionnalités hors ligne (table dynamique et tâche associée) et la table des fonctionnalités en ligne (si elle existe), afin de garantir un état cohérent entre tous les types de stockage.

Actualiser manuellement la vue des fonctionnalités

fs.refresh_feature_view(
    feature_view=fv,
    store_type=<store_type>
)
Copy

L’argument store_type spécifie s’il faut actualiser les données des fonctionnalités hors ligne (StoreType.OFFLINE) ou en ligne (StoreType.ONLINE).

Afficher l’historique d’actualisation

fs.get_refresh_history(
    feature_view=fv,
    store_type=store_type
)
Copy

L’argument store_type spécifie s’il faut renvoyer l’historique d’actualisation du magasin hors ligne (StoreType.OFFLINE) ou en ligne (StoreType.ONLINE).

Comprendre les coûts

Les tables des fonctionnalités en ligne entraînent des coûts selon les modes de consommation suivants :

  • Calcul de l’entrepôt virtuel : Les opérations de recherche de clés et d’ingestion des données consomment des crédits d’entrepôt virtuel à des taux standard. Pour plus d’informations, voir Utilisation du crédit d’entrepôt virtuel.

  • Calcul des services Cloud : Nécessaire pour identifier les modifications apportées aux objets de base sous-jacents et déterminer quand des opérations d’actualisation sont nécessaires. Pour plus d’informations, voir Utilisation du crédit des services Cloud.

  • Stockage de tables hybrides : Coûts de stockage basés sur un tarif forfaitaire mensuel par GB. Cela coûte plus cher que le stockage Snowflake traditionnel, mais équivaut au coût de stockage des tables hybrides. Pour plus d’informations, consultez le tableau 3(b) dans la section Tableau de consommation des crédits.

  • Requêtes de tables hybrides : Ces requêtes utilisent Utilisation du crédit sans serveur pour les opérations de lecture/écriture sur les clusters de stockage de lignes. La quantité de données écrites ou lues à partir de ces clusters est utilisée pour calculer la consommation de crédits, avec une utilisation minimum de 4 KB par opération. Des crédits sont également consommés pour les ressources de calcul utilisées pour effectuer des opérations en arrière-plan, comme le compactage. Pour plus d’informations, consultez le tableau 5 dans la section Tableau de consommation des crédits.

Astuce

L’actualisation incrémentielle peut aider à réduire les coûts. Les mises à jour incrémentielles sont généralement plus rentables que l’actualisation complète, ce qui permet de réduire les coûts de calcul et d’ingestion des données.

Surveiller les coûts

Pour surveiller les coûts, utilisez ces vues :

-- Hybrid table request credits
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.HYBRID_TABLE_USAGE_HISTORY;

-- Storage consumption
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY;

-- Overall costs
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY;
Copy