Freigeben über


Konzepte der Featuresatzmaterialisierung

Die Materialisierung berechnet Featurewerte aus Quelldaten. Startzeit- und Endzeitwerte definieren ein Featurefenster. Ein Materialisierungsauftrag berechnet Features in diesem Featurefenster. Materialisierte Featurewerte werden dann in einem Online- oder Offlinematerialisierungsspeicher gespeichert. Nach der Datenmaterialisierung können dann alle Featureabfragen diese Werte aus dem Materialisierungsspeicher verwenden.

Ohne Materialisierung wendet eine Featuresatz-Offlineabfrage die Transformationen direkt auf die Quelle an, um die Features zu berechnen, bevor die Abfrage die Werte zurückgibt. Dieser Vorgang funktioniert gut in der Phase der Prototyperstellung. Bei Trainings- und Rückschlussvorgängen in einer Produktionsumgebung sollten Features jedoch vor dem Training oder dem Rückschluss materialisiert werden. Die Materialisierung in dieser Phase bietet höhere Zuverlässigkeit und Verfügbarkeit.

Erkunden der Featurematerialisierung

Auf der Benutzeroberfläche für Materialisierungsaufträge werden der Datenmaterialisierungsstatus in Offline- und Onlinematerialisierungsspeichern sowie eine Liste der Materialisierungsaufträge angezeigt.

Ein Screenshot zeigt die Benutzeroberfläche der Materialisierungsjobs für das Feature Set.

In einem Featurefenster:

  • Das Zeitreihendiagramm oben zeigt die Datenintervalle im Featurefenster mit dem Materialisierungsstatus für Offline- und Onlinespeicher.
  • Die Auftragsliste unten zeigt alle Materialisierungsaufträge mit Verarbeitungsfenstern, die sich mit dem ausgewählten Featurefenster überlappen.

Datenmaterialisierungsstatus und Datenintervall

Ein Datenintervall ist ein Zeitfenster, in dem der Featuresatz seine Featurewerte in einem der folgenden Status materialisiert:

  • „Complete“ (Vollständig) bzw. Grün: erfolgreiche Datenmaterialisierung
  • „Incomplete“ (Unvollständig) bzw. Rot: mindestens ein abgebrochener oder fehlerhafter Materialisierungsauftrag für dieses Datenintervall
  • „Pending“ (Ausstehend) bzw. Blau: Für dieses Datenintervall wird derzeit mindestens ein Materialisierungsauftrag ausgeführt.
  • „None“ (Keine) bzw. Grau: Für dieses Datenintervall wurde kein Materialisierungsauftrag übermittelt.

Wenn Materialisierungsaufträge für den Featuresatz ausgeführt werden, erstellen sie Datenintervalle oder führen diese zusammen:

  • Wenn zwei Datenintervalle auf der Zeitachse fortlaufend sind und denselben Datenmaterialisierungsstatus aufweisen, werden sie zu einem Datenintervall.
  • Wenn in einem Datenintervall ein Teil der Featuredaten erneut materialisiert wird und dieser Teil einen anderen Datenmaterialisierungsstatus erhält, wird dieses Datenintervall in mehrere Datenintervalle aufgeteilt.

Wenn ein Benutzer ein Funktionsfenster auswählt, werden in diesem Fenster möglicherweise mehrere Datenintervalle mit unterschiedlichen Datenmaterialisierungsstatus angezeigt. Darüber hinaus können mehrere Datenintervalle, die auf der Zeitachse getrennt sind, ebenfalls angezeigt werden. Die frühere Momentaufnahme hat zum Beispiel 16 Datenintervalle für das definierte Featurefenster im Offlinematerialisierungsspeicher.

Ein Featuresatz kann jeweils höchstens 2.000 Datenintervalle enthalten. Sobald ein Featuresatz diesen Grenzwert erreicht, können keine weiteren Materialisierungsaufträge ausgeführt werden. Die Benutzer müssen dann eine neue Version des Feature Sets erstellen, bei der die Materialisierung aktiviert ist. Für die neue Featuresatzversion materialisieren Sie die Features im Offline- und Onlinespeicher von Grund auf neu.

