Samouczek 1. Tworzenie i rejestrowanie zestawu funkcji przy użyciu magazyn zarządzanych funkcji

W tej serii samouczków pokazano, jak funkcje bezproblemowo integrują wszystkie fazy cyklu życia uczenia maszynowego: tworzenie prototypów, trenowanie i operacjonalizacja.

Usługa Azure Machine Edukacja magazyn zarządzanych funkcji umożliwia odnajdywanie, tworzenie i operacjonalizacja funkcji. Cykl życia uczenia maszynowego obejmuje fazę tworzenia prototypów, w której eksperymentujesz z różnymi funkcjami. Obejmuje to również fazę operacjonalizacji, w której są wdrażane modele i kroki wnioskowania wyszukują dane funkcji. Funkcje służą jako tkanka łącząca w cyklu życia uczenia maszynowego. Aby dowiedzieć się więcej na temat podstawowych pojęć dotyczących magazyn zarządzanych funkcji, zobacz Co to jest magazyn zarządzanych funkcji? i Omówienie jednostek najwyższego poziomu w magazyn zarządzanych funkcji.

W tym samouczku opisano sposób tworzenia specyfikacji zestawu funkcji za pomocą przekształceń niestandardowych. Następnie używa tego zestawu funkcji do generowania danych treningowych, włączania materializacji i wykonywania wypełniania. Materializacja oblicza wartości funkcji dla okna funkcji, a następnie przechowuje te wartości w magazynie materializacji. Wszystkie zapytania funkcji mogą następnie używać tych wartości z magazynu materializacji.

Bez materializacji zapytanie zestawu funkcji stosuje przekształcenia do źródła na bieżąco, aby obliczyć funkcje przed zwróceniem wartości. Ten proces dobrze sprawdza się w fazie tworzenia prototypów. Jednak w przypadku operacji trenowania i wnioskowania w środowisku produkcyjnym zalecamy zmaterializowanie funkcji w celu zapewnienia większej niezawodności i dostępności.

Ten samouczek jest pierwszą częścią serii samouczków magazyn zarządzanych funkcji. Tutaj dowiesz się, jak wykonywać następujące czynności:

  • Utwórz nowy, minimalny zasób magazynu funkcji.
  • Opracowywanie i lokalne testowanie zestawu funkcji przy użyciu możliwości przekształcania funkcji.
  • Rejestrowanie jednostki magazynu funkcji w magazynie funkcji.
  • Zarejestruj zestaw funkcji opracowany w magazynie funkcji.
  • Wygeneruj przykładową ramkę danych trenowania przy użyciu utworzonych funkcji.
  • Włącz materializację w trybie offline w zestawach funkcji i uzupełnij dane funkcji.

Ta seria samouczków ma dwie ścieżki:

  • Ścieżka tylko do zestawu SDK używa tylko zestawów SDK języka Python. Wybierz ten utwór dla czystego, opartego na języku Python programowania i wdrażania.
  • Śledzenie zestawu SDK i interfejsu wiersza polecenia używa zestawu SDK języka Python do tworzenia i testowania zestawu funkcji oraz używa interfejsu wiersza polecenia dla operacji CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie). Ta ścieżka jest przydatna w scenariuszach ciągłej integracji i ciągłego dostarczania (CI/CD) lub GitOps, w których preferowany jest interfejs wiersza polecenia/YAML.

Wymagania wstępne

Przed kontynuowaniem pracy z tym samouczkiem należy uwzględnić następujące wymagania wstępne:

  • Obszar roboczy usługi Azure Machine Learning. Aby uzyskać więcej informacji na temat tworzenia obszaru roboczego, zobacz Szybki start: tworzenie zasobów obszaru roboczego.

  • Na koncie użytkownika rola Właściciel grupy zasobów, w której jest tworzony magazyn funkcji.

    Jeśli zdecydujesz się użyć nowej grupy zasobów na potrzeby tego samouczka, możesz łatwo usunąć wszystkie zasoby, usuwając grupę zasobów.

