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.
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 Statuswert Fehlgeschlagenen 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.
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.