Share via


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.

Screenshot showing the feature set materialization jobs user interface.

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 Benutzer*innen ein Featurefenster auswählen, werden u. U. mehrere Datenintervalle in diesem Fenster mit unterschiedlichen Datenmaterialisierungsstatus angezeigt. Möglicherweise werden mehrere Datenintervalle angezeigt, die auf der Zeitachse nicht zusammenhängend sind. 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. Benutzer*innen müssen dann eine neue Featuresatzversion mit aktivierter Materialisierung erstellen. 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

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 Datenmaterialisierungsaufträge wie folgt übermitteln:

  • als Abgleichsauftrag – ein manuell übermittelter Batchmaterialisierungsauftrag
  • als wiederkehrender Materialisierungsauftrag – ein automatischer Materialisierungsauftrag, der in einem geplanten Intervall ausgelöst wird

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*innen können eine Abgleichsanforderung mit Folgendem übermitteln:

  • 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
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

Diese Abgleichsanforderung hat die folgenden Werte:

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

Die folgenden Materialisierungsaufträge werden erstellt:

  • Auftrag 1: Featurefenster verarbeiten [2023-04-02T12:00:00.000, 2023-04-03T04:00:00.000]
  • Auftrag 2: Featurefenster verarbeiten [2023-04-04T04:00:00.000, 2023-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
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

Ein neues Datenintervall wird am Tag 2023-04-02 erstellt, da die Hälfte dieses Tages jetzt einen anderen Materialisierungsstatus hat: Complete. Obwohl ein neuer Materialisierungsauftrag für den halben Tag 2023-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 [2023-04-02T04:00:00.000, 2023-04-03T04:00:00.000]
  • Auftrag 2: Featurefenster verarbeiten [2023-04-04T04:00:00.000, 2023-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 2023-04-01T04:00:00.000 für die Startzeit und den Wert 2023-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 2023-04-01T04:00:00.000 bis 2023-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.

Illustration that shows the source_delay concept.

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: "2023-04-15T04:00:00.000"

In diesem Beispiel wird ein täglicher Auftrag definiert, der ab dem 15.04.2023 um 4:00 Uhr ausgelöst wird. Je nach source_delay-Einstellung erzeugt die Auftragsausführung vom 01.05.2023 Features in unterschiedlichen Zeitfenstern:

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

Aktualisieren des Materialisierungsspeichers

Bevor Sie einen Online- oder Offlinematerialisierungsspeicher aktualisieren, muss für alle Featuresätze in diesem Featurespeicher die entsprechende Offline- und/oder Onlinematerialisierung deaktiviert werden. Der Aktualisierungsvorgang schlägt mit UserError fehl, wenn für einige Featuresätze die Materialisierung aktiviert ist.

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
    2023-04-01T04:00:00.000 2023-04-02T04:00:00.000 None None Nein
    2023-04-02T04:00:00.000 2023-04-03T04:00:00.000 Incomplete None Nein
    2023-04-03T04:00:00.000 2023-04-04T04:00:00.000 Pending None Kein Materialisierungsauftrag übermittelt
    2023-04-04T04:00:00.000 2023-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