Przygotowywanie środowiska notesu

W tym samouczku do programowania jest używany notes usługi Azure Machine Edukacja Spark.

  1. W środowisku usługi Azure Machine Edukacja Studio wybierz pozycję Notesy w okienku po lewej stronie, a następnie wybierz kartę Przykłady.

  2. Przejdź do katalogu featurestore_sample (wybierz pozycję Samples>SDK v2>sdk>python>featurestore_sample), a następnie wybierz pozycję Clone (Klonuj).

    Zrzut ekranu przedstawiający wybór przykładowego katalogu w usłudze Azure Machine Edukacja Studio.

  3. Zostanie otwarty panel Wybierz katalog docelowy. Wybierz katalog Użytkownicy, a następnie wybierz nazwę użytkownika, a na koniec wybierz pozycję Klonuj.

    Zrzut ekranu przedstawiający wybór lokalizacji katalogu docelowego w usłudze Azure Machine Edukacja Studio dla przykładowego zasobu.

  4. Aby skonfigurować środowisko notesu, należy przekazać plik conda.yml :

    1. Wybierz pozycję Notesy w okienku po lewej stronie, a następnie wybierz kartę Pliki .
    2. Przejdź do katalogu env (wybierz pozycję Użytkownicy>your_user_name>featurestore_sample>>projektu env), a następnie wybierz plik conda.yml.
    3. Wybierz Pobierz.

    Zrzut ekranu przedstawiający wybór pliku YAML Conda w usłudze Azure Machine Edukacja Studio.

    1. Wybierz pozycję Bezserwerowe obliczenia platformy Spark na liście rozwijanej Obliczenia na górnym pasku nawigacyjnym. Ta operacja może potrwać od jednej do dwóch minut. Poczekaj na pasek stanu u góry, aby wyświetlić pozycję Konfiguruj sesję.
    2. Wybierz pozycję Konfiguruj sesję na górnym pasku stanu.
    3. Wybierz pozycję Pakiety języka Python.
    4. Wybierz pozycję Przekaż pliki conda.
    5. conda.yml Wybierz plik pobrany na urządzeniu lokalnym.
    6. (Opcjonalnie) Zwiększ limit czasu sesji (czas bezczynności w minutach), aby skrócić czas uruchamiania klastra spark bezserwerowego.
  5. W środowisku usługi Azure Machine Edukacja otwórz notes, a następnie wybierz pozycję Konfiguruj sesję.

    Zrzut ekranu przedstawiający opcje konfigurowania sesji dla notesu.

  6. Na panelu Konfigurowanie sesji wybierz pozycję Pakiety języka Python.

  7. Przekaż plik Conda:

    1. Na karcie Pakiety języka Python wybierz pozycję Przekaż plik Conda.
    2. Przejdź do katalogu, który hostuje plik Conda.
    3. Wybierz pozycję conda.yml, a następnie wybierz pozycję Otwórz.

    Zrzut ekranu przedstawiający katalog hostujący plik Conda.

  8. Wybierz Zastosuj.

    Zrzut ekranu przedstawiający przekazywanie pliku Conda.

Uruchamianie sesji platformy Spark

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

Konfigurowanie katalogu głównego dla przykładów

import os

# Please update <your_user_alias> below (or any custom directory you uploaded the samples to).
# You can find the name from the directory structure in the left navigation panel.
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")

Konfigurowanie interfejsu wiersza polecenia

Nie dotyczy.

Uwaga

Magazyn funkcji służy do ponownego używania funkcji w projektach. Obszar roboczy projektu (obszar roboczy usługi Azure Machine Edukacja) służy do trenowania modeli wnioskowania, korzystając z funkcji z magazynów funkcji. Wiele obszarów roboczych projektu może współużytkować ten sam magazyn funkcji i używać go ponownie.

