Kurz 3: Povolení rekurentní materializace a spuštění odvozování dávek
Tato série kurzů ukazuje, jak funkce bezproblémově integrují všechny fáze životního cyklu strojového učení: vytváření prototypů, trénování a zprovoznění.
První kurz ukázal, jak vytvořit specifikaci sady funkcí s vlastními transformacemi. Pak ukázal, jak tuto sadu funkcí použít ke generování trénovacích dat, povolení materializace a provedení backfillu. Druhý kurz ukázal, jak povolit materializaci a provést backfill. Ukázala také, jak experimentovat s funkcemi, jako způsob, jak zlepšit výkon modelu.
Tento kurz vysvětluje následující postupy:
- Povolte rekurentní materializaci pro
transactions
sadu funkcí. - Spusťte kanál dávkového odvozování v registrovaném modelu.
Požadavky
Než budete pokračovat v tomto kurzu, nezapomeňte dokončit první a druhé kurzy v řadě.
Nastavení
Nakonfigurujte poznámkový blok Spark služby Azure Machine Learning.
Pokud chcete tento kurz spustit, můžete vytvořit nový poznámkový blok a spustit pokyny krok za krokem. Můžete také otevřít a spustit existující poznámkový blok s názvem 3. Povolte opakující se materializaci a spusťte dávkové odvozování. Tento poznámkový blok a všechny poznámkové bloky v této řadě najdete v adresáři featurestore_sample/notebooks . Můžete zvolit sdk_only nebo sdk_and_cli. Nechte si tento kurz otevřený a projděte si ho, kde najdete odkazy na dokumentaci a další vysvětlení.
V rozevíracím seznamu Výpočetní prostředky v horní navigační nabídce vyberte bezserverové výpočetní prostředí Spark bez serveru ve službě Azure Machine Learning Bezserverový Spark.
Konfigurace relace:
- Na horním stavovém řádku vyberte Konfigurovat relaci .
- Vyberte kartu Balíčky Pythonu.
- Vyberte Nahrát soubor conda.
azureml-examples/sdk/python/featurestore-sample/project/env/online.yml
Vyberte soubor z místního počítače.- Volitelně můžete zvýšit časový limit relace (dobu nečinnosti), abyste se vyhnuli častým opakovaným spuštěním požadavků.
Spusťte relaci Sparku.
# run this cell to start the spark session (any code block will start the session ). This can take around 10 mins. print("start spark session")
Nastavte kořenový adresář pro ukázky.
import os # please update the dir to ./Users/<your_user_alias> (or any custom directory you uploaded the samples to). # You can find the name from the directory structure in the left nav root_dir = "./Users/<your_user_alias>/featurestore_sample" if os.path.isdir(root_dir): print("The folder exists.") else: print("The folder does not exist. Please create or fix the path")
Nastavte rozhraní příkazového řádku.
Nevztahuje se.
Inicializuje klienta CRUD pracovního prostoru projektu (vytvoření, čtení, aktualizace a odstranění).
Poznámkový blok kurzu běží z tohoto aktuálního pracovního prostoru.
### Initialize the MLClient of this project workspace import os from azure.ai.ml import MLClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential project_ws_sub_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] project_ws_rg = os.environ["AZUREML_ARM_RESOURCEGROUP"] project_ws_name = os.environ["AZUREML_ARM_WORKSPACE_NAME"] # connect to the project workspace ws_client = MLClient( AzureMLOnBehalfOfCredential(), project_ws_sub_id, project_ws_rg, project_ws_name )
Inicializace proměnných úložiště funkcí
Pokud chcete odrážet to, co jste vytvořili v prvním kurzu, nezapomeňte hodnotu aktualizovat
featurestore_name
.from azure.ai.ml import MLClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential # feature store featurestore_name = ( "<FEATURESTORE_NAME>" # use the same name from part #1 of the tutorial ) featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"] # feature store ml client fs_client = MLClient( AzureMLOnBehalfOfCredential(), featurestore_subscription_id, featurestore_resource_group_name, featurestore_name, )
Inicializace klienta sady SDK úložiště funkcí
# feature store client from azureml.featurestore import FeatureStoreClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential featurestore = FeatureStoreClient( credential=AzureMLOnBehalfOfCredential(), subscription_id=featurestore_subscription_id, resource_group_name=featurestore_resource_group_name, name=featurestore_name, )
Povolení opakující se materializace u sady funkcí transakcí
V druhém kurzu jste povolili materializaci a provedli obnovení transactions
v sadě funkcí. Backfill je jednorázová operace na vyžádání, která vypočítá a umístí hodnoty funkcí do úložiště materializace.
Pokud chcete zpracovat odvozování modelu v produkčním prostředí, můžete chtít nastavit opakující se materializační úlohy, aby bylo úložiště materializace aktuální. Tyto úlohy běží v uživatelsky definovaných plánech. Plán opakujících se úloh funguje tímto způsobem:
Intervalové a frekvenční hodnoty definují okno. Například následující hodnoty definují tříhodinový interval:
interval
=3
frequency
=Hour
První okno začíná hodnotou definovanou
start_time
vRecurrenceTrigger
a tak dále.První opakující se úloha se odešle na začátku dalšího okna po uplynutí doby aktualizace.
Pozdější opakované úlohy se odesílají v každém okně po první úloze.
Jak je vysvětleno v předchozích kurzech, po materializaci dat (obnovení nebo opakované materializace) používá načítání funkcí materializovaná data ve výchozím nastavení.
from datetime import datetime
from azure.ai.ml.entities import RecurrenceTrigger
transactions_fset_config = fs_client.feature_sets.get(name="transactions", version="1")
# create a schedule that runs the materialization job every 3 hours
transactions_fset_config.materialization_settings.schedule = RecurrenceTrigger(
interval=3, frequency="Hour", start_time=datetime(2023, 4, 15, 0, 4, 10, 0)
)
fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)
print(fs_poller.result())
(Volitelné) Uložení souboru YAML pro prostředek sady funkcí
Aktualizovaná nastavení slouží k uložení souboru YAML.
## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")
Spuštění kanálu dávkového odvozování
Dávkové odvození má tyto kroky:
Stejnou integrovanou součást načítání funkcí použijete pro načtení funkcí, kterou jste použili v kanálu trénování (probíraný třetím kurzem). Pro trénování kanálu jste zadali specifikaci načtení funkce jako vstup komponenty. V případě dávkového odvozování předáte zaregistrovaný model jako vstup. Komponenta hledá specifikaci načtení funkce v artefaktu modelu.
Kromě toho pro trénování měla data pozorování cílovou proměnnou. Data pozorování dávkového odvozování ale nemají cílovou proměnnou. Krok načtení funkce spojí data pozorování s funkcemi a vypíše data pro dávkové odvozování.
Kanál používá vstupní data dávkového odvozování z předchozího kroku, spustí na modelu odvozování a připojí předpovězenou hodnotu jako výstup.
Poznámka:
V tomto příkladu použijete úlohu pro dávkové odvozování. Ve službě Azure Machine Learning můžete také použít dávkové koncové body.
from azure.ai.ml import load_job # will be used later # set the batch inference pipeline path batch_inference_pipeline_path = ( root_dir + "/project/fraud_model/pipelines/batch_inference_pipeline.yaml" ) batch_inference_pipeline_definition = load_job(source=batch_inference_pipeline_path) # run the training pipeline batch_inference_pipeline_job = ws_client.jobs.create_or_update( batch_inference_pipeline_definition ) # stream the run logs ws_client.jobs.stream(batch_inference_pipeline_job.name)
Kontrola výstupních dat pro dávkové odvozování
V zobrazení kanálu:
Vyberte
inference_step
kartuoutputs
.Data
Zkopírujte hodnotu pole. Vypadá to jakoazureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1
.Data
Vložte hodnotu pole do následující buňky s samostatnými hodnotami názvu a verze. Poslední znak je verze, před kterou následuje dvojtečka (:
).predict_is_fraud
Všimněte si sloupce, který se vygeneroval kanál odvozování dávky.Ve výstupu kanálu pro odvozování dávky (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) systém vytvořil nesledovaný datový asset s identifikátorem GUID jako hodnotou názvu a
1
hodnotou verze. K tomu došlo, protože jste nezadaliname
hodnotyversion
nebo hodnoty prooutputs
.inference_step
V této buňce odvozujete a pak zobrazíte cestu k datům z prostředku.inf_data_output = ws_client.data.get( name="azureml_1c106662-aa5e-4354-b5f9-57c1b0fdb3a7_output_data_data_with_prediction", version="1", ) inf_output_df = spark.read.parquet(inf_data_output.path + "data/*.parquet") display(inf_output_df.head(5))
Vyčištění
Pátý kurz v řadě popisuje, jak odstranit prostředky.
Další kroky
- Seznamte se s koncepty úložiště funkcí a entitami nejvyšší úrovně v spravované uložiště funkcí.
- Seznamte se s identitou a řízením přístupu pro spravované uložiště funkcí.
- Prohlédnutí průvodce odstraňováním potíží pro spravované uložiště funkcí
- Umožňuje zobrazit referenční informace k YAML.