Sdílet prostřednictvím


Koncepty materializace sady funkcí

Materializace vypočítá hodnoty funkcí ze zdrojových dat. Hodnoty počátečního a koncového času definují okno funkce. Úloha materializace vypočítá funkce v tomto okně funkce. Materializované hodnoty funkcí se pak ukládají do online nebo offline úložiště materializace. Po materializaci dat mohou všechny dotazy na funkce použít tyto hodnoty z úložiště materializace.

Bez materializace použije offline dotaz sady funkcí transformace na zdroj za běhu a vypočítá funkce před tím, než dotaz vrátí hodnoty. Tento proces funguje dobře ve fázi vytváření prototypů. U operací trénování a odvozování by se ale funkce v produkčním prostředí měly materializovat před trénováním nebo odvozováním. Materializace v této fázi poskytuje větší spolehlivost a dostupnost.

Zkoumání materializace funkcí

Uživatelské rozhraní úloh materializace zobrazuje stav materializace dat v offline a online úložištích materializace a seznam úloh materializace.

Snímek obrazovky znázorňující uživatelské rozhraní materializačních úloh sady funkcí

V okně funkce:

  • Graf časových řad v horní části zobrazuje intervaly dat, které spadají do okna funkce se stavem materializace pro offline i online obchody.
  • V seznamu úloh dole se zobrazí všechny úlohy materializace s okny zpracování, která se překrývají s vybraným oknem funkce.

Stav materializace dat a interval dat

Interval dat je časové okno, ve kterém sada funkcí materializuje hodnoty funkcí na jeden z těchto stavů:

  • Dokončeno (zelená) – úspěšná materializace dat
  • Neúplná (červená) – jedna nebo více zrušených nebo neúspěšných úloh materializace pro tento interval dat
  • Čekající (modrá) – probíhá jedna nebo více úloh materializace pro tento interval dat.
  • Žádná (šedá) – pro tento interval dat nebyla odeslána žádná úloha materializace

Při spouštění úloh materializace pro sadu funkcí vytvářejí nebo slučují intervaly dat:

  • Když jsou na časové ose souvislé dva intervaly dat a mají stejný stav materializace dat, stanou se jedním intervalem dat.
  • V datovém intervalu, když se část dat funkce znovu materializuje a tato část získá jiný stav materializace dat, tento interval dat se rozdělí do několika intervalů dat.

Když uživatelé vyberou okno funkce, můžou v tomto okně zobrazit více intervalů dat s různými stavy materializace dat. Může se zobrazit několik intervalů dat, které jsou na časové ose oddělené. Například předchozí snímek má 16 datových intervalů pro definované okno funkce v offline úložišti materializace.

V každém okamžiku může sada funkcí mít maximálně 2 000 datových intervalů. Jakmile sada funkcí dosáhne daného limitu, nebudou možné spustit žádné další úlohy materializace. Uživatelé pak musí vytvořit novou verzi sady funkcí s povolenou materializací. Pro novou verzi sady funkcí materializujte funkce v offline a online obchodech úplně od začátku.

Aby se zabránilo limitu, měli by uživatelé spouštět úlohy backfillu předem, aby vyplnili mezery v datových intervalech. Tím se sloučí intervaly dat a sníží se celkový počet.

Úlohy materializace dat

Před spuštěním úlohy materializace dat povolte offline nebo online materializace dat na úrovni sady funkcí.

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

Úlohy materializace dat můžete odeslat jako:

  • úloha backfill – ručně odeslaná dávková materializační úloha
  • opakující se materializační úloha – úloha automatické materializace aktivovaná v naplánovaném intervalu.

Upozorňující

Data, která jsou už materializovaná v offline nebo online materializaci, už nebudou použitelná, pokud je na úrovni sady funkcí zakázaná offline nebo online materializace dat. Stav materializace dat v offline a/nebo online úložišti materializace bude resetovat na None.

Úlohy backfillu můžete odesílat pomocí:

  • Stav materializace dat
  • ID úlohy zrušené nebo neúspěšné materializace

Obnovení dat podle stavu materializace dat