Um den Grenzwert zu vermeiden, sollten Benutzer*innen vorab Abgleichsaufträge ausführen, um die Lücken in den Datenintervallen zu füllen. Dadurch werden die Datenintervalle zusammengeführt, und die Gesamtanzahl wird reduziert.

Datenmaterialisierungsaufträge

Von Bedeutung

Materialisierungsjobs für den Feature Store verwenden Apache Spark. Azure Synapse Runtime für Apache Spark 3.3 hat am 31. März 2025 das Ende des Supports erreicht. Verwenden Sie Apache Spark 3.4 oder höher für Ihre Materialisierungsaufträge.

Bevor Sie einen Datenmaterialisierungsauftrag ausführen, aktivieren Sie die Offline- und/oder Onlinedatenmaterialisierungen auf Featuresatzebene.

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

Sie können die Datenmaterialisierungs-Jobs senden als:

  • einen Backfill-Job - einen manuell gesendeten Batch-Materialisierungsjob
  • einen wiederkehrenden Materialisierungsjob - einen automatischen Materialisierungsjob ausgelöst in einem geplanten Intervall.

Warnung

Daten, die bereits in der Offline- und/oder Onlinematerialisierung materialisiert wurden, können nicht mehr verwendet werden, wenn die Offline- und/oder Onlinedatenmaterialisierung auf Featuresatzebene deaktiviert ist. Der Status der Datenmaterialisierung im Offline- und/oder Onlinematerialisierungsspeicher wird auf None zurückgesetzt.

Sie können Abgleichsaufträge anhand der folgenden Kriterien übermitteln:

  • Status der Datenmaterialisierung
  • Auftrags-ID eines abgebrochenen oder fehlerhaften Materialisierungsauftrags

Datenabgleich nach Datenmaterialisierungsstatus

Benutzer können eine Backfill-Anfrage mit dem folgenden senden:

  • Liste der Statuswerte für die Datenmaterialisierung – „Incomplete“, „Complete“ oder „None“
  • Featurefenster (optional)
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)

Nach der Übermittlung der Abgleichsanforderung wird für jedes Datenintervall mit einem übereinstimmenden Datenmaterialisierungsstatus („Incomplete“, „Complete“ oder „None“) ein neuer Materialisierungsauftrag erstellt. Darüber hinaus müssen die relevanten Datenintervalle in das definierte Featurefenster fallen. Wenn für ein Datenintervall der Datenmaterialisierungsstatus Pending lautet, wird für dieses Intervall kein Materialisierungsauftrag übermittelt.

Sowohl die Startzeit als auch die Endzeit des Featurefensters sind in der Abgleichsanforderung optional:

  • Wenn die Startzeit des Featurefensters nicht angegeben wird, wird die Startzeit als Startzeit des ersten Datenintervalls definiert, das nicht den Datenmaterialisierungsstatus None hat.
  • Wenn die Endzeit des Featurefensters nicht angegeben wird, wird die Endzeit als Endzeit des letzten Datenintervalls definiert, das nicht den Datenmaterialisierungsstatus None hat.

Hinweis

Wenn für einen Featuresatz keine Abgleichsaufträge oder wiederkehrenden Aufträge übermittelt wurden, muss der erste Abgleichsauftrag mit Start- und Endzeit für ein Featurefenster übermittelt werden.

In diesem Beispiel werden die folgenden aktuellen Statuswerte für Datenintervalle und -materialisierungen verwendet:

Startzeit Endzeit Status der Datenmaterialisierung
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

Diese Abgleichsanforderung hat die folgenden Werte:

  • Datenmaterialisierung data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
  • Beginn des Featurefensters = 2025-04-02T12:00:00.000
  • Ende des Featurefensters = 2025-04-04T12:00:00.000

Die folgenden Materialisierungsaufträge werden erstellt:

  • Auftrag 1: Featurefenster verarbeiten [2025-04-02T12:00:00.000, 2025-04-03T04:00:00.000]
  • Auftrag 2: Featurefenster verarbeiten [2025-04-04T04:00:00.000, 2025-04-04T12:00:00.000]

Wenn beide Aufträge erfolgreich abgeschlossen wurden, ändern sich die neuen Statuswerte für Datenintervalle und -materialisierungen wie folgt:

Startzeit Endzeit Status der Datenmaterialisierung
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

