Concepts de matérialisation de l’ensemble de fonctionnalités
La matérialisation calcule les valeurs des fonctionnalités à partir des données sources. Les valeurs d’heure de début et d’heure de fin définissent une fenêtre de fonctionnalité. Une tâche de matérialisation calcule les fonctionnalités de cette fenêtre de fonctionnalité. Les valeurs de fonctionnalités matérialisées sont ensuite stockées dans un magasin de matérialisation en ligne ou hors connexion. Après la matérialisation des données, toutes les requêtes de fonctionnalités peuvent ensuite utiliser ces valeurs à partir du magasin de matérialisation.
Sans la matérialisation, une requête hors connexion sur un ensemble de fonctionnalités applique les transformations à la source à la volée pour calculer les fonctionnalités avant que la requête ne retourne les valeurs. Ce processus fonctionne bien lors de la phase de prototypage. Toutefois, pour les opérations de formation et d’inférence, les fonctionnalités doivent être matérialisées avant la formation ou l’inférence dans un environnement de production. La matérialisation à ce stade offre une plus grande fiabilité et une plus grande disponibilité.
Exploration de la matérialisation des fonctionnalités
L’interface utilisateur Travaux de matérialisation affiche l’état de matérialisation des données dans les magasins de matérialisation hors connexion et en ligne, ainsi qu’une liste de travaux de matérialisation.
Dans une fenêtre de fonctionnalité :
- Le graphique de série chronologique en haut affiche les intervalles de données qui se trouvent dans la fenêtre de fonctionnalité, avec l’état de matérialisation, pour les magasins hors connexion et en ligne.
- La liste des travaux en bas affiche tous les travaux de matérialisation avec les fenêtres de traitement qui chevauchent la fenêtre de fonctionnalité sélectionnée.
État de matérialisation des données et intervalle de données
Un intervalle de données est une fenêtre de temps dans laquelle l’ensemble de fonctionnalités matérialise ses valeurs de fonctionnalités à l’un de ces états :
- Terminé (vert) : matérialisation réussie des données
- Incomplet (rouge) : un ou plusieurs travaux de matérialisation ont été annulés ou ont échoué pour cet intervalle de données
- En attente (bleu) : un ou plusieurs travaux de matérialisation pour cet intervalle de données sont en cours
- Aucun (gris) : aucun travail de matérialisation n’a été envoyé pour cet intervalle de données
À mesure que les travaux de matérialisation s’exécutent pour l’ensemble de fonctionnalités, ils créent ou fusionnent des intervalles de données :
- Lorsque deux intervalles de données sont continus sur la chronologie et qu’ils ont le même état de matérialisation des données, ils deviennent un seul intervalle de données
- Dans un intervalle de données, lorsqu’une partie des données de fonctionnalité est matérialisée à nouveau et que cette partie obtient un état de matérialisation des données différent, cet intervalle de données est divisé en plusieurs intervalles de données
Lorsque les utilisateurs sélectionnent une fenêtre de fonctionnalité, ils peuvent voir plusieurs intervalles de données dans cette fenêtre avec différents états de matérialisation des données. Ils peuvent voir plusieurs intervalles de données disjoints sur la chronologie. Par exemple, l’instantané précédent a 16 intervalles de données pour la fenêtre de fonctionnalité définie dans le magasin de matérialisation hors connexion.
À tout moment, un ensemble de fonctionnalités peut avoir au maximum 2000 intervalles de données. Une fois qu’un ensemble de fonctionnalités atteint cette limite, aucun travail de matérialisation ne peut s’exécuter. Les utilisateurs doivent ensuite créer une nouvelle version d’ensemble de fonctionnalités avec la matérialisation activée. Pour la nouvelle version de l’ensemble de fonctionnalités, matérialisez les fonctionnalités dans les magasins hors connexion et en ligne à partir de zéro.
Pour éviter la limite, les utilisateurs doivent exécuter des travaux de renvoi à l’avance pour combler les lacunes dans les intervalles de données. Cela fusionne les intervalles de données et réduit le nombre total.
Travaux de matérialisation des données
Avant d’exécuter un travail de matérialisation des données, activez les matérialisations de données hors connexion et/ou en ligne au niveau de l’ensemble de fonctionnalités.
from azure.ai.ml.entities import (
MaterializationSettings,
MaterializationComputeResource,
)
# Turn on both offline and online materialization on the "accounts" featureset.
accounts_fset_config = fs_client._featuresets.get(name="accounts", version="1")
accounts_fset_config.materialization_settings = MaterializationSettings(
offline_enabled=True,
online_enabled=True,
resource=MaterializationComputeResource(instance_type="standard_e8s_v3"),
spark_configuration={
"spark.driver.cores": 4,
"spark.driver.memory": "36g",
"spark.executor.cores": 4,
"spark.executor.memory": "36g",
"spark.executor.instances": 2,
},
schedule=None,
)
fs_poller = fs_client.feature_sets.begin_create_or_update(accounts_fset_config)
print(fs_poller.result())
Vous pouvez soumettre les travaux de matérialisation des données en tant que :
- travail de renvoi : un travail de matérialisation par lot envoyé manuellement
- travail de matérialisation récurrent : un travail de matérialisation automatique déclenché à intervalles planifiés.
Avertissement
Les données déjà matérialisées dans la matérialisation hors connexion et/ou en ligne ne seront plus utilisables si la matérialisation des données hors connexion et/ou en ligne est désactivée au niveau de l’ensemble de fonctionnalités. L’état de matérialisation des données dans le magasin de matérialisation en ligne et/ou hors connexion sera réinitialisé à None
.
Vous pouvez envoyer des travaux de renvoi en procédant comme suit :
- État de matérialisation des données
- L’ID d’un travail de matérialisation annulé ou ayant échoué
Renvoi des données par état de matérialisation des données
L’utilisateur peut envoyer une requête de renvoi avec :
- Une liste des valeurs d’état de matérialisation des données : incomplet, complet ou aucun
- Une fenêtre de fonctionnalité (facultative)
from datetime import datetime
from azure.ai.ml.entities import DataAvailabilityStatus
st = datetime(2022, 1, 1, 0, 0, 0, 0)
et = datetime(2023, 6, 30, 0, 0, 0, 0)
poller = fs_client.feature_sets.begin_backfill(
name="transactions",
version="1",
feature_window_start_time=st,
feature_window_end_time=et,
data_status=[DataAvailabilityStatus.NONE],
)
print(poller.result().job_ids)
Après l’envoi de la requête de renvoi, un nouveau travail de matérialisation est créé pour chaque intervalle de données ayant un état de matérialisation des données correspondant (incomplet, complet ou aucun). En outre, les intervalles de données appropriés doivent se trouver dans la fenêtre de fonctionnalité définie. Si l’état de matérialisation des données est Pending
pour un intervalle de données, aucun travail de matérialisation n’est envoyé pour cet intervalle.
L’heure de début et l’heure de fin de la fenêtre de fonctionnalité sont facultatives dans la requête de renvoi :
- Si l’heure de début de la fenêtre de fonctionnalité n’est pas fournie, l’heure de début est définie comme celle du premier intervalle de données dont l’état de matérialisation des données n’est pas
None
. - Si l’heure de fin de la fenêtre de fonctionnalité n’est pas fournie, l’heure de fin est définie comme celle du dernier intervalle de données dont l’état de matérialisation des données n’est pas
None
.
Remarque
Si aucun travail de renvoi ou récurrent n’a été soumis pour un ensemble de fonctionnalités, le premier travail de renvoi doit être soumis avec une heure de début et une heure de fin de fenêtre de fonctionnalité.
Cet exemple contient ces valeurs d’état de matérialisation et d’intervalle de données actuels :
Heure de début | Heure de fin | État de matérialisation des données |
---|---|---|
2023-04-01T04:00:00.000 |
2023-04-02T04:00:00.000 |
None |
2023-04-02T04:00:00.000 |
2023-04-03T04:00:00.000 |
Incomplete |
2023-04-03T04:00:00.000 |
2023-04-04T04:00:00.000 |
None |
2023-04-04T04:00:00.000 |
2023-04-05T04:00:00.000 |
Complete |
2023-04-05T04:00:00.000 |
2023-04-06T04:00:00.000 |
None |
Cette requête de renvoi comporte les valeurs suivantes :
- Matérialisation des données
data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
- Début de la fenêtre de fonctionnalité =
2023-04-02T12:00:00.000
- Fin de la fenêtre de fonctionnalité =
2023-04-04T12:00:00.000
Elle crée ces travaux de matérialisation :
- Travail 1 : traiter la fenêtre de fonctionnalité [
2023-04-02T12:00:00.000
,2023-04-03T04:00:00.000
) - Travail 2 : traiter la fenêtre de fonctionnalité [
2023-04-04T04:00:00.000
,2023-04-04T12:00:00.000
)
Si les deux travaux se terminent correctement, les nouvelles valeurs d’état d’intervalle de données et de matérialisation deviennent :
Heure de début | Heure de fin | État de matérialisation des données |
---|---|---|
2023-04-01T04:00:00.000 |
2023-04-02T04:00:00.000 |
None |
2023-04-02T04:00:00.000 |
2023-04-02T12:00:00.000 |
Incomplete |
2023-04-02T12:00:00.000 |
2023-04-03T04:00:00.000 |
Complete |
2023-04-03T04:00:00.000 |
2023-04-04T04:00:00.000 |
None |
2023-04-04T04:00:00.000 |
2023-04-05T04:00:00.000 |
Complete |
2023-04-05T04:00:00.000 |
2023-04-06T04:00:00.000 |
None |
Un nouvel intervalle de données est créé à la date du 2023-04-02, car la moitié de ce jour a maintenant un état de matérialisation différent : Complete
. Bien qu’un nouveau travail de matérialisation ait été exécuté pendant la moitié du jour du 2023-04-04, l’intervalle de données n’est pas modifié (fractionné), car l’état de matérialisation n’a pas changé.
Si l’utilisateur effectue une requête de renvoi avec uniquement la matérialisation des données data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
, sans définir l’heure de début et de fin de la fenêtre de fonctionnalité, la requête utilise la valeur par défaut de ces paramètres mentionnés précédemment dans cette section et crée ces travaux :
- Travail 1 : traiter la fenêtre de fonctionnalité [
2023-04-02T04:00:00.000
,2023-04-03T04:00:00.000
) - Travail 2 : traiter la fenêtre de fonctionnalité [
2023-04-04T04:00:00.000
,2023-04-05T04:00:00.000
)
Comparez la fenêtre de fonctionnalité pour ces travaux de requête les plus récents et ceux indiqués dans l’exemple précédent.
Renvoi des données par ID de travail
Une requête de renvoi peut également être créée avec un ID de travail. Il s’agit d’un moyen pratique de réessayer un travail de matérialisation ayant échoué ou été annulé. Tout d’abord, recherchez l’ID du travail à réessayer :
- Accédez à l’interface utilisateur des Travaux de matérialisation de l’ensemble de fonctionnalités
- Sélectionnez le Nom d’affichage d’un travail spécifique qui a une valeur État Échec
- Dans la page Vue d’ensemble du travail, recherchez la valeur d’ID du travail concernée sous la propriété Nom. Elle commence par
Featurestore-Materialization-
.
poller = fs_client.feature_sets.begin_backfill(
name="transactions",
version=version,
job_id="<JOB_ID_OF_FAILED_MATERIALIZATION_JOB>",
)
print(poller.result().job_ids)
Vous pouvez soumettre un travail de renvoi avec l’ID d’un travail de matérialisation ayant échoué ou été annulé. Dans ce cas, l’état des données de la fenêtre de fonctionnalité pour le travail de matérialisation d’origine ayant échoué ou été annulé doit être Incomplete
. Si cette condition n’est pas remplie, le travail de renvoi par ID entraîne une erreur utilisateur. Par exemple, un travail de matérialisation qui a échoué peut avoir une valeur 2023-04-01T04:00:00.000
pour l’heure de début de la fenêtre de fonctionnalité et une valeur 2023-04-09T04:00:00.000
pour l’heure de fin. Un travail de renvoi soumis à l’aide de l’ID de ce travail ayant échoué n’aboutit que si l’état des données est Incomplete
partout, dans l’intervalle de temps 2023-04-01T04:00:00.000
à 2023-04-09T04:00:00.000
.
Aide et bonnes pratiques
Établir un calendrier récurrent et un source_delay
approprié
La propriété source_delay
des données sources indique le délai entre le moment de l’acquisition des données prêtes à être consommées et le moment de l’événement de la génération des données. Un événement qui s’est produit à l’heure t
atterrit dans la table de données source à l’heure t + x
, en raison de la latence du pipeline de données en amont. La valeur x
est le délai source.
Pour une mise en place correcte, la planification récurrente des tâches de matérialisation tient compte de la latence. Le travail récurrent produit des fonctionnalités pour la fenêtre de temps [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay)
.
materialization_settings:
schedule:
type: recurrence
interval: 1
frequency: Day
start_time: "2023-04-15T04:00:00.000"
Cet exemple définit un travail quotidien qui se déclenche à 4h00, à compter du 15/4/2023. En fonction du paramètre source_delay
, l’exécution du travail du 1/5/2023 produit des fonctionnalités dans différentes fenêtres temporelles :
source_delay=0
produit des valeurs de fonctionnalité dans la fenêtre[2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
source_delay=2hours
produit des valeurs de fonctionnalité dans la fenêtre[2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
source_delay=4hours
produit des valeurs de fonctionnalité dans la fenêtre[2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)
Mettre à jour le magasin de matérialisation
Avant de mettre à jour un magasin de fonctionnalités en ligne ou hors connexion, tous les ensembles de fonctionnalités de ce magasin de fonctionnalités doivent avoir la matérialisation hors connexion et/ou en ligne correspondante désactivée. L’opération de mise à jour se solde par une UserError
si certains ensembles de fonctionnalités ont la matérialisation activée.
L’état de matérialisation des données dans le magasin de matérialisation hors connexion et/ou en ligne se réinitialise si la matérialisation hors connexion et/ou en ligne est désactivée sur un ensemble de fonctionnalités. La réinitialisation rend les données matérialisées inutilisables. Si la matérialisation hors connexion et/ou en ligne sur l’ensemble de fonctionnalités est activée ultérieurement, les utilisateurs doivent soumettre à nouveau leurs travaux de matérialisation.
Amorçage de données en ligne
L’amorçage des données en ligne s’applique uniquement si des travaux de matérialisation hors connexion ont été correctement effectués. Si seule la matérialisation hors connexion a été initialement activée pour un ensemble de fonctionnalités et que la matérialisation en ligne est activée ultérieurement, alors :
L’état de matérialisation des données par défaut des données dans le magasin en ligne est
None
Lorsqu’un travail de matérialisation en ligne est soumis, les données avec le statut de matérialisation
Complete
dans le magasin hors connexion sont utilisées pour calculer les fonctionnalités en ligne. Cela s’appelle l’amorçage des données en ligne. L’amorçage des données en ligne permet d’économiser des coûts de calcul, car il réutilise des fonctionnalités déjà calculées et enregistrées dans le magasin de matérialisation hors connexion. Ce tableau résume les valeurs d’état des données hors connexion et en ligne dans les intervalles de données qui entraîneraient l’amorçage des données en ligne :Heure de début Heure de fin État des données hors connexion État des données en ligne Amorçage de données en ligne 2023-04-01T04:00:00.000
2023-04-02T04:00:00.000
None
None
Non 2023-04-02T04:00:00.000
2023-04-03T04:00:00.000
Incomplete
None
Non 2023-04-03T04:00:00.000
2023-04-04T04:00:00.000
Pending
None
Aucun travail de matérialisation envoyé 2023-04-04T04:00:00.000
2023-04-05T04:00:00.000
Complete
None
Oui
Résoudre les erreurs et modifications des données sources
Certains scénarios modifient les données sources après la matérialisation des données, suite à une erreur ou pour d’autres raisons. Dans ces cas, une actualisation des données de fonctionnalité, pour une fenêtre de fonctionnalité spécifique sur plusieurs intervalles de données, peut résoudre des données de fonctionnalités erronées ou obsolètes. Envoyez la requête de matérialisation pour une résolution des données de fonctionnalité erronée ou obsolète dans la fenêtre de fonctionnalité, pour les états des données None
, Complete
et Incomplete
.
Vous ne devriez envoyer une requête de matérialisation pour une actualisation des données de fonctionnalité que si la fenêtre de fonctionnalité ne contient aucun intervalle de données avec un état de données Pending
.
Combler les lacunes
Dans le magasin de matérialisation, les données matérialisées peuvent avoir des lacunes, car :
- un travail de matérialisation n’a jamais été envoyé pour la fenêtre de fonctionnalité
- des travaux de matérialisation envoyés pour la fenêtre de fonctionnalité ont échoué ou ont été annulés
Dans ce cas, envoyez une requête de matérialisation dans la fenêtre de fonctionnalité pour data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete]
afin de combler les lacunes. Une requête de matérialisation unique remplit toutes les lacunes de la fenêtre de fonctionnalité.