Uživatel může odeslat žádost o obnovení:

  • Seznam hodnot stavu materializace dat – Neúplné, Dokončené nebo Žádné
  • Okno funkce (volitelné)
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 odeslání žádosti o obnovení se vytvoří nová úloha materializace pro každý interval dat, který má odpovídající stav materializace dat (Neúplné, Dokončeno nebo Žádné). Kromě toho musí příslušné intervaly dat spadat do definovaného okna funkce. Pokud je Pending stav materializace dat pro interval dat, není pro tento interval odeslána žádná úloha materializace.

Počáteční i koncový čas okna funkce jsou v žádosti o obnovení volitelné:

  • Pokud není zadaný čas spuštění okna funkce, je čas spuštění definován jako počáteční čas prvního intervalu dat, který nemá stav Nonematerializace dat .
  • Pokud čas ukončení okna funkce není zadaný, koncový čas se definuje jako koncový čas posledního intervalu dat, který nemá stav Nonematerializace dat .

Poznámka:

Pokud nebyly pro sadu funkcí odeslány žádné úlohy obnovení nebo opakované úlohy, musí být první úloha obnovení odeslána s počátečním a koncovým časem okna funkce.

Tento příklad obsahuje tyto aktuální hodnoty intervalu dat a materializace:

Počáteční čas Koncový čas Stav materializace dat
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

Tento požadavek na obnovení má tyto hodnoty:

  • Materializace dat data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
  • Začátek okna funkce = 2023-04-02T12:00:00.000
  • Konec okna funkce = 2023-04-04T12:00:00.000

Vytvoří tyto úlohy materializace:

  • Úloha 1: okno funkce procesu [2023-04-02T12:00:00.000, 2023-04-03T04:00:00.000)
  • Úloha 2: okno funkce procesu [2023-04-04T04:00:00.000, 2023-04-04T12:00:00.000)

Pokud se obě úlohy úspěšně dokončí, stane se nový interval dat a hodnoty stavu materializace:

Počáteční čas Koncový čas Stav materializace dat
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 nový interval dat je vytvořen dne 2023-04-02, protože polovina dne má nyní jiný materializační stav: Complete. I když v polovině dne 2023-04-04-04 běžela nová úloha materializace, interval dat se nezmění (rozdělí), protože se nezměnil stav materializace.

Pokud uživatel vytvoří žádost o obnovení pouze s materializací data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]dat bez nastavení počátečního a koncového času okna funkce, použije požadavek výchozí hodnotu těchto parametrů uvedených výše v této části a vytvoří tyto úlohy:

  • Úloha 1: okno funkce procesu [2023-04-02T04:00:00.000, 2023-04-03T04:00:00.000)
  • Úloha 2: okno funkce procesu [2023-04-04T04:00:00.000, 2023-04-05T04:00:00.000)

Porovnejte okno funkce pro tyto nejnovější úlohy požadavků a úlohy požadavku zobrazené v předchozím příkladu.

Obnovení dat podle ID úlohy

Žádost o obnovení je také možné vytvořit s ID úlohy. Jedná se o pohodlný způsob, jak opakovat neúspěšnou nebo zrušenou úlohu materializace. Nejprve vyhledejte ID úlohy, kterou chcete zopakovat:

  • Přejděte do uživatelského rozhraní materializačních úloh sady funkcí .
  • Vyberte zobrazovaný název konkrétní úlohy, která má hodnotu Stavu selhání.
  • Na stránce Přehled úlohy vyhledejte odpovídající hodnotu ID úlohy pod vlastností Název začíná Featurestore-Materialization- na .

poller = fs_client.feature_sets.begin_backfill(
    name="transactions",
    version=version,
    job_id="<JOB_ID_OF_FAILED_MATERIALIZATION_JOB>",
)
print(poller.result().job_ids)

Úlohu backfillu můžete odeslat s ID úlohy, která selhala nebo zrušila materializaci. V tomto případě by měl být Incompletestav dat okna funkce pro původní neúspěšnou nebo zrušenou úlohu materializace . Pokud tato podmínka není splněná, výsledkem úlohy obnovení podle ID je chyba uživatele. Například neúspěšná úloha materializace může mít hodnotu čas 2023-04-01T04:00:00.000 spuštění okna funkce a hodnotu koncového času2023-04-09T04:00:00.000. Úloha zpětného vyplňování odeslaná pomocí ID této neúspěšné úlohy bude úspěšná pouze v případě, že stav dat všude, v časovém rozsahu 2023-04-01T04:00:00.000 do 2023-04-09T04:00:00.000, je Incomplete.