Ein neues Datenintervall wird am Tag 2025-04-02 erstellt, da die Hälfte dieses Tages jetzt einen anderen Materialisierungsstatus aufweist: Complete. Obwohl ein neuer Materialisierungsauftrag für die Hälfte des Tages 2025-04-04 ausgeführt wurde, wird das Datenintervall nicht geändert (geteilt), da sich der Materialisierungsstatus nicht geändert hat.

Wenn Benutzer*innen eine Abgleichsanforderung nur mit der Datenmaterialisierung data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete] senden, ohne die Start- und Endzeit des Featurefensters festzulegen, verwendet die Anforderung den Standardwert dieser Parameter, die weiter oben in diesem Abschnitt erläutert wurden, und erstellt die folgenden Aufträge:

  • Auftrag 1: Featurefenster verarbeiten [2025-04-02T04:00:00.000, 2025-04-03T04:00:00.000]
  • Auftrag 2: Featurefenster verarbeiten [2025-04-04T04:00:00.000, 2025-04-05T04:00:00.000]

Vergleichen Sie das Featurefenster für diese letzten Anforderungsaufträge und die Anforderungsaufträge im vorherigen Beispiel.

Datenabgleich nach Auftrags-ID

Eine Abgleichsanforderung kann auch mit einer Auftrags-ID erstellt werden. Dies ist eine praktische Möglichkeit, einen fehlerhaften oder abgebrochenen Materialisierungsauftrag zu wiederholen. Ermitteln Sie zunächst die Auftrags-ID des Auftrags, der wiederholt werden soll:

  • Navigieren Sie zur Benutzeroberfläche Materialisierungsaufträge des Featuresatzes.
  • Wählen Sie den Anzeigenamen eines bestimmten Auftrags mit dem StatuswertFailed (Fehlerhaft) aus.
  • Suchen Sie auf der Seite Übersicht des Auftrags den entsprechenden Auftrags-ID-Wert unter der Eigenschaft Name. Er beginnt mit 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)

Sie können einen Abgleichsauftrag mit der Auftrags-ID eines fehlerhaften oder abgebrochenen Materialisierungsauftrags übermitteln. In diesem Fall sollte der Datenstatus des Featurefensters für den ursprünglichen fehlerhaften oder abgebrochenen Materialisierungsauftrag Incomplete lauten. Wenn diese Bedingung nicht erfüllt ist, führt der Abgleichsauftrag nach ID zu einem Benutzerfehler. Beispielsweise kann ein fehlerhafter Materialisierungsauftrag den Wert 2025-04-01T04:00:00.000 für die Startzeit und den Wert 2025-04-09T04:00:00.000 für die Endzeit des Featurefensters aufweisen. Ein mit der ID dieses fehlerhaften Auftrags übermittelter Abgleichsauftrag ist nur erfolgreich, wenn überall im Zeitraum 2025-04-01T04:00:00.000 bis 2025-04-09T04:00:00.000 der Datenstatus Incomplete lautet.

Leitfaden und bewährte Methoden

Festlegen des richtigen source_delay-Werts und wiederkehrenden Zeitplans

Die source_delay-Eigenschaft für die Quelldaten gibt die Verzögerung zwischen der Erfassungszeit der verbrauchsfähigen Daten im Vergleich zur Ereigniszeit der Datengenerierung an. Ein Ereignis, das zum Zeitpunkt t stattfindet, landet aufgrund der Latenz in der Upstreamdatenpipeline zum Zeitpunkt t + x in der Quelldatentabelle. Der x-Wert entspricht der Quellverzögerung.

Abbildung, die das source_delay-Konzept zeigt.

