Delen via


Materialisatieconcepten van functieset

Materialisatie berekent functiewaarden van brongegevens. De begin- en eindtijdwaarden definiëren een functievenster. Een materialisatietaak berekent functies in dit functievenster. Gerealiseerde functiewaarden worden vervolgens opgeslagen in een online- of offline materialisatiearchief. Na de materialisatie van gegevens kunnen alle functiequery's deze waarden uit het materialisatiearchief gebruiken.

Zonder materialisatie past een offlinefunctiesetquery de transformaties toe op de bron on-the-fly om de functies te berekenen voordat de query de waarden retourneert. Dit proces werkt goed in de prototypefase. Voor trainings- en deductiebewerkingen moeten in een productieomgeving echter functies worden gerealiseerd vóór de training of deductie. Materialisatie in die fase biedt meer betrouwbaarheid en beschikbaarheid.

Functie-materialisatie verkennen

De gebruikersinterface voor materialisatietaken toont de status van gegevens materialisatie in offline- en online materialisatiearchieven en een lijst met materialisatietaken.

Schermopname van de gebruikersinterface van de functieset materialisatietaken.

In een functievenster:

  • De tijdreeksgrafiek bovenaan toont de gegevensintervallen die in het functievenster vallen, met de materialisatiestatus, voor zowel offline als online winkels.
  • In de takenlijst onderaan ziet u alle materialisatietaken met verwerkingsvensters die overlappen met het geselecteerde functievenster.

Status en gegevensinterval voor gegevens materialisatie

Een gegevensinterval is een tijdvenster waarin de functieset de functiewaarden materialiseert tot een van deze statussen:

  • Voltooien (groen) - geslaagde gegevensver materialisatie
  • Onvolledig (rood) - een of meer geannuleerde of mislukte materialisatietaken voor dit gegevensinterval
  • In behandeling (blauw): een of meer materialisatietaken voor dit gegevensinterval worden uitgevoerd
  • Geen (grijs) - er is geen materialisatietaak verzonden voor dit gegevensinterval

Wanneer materialisatietaken worden uitgevoerd voor de functieset, maken of samenvoegen ze gegevensintervallen:

  • Wanneer twee gegevensintervallen continu op de tijdlijn staan en ze dezelfde gegevens materialisatiestatus hebben, worden ze één gegevensinterval
  • Wanneer in een gegevensinterval een deel van de functiegegevens opnieuw wordt gerealiseerd en dat gedeelte een andere status van gegevens materialisatie krijgt, wordt dat gegevensinterval gesplitst in meerdere gegevensintervallen

Wanneer gebruikers een functievenster selecteren, zien ze mogelijk meerdere gegevensintervallen in dat venster met verschillende statussen van gegevens materialisatie. Ze kunnen meerdere gegevensintervallen zien die niet aan elkaar zijn gekoppeld op de tijdlijn. De eerdere momentopname heeft bijvoorbeeld 16 gegevensintervallen voor het gedefinieerde functievenster in het offline materialisatiearchief.

Op elk gewenst moment kan een functieset maximaal 2000 gegevensintervallen bevatten. Zodra een functieset die limiet bereikt, kunnen er geen materialisatietaken meer worden uitgevoerd. Gebruikers moeten vervolgens een nieuwe versie van de functieset maken waarvoor materialisatie is ingeschakeld. Voor de nieuwe versie van de functieset materialiseert u de functies in de offline- en online winkels helemaal zelf.

Om de limiet te voorkomen, moeten gebruikers vooraf backfilltaken uitvoeren om de hiaten in de gegevensintervallen te vullen. Hiermee worden de gegevensintervallen samengevoegd en wordt het totale aantal verminderd.

Gegevens materialisatietaken

Voordat u een gegevens materialisatietaak uitvoert, schakelt u de offline- en/of onlinegegevens materialisaties in op het niveau van de functieset.

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

U kunt de gegevens materialisatietaken verzenden als:

Waarschuwing

Gegevens die al zijn gerealiseerd in de offline- en/of online materialisatie, kunnen niet meer worden gebruikt als offline- en/of onlinegegevens materialisatie is uitgeschakeld op het niveau van de functieset. De status van gegevens materialisatie in offline en/of online materialisatiearchief wordt opnieuw ingesteld op None.

U kunt backfilltaken verzenden door:

  • Status van gegevens materialisatie
  • De taak-id van een geannuleerde of mislukte materialisatietaak

Gegevensbackfill op gegevens materialisatiestatus

Gebruiker kan een backfill-aanvraag indienen met:

  • Een lijst met statuswaarden voor gegevensver materialisatie - Onvolledig, Voltooid of Geen
  • Een functievenster (optioneel)
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)