Doprovodné materiály a osvědčené postupy

Nastavení správného a opakujícího source_delay se plánu

Vlastnost source_delay pro zdrojová data označuje zpoždění mezi časem pořízení dat připravených k využití v porovnání s časem události generování dat. Událost, která se stala v čase t v tabulce zdrojových dat v době t + x, kvůli latenci nadřazeného datového kanálu. Hodnota x je zpoždění zdroje.

Obrázek znázorňující koncept source_delay

Pro správné nastavení představuje plán opakujících se materializačních úloh latenci. Rekurentní úloha vytváří funkce pro [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay) časové období.

materialization_settings:
  schedule:
    type: recurrence
    interval: 1
    frequency: Day
    start_time: "2023-04-15T04:00:00.000"

Tento příklad definuje každodenní úlohu, která se aktivuje na 4:00, počínaje 15. 4. 2023. V závislosti na source_delay nastavení generuje úloha 1. 5. 2023 funkce v různých časových oknech:

  • source_delay=0 vytvoří hodnoty funkcí v okně. [2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
  • source_delay=2hours vytvoří hodnoty funkcí v okně. [2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
  • source_delay=4hours vytvoří hodnoty funkcí v okně. [2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)

Aktualizace úložiště materializace

Před aktualizací online nebo offline úložiště materializace funkcí by všechny sady funkcí v daném úložišti funkcí měly mít odpovídající offline nebo online materializaci zakázané. Operace aktualizace selže, protože UserErrorpokud některé sady funkcí mají povolenou materializaci.

Stav materializace dat v offline nebo online úložišti materializace se resetuje, pokud je pro sadu funkcí zakázaná offline nebo online materializace. Reset vykreslí materializovaná data nepoužitelná. Pokud je v sadě funkcí povolená offline nebo online materializace, musí uživatelé znovu odeslat své úlohy materializace.

Online spuštění dat

Online data bootstrap je použitelná pouze v případě, že se úspěšně dokončily odeslané offline úlohy materializace. Pokud byla pro sadu funkcí původně povolena pouze offline materializace a online materializace je povolená později, pak:

  • Výchozí stav materializace dat v online úložišti je None

  • Při odeslání online úlohy materializace se data se stavem Complete materializace v offline úložišti používají k výpočtu online funkcí. Tomu se říká spouštění online dat. Online spouštění dat šetří výpočetní náklady, protože opakovaně používá už vypočítané funkce uložené v offline úložišti materializace. Tato tabulka shrnuje hodnoty stavu offline a online dat v datových intervalech, které by vedlo k online spuštění dat:

    Počáteční čas Koncový čas Stav offline dat Stav online dat Online spuštění dat
    2023-04-01T04:00:00.000 2023-04-02T04:00:00.000 None None No
    2023-04-02T04:00:00.000 2023-04-03T04:00:00.000 Incomplete None Ne
    2023-04-03T04:00:00.000 2023-04-04T04:00:00.000 Pending None Nebyla odeslána žádná úloha materializace.
    2023-04-04T04:00:00.000 2023-04-05T04:00:00.000 Complete None Ano

Řešení chyb a úprav zdrojových dat

Některé scénáře upravují zdrojová data z důvodu chyby nebo jiných důvodů po materializaci dat. V těchto případech může aktualizace dat funkcí v určitém okně funkce v několika intervalech dat vyřešit chybná nebo zastaralá data funkcí. Odešlete žádost o materializaci pro chybné nebo zastaralé řešení dat o funkcích v okně funkce, pro stavy Nonedat , Completea Incomplete.

Žádost o materializaci pro aktualizaci dat funkce byste měli odeslat pouze v případě, že okno funkce neobsahuje žádný interval dat se stavem Pending dat.

Vyplnění mezer

V úložišti materializace můžou materializovaná data obsahovat mezery, protože:

  • Úloha materializace nebyla nikdy odeslána pro okno funkce.
  • úlohy materializace odeslané pro okno funkce selhaly nebo byly zrušeny.

V takovém případě odešlete v okně data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete] funkce žádost o materializaci, aby se vyplnily mezery. Jeden požadavek materializace vyplní všechny mezery v okně funkce.

Další kroky