Materialiseringsbegrepp för funktionsuppsättningar
Materialisering beräknar funktionsvärden från källdata. Start- och sluttidsvärden definierar ett funktionsfönster. Ett materialiseringsjobb beräknar funktioner i det här funktionsfönstret. Materialiserade funktionsvärden lagras sedan i ett materialiseringslager online eller offline. Efter datamaterialisering kan alla funktionsfrågor sedan använda dessa värden från materialiseringslagret.
Utan materialisering tillämpar en funktionsuppsättning offlinefråga transformeringarna på källan i farten för att beräkna funktionerna innan frågan returnerar värdena. Den här processen fungerar bra i prototypfasen. För utbildnings- och slutsatsdragningsåtgärder i en produktionsmiljö bör dock funktioner materialiseras före träning eller slutsatsdragning. Materialisering i det skedet ger bättre tillförlitlighet och tillgänglighet.
Utforska funktionsmaterialisering
Användargränssnittet för materialiseringsjobb visar datamaterialiseringsstatus i materialiseringslager offline och online samt en lista över materialiseringsjobb.
I ett funktionsfönster:
- Tidsseriediagrammet längst upp visar de dataintervall som ingår i funktionsfönstret , med materialiseringsstatus, för både offline- och onlinebutiker.
- Jobblistan längst ned visar alla materialiseringsjobb med bearbetningsfönster som överlappar det valda funktionsfönstret.
Datamaterialiseringsstatus och dataintervall
Ett dataintervall är ett tidsfönster där funktionsuppsättningen materialiserar sina funktionsvärden till någon av dessa statusar:
- Komplett (grön) – lyckad datamaterialisering
- Ofullständig (röd) – ett eller flera avbrutna eller misslyckade materialiseringsjobb för det här dataintervallet
- Väntar (blå) – ett eller flera materialiseringsjobb för det här dataintervallet pågår
- Ingen (grå) – inget materialiseringsjobb skickades för det här dataintervallet
När materialiseringsjobb körs för funktionsuppsättningen skapar eller sammanfogar de dataintervall:
- När två dataintervall är kontinuerliga på tidslinjen och de har samma datamaterialiseringsstatus blir de ett dataintervall
- I ett dataintervall, när en del av funktionsdata materialiseras igen och den delen får en annan datamaterialiseringsstatus, delas dataintervallet upp i flera dataintervall
När användare väljer ett funktionsfönster kan de se flera dataintervall i det fönstret med olika status för datamaterialisering. De kan se flera dataintervall som är uppdelade på tidslinjen. Den tidigare ögonblicksbilden har till exempel 16 dataintervall för det definierade funktionsfönstret i materialiseringsarkivet offline.
Vid en viss tidpunkt kan en funktionsuppsättning ha högst 2 000 dataintervall. När en funktionsuppsättning når den gränsen kan inga fler materialiseringsjobb köras. Användarna måste sedan skapa en ny funktionsuppsättningsversion med materialisering aktiverad. För den nya versionen av funktionsuppsättningen materialiserar du funktionerna i offline- och onlinebutikerna från grunden.
För att undvika gränsen bör användarna köra återfyllnadsjobb i förväg för att fylla luckorna i dataintervallen. Detta sammanfogar dataintervallen och minskar det totala antalet.
Datamaterialiseringsjobb
Innan du kör ett datamaterialiseringsjobb aktiverar du datamaterialiseringarna offline och/eller online på funktionsuppsättningsnivån.
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())
Du kan skicka datamaterialiseringsjobben som en:
- återfyllnadsjobb – ett manuellt skickat batchmaterialiseringsjobb
- recurrent materialiseringsjobb – ett automatiskt materialiseringsjobb som utlöses under ett schemalagt intervall.
Varning
Data som redan materialiserats i materialiseringen offline och/eller online kan inte längre användas om datamaterialisering offline och/eller online inaktiveras på funktionsuppsättningsnivå. Datamaterialiseringsstatusen i materialiseringsarkivet offline och/eller online återställs till None
.
Du kan skicka återfyllnadsjobb genom att:
- Status för datamaterialisering
- Jobb-ID för ett avbrutet eller misslyckat materialiseringsjobb
Datapåfyllning efter datamaterialiseringsstatus
Användaren kan skicka en begäran om återfyllnad med:
- En lista över statusvärden för datamaterialisering – Ofullständig, Slutförd eller Ingen
- Ett funktionsfönster (valfritt)
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)
När en begäran om återfyllnad har skickats skapas ett nytt materialiseringsjobb för varje dataintervall som har matchande datamaterialiseringsstatus (Ofullständig, Slutförd eller Ingen). Dessutom måste relevanta dataintervall ligga inom det definierade funktionsfönstret. Om datamaterialiseringsstatusen är Pending
för ett dataintervall skickas inget materialiseringsjobb för det intervallet.
Både starttid och sluttid för funktionsfönstret är valfria i begäran om återfyllnad:
- Om starttiden för funktionsfönstret inte anges definieras starttiden som starttiden för det första dataintervallet som inte har datamaterialiseringsstatusen
None
. - Om sluttiden för funktionsfönstret inte anges definieras sluttiden som sluttiden för det senaste dataintervallet som inte har datamaterialiseringsstatusen
None
.
Kommentar
Om inga återfyllnads- eller återkommande jobb har skickats för en funktionsuppsättning måste det första återfyllnadsjobbet skickas med starttid och sluttid för funktionsfönstret .
Det här exemplet har dessa aktuella värden för dataintervall och materialiseringsstatus:
Starttid | Sluttid | Status för datamaterialisering |
---|---|---|
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 |
Den här begäran om återfyllnad har följande värden:
- Datamaterialisering
data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
- Start av funktionsfönster =
2023-04-02T12:00:00.000
- Funktionsfönstrets slut =
2023-04-04T12:00:00.000
Det skapar dessa materialiseringsjobb:
- Jobb 1: processfunktionsfönstret [
2023-04-02T12:00:00.000
,2023-04-03T04:00:00.000
) - Jobb 2: processfunktionsfönstret [
2023-04-04T04:00:00.000
,2023-04-04T12:00:00.000
)
Om båda jobben har slutförts blir de nya värdena för dataintervall och materialiseringsstatus:
Starttid | Sluttid | Status för datamaterialisering |
---|---|---|
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 |
Ett nytt dataintervall skapas dag 2023-04-02, eftersom hälften av den dagen nu har en annan materialiseringsstatus: Complete
. Även om ett nytt materialiseringsjobb kördes under halva dagen 2023-04-04 ändras inte dataintervallet (delas) eftersom materialiseringsstatusen inte ändrades.
Om användaren gör en återfyllnadsbegäran med endast datamaterialisering data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
, utan att ange start- och sluttid för funktionsfönstret, använder begäran standardvärdet för de parametrar som nämns tidigare i det här avsnittet och skapar följande jobb:
- Jobb 1: processfunktionsfönstret [
2023-04-02T04:00:00.000
,2023-04-03T04:00:00.000
) - Jobb 2: processfunktionsfönstret [
2023-04-04T04:00:00.000
,2023-04-05T04:00:00.000
)
Jämför funktionsfönstret för de senaste jobben för begäran och de begärandejobb som visas i föregående exempel.
Datapåfyllning efter jobb-ID
En begäran om återfyllnad kan också skapas med ett jobb-ID. Det här är ett praktiskt sätt att försöka igen med ett misslyckat eller avbrutet materialiseringsjobb. Leta först reda på jobb-ID:t för jobbet som ska försöka igen:
- Navigera till funktionsuppsättningen Användargränssnitt för materialiseringsjobb
- Välj visningsnamnet för ett visst jobb som har värdet Misslyckad status
- På jobböversiktssidan letar du upp det relevanta jobb-ID-värdet under egenskapen Namn. Det börjar med
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)
Du kan skicka ett återfyllnadsjobb med jobb-ID:t för ett misslyckat eller avbrutet materialiseringsjobb. I det här fallet ska funktionsfönstrets datastatus för det ursprungliga misslyckade eller avbrutna materialiseringsjobbet vara Incomplete
. Om det här villkoret inte uppfylls resulterar återfyllnadsjobbet efter ID i ett användarfel. Ett misslyckat materialiseringsjobb kan till exempel ha ett starttidsvärde 2023-04-01T04:00:00.000
för funktionsfönstret och ett sluttidsvärde2023-04-09T04:00:00.000
. Ett återfyllnadsjobb som skickas med ID:t för det här misslyckade jobbet lyckas bara om datastatusen överallt, i tidsintervallet 2023-04-01T04:00:00.000
till 2023-04-09T04:00:00.000
, är Incomplete
.
Vägledning och metodtips
Ange rätt source_delay
och återkommande schema
Egenskapen source_delay
för källdata anger fördröjningen mellan anskaffningstiden för förbrukningsklara data jämfört med händelsetiden för datagenerering. En händelse som inträffade vid tidpunkten t
hamnar i källdatatabellen vid den tidpunkten t + x
på grund av den överordnade datapipelinens svarstid. Värdet x
är källfördröjningen.
För korrekt konfiguration står det återkommande materialiseringsjobbschemat för svarstid. Det återkommande jobbet genererar funktioner för tidsfönstret [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"
I det här exemplet definieras ett dagligt jobb som utlöses kl. 04.00, med början den 15.00.2023. Beroende på inställningen source_delay
genererar jobbkörningen för 2023-05-1-2023 funktioner i olika tidsfönster:
source_delay=0
skapar funktionsvärden i fönstret[2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
source_delay=2hours
skapar funktionsvärden i fönstret[2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
source_delay=4hours
skapar funktionsvärden i fönstret[2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)
Uppdatera materialiseringsarkiv
Innan du uppdaterar en funktionsbutik online eller offline materialiseringslager bör alla funktionsuppsättningar i funktionsarkivet ha motsvarande offline- och/eller onlinematerialisering inaktiverad. Uppdateringsåtgärden misslyckas som UserError
, om vissa funktionsuppsättningar har materialisering aktiverat.
Materialiseringsstatusen för data i materialiseringsarkivet offline och/eller online återställs om offline- och/eller onlinematerialisering inaktiveras på en funktionsuppsättning. Återställningen återger materialiserade data som inte går att använda. Om offline- och/eller onlinematerialisering på funktionsuppsättningen aktiveras senare måste användarna skicka sina materialiseringsjobb på nytt.
Onlinedata bootstrap
Onlinedata bootstrap är endast tillämpligt om inskickade offline materialiseringsjobb har slutförts. Om endast offlinematerialisering ursprungligen aktiverades för en funktionsuppsättning, och onlinematerialisering aktiveras senare, så:
Standardstatusen för datamaterialisering för data i onlinelagret är
None
När ett onlinematerialiseringsjobb skickas används data med
Complete
materialiseringsstatus i offlinearkivet för att beräkna onlinefunktioner. Detta kallas för onlinedatastövlar. Online-datastövlar sparar beräkningskostnaden eftersom den återanvänder redan beräknade funktioner som sparats i materialiseringsarkivet offline Den här tabellen sammanfattar värdena för offline- och onlinedatastatus i dataintervall som skulle resultera i onlinedatastövlar:Starttid Sluttid Status för offlinedata Onlinedatastatus Onlinedata bootstrap 2023-04-01T04:00:00.000
2023-04-02T04:00:00.000
None
None
Nej 2023-04-02T04:00:00.000
2023-04-03T04:00:00.000
Incomplete
None
Nej 2023-04-03T04:00:00.000
2023-04-04T04:00:00.000
Pending
None
Inget materialiseringsjobb har skickats 2023-04-04T04:00:00.000
2023-04-05T04:00:00.000
Complete
None
Ja
Åtgärda källdatafel och ändringar
Vissa scenarier ändrar källdata på grund av ett fel eller andra orsaker efter datamaterialiseringen. I dessa fall kan en funktionsdatauppdatering, för ett specifikt funktionsfönster över flera dataintervall, lösa felaktiga eller inaktuella funktionsdata. Skicka materialiseringsbegäran för felaktig eller inaktuell funktionsdatamatchning i funktionsfönstret, för datastatusarna None
, Complete
och Incomplete
.
Du bör skicka en materialiseringsbegäran för en funktionsdatauppdatering endast när funktionsfönstret inte innehåller något dataintervall med Pending
datastatus.
Fylla luckorna
I materialiseringslagret kan materialiserade data ha luckor eftersom:
- ett materialiseringsjobb skickades aldrig för funktionsfönstret
- materialiseringsjobb som skickats för funktionsfönstret misslyckades eller avbröts
I det här fallet skickar du en materialiseringsbegäran i funktionsfönstret för data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete]
att fylla luckorna. En enda materialiseringsbegäran fyller alla luckor i funktionsfönstret.