W tym samouczku są używane dwa zestawy SDK:

  • Zestaw SDK CRUD magazynu funkcji

    Używasz tego samego MLClient zestawu SDK (nazwy azure-ai-mlpakietu ), który jest używany z obszarem roboczym usługi Azure Machine Edukacja. Magazyn funkcji jest implementowany jako typ obszaru roboczego. W związku z tym ten zestaw SDK jest używany na potrzeby operacji CRUD dla magazynów funkcji, zestawów funkcji i jednostek magazynu funkcji.

  • Podstawowy zestaw SDK magazynu funkcji

    Ten zestaw SDK (azureml-featurestore) jest przeznaczony do programowania i użycia zestawu funkcji. W kolejnych krokach tego samouczka opisano następujące operacje:

    • Opracowywanie specyfikacji zestawu funkcji.
    • Pobieranie danych funkcji.
    • Wyświetlanie listy lub pobieranie zarejestrowanego zestawu funkcji.
    • Generowanie i rozwiązywanie problemów ze specyfikacjami pobierania funkcji.
    • Generowanie danych trenowania i wnioskowania przy użyciu sprzężeń punkt-w czasie.

Ten samouczek nie wymaga jawnej instalacji tych zestawów SDK, ponieważ wcześniejsze instrukcje conda.yml obejmują ten krok.

Tworzenie minimalnego magazynu funkcji

  1. Ustaw parametry magazynu funkcji, w tym nazwę, lokalizację i inne wartości.

    # We use the subscription, resource group, region of this active project workspace.
    # You can optionally replace them to create the resources in a different subsciprtion/resource group, or use existing resources.
    import os
    
    featurestore_name = "<FEATURESTORE_NAME>"
    featurestore_location = "eastus"
    featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
  2. Utwórz magazyn funkcji.

    from azure.ai.ml import MLClient
    from azure.ai.ml.entities import (
        FeatureStore,
        FeatureStoreEntity,
        FeatureSet,
    )
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    ml_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        subscription_id=featurestore_subscription_id,
        resource_group_name=featurestore_resource_group_name,
    )
    
    
    fs = FeatureStore(name=featurestore_name, location=featurestore_location)
    # wait for feature store creation
    fs_poller = ml_client.feature_stores.begin_create(fs)
    print(fs_poller.result())
  3. Inicjowanie podstawowego klienta zestawu SDK magazynu funkcji dla usługi Azure Machine Edukacja.

    Jak wyjaśniono wcześniej w tym samouczku, podstawowy klient zestawu SDK magazynu funkcji służy do tworzenia i korzystania z funkcji.

    # 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,
    )
  4. Udziel roli "Azure Machine Edukacja badacze dancyh" w magazynie funkcji tożsamości użytkownika. Uzyskaj wartość identyfikatora obiektu Entra firmy Microsoft z witryny Azure Portal, zgodnie z opisem w artykule Znajdowanie identyfikatora obiektu użytkownika.

    Przypisz rolę badacze dancyh usługi AzureML do tożsamości użytkownika, aby móc tworzyć zasoby w obszarze roboczym magazynu funkcji. Propagacja uprawnień może wymagać pewnego czasu.

    Aby uzyskać więcej informacji na temat kontroli dostępu, zobacz Zarządzanie kontrolą dostępu dla magazyn zarządzanych funkcji.

    your_aad_objectid = "<USER_AAD_OBJECTID>"
    
    !az role assignment create --role "AzureML Data Scientist" --assignee-object-id $your_aad_objectid --assignee-principal-type User --scope $feature_store_arm_id

Tworzenie prototypów i tworzenie zestawu funkcji