Für die ordnungsgemäße Einrichtung berücksichtigt der Zeitplan für wiederkehrende Materialisierungsaufträge die Latenz. Der wiederkehrende Auftrag erzeugt Features für das Zeitfenster [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"

In diesem Beispiel wird ein täglicher Auftrag definiert, der um 4 Uhr morgens ausgelöst wird, beginnend am 15.04.2025. Abhängig von der Einstellung source_delay erzeugt der Job, der am 05.01.2025 ausgeführt wird, Funktionen in unterschiedlichen Zeitfenstern:

  • source_delay=0 erzeugt Featurewerte im Fenster [2025-04-30T04:00:00.000, 2025-05-01T04:00:00.000).
  • source_delay=2hours erzeugt Featurewerte im Fenster [2025-04-30T02:00:00.000, 2025-05-01T02:00:00.000).
  • source_delay=4hours erzeugt Featurewerte im Fenster [2025-04-30T00:00:00.000, 2025-05-01T00:00:00.000).

Aktualisieren des Materialisierungsspeichers

Bevor Sie einen Online Feature Store oder einen Offline Materialization Store aktualisieren, sollte bei allen Funktionen in diesem Store die entsprechende Offline- und/oder Online-Materialisierung deaktiviert sein. Der Aktualisierungsvorgang schlägt als UserError fehl, wenn einige Funktionen die Materialisierung aktiviert haben.

Der Materialisierungsstatus der Daten im Offline- und/oder Onlinematerialisierungsspeicher wird zurückgesetzt, wenn die Offline- und/oder Onlinematerialisierung für einen Featuresatz deaktiviert ist. Durch die Zurücksetzung werden materialisierte Daten unbrauchbar. Wenn die Offline- und/oder Onlinematerialisierung für den Featuresatz später aktiviert wird, müssen Benutzer*innen ihre Materialisierungsaufträge erneut übermitteln.

Onlinedaten-Bootstrap

Der Onlinedaten-Bootstrap kann nur verwendet werden, wenn übermittelte Offlinematerialisierungsaufträge erfolgreich abgeschlossen wurden. Wenn für einen Featuresatz zunächst nur die Offlinematerialisierung aktiviert wurde und später die Onlinematerialisierung aktiviert wird, gilt Folgendes:

  • Der Standardstatus für die Datenmaterialisierung der Daten im Onlinespeicher lautet None.

  • Wenn ein Onlinematerialisierungsauftrag übermittelt wird, werden die Daten mit dem Materialisierungsstatus Complete im Offlinespeicher zur Berechnung der Onlinefeatures verwendet. Dies wird als Onlinedaten-Bootstrapping bezeichnet. Das Onlinedaten-Bootstrapping spart Rechenzeit, da bereits berechnete Features wiederverwendet werden, die im Offlinematerialisierungsspeicher gespeichert sind. In dieser Tabelle werden die Statuswerte für Offline- und Onlinedaten in Datenintervallen zusammengefasst, die zu Onlinedaten-Bootstrapping führen würden:

    Startzeit Endzeit Status von Offlinedaten Status von Onlinedaten Onlinedaten-Bootstrap
    2025-04-01T04:00:00.000 2025-04-02T04:00:00.000 None None Nein
    2025-04-02T04:00:00.000 2025-04-03T04:00:00.000 Incomplete None Nein
    2025-04-03T04:00:00.000 2025-04-04T04:00:00.000 Pending None Kein Materialisierungsauftrag übermittelt
    2025-04-04T04:00:00.000 2025-04-05T04:00:00.000 Complete None Ja

Beheben von Quelldatenfehlern und Änderungen

In einigen Szenarien werden die Quelldaten aufgrund eines Fehlers oder aus anderen Gründen nach der Datenmaterialisierung geändert. In diesen Fällen können durch eine Aktualisierung der Featuredaten für ein bestimmtes Featurefenster in mehreren Datenintervallen fehlerhafte oder veraltete Featuredaten aufgelöst werden. Übermitteln Sie die Materialisierungsanforderung für die Auflösung fehlerhafter oder veralteter Featuredaten im Featurefenster für die Datenstatus None, Complete und Incomplete.

Sie sollten eine Materialisierungsanforderung für eine Featuredatenaktualisierung nur übermitteln, wenn das Featurefenster kein Datenintervall mit dem Datenstatus Pending enthält.

Füllen der Lücken

Im Materialisierungsspeicher können die materialisierten Daten aus folgenden Gründen Lücken aufweisen:

  • Für das Featurefenster wurde nie ein Materialisierungsauftrag übermittelt.
  • Für das Featurefenster übermittelte Materialisierungsaufträge sind fehlgeschlagen oder wurden abgebrochen.

Übermitteln Sie in diesem Fall eine Materialisierungsanforderung im Featurefenster für data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete], damit die Lücken gefüllt werden können. Eine einzelne Materialisierungsanforderung füllt alle Lücken im Featurefenster.

Nächste Schritte