Sdílet prostřednictvím


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 a pak pomocí této sady funkcí vygenerovat trénovací data, povolit materializaci a provést obnovení. 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í

  1. Nakonfigurujte poznámkový blok Spark Učení azure machine.

    Pokud chcete tento kurz spustit, můžete vytvořit nový poznámkový blok a krok za krokem spustit pokyny. 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í.

    1. V rozevíracím seznamu Výpočetní prostředky v horní navigační nabídce vyberte bezserverové výpočetní prostředí Spark v části Azure Machine Učení Bezserverový Spark.

    2. Konfigurace relace:

      1. Na horním stavovém řádku vyberte Konfigurovat relaci .
      2. Vyberte kartu Balíčky Pythonu.
      3. Vyberte Nahrát soubor conda.
      4. azureml-examples/sdk/python/featurestore-sample/project/env/online.yml Vyberte soubor z místního počítače.
      5. Volitelně můžete zvýšit časový limit relace (dobu nečinnosti), abyste se vyhnuli častým opakovaným spuštěním požadavků.
  2. 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")
  3. 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")
  4. Nastavte rozhraní příkazového řádku.

    Nevztahuje se.


  1. 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
    )
  2. Inicializace proměnných úložiště funkcí

    Nezapomeňte hodnotu aktualizovat featurestore_name tak, aby odrážela to, co jste vytvořili v prvním kurzu.

    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,
    )
  3. 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 v RecurrenceTriggera 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:

  1. 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í.

  2. 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 Učení 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:

  1. Vyberte inference_step kartu outputs .

  2. Data Zkopírujte hodnotu pole. Vypadá to jako azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1.

  3. 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 (:).

  4. predict_is_fraud Všimněte si sloupce, který se vygeneroval kanál odvozování dávky.

    V kanálu dávkového odvozování (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) se zobrazí výstupy, protože jste neposkytli nebo version nezadali name hodnoty pro outputsinference_step, systém vytvořil nesledovaný datový asset s identifikátorem GUID jako hodnotou názvu a 1 jako hodnotu verze. 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