Na het indienen van de backfill-aanvraag wordt er een nieuwe materialisatietaak gemaakt voor elk gegevensinterval met een overeenkomende gegevens materialisatiestatus (Onvolledig, Voltooid of Geen). Daarnaast moeten de relevante gegevensintervallen binnen het gedefinieerde functievenster vallen. Als de gegevens materialisatiestatus voor een gegevensinterval isPending, wordt er geen materialisatietaak voor dat interval verzonden.

Zowel de begin- als eindtijd van het functievenster zijn optioneel in de backfill-aanvraag:

  • Als de begintijd van het functievenster niet is opgegeven, wordt de begintijd gedefinieerd als de begintijd van het eerste gegevensinterval dat geen gegevens materialisatiestatus heeft.None
  • Als de eindtijd van het functievenster niet is opgegeven, wordt de eindtijd gedefinieerd als de eindtijd van het laatste gegevensinterval dat geen status van gegevens materialisatie heeft None.

Notitie

Als er geen backfill- of terugkerende taken zijn ingediend voor een functieset, moet de eerste backfilltaak worden ingediend met de begin- en eindtijd van een functievenster .

In dit voorbeeld zijn deze huidige gegevensinterval- en materialisatiestatuswaarden:

Begintijd Eindtijd Status van gegevens materialisatie
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

Deze backfill-aanvraag heeft de volgende waarden:

  • Gegevens materialisatie data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
  • Start van het onderdeelvenster = 2023-04-02T12:00:00.000
  • Einde van functievenster = 2023-04-04T12:00:00.000

Hiermee worden deze materialisatietaken gemaakt:

  • Taak 1: venster procesfunctie [2023-04-02T12:00:00.000, 2023-04-03T04:00:00.000)
  • Taak 2: venster procesfunctie [2023-04-04T04:00:00.000, 2023-04-04T12:00:00.000)

Als beide taken zijn voltooid, worden het nieuwe gegevensinterval en de materialisatiestatuswaarden:

Begintijd Eindtijd Status van gegevens materialisatie
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

Er wordt een nieuw gegevensinterval gemaakt op dag 2023-04-02, omdat de helft van die dag nu een andere materialisatiestatus heeft: Complete. Hoewel er een nieuwe materialisatietaak is uitgevoerd voor de helft van de dag 2023-04-04, wordt het gegevensinterval niet gewijzigd (gesplitst) omdat de materialisatiestatus niet is gewijzigd.

Als de gebruiker een backfill-aanvraag doet met alleen gegevens materialisatie data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete], zonder het begin- en eindtijd van het functievenster in te stellen, gebruikt de aanvraag de standaardwaarde van deze parameters die eerder in deze sectie zijn genoemd en maakt deze taken:

  • Taak 1: venster procesfunctie [2023-04-02T04:00:00.000, 2023-04-03T04:00:00.000)
  • Taak 2: venster procesfunctie [2023-04-04T04:00:00.000, 2023-04-05T04:00:00.000)

Vergelijk het functievenster voor deze meest recente aanvraagtaken en de aanvraagtaken die in het vorige voorbeeld worden weergegeven.

Gegevensbackfill op taak-id

Een backfill-aanvraag kan ook worden gemaakt met een taak-id. Dit is een handige manier om een mislukte of geannuleerde materialisatietaak opnieuw uit te voeren. Zoek eerst de taak-id van de taak om het opnieuw te proberen:

  • Navigeer naar de gebruikersinterface voor materialisatietaken van de functieset
  • Selecteer de weergavenaam van een specifieke taak met de waarde Mislukte status
  • Zoek op de pagina Taakoverzicht de relevante waarde voor de taak-id onder de eigenschap Naam. Deze begint met 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)

U kunt een backfill-taak indienen met de taak-id van een mislukte of geannuleerde materialisatietaak. In dit geval moet de status van de functievenstergegevens voor de oorspronkelijke mislukte of geannuleerde materialisatietaak zijn Incomplete. Als niet aan deze voorwaarde wordt voldaan, resulteert de backfill-taak op id in een gebruikersfout. Een mislukte materialisatietaak kan bijvoorbeeld een begintijdwaarde voor het functievenster en een eindtijdwaarde 2023-04-09T04:00:00.000 2023-04-01T04:00:00.000 hebben. Een backfill-taak die is verzonden met behulp van de id van deze mislukte taak, slaagt alleen als de gegevensstatus overal, in het tijdsbereik 2023-04-01T04:00:00.000 tot 2023-04-09T04:00:00.000, is Incomplete.

