Pojęcia materializacji zestawu funkcji
Materializacja oblicza wartości funkcji na podstawie danych źródłowych. Wartości czasu rozpoczęcia i godziny zakończenia definiują okno funkcji. Zadanie materializacji oblicza funkcje w tym oknie funkcji. Zmaterializowane wartości funkcji są następnie przechowywane w magazynie materializacji online lub offline. Po materializacji danych wszystkie zapytania funkcji mogą następnie używać tych wartości z magazynu materializacji.
Bez materializacji zapytanie funkcji w trybie offline stosuje przekształcenia do źródła na bieżąco, aby obliczyć funkcje przed zwróceniem wartości przez zapytanie. Ten proces działa dobrze w fazie tworzenia prototypów. Jednak w przypadku operacji trenowania i wnioskowania w środowisku produkcyjnym funkcje powinny być zmaterializowane przed trenowaniem lub wnioskowaniem. Materializacja na tym etapie zapewnia większą niezawodność i dostępność.
Eksplorowanie materializacji funkcji
Interfejs użytkownika zadań materializacji przedstawia stan materializacji danych w magazynach materializacji w trybie offline i online oraz listę zadań materializacji.
W oknie funkcji:
- Wykres szeregów czasowych u góry przedstawia interwały danych wchodzące w okno funkcji ze stanem materializacji zarówno w sklepach offline, jak i online.
- Lista zadań w dolnej części zawiera wszystkie zadania materializacji z oknami przetwarzania, które nakładają się na wybrane okno funkcji.
Stan materializacji danych i interwał danych
Interwał danych to przedział czasu, w którym zestaw funkcji zmaterializuje jego wartości funkcji na jeden z następujących stanów:
- Ukończono (zielony) — pomyślne materializacja danych
- Niekompletne (czerwone) — co najmniej jedno anulowane lub zakończone niepowodzeniem zadania materializacji dla tego interwału danych
- Oczekujące (niebieskie) — co najmniej jedno zadania materializacji dla tego interwału danych są w toku
- Brak (szary) — nie przesłano zadania materializacji dla tego interwału danych
Gdy zadania materializacji są uruchamiane dla zestawu funkcji, tworzą lub scalają interwały danych:
- Gdy dwie interwały danych są ciągłe na osi czasu i mają ten sam stan materializacji danych, stają się jednym interwałem danych
- W interwale danych, gdy część danych funkcji zostanie ponownie zmaterializowana, a ta część pobiera inny stan materializacji danych, interwał danych jest podzielony na wiele interwałów danych
Po wybraniu okna funkcji użytkownicy mogą zobaczyć wiele interwałów danych w tym oknie z różnymi stanami materializacji danych. Mogą one widzieć wiele interwałów danych, które są rozłączne na osi czasu. Na przykład wcześniejsza migawka ma 16 interwałów danych dla zdefiniowanego okna funkcji w magazynie materializacji offline.
W danym momencie zestaw funkcji może mieć co najwyżej 2000 interwałów danych. Gdy zestaw funkcji osiągnie ten limit, nie można uruchomić więcej zadań materializacji. Użytkownicy muszą następnie utworzyć nową wersję zestawu funkcji z włączoną materializacją. W przypadku nowej wersji zestawu funkcji zmaterializuj funkcje w sklepach offline i online od podstaw.
Aby uniknąć tego limitu, użytkownicy powinni uruchamiać zadania wypełniania z wyprzedzeniem, aby wypełnić luki w interwałach danych. Spowoduje to scalenie interwałów danych i zmniejszenie całkowitej liczby.
Zadania materializacji danych
Przed uruchomieniem zadania materializacji danych włącz materializacje danych w trybie offline i/lub online na poziomie zestawu funkcji.
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())
Zadania materializacji danych można przesyłać jako:
- zadanie wypełniania — ręcznie przesłane zadanie materializacji wsadowej
- cykliczne zadanie materializacji — zadanie automatycznego materializacji wyzwalane w zaplanowanym interwale.
Ostrzeżenie
Dane już zmaterializowane w trybie offline i/lub materializacji online nie będą już używane, jeśli materializacja danych w trybie offline i/lub online zostanie wyłączona na poziomie zestawu funkcji. Stan materializacji danych w magazynie materializacji w trybie offline i/lub w trybie online zostanie zresetowany do None
.
Zadania wypełniania można przesyłać, wykonując następujące czynności:
- Stan materializacji danych
- Identyfikator zadania anulowanego lub nieudanego zadania materializacji
Wypełnianie danych według stanu materializacji danych
Użytkownik może przesłać żądanie wypełniania za pomocą:
- Lista wartości stanu materializacji danych — Niekompletne, Ukończone lub Brak
- Okno funkcji (opcjonalne)
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)
Po przesłaniu żądania wypełniania jest tworzone nowe zadanie materializacji dla każdego interwału danych o zgodnym stanie materializacji danych (Niekompletne, Ukończone lub Brak). Ponadto odpowiednie interwały danych muszą należeć do zdefiniowanego okna funkcji. Jeśli stan materializacji danych dotyczy Pending
interwału danych, nie zostanie przesłane żadne zadanie materializacji dla tego interwału.
Zarówno godzina rozpoczęcia, jak i godzina zakończenia okna funkcji są opcjonalne w żądaniu wypełniania kopii zapasowych:
- Jeśli nie podano czasu rozpoczęcia okna funkcji, czas rozpoczęcia jest definiowany jako godzina rozpoczęcia pierwszego interwału danych, który nie ma stanu
None
materializacji danych . - Jeśli nie podano czasu zakończenia okna funkcji, czas zakończenia jest definiowany jako czas zakończenia ostatniego interwału danych, który nie ma stanu
None
materializacji danych .
Uwaga
Jeśli nie przesłano zadań wypełniania lub powtarzania dla zestawu funkcji, pierwsze zadanie wypełniania musi zostać przesłane z godziną rozpoczęcia okna funkcji i czasem zakończenia.
Ten przykład zawiera następujące bieżące wartości interwału danych i stanu materializacji:
Godzina rozpoczęcia | Godzina zakończenia | Stan materializacji danych |
---|---|---|
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 |
To żądanie wypełniania zawiera następujące wartości:
- Materializacja danych
data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
- Początek okna funkcji =
2023-04-02T12:00:00.000
- Koniec okna funkcji =
2023-04-04T12:00:00.000
Tworzy te zadania materializacji:
- Zadanie 1: okno funkcji procesu [
2023-04-02T12:00:00.000
,2023-04-03T04:00:00.000
) - Zadanie 2: okno funkcji procesu [
2023-04-04T04:00:00.000
,2023-04-04T12:00:00.000
)
Jeśli oba zadania zakończą się pomyślnie, nowe wartości interwału danych i stanu materializacji staną się następujące:
Godzina rozpoczęcia | Godzina zakończenia | Stan materializacji danych |
---|---|---|
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 |
Jeden nowy interwał danych jest tworzony w dniu 2023-04-02, ponieważ połowa tego dnia ma teraz inny stan materializacji: Complete
. Mimo że nowe zadanie materializacji trwało połowę dnia 2023-04-04, interwał danych nie został zmieniony (podzielony), ponieważ stan materializacji nie uległ zmianie.
Jeśli użytkownik wysyła żądanie wypełniania tylko z materializacją data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
danych bez ustawiania czasu rozpoczęcia i zakończenia okna funkcji, żądanie używa wartości domyślnej tych parametrów wymienionych wcześniej w tej sekcji i tworzy następujące zadania:
- Zadanie 1: okno funkcji procesu [
2023-04-02T04:00:00.000
,2023-04-03T04:00:00.000
) - Zadanie 2: okno funkcji procesu [
2023-04-04T04:00:00.000
,2023-04-05T04:00:00.000
)
Porównaj okno funkcji dla tych najnowszych zadań żądania oraz zadania żądania pokazane w poprzednim przykładzie.
Wypełnianie danych według identyfikatora zadania
Żądanie wypełniania można również utworzyć przy użyciu identyfikatora zadania. Jest to wygodny sposób ponawiania próby nieudanego lub anulowanego zadania materializacji. Najpierw znajdź identyfikator zadania, aby ponowić próbę:
- Przejdź do interfejsu użytkownika zadań materializacji zestawu funkcji
- Wybierz nazwę wyświetlaną określonego zadania z wartością Stan niepowodzenia
- Na stronie Przegląd zadania znajdź odpowiednią wartość identyfikatora zadania w obszarze właściwości Nazwa zaczyna się od
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)
Zadanie wypełniania można przesłać z identyfikatorem zadania, które zakończyło się niepowodzeniem lub anulowano zadanie materializacji. W takim przypadku stan danych okna funkcji dla oryginalnego zadania zmaterializowania nie powiodło się lub anulowano powinien mieć wartość Incomplete
. Jeśli ten warunek nie zostanie spełniony, zadanie wypełniania według identyfikatora spowoduje błąd użytkownika. Na przykład zadanie materializacji zakończone niepowodzeniem może mieć wartość czasu 2023-04-01T04:00:00.000
rozpoczęcia okna funkcji i wartość czasu 2023-04-09T04:00:00.000
zakończenia. Zadanie wypełniania przesłane przy użyciu identyfikatora tego zadania, które zakończyło się niepowodzeniem, powiedzie się tylko wtedy, gdy stan danych wszędzie, w zakresie 2023-04-01T04:00:00.000
czasu na 2023-04-09T04:00:00.000
wartość , to Incomplete
.
Wskazówki i najlepsze rozwiązania
Ustawianie odpowiedniego source_delay
i cyklicznego harmonogramu
Właściwość source_delay
danych źródłowych wskazuje opóźnienie między czasem pozyskiwania danych gotowych do użycia w porównaniu z czasem generowania danych zdarzeń. Zdarzenie, które wystąpiło w czasie t
, ląduje w tabeli danych źródłowych w czasie t + x
, ze względu na opóźnienie potoku danych nadrzędnych. Wartość x
jest opóźnieniem źródła.
W celu prawidłowego skonfigurowania cyklicznego harmonogramu zadań materializacji jest uwzględniane opóźnienie. Zadanie cykliczne tworzy funkcje dla przedziału [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay)
czasu.
materialization_settings:
schedule:
type: recurrence
interval: 1
frequency: Day
start_time: "2023-04-15T04:00:00.000"
W tym przykładzie zdefiniowano codzienne zadanie wyzwalane o godzinie 4:00, począwszy od 15.04.2023. W zależności source_delay
od ustawienia uruchomienie zadania 1.05.2023 generuje funkcje w różnych oknach czasowych:
source_delay=0
tworzy wartości funkcji w oknie[2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
source_delay=2hours
tworzy wartości funkcji w oknie[2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
source_delay=4hours
tworzy wartości funkcji w oknie[2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)
Aktualizowanie magazynu materializacji
Przed zaktualizowaniem magazynu funkcji w trybie online lub w trybie offline wszystkie zestawy funkcji w tym magazynie funkcji powinny mieć wyłączoną odpowiednią materializację w trybie offline i/lub online. Operacja aktualizacji kończy się niepowodzeniem, jeśli UserError
niektóre zestawy funkcji mają włączoną materializację.
Stan materializacji danych w magazynie materializacji offline i/lub online jest resetowany, jeśli w zestawie funkcji jest wyłączona materializacja offline i/lub online. Resetowanie renderuje zmaterializowane dane bezużyteczne. Jeśli materializacja w trybie offline i/lub online w zestawie funkcji zostanie włączona później, użytkownicy muszą ponownie przesłać swoje zadania materializacji.
Uruchamianie danych online
Uruchamianie danych online ma zastosowanie tylko w przypadku pomyślnego ukończenia przesłanych zadań materializacji w trybie offline. Jeśli tylko materializacja w trybie offline została początkowo włączona dla zestawu funkcji, a materializacja online jest włączona później, wówczas:
Domyślny stan materializacji danych w sklepie online to
None
Po przesłaniu zadania materializacji online dane ze stanem
Complete
materializacji w magazynie offline są używane do obliczania funkcji online. Jest to nazywane uruchamianiem danych online. Bootstrapping danych online oszczędza koszt obliczeniowy, ponieważ używa już obliczonych funkcji zapisanych w magazynie materializacji offline Ta tabela zawiera podsumowanie wartości stanu danych w trybie offline i online w interwałach danych, które mogłyby spowodować uruchomienie danych online:Godzina rozpoczęcia Godzina zakończenia Stan danych w trybie offline Stan danych online Uruchamianie danych online 2023-04-01T04:00:00.000
2023-04-02T04:00:00.000
None
None
Nie 2023-04-02T04:00:00.000
2023-04-03T04:00:00.000
Incomplete
None
Nie. 2023-04-03T04:00:00.000
2023-04-04T04:00:00.000
Pending
None
Nie przesłano zadania materializacji 2023-04-04T04:00:00.000
2023-04-05T04:00:00.000
Complete
None
Tak
Rozwiązywanie problemów z błędami i modyfikacjami danych źródłowych
Niektóre scenariusze modyfikują dane źródłowe z powodu błędu lub innych przyczyn po materializacji danych. W takich przypadkach odświeżanie danych funkcji dla określonego okna funkcji w wielu interwałach danych może rozwiązać błędne lub nieaktualne dane funkcji. Prześlij żądanie materializacji dotyczące błędnego lub nieaktualnego rozpoznawania danych funkcji w oknie funkcji dla stanów None
danych , Complete
i Incomplete
.
Należy przesłać żądanie materializacji odświeżania danych funkcji tylko wtedy, gdy okno funkcji nie zawiera żadnego interwału danych ze stanem Pending
danych.
Wypełnianie luk
W magazynie materializacji zmaterializowane dane mogą mieć luki, ponieważ:
- zadanie materializacji nigdy nie zostało przesłane dla okna funkcji
- zadania materializacji przesłane dla okna funkcji nie powiodły się lub zostały anulowane
W takim przypadku prześlij żądanie materializacji w oknie data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete]
funkcji, aby wypełnić luki. Pojedyncze żądanie materializacji wypełnia wszystkie luki w oknie funkcji.