W tych krokach utworzysz zestaw funkcji o nazwie transactions zawierający funkcje agregujące okna stopniowe:

  1. Eksplorowanie danych źródłowych transactions .

    W tym notesie są używane przykładowe dane hostowane w publicznie dostępnym kontenerze obiektów blob. Można go odczytywać tylko na platformie Spark za pośrednictwem wasbs sterownika. Podczas tworzenia zestawów funkcji przy użyciu własnych danych źródłowych hostuj je na koncie usługi Azure Data Lake Storage Gen2 i użyj abfss sterownika w ścieżce danych.

    # remove the "." in the roor directory path as we need to generate absolute path to read from spark
    transactions_source_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source/*.parquet"
    transactions_src_df = spark.read.parquet(transactions_source_data_path)
    
    display(transactions_src_df.head(5))
    # Note: display(training_df.head(5)) displays the timestamp column in a different format. You can can call transactions_src_df.show() to see correctly formatted value
  2. Lokalnie opracuj zestaw funkcji.

    Specyfikacja zestawu funkcji to samodzielna definicja zestawu funkcji, którą można lokalnie opracowywać i testować. W tym miejscu utworzysz te funkcje agregacji okien kroczących:

    • transactions three-day count
    • transactions amount three-day sum
    • transactions amount three-day avg
    • transactions seven-day count
    • transactions amount seven-day sum
    • transactions amount seven-day avg

    Przejrzyj plik kodu przekształcania funkcji: featurestore/featuresets/transactions/transformation_code/transaction_transform.py. Zwróć uwagę na agregację kroczącą zdefiniowaną dla funkcji. Jest to transformator spark.

    Aby dowiedzieć się więcej na temat zestawu funkcji i przekształceń, zobacz Co to jest magazyn zarządzanych funkcji?.

    from azureml.featurestore import create_feature_set_spec
    from azureml.featurestore.contracts import (
        DateTimeOffset,
        TransformationCode,
        Column,
        ColumnType,
        SourceType,
        TimestampColumn,
    )
    from azureml.featurestore.feature_source import ParquetFeatureSource
    
    transactions_featureset_code_path = (
        root_dir + "/featurestore/featuresets/transactions/transformation_code"
    )
    
    transactions_featureset_spec = create_feature_set_spec(
        source=ParquetFeatureSource(
            path="wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source/*.parquet",
            timestamp_column=TimestampColumn(name="timestamp"),
            source_delay=DateTimeOffset(days=0, hours=0, minutes=20),
        ),
        feature_transformation=TransformationCode(
            path=transactions_featureset_code_path,
            transformer_class="transaction_transform.TransactionFeatureTransformer",
        ),
        index_columns=[Column(name="accountID", type=ColumnType.string)],
        source_lookback=DateTimeOffset(days=7, hours=0, minutes=0),
        temporal_join_lookback=DateTimeOffset(days=1, hours=0, minutes=0),
        infer_schema=True,
    )
  3. Eksportuj jako specyfikację zestawu funkcji.

    Aby zarejestrować specyfikację zestawu funkcji w magazynie funkcji, należy zapisać tę specyfikację w określonym formacie.

    Przejrzyj wygenerowaną transactions specyfikację zestawu funkcji. Otwórz ten plik z drzewa plików, aby wyświetlić specyfikację: featurestore/featuresets/accounts/spec/FeaturesetSpec.yaml.

    Specyfikacja zawiera następujące elementy:

    • source: odwołanie do zasobu magazynu. W takim przypadku jest to plik Parquet w zasobie magazynu obiektów blob.
    • features: lista funkcji i ich typów danych. Jeśli podasz kod przekształcenia, kod musi zwrócić ramkę danych, która mapuje się na funkcje i typy danych.
    • index_columns: klucze sprzężenia wymagane do uzyskania dostępu do wartości z zestawu funkcji.

    Aby dowiedzieć się więcej na temat specyfikacji, zobacz Opis jednostek najwyższego poziomu w magazyn zarządzanych funkcji i zestawie funkcji interfejsu wiersza polecenia (wersja 2) zestawu funkcji YAML.

    Utrwalanie specyfikacji zestawu funkcji zapewnia kolejną korzyść: specyfikacja zestawu funkcji może być kontrolowana przez źródło.

    import os
    
    # Create a new folder to dump the feature set specification.
    transactions_featureset_spec_folder = (
        root_dir + "/featurestore/featuresets/transactions/spec"
    )
    
    # Check if the folder exists, create one if it does not exist.
    if not os.path.exists(transactions_featureset_spec_folder):
        os.makedirs(transactions_featureset_spec_folder)
    
    transactions_featureset_spec.dump(transactions_featureset_spec_folder, overwrite=True)

Rejestrowanie jednostki magazynu funkcji

Najlepszym rozwiązaniem jest wymuszanie użycia tej samej definicji klucza sprzężenia w zestawach funkcji, które używają tych samych jednostek logicznych. Przykłady jednostek obejmują konta i klientów. Jednostki są zwykle tworzone raz, a następnie ponownie używane w zestawach funkcji. Aby dowiedzieć się więcej, zobacz Opis jednostek najwyższego poziomu w magazyn zarządzanych funkcji.

  1. Zainicjuj klienta CRUD magazynu funkcji.

    Jak wyjaśniono wcześniej w tym samouczku, MLClient służy do tworzenia, odczytywania, aktualizowania i usuwania zasobu magazynu funkcji. Przykładowy kod notesu pokazany tutaj wyszukuje magazyn funkcji utworzony we wcześniejszym kroku. W tym miejscu nie można ponownie użyć tej samej ml_client wartości, która została użyta wcześniej w tym samouczku, ponieważ jest ona ograniczona na poziomie grupy zasobów. Odpowiednie określenie zakresu jest wymaganiem wstępnym dla tworzenia magazynu funkcji.

    W tym przykładzie kodu klient ma zakres na poziomie magazynu funkcji.

    # MLClient for feature store.
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )
  2. Zarejestruj jednostkę w account magazynie funkcji.

    Utwórz jednostkę account , która ma klucz accountID sprzężenia typu string.

    from azure.ai.ml.entities import DataColumn, DataColumnType
    
    account_entity_config = FeatureStoreEntity(
        name="account",
        version="1",
        index_columns=[DataColumn(name="accountID", type=DataColumnType.STRING)],
        stage="Development",
        description="This entity represents user account index key accountID.",
        tags={"data_typ": "nonPII"},
    )
    
    poller = fs_client.feature_store_entities.begin_create_or_update(account_entity_config)
    print(poller.result())

Rejestrowanie zestawu funkcji transakcji w magazynie funkcji

Użyj tego kodu, aby zarejestrować zasób zestawu funkcji w magazynie funkcji. Następnie możesz ponownie użyć tego zasobu i łatwo go udostępnić. Rejestracja zasobu zestawu funkcji oferuje funkcje zarządzane, w tym przechowywanie wersji i materializacja. W kolejnych krokach tej serii samouczków omówiono możliwości zarządzane.

from azure.ai.ml.entities import FeatureSetSpecification

transaction_fset_config = FeatureSet(
    name="transactions",
    version="1",
    description="7-day and 3-day rolling aggregation of transactions featureset",
    entities=[f"azureml:account:1"],
    stage="Development",
    specification=FeatureSetSpecification(path=transactions_featureset_spec_folder),
    tags={"data_type": "nonPII"},
)

poller = fs_client.feature_sets.begin_create_or_update(transaction_fset_config)
print(poller.result())

Eksplorowanie interfejsu użytkownika magazynu funkcji

Tworzenie i aktualizacje zasobów magazynu funkcji mogą odbywać się tylko za pośrednictwem zestawu SDK i interfejsu wiersza polecenia. Interfejs użytkownika umożliwia wyszukiwanie lub przeglądanie magazynu funkcji:

  1. Otwórz globalną stronę docelową usługi Azure Machine Edukacja.
  2. Wybierz pozycję Magazyny funkcji w okienku po lewej stronie.
  3. Z listy dostępnych magazynów funkcji wybierz magazyn funkcji utworzony wcześniej w tym samouczku.

Udzielanie roli Czytelnik danych obiektu blob usługi Storage do konta użytkownika w magazynie offline

Rola Czytelnik danych obiektu blob usługi Storage musi być przypisana do konta użytkownika w magazynie offline. Dzięki temu konto użytkownika może odczytywać zmaterializowane dane funkcji z magazynu materializacji w trybie offline.

  1. Uzyskaj wartość identyfikatora obiektu Entra firmy Microsoft z witryny Azure Portal, zgodnie z opisem w artykule Znajdowanie identyfikatora obiektu użytkownika.

  2. Uzyskaj informacje o magazynie materializacji w trybie offline ze strony Przegląd magazynu funkcji w interfejsie użytkownika magazynu funkcji. Wartości identyfikatora subskrypcji konta magazynu, nazwy grupy zasobów konta magazynu i nazwy konta magazynu dla magazynu materializacji offline można znaleźć na karcie Magazynu materializacji trybu offline.

    Zrzut ekranu przedstawiający informacje o koncie magazynu funkcji w trybie offline na stronie Przegląd magazynu funkcji.

    Aby uzyskać więcej informacji na temat kontroli dostępu, zobacz Zarządzanie kontrolą dostępu dla magazyn zarządzanych funkcji.

    Wykonaj tę komórkę kodu na potrzeby przypisania roli. Propagacja uprawnień może wymagać pewnego czasu.

    # This utility function is created for ease of use in the docs tutorials. It uses standard azure API's.
    # You can optionally inspect it `featurestore/setup/setup_storage_uai.py`.
    import sys
    
    sys.path.insert(0, root_dir + "/featurestore/setup")
    from setup_storage_uai import grant_user_aad_storage_data_reader_role
    
    your_aad_objectid = "<USER_AAD_OBJECTID>"
    storage_subscription_id = "<SUBSCRIPTION_ID>"
    storage_resource_group_name = "<RESOURCE_GROUP>"
    storage_account_name = "<STORAGE_ACCOUNT_NAME>"
    
    grant_user_aad_storage_data_reader_role(
        AzureMLOnBehalfOfCredential(),
        your_aad_objectid,
        storage_subscription_id,
        storage_resource_group_name,
        storage_account_name,
    )

Generowanie ramki danych treningowych przy użyciu zarejestrowanego zestawu funkcji

  1. Ładowanie danych obserwacji.

    Dane obserwacji zwykle obejmują podstawowe dane używane do trenowania i wnioskowania. Te dane łączą się z danymi funkcji, aby utworzyć pełny zasób danych szkoleniowych.

    Dane obserwacji to dane przechwycone podczas samego zdarzenia. W tym miejscu zawiera podstawowe dane transakcji, w tym identyfikator transakcji, identyfikator konta i wartości kwoty transakcji. Ponieważ używasz go do trenowania, ma również dołączona zmienna docelowa (is_fraud).

    observation_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/observation_data/train/*.parquet"
    observation_data_df = spark.read.parquet(observation_data_path)
    obs_data_timestamp_column = "timestamp"
    
    display(observation_data_df)
    # Note: the timestamp column is displayed in a different format. Optionally, you can can call training_df.show() to see correctly formatted value
  2. Pobierz zarejestrowany zestaw funkcji i wyświetl listę jego funkcji.

    # Look up the featureset by providing a name and a version.
    transactions_featureset = featurestore.feature_sets.get("transactions", "1")
    # List its features.
    transactions_featureset.features
    # Print sample values.
    display(transactions_featureset.to_spark_dataframe().head(5))
  3. Wybierz funkcje, które stają się częścią danych treningowych. Następnie użyj zestawu SDK magazynu funkcji, aby wygenerować same dane szkoleniowe.

    from azureml.featurestore import get_offline_features
    
    # You can select features in pythonic way.
    features = [
        transactions_featureset.get_feature("transaction_amount_7d_sum"),
        transactions_featureset.get_feature("transaction_amount_7d_avg"),
    ]
    
    # You can also specify features in string form: featureset:version:feature.
    more_features = [
        f"transactions:1:transaction_3d_count",
        f"transactions:1:transaction_amount_3d_avg",
    ]
    
    more_features = featurestore.resolve_feature_uri(more_features)
    features.extend(more_features)
    
    # Generate training dataframe by using feature data and observation data.
    training_df = get_offline_features(
        features=features,
        observation_data=observation_data_df,
        timestamp_column=obs_data_timestamp_column,
    )
    
    # Ignore the message that says feature set is not materialized (materialization is optional). We will enable materialization in the subsequent part of the tutorial.
    display(training_df)
    # Note: the timestamp column is displayed in a different format. Optionally, you can can call training_df.show() to see correctly formatted value

    Sprzężenie do punktu w czasie dołącza funkcje do danych treningowych.

Włączanie materializacji offline w transactions zestawie funkcji

Po włączeniu materializacji zestawu funkcji można wykonać wypełnienie. Można również zaplanować cykliczne zadania materializacji. Aby uzyskać więcej informacji, zobacz trzeci samouczek z serii.

Ustaw plik spark.sql.shuffle.partitions w pliku yaml zgodnie z rozmiarem danych funkcji

Konfiguracja spark.sql.shuffle.partitions platformy Spark jest opcjonalnym parametrem, który może mieć wpływ na liczbę plików parquet generowanych (dziennie), gdy zestaw funkcji zostanie zmaterializowany w magazynie offline. Wartość domyślna tego parametru to 200. Najlepszym rozwiązaniem jest unikanie generowania wielu małych plików parquet. Jeśli pobieranie funkcji offline stanie się powolne po materializacji zestawu funkcji, przejdź do odpowiedniego folderu w magazynie offline, aby sprawdzić, czy problem obejmuje zbyt wiele małych plików parquet (dziennie) i odpowiednio dostosować wartość tego parametru.

Uwaga

Przykładowe dane używane w tym notesie są małe. W związku z tym ten parametr jest ustawiony na wartość 1 w pliku featureset_asset_offline_enabled.yaml.

from azure.ai.ml.entities import (
    MaterializationSettings,
    MaterializationComputeResource,
)

transactions_fset_config = fs_client._featuresets.get(name="transactions", version="1")

transactions_fset_config.materialization_settings = MaterializationSettings(
    offline_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,
        "spark.sql.shuffle.partitions": 1,
    },
    schedule=None,
)

fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)
print(fs_poller.result())

Zasób zestawu funkcji można również zapisać jako zasób YAML.

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

Dane wypełniania dla transactions zestawu funkcji

Jak wyjaśniono wcześniej, materializacja oblicza wartości funkcji dla okna funkcji i przechowuje te obliczone wartości w magazynie materializacji. Materializacja funkcji zwiększa niezawodność i dostępność obliczonych wartości. Wszystkie zapytania dotyczące funkcji używają teraz wartości z magazynu materializacji. Ten krok wykonuje jednorazowe wypełnianie dla okna funkcji w ciągu 18 miesięcy.

Uwaga

Może być konieczne określenie wartości okna danych wypełniania danych. Okno musi być zgodne z oknem danych treningowych. Aby na przykład użyć 18 miesięcy danych do trenowania, musisz pobrać funkcje przez 18 miesięcy. Oznacza to, że należy wypełnić dane zapasowe w 18-miesięcznym oknie.

Ta komórka kodu materializuje dane według bieżącego stanu Brak lub Niekompletne dla zdefiniowanego okna funkcji.

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)
# Get the job URL, and stream the job logs.
fs_client.jobs.stream(poller.result().job_ids[0])

Napiwek

  • Kolumna powinna być zgodna timestamp z yyyy-MM-ddTHH:mm:ss.fffZ formatem.
  • Stopień feature_window_start_time szczegółowości i feature_window_end_time jest ograniczony do sekund. Wszystkie milisekundy podane w datetime obiekcie zostaną zignorowane.
  • Zadanie materializacji zostanie przesłane tylko wtedy, gdy dane w oknie funkcji są zgodne data_status z definicją podczas przesyłania zadania wypełniania.

Drukuj przykładowe dane z zestawu funkcji. Dane wyjściowe pokazują, że dane zostały pobrane z magazynu materializacji. Metoda get_offline_features() pobrała dane trenowania i wnioskowania. Domyślnie używa również magazynu materializacji.

# Look up the feature set by providing a name and a version and display few records.
transactions_featureset = featurestore.feature_sets.get("transactions", "1")
display(transactions_featureset.to_spark_dataframe().head(5))

Dalsze eksplorowanie materializacji funkcji w trybie offline

Stan materializacji funkcji można eksplorować dla zestawu funkcji w interfejsie użytkownika zadań materializacji.

  1. Otwórz globalną stronę docelową usługi Azure Machine Edukacja.

  2. Wybierz pozycję Magazyny funkcji w okienku po lewej stronie.

  3. Z listy dostępnych magazynów funkcji wybierz magazyn funkcji, dla którego wykonano wypełnianie.

  4. Wybierz kartę Zadania materializacji.

    Zrzut ekranu przedstawiający interfejs użytkownika zadań materializacji zestawu funkcji.

  • Stan materializacji danych może być

    • Ukończ (zielony)
    • Niekompletne (czerwone)
    • Oczekiwanie (niebieski)
    • Brak (szary)
  • Interwał danych reprezentuje ciągłą część danych z tym samym stanem materializacji danych. Na przykład wcześniejsza migawka ma 16 interwałów danych w magazynie materializacji offline.

  • Dane mogą mieć maksymalnie 2000 interwałów danych. Jeśli dane zawierają ponad 2000 interwałów danych, utwórz nową wersję zestawu funkcji.

  • Możesz podać listę więcej niż jednego stanu danych (na przykład ["None", "Incomplete"]) w jednym zadaniu wypełniania.

  • Podczas wypełniania kopii zapasowej jest przesyłane nowe zadanie materializacji dla każdego interwału danych należącego do zdefiniowanego okna funkcji.

  • Jeśli zadanie materializacji oczekuje lub zadanie jest uruchomione dla interwału danych, który nie został jeszcze wypełnione, nowe zadanie nie zostanie przesłane dla tego interwału danych.

  • Możesz ponowić próbę nieudanego zadania materializacji.

    Uwaga

    Aby uzyskać identyfikator zadania podrzędnego zadania materializacji, które zakończyło się niepowodzeniem:

    • Przejdź do interfejsu użytkownika zadań materializacji zestawu funkcji.
    • Wybierz nazwę wyświetlaną określonego zadania ze stanemNiepowodzenie.
    • Znajdź identyfikator zadania we właściwości Name na stronie Przegląd zadania. Zaczyna się od 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)

Aktualizowanie magazynu materializacji w trybie offline

  • Jeśli magazyn materializacji w trybie offline musi zostać zaktualizowany na poziomie magazynu funkcji, wszystkie zestawy funkcji w magazynie funkcji powinny mieć wyłączoną materializację w trybie offline.
  • Jeśli materializacja w trybie offline jest wyłączona w zestawie funkcji, stan materializacji danych już zmaterializowany w magazynie materializacji offline jest resetowany. Resetowanie renderuje dane, które są już zmaterializowane, bezużyteczne. Po włączeniu materializacji w trybie offline należy ponownie przesłać zadania materializacji.

W tym samouczku utworzono dane szkoleniowe z funkcjami z magazynu funkcji, włączono materializację do magazynu funkcji w trybie offline i wykonano wypełnianie. Następnie uruchomisz szkolenie modelu przy użyciu tych funkcji.

Czyszczenie

Piąty samouczek z serii opisuje sposób usuwania zasobów.

Następne kroki