Delen via


Zelfstudie 3: Terugkerende materialisatie inschakelen en batchdeductie uitvoeren

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

In de eerste zelfstudie hebt u gezien hoe u een specificatie voor een functieset maakt met aangepaste transformaties en vervolgens die functieset gebruikt om trainingsgegevens te genereren, materialisatie in te schakelen en een backfill uit te voeren. In de tweede zelfstudie hebt u laten zien 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 batchdeductiepijplijn uit op het geregistreerde model.

Vereisten

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

Instellingen

  1. Configureer het Azure Machine Learning Spark-notebook.

    Als u deze zelfstudie wilt uitvoeren, kunt u een nieuw notebook maken en de instructies stap voor stap uitvoeren. U kunt ook het bestaande notitieblok met de naam 3 openen en uitvoeren. Schakel terugkerende materialisatie in en voer batchdeductie uit. U vindt dat notitieblok en alle notitieblokken in deze reeks 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. Selecteer in de vervolgkeuzelijst Compute in het bovenste navigatievenster Serverloze Spark Compute onder Serverloze Spark van Azure Machine Learning.

    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 eventueel de time-out van de sessie (niet-actieve tijd) om frequente vereisten opnieuw uit te voeren.
  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 hoofdmap 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 het functiearchief.

    Zorg ervoor dat u de featurestore_name waarde bijwerkt om aan te geven wat u in de eerste zelfstudie hebt gemaakt.

    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 functiewaarden in het materialisatiearchief worden berekend en geplaatst.

Als u deductie van het model in productie wilt verwerken, kunt u terugkerende materialisatietaken instellen om het materialisatiearchief 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, worden de gerealiseerde gegevens standaard gebruikt nadat gegevens zijn gerealiseerd (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) Het YAML-bestand opslaan voor de onderdelensetasset

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 pijplijn voor batchdeductie uitvoeren

De batchdeductie heeft deze stappen:

  1. U gebruikt hetzelfde ingebouwde onderdeel voor het ophalen van functies voor het ophalen van functies die u in de trainingspijplijn hebt gebruikt (behandeld in de derde zelfstudie). Voor pijplijntraining hebt u een specificatie voor het ophalen van functies opgegeven als onderdeelinvoer. Voor batchdeductie geeft u het geregistreerde model door als invoer. 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 batchdeductie hebben echter niet de doelvariabele. De stap voor het ophalen van functies voegt de observatiegegevens samen met de functies en voert de gegevens uit voor batchdeductie.

  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 batchdeductie. 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 batchdeductie controleren

In de pijplijnweergave:

  1. Selecteer inference_step 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 batchdeductiepijplijn is gegenereerd.

    In de batchdeductiepijplijn (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml)-uitvoer, omdat u hiervoor geen waarden hebt opgegeven of version waarvoor u geen waarden outputsinference_stephebt opgegevenname, heeft het systeem een niet-bijgehouden gegevensasset gemaakt met een GUID als de naamwaarde en 1 als de versiewaarde. 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