Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La matérialisation fournit une capacité de calcul permettant de dériver les valeurs des caractéristiques à partir des données sources. Les paramètres de début et de fin déterminent une fenêtre temporelle de caractéristiques. Une tâche de matérialisation calcule les caractéristiques sur l’intervalle défini par cette fenêtre. Les valeurs ainsi calculées sont ensuite enregistrées dans un magasin de matérialisation, en ligne ou hors ligne. Une fois la matérialisation effectuée, l’ensemble des requêtes de caractéristiques peut exploiter directement les valeurs stockées dans le magasin de matérialisation.
En l’absence de matérialisation, une requête hors ligne sur un ensemble de caractéristiques applique les transformations directement sur la source, à la demande, afin de calculer les caractéristiques avant de renvoyer les résultats. Ce mécanisme est bien adapté aux phases de prototypage. En revanche, pour les opérations d’entraînement et d’inférence en environnement de production, les caractéristiques doivent être matérialisées en amont de l’entraînement ou de l’inférence. À ce stade, la matérialisation améliore la fiabilité et la disponibilité globales.
Exploration de la matérialisation des caractéristiques
L’interface utilisateur des tâches de matérialisation présente l’état de la matérialisation des données dans les magasins hors ligne et en ligne, ainsi qu’une liste des tâches de matérialisation existantes.
Dans une fenêtre de caractéristiques :
- Le graphique chronologique situé en partie supérieure affiche les intervalles de données inclus dans la fenêtre de caractéristiques, accompagnés de leur état de matérialisation pour les magasins hors ligne et en ligne.
- La liste des tâches, affichée en partie inférieure, recense toutes les tâches de matérialisation dont les fenêtres de traitement recouvrent la fenêtre de caractéristiques sélectionnée.
État de matérialisation des données et intervalle de données
Un intervalle de données correspond à une période temporelle durant laquelle l’ensemble de caractéristiques matérialise ses valeurs de caractéristiques selon l’un des états suivants :
- Terminé (vert) : la matérialisation des données a été réalisée avec succès
- Incomplet (rouge) : une ou plusieurs tâches de matérialisation ont été annulées ou ont échoué sur cet intervalle de données
- En attente (bleu) : une ou plusieurs tâches de matérialisation sont en cours d’exécution pour cet intervalle de données
- Aucun (gris) : aucune tâche de matérialisation n’a été soumise pour cet intervalle de données
À mesure que les tâches de matérialisation s’exécutent pour un ensemble de caractéristiques, elles peuvent créer ou fusionner des intervalles de données :
- Lorsque deux intervalles de données sont contigus sur la chronologie et partagent le même état de matérialisation, ils sont regroupés en un seul intervalle de données
- Au sein d’un intervalle de données, si une partie des données de caractéristiques est matérialisée à nouveau et obtient un état de matérialisation différent, l’intervalle initial est scindé en plusieurs intervalles distincts
Lorsqu’un utilisateur sélectionne une fenêtre de caractéristiques, plusieurs intervalles de données présentant des états de matérialisation différents peuvent être visibles dans cette fenêtre. En outre, plusieurs intervalles de données, disjoints dans la chronologie, peuvent également apparaître. Par exemple, l’instantané précédent montre 16 intervalles de données pour la fenêtre de caractéristiques définie dans le magasin de matérialisation hors ligne
Un ensemble de fonctionnalités peut contenir au maximum 2 000 intervalles de données à un instant donné. Lorsque cette limite est atteinte, aucune tâche de matérialisation supplémentaire ne peut être exécutée. Les utilisateurs doivent alors créer une nouvelle version de l’ensemble de fonctionnalités en activant la matérialisation. Pour cette nouvelle version de l’ensemble de fonctionnalités, les fonctionnalités doivent être matérialisées dans les magasins hors ligne et en ligne depuis le début.
Afin d’éviter d’atteindre cette limite, il est recommandé d’exécuter de manière anticipée des tâches de renvoi pour combler les lacunes dans les intervalles de données. Ce mécanisme permet de fusionner les intervalles de données et de réduire leur nombre total.
Tâches de matérialisation des données
Important
Les tâches de matérialisation du magasin de fonctionnalités s’appuient sur Apache Spark. Azure Synapse Runtime pour Apache Spark 3.3 a atteint la fin du support le 31 mars 2025. Utilisez Apache Spark 3.4 ou version ultérieure pour vos travaux de matérialisation.
Avant d’exécuter une tâche de matérialisation des données, il est nécessaire d’activer la matérialisation hors ligne 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())
Les tâches de matérialisation des données peuvent être soumises sous les formes suivantes :
- tâche de renvoi : tâche de matérialisation par lots déclenchée manuellement
- tâche de matérialisation récurrente : tâche de matérialisation automatique déclenchée à des intervalles réguliers.
Avertissement
Les données déjà matérialisées dans les magasins hors ligne et/ou en ligne ne seront plus exploitables si la matérialisation hors ligne et/ou en ligne est désactivée au niveau de l’ensemble de fonctionnalités. Le statut de matérialisation des données dans le magasin de matérialisation hors ligne et/ou en ligne sera réinitialisé à None.
Les tâches de renvoi peuvent être soumises à l’aide des éléments suivants :
- Statut de matérialisation des données
- ID de tâche d’une tâche de matérialisation annulée ou ayant échoué
Remplissage des données par statut de matérialisation des données
Les utilisateurs peuvent soumettre une requête de renvoi en spécifiant :
- Une liste de valeurs de statut de matérialisation des données : Incomplete (Incomplète), Complete (Complète) ou None (Aucune)
- 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 la soumission de la requête de renvoi, une nouvelle tâche de matérialisation est créée pour chaque intervalle de données dont le statut de matérialisation correspond (Incomplete, Complete ou None). Les intervalles de données concernés doivent également se situer dans la fenêtre de fonctionnalité définie. Si le statut de matérialisation des données d’un intervalle est défini sur Pending, aucune tâche de matérialisation n’est soumise pour cet intervalle.
Les heures de début et 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 spécifiée, elle est définie comme l’heure de début du premier intervalle de données dont le statut de matérialisation n’est pas
None. - Si l’heure de fin de la fenêtre de fonctionnalité n’est pas spécifiée, elle est définie comme l’heure de fin du dernier intervalle de données dont le statut de matérialisation n’est pas
None.
Remarque
Si aucune tâche de renvoi ni aucune tâche récurrente n’a été soumise pour un ensemble de fonctionnalités, la première tâche de renvoi doit obligatoirement être soumise avec une heure de début et une heure de fin de fenêtre de fonctionnalité.
Cet exemple illustre les valeurs suivantes pour l’intervalle de données actuel ainsi que pour l’état de matérialisation :
| Heure de début | Heure de fin | Statut de matérialisation des données |
|---|---|---|
2025-04-01T04:00:00.000 |
2025-04-02T04:00:00.000 |
None |
2025-04-02T04:00:00.000 |
2025-04-03T04:00:00.000 |
Incomplete |
2025-04-03T04:00:00.000 |
2025-04-04T04:00:00.000 |
None |
2025-04-04T04:00:00.000 |
2025-04-05T04:00:00.000 |
Complete |
2025-04-05T04:00:00.000 |
2025-04-06T04:00:00.000 |
None |
Cette requête de remplissage affiche les valeurs suivantes :
- Matérialisation des données
data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete] - Début de la fenêtre de fonctionnalité =
2025-04-02T12:00:00.000 - Fin de la fenêtre de fonctionnalité =
2025-04-04T12:00:00.000
Elle génère les tâches de matérialisation suivantes :
- Tâche 1 : traiter la fenêtre de fonctionnalité [
2025-04-02T12:00:00.000,2025-04-03T04:00:00.000) - Tâche 2 : traiter la fenêtre de fonctionnalité [
2025-04-04T04:00:00.000,2025-04-04T12:00:00.000)
Si les deux tâches s’exécutent correctement, les nouvelles valeurs de l’intervalle de données et de l’état de matérialisation deviennent :
| Heure de début | Heure de fin | Statut de matérialisation des données |
|---|---|---|
2025-04-01T04:00:00.000 |
2025-04-02T04:00:00.000 |
None |
2025-04-02T04:00:00.000 |
2025-04-02T12:00:00.000 |
Incomplete |
2025-04-02T12:00:00.000 |
2025-04-03T04:00:00.000 |
Complete |
2025-04-03T04:00:00.000 |
2025-04-04T04:00:00.000 |
None |
2025-04-04T04:00:00.000 |
2025-04-05T04:00:00.000 |
Complete |
2025-04-05T04:00:00.000 |
2025-04-06T04:00:00.000 |
None |
Un nouvel intervalle de données est créé le jour 2025-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 2025-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 envoie une requête de renvoi en spécifiant uniquement la matérialisation des données data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete], sans définir l’heure de début ni l’heure de fin de la fenêtre de fonctionnalité, la requête utilise les valeurs par défaut des paramètres décrits précédemment dans cette section et crée les tâches suivantes :
- Tâche 1 : traiter la fenêtre de fonctionnalité [
2025-04-02T04:00:00.000,2025-04-03T04:00:00.000) - Tâche 2 : traiter la fenêtre de fonctionnalité [
2025-04-04T04:00:00.000,2025-04-05T04:00:00.000)
Comparez la fenêtre de fonctionnalité de ces dernières requêtes de renvoi avec celles des requêtes de renvoi présentées dans l’exemple précédent.
Renvoi des données par ID de tâche
Une requête de renvoi peut également être créée en utilisant un ID de tâche. Cette méthode constitue un moyen pratique de relancer une tâche de matérialisation ayant échoué ou ayant été annulée. Commencez par identifier l’ID de la tâche à relancer :
- Accédez à l’interface utilisateur des tâches de matérialisation de l’ensemble de fonctionnalités
- Sélectionnez le nom d’affichage d’une tâche spécifique dont la valeur est FailedStatus
- Dans la page de vue d’ensemble de la tâche, repérez la valeur de l’ID de tâche correspondante 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 une tâche de renvoi à l’aide de l’ID d’une tâche de matérialisation ayant échoué ou ayant été annulée. Dans ce cas, l’état des données de la fenêtre de fonctionnalité pour la tâche de matérialisation d’origine ayant échoué ou ayant été annulée doit être Incomplete. Si cette condition n’est pas respectée, la tâche de renvoi par ID génère une erreur utilisateur. Par exemple, une tâche de matérialisation ayant échoué peut avoir une valeur 2025-04-01T04:00:00.000 pour l’heure de début de la fenêtre de fonctionnalité et une valeur 2025-04-09T04:00:00.000 pour l’heure de fin. Une tâche de renvoi soumise à l’aide de l’ID de cette tâche en échec ne réussit que si l’état des données sur l’ensemble de la plage temporelle 2025-04-01T04:00:00.000 à 2025-04-09T04:00:00.000 est Incomplete.
Aide et bonnes pratiques
Définissez un source_delay ainsi qu’un calendrier récurrent approprié
La propriété source_delay des données sources indique le délai entre l’heure à laquelle les données sont prêtes à être consommées et l’heure de l’événement de génération des données Un événement survenu à l’instant t n’apparaît dans la table de données source qu’à l’instant t + x, en raison de la latence du pipeline de données en amont. La valeur x représente le retard de la source.
Pour garantir une configuration correcte, le calendrier des tâches de matérialisation récurrentes prend en compte la latence. La tâche récurrente génère des fonctionnalités pour la fenêtre temporelle [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay).
materialization_settings:
schedule:
type: recurrence
interval: 1
frequency: Day
start_time: "2025-04-15T04:00:00.000"
Cet exemple définit un travail quotidien qui se déclenche à 4h00, à compter du 15/15/2025. Selon la valeur du paramètre source_delay, l’exécution de la tâche du 1/5/2025 génère des fonctionnalités sur différentes fenêtres temporelles :
-
source_delay=0génère des valeurs de fonctionnalité dans la fenêtre[2025-04-30T04:00:00.000, 2025-05-01T04:00:00.000) -
source_delay=2hoursgénère des valeurs de fonctionnalité dans la fenêtre[2025-04-30T02:00:00.000, 2025-05-01T02:00:00.000) -
source_delay=4hoursgénère des valeurs de fonctionnalité dans la fenêtre[2025-04-30T00:00:00.000, 2025-05-01T00:00:00.000)
Mise à jour du magasin de matérialisation
Avant toute mise à jour d’un magasin de fonctionnalités en ligne ou d’un magasin de matérialisation hors ligne, toutes les séries de fonctionnalités de ce magasin doivent avoir la matérialisation hors ligne et/ou en ligne désactivée. L’opération de mise à jour échoue avec le statut UserError si certaines séries de fonctionnalités ont la matérialisation activée.
Le statut de matérialisation des données dans le magasin de matérialisation hors ligne et/ou en ligne est réinitialisé lorsque la matérialisation hors ligne et/ou en ligne est désactivée pour un ensemble de fonctionnalités. Cette réinitialisation rend les données matérialisées inutilisables. Si la matérialisation hors ligne et/ou en ligne est réactivée ultérieurement sur l’ensemble de fonctionnalités, les utilisateurs doivent soumettre à nouveau leurs tâches de matérialisation.
Bootstrap de données en ligne
Le bootstrap de données en ligne s’applique uniquement si les tâches de matérialisation hors ligne soumises ont été exécutées avec succès. Si seule la matérialisation hors ligne était activée initialement pour un ensemble de fonctionnalités et que la matérialisation en ligne est activée par la suite, alors :
Le statut de matérialisation par défaut des données dans le magasin en ligne est
NoneLorsqu’une tâche de matérialisation en ligne est soumise, les données ayant le statut de matérialisation
Completedans le magasin hors ligne sont utilisées pour calculer les fonctionnalités en ligne. Ce mécanisme est appelé bootstrap de données en ligne. Le bootstrap de données en ligne permet de réduire les coûts de calcul, car il réutilise les fonctionnalités déjà calculées et stockées dans le magasin de matérialisation hors ligne. Le tableau suivant récapitule les valeurs d’état des données hors ligne et en ligne, pour les intervalles de données déclenchant un bootstrap de données en ligne :Heure de début Heure de fin État des données hors ligne État des données en ligne Bootstrap de données en ligne 2025-04-01T04:00:00.0002025-04-02T04:00:00.000NoneNoneNon 2025-04-02T04:00:00.0002025-04-03T04:00:00.000IncompleteNoneNon 2025-04-03T04:00:00.0002025-04-04T04:00:00.000PendingNoneAucune tâche de matérialisation soumise 2025-04-04T04:00:00.0002025-04-05T04:00:00.000CompleteNoneOui
Correction des erreurs et modifications des données source
Dans certains cas, les données source sont modifiées après la matérialisation des données, en raison d’erreurs ou pour d’autres motifs. Dans ces situations, une actualisation des données de fonctionnalité, appliquée à une fenêtre de fonctionnalité spécifique couvrant plusieurs intervalles de données, permet de corriger les données erronées ou obsolètes. Soumettez une requête de matérialisation afin de corriger les données de fonctionnalité erronées ou obsolètes dans la fenêtre de fonctionnalité, pour les statuts de données None, Complete et Incomplete.
Vous ne devez soumettre une requête de matérialisation pour l’actualisation des données de fonctionnalité que lorsque la fenêtre de fonctionnalité ne contient aucun intervalle de données ayant le statut Pending.
Combler les lacunes
Dans le magasin de matérialisation, les données matérialisées peuvent comporter des lacunes pour les raisons suivantes :
- aucune tâche de matérialisation n’a jamais été soumise pour la fenêtre d’entité
- les tâches de matérialisation soumises pour la fenêtre d’entité ont échoué ou ont été annulées
Dans ce cas, soumettez une requête de matérialisation sur la fenêtre d’entité pour data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete] afin de combler les lacunes. Une seule requête de matérialisation permet de combler l’ensemble des lacunes de la fenêtre d’entité