Richtlijnen en aanbevolen procedures

Stel de juiste source_delay en terugkerende planning in

De source_delay eigenschap voor de brongegevens geeft de vertraging aan tussen de aanschaftijd van verbruiksklare gegevens, vergeleken met de gebeurtenistijd van het genereren van gegevens. Een gebeurtenis die op tijd t in de brongegevenstabel op het moment t + xis opgetreden, vanwege de latentie van de upstream-gegevenspijplijn. De x waarde is de bronvertraging.

Afbeelding van het source_delay concept.

Voor de juiste configuratie zijn de terugkerende materialisatietaakplanningsrekeningen voor latentie. De terugkerende taak produceert functies voor het [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay) tijdvenster.

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

In dit voorbeeld wordt een dagelijkse taak gedefinieerd die om 4:00 uur wordt geactiveerd, beginnend op 15-4-2023. Afhankelijk van de source_delay instelling produceert de taakuitvoering van 1-5-2023 functies in verschillende tijdvensters:

  • source_delay=0 produceert functiewaarden in het venster [2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
  • source_delay=2hours produceert functiewaarden in het venster [2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
  • source_delay=4hours produceert functiewaarden in het venster [2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)

Materialisatiearchief bijwerken

Voordat u een functiearchief online of offline materialisatiearchief bijwerkt, moeten alle onderdelensets in die functieopslag de bijbehorende offline- en/of online materialisatie hebben uitgeschakeld. De updatebewerking mislukt alsof UserErrorsommige onderdelensets materialisatie hebben ingeschakeld.

De materialisatiestatus van de gegevens in het offline- en/of online materialisatiearchief wordt opnieuw ingesteld als offline en/of online materialisatie is uitgeschakeld voor een functieset. Het opnieuw instellen geeft gerealiseerde gegevens onbruikbaar weer. Als offline en/of online materialisatie op de functieset later is ingeschakeld, moeten gebruikers hun materialisatietaken opnieuw indienen.

Online data bootstrap

Online data bootstrap is alleen van toepassing als verzonden offline materialisatietaken zijn voltooid. Als alleen offline materialisatie in eerste instantie is ingeschakeld voor een functieset en online materialisatie later is ingeschakeld, dan:

  • De standaardstatus van gegevens materialisatie van de gegevens in de online winkel is None

  • Wanneer een online materialisatietaak wordt verzonden, worden de gegevens met Complete de materialisatiestatus in de offlinestore gebruikt om onlinefuncties te berekenen. Dit wordt online gegevens bootstrapping genoemd. Online gegevens bootstrapping bespaart rekenkosten omdat deze al berekende functies hergebruikt die zijn opgeslagen in het offline materialisatiearchief Deze tabel bevat een overzicht van de offline- en onlinegegevensstatuswaarden in intervallen die leiden tot online gegevensbootstrapping:

    Begintijd Eindtijd Status van offlinegegevens Onlinegegevensstatus Online data bootstrap
    2023-04-01T04:00:00.000 2023-04-02T04:00:00.000 None None Nee
    2023-04-02T04:00:00.000 2023-04-03T04:00:00.000 Incomplete None Nr.
    2023-04-03T04:00:00.000 2023-04-04T04:00:00.000 Pending None Er is geen materialisatietaak verzonden
    2023-04-04T04:00:00.000 2023-04-05T04:00:00.000 Complete None Ja

Fouten en wijzigingen in brongegevens oplossen

In sommige scenario's worden de brongegevens gewijzigd vanwege een fout of andere redenen, na de materialisatie van de gegevens. In deze gevallen kan een functiegegevensvernieuwing voor een specifiek functievenster met meerdere gegevensintervallen foutieve of verouderde functiegegevens oplossen. Dien de materialisatieaanvraag in voor onjuiste of verouderde functiegegevensomzetting in het functievenster, voor de gegevensstatussen None, Completeen Incomplete.

U moet alleen een materialisatieaanvraag indienen voor het vernieuwen van functiegegevens wanneer het functievenster geen gegevensinterval met een Pending gegevensstatus bevat.

Hiaten vullen

In het materialisatiearchief kunnen de gerealiseerde gegevens hiaten hebben omdat:

  • een materialisatietaak is nooit verzonden voor het functievenster
  • materialisatietaken die zijn verzonden voor het functievenster zijn mislukt of zijn geannuleerd

Dien in dit geval een materialisatieaanvraag in het functievenster in om data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete] de hiaten te vullen. Met één materialisatieaanvraag worden alle hiaten in het functievenster opgevuld.

Volgende stappen