Udostępnij za pośrednictwem


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.

Zrzut ekranu przedstawiający interfejs użytkownika zadań materializacji zestawu funkcji.

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:

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 Nonematerializacji 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 Nonematerializacji 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.000wartość , 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.

Ilustracja przedstawiająca koncepcję source_delay.

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 UserErrorniektó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 Nonedanych , Completei 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.

Następne kroki