Zelfstudie 3: Recurrente materialisatie inschakelen en batchinferentie uitvoeren

Deze reeks zelfstudies laat zien hoe functies naadloos alle fasen van de levenscyclus van machine learning integreren: prototypen, training en operationalisatie.

Belangrijk

Azure Cache voor Redis heeft zijn tijdlijn voor buitengebruikstelling aangekondigd voor alle SKU's. We raden u aan uw bestaande Azure Cache voor Redis exemplaren zo snel mogelijk te verplaatsen naar Azure Managed Redis.

Migratierichtlijnen:

Voor meer informatie over de buitengebruikstelling:

In de eerste zelfstudie hebt u gezien hoe u een specificatie voor een functieset maakt met aangepaste transformaties. Vervolgens werd getoond hoe u die functieset gebruikt om trainingsgegevens te genereren, materialisatie in te schakelen en een backfill uit te voeren. In de tweede handleiding zag u hoe u materialisatie inschakelt en een backfill uitvoert. Ook is te zien hoe u kunt experimenteren met functies, als een manier om de modelprestaties te verbeteren.

In deze zelfstudie wordt het volgende uitgelegd:

  • Schakel terugkerende materialisatie in voor de transactions functieset.
  • Voer een batch-inferentiepijplijn uit op het geregistreerde model.

Vereisten

Voordat u verdergaat met deze zelfstudie, moet u de eerste en tweede zelfstudies in de reeks voltooien.

Instellen

  1. Configureer het Azure Machine Learning Spark-notebook.

    Als u deze zelfstudie wilt uitvoeren, kunt u een nieuw notebook maken en de instructies stapsgewijs uitvoeren. U kunt ook het bestaande notitieblok met de naam 3 openen en uitvoeren. Schakel recurrente materialisatie in en voer batch-inferentie uit. Je kunt dat notitieblok en alle notitieblokken in deze reeks vinden in de map featurestore_sample/notebooks. U kunt sdk_only of sdk_and_cli kiezen. Houd deze zelfstudie open en raadpleeg deze voor documentatiekoppelingen en meer uitleg.

    1. In de vervolgkeuzelijst Compute in de bovenste navigatiebalk, selecteer Serverloze Spark Compute onder Azure Machine Learning Serverloze Spark.

    2. Configureer de sessie:

      1. Selecteer Sessie configureren in de bovenste statusbalk.
      2. Selecteer het tabblad Python-pakketten.
      3. Selecteer Conda-bestand uploaden.
      4. Selecteer het azureml-examples/sdk/python/featurestore-sample/project/env/online.yml bestand op uw lokale computer.
      5. Verhoog desgewenst de time-out van de sessie (niet-actieve tijd) om frequente herhalingen te voorkomen.
  2. Start de Spark-sessie.

    # 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. Stel de rootmap voor de voorbeelden in.

    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. Stel de CLI in.

    Niet van toepassing.


  1. Initialiseer de CRUD-client van de projectwerkruimte (maken, lezen, bijwerken en verwijderen).

    Het notebook voor de zelfstudie wordt uitgevoerd vanuit deze huidige werkruimte.

    ### 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. Initialiseer de variabelen voor de feature store.

    Als u wilt weergeven wat u in de eerste zelfstudie hebt gemaakt, moet u de featurestore_name waarde bijwerken.

    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. Initialiseer de SDK-client voor de functieopslag.

    # 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,
    )

Terugkerende materialisatie inschakelen voor de functieset voor transacties

In de tweede zelfstudie hebt u materialisatie ingeschakeld en backfill uitgevoerd op de transactions functieset. Backfill is een eenmalige bewerking op aanvraag waarmee kenmerkwaarden in de materialisatiestore worden berekend en geplaatst.

Als u inferentie van het model in productie wilt verwerken, kunt u periodieke materialisatietaken instellen om de materialisatiestore up-to-date te houden. Deze taken worden uitgevoerd volgens door de gebruiker gedefinieerde planningen. De terugkerende taakplanning werkt op deze manier:

  • Interval- en frequentiewaarden definiĆ«ren een venster. Met de volgende waarden wordt bijvoorbeeld een venster van drie uur gedefinieerd:

    • interval = 3
    • frequency = Hour
  • Het eerste venster begint bij de start_time waarde die is gedefinieerd in RecurrenceTrigger, enzovoort.

  • De eerste terugkerende taak wordt verzonden aan het begin van het volgende venster na de updatetijd.

  • Later terugkerende taken worden in elk venster na de eerste taak ingediend.

Zoals uitgelegd in eerdere zelfstudies, gebruikt de feature-opvraag standaard de gematerialiseerde gegevens nadat deze zijn gematerialiseerd (backfill of terugkerende materialisatie).

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

(Optioneel) Sla het YAML-bestand op voor de functiesetbron

U gebruikt de bijgewerkte instellingen om het YAML-bestand op te slaan.

## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")

De pipeline voor batchinferentie uitvoeren

De batch-inferentie heeft de volgende stappen:

  1. U gebruikt hetzelfde ingebouwde onderdeel voor het ophalen van kenmerken dat u in de trainingspijplijn hebt gebruikt (zoals behandeld in de derde handleiding). Voor pijplijntraining hebt u een specificatie voor het ophalen van functies opgegeven als onderdeelinvoer. Voor batch-inferentie geeft u het geregistreerde model door als input. Het onderdeel zoekt naar de specificatie voor het ophalen van functies in het modelartefact.

    Daarnaast hadden de observatiegegevens voor de training de doelvariabele. De observatiegegevens voor batch inferentie hebben de doelvariabele echter niet. De functie-ophaalstap voegt de observatiegegevens samen met de kenmerken en geeft de gegevens door voor batchinference.

  2. De pijplijn maakt gebruik van de invoergegevens voor batchdeductie uit de vorige stap, voert deductie uit op het model en voegt de voorspelde waarde toe als uitvoer.

    Notitie

    In dit voorbeeld gebruikt u een taak voor batch-inferentie. U kunt ook batch-eindpunten gebruiken in Azure Machine Learning.

    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)

De uitvoergegevens voor batch-inference controleren

In de pijplijnweergave:

  1. Selecteer inference_step op de outputs kaart.

  2. Kopieer de Data veldwaarde. Het ziet er ongeveer als volgt uit: azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1.

  3. Plak de Data veldwaarde in de volgende cel, met afzonderlijke naam- en versiewaarden. Het laatste teken is de versie, voorafgegaan door een dubbele punt (:).

  4. Let op de predict_is_fraud kolom die door de batch-inferentie-pijplijn is gegenereerd.

    In de batch-inferentie-pijplijn (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) heeft het systeem een niet-volgbare data asset gemaakt met een GUID als de naam en 1 als de versie. Dit is gebeurd omdat u geen waarden voor name of version hebt opgegeven voor outputs van inference_step. In deze cel leidt u af en geeft u vervolgens het gegevenspad van de asset weer.

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

Opschonen

In de vijfde zelfstudie in de reeks wordt beschreven hoe u de resources verwijdert.

Volgende stappen