Samouczek 3. Włączanie cyklicznej materializacji i wnioskowanie wsadowe
W tej serii samouczków pokazano, jak funkcje bezproblemowo integrują wszystkie fazy cyklu życia uczenia maszynowego: tworzenie prototypów, trenowanie i operacjonalizacja.
W pierwszym samouczku pokazano, jak utworzyć specyfikację zestawu funkcji z przekształceniami niestandardowymi. Następnie pokazano, jak używać tego zestawu funkcji do generowania danych treningowych, włączania materializacji i wykonywania wypełniania. W drugim samouczku pokazano, jak włączyć materializację i wykonać wypełnienie. Pokazano również, jak eksperymentować z funkcjami, jako sposób na poprawę wydajności modelu.
W tym samouczku wyjaśniono:
- Włącz rekursyjną materializację dla
transactions
zestawu funkcji. - Uruchom potok wnioskowania wsadowego w zarejestrowanym modelu.
Wymagania wstępne
Przed kontynuowaniem pracy z tym samouczkiem pamiętaj, aby ukończyć pierwsze i drugie samouczki z serii.
Konfiguruj
Konfigurowanie notesu platformy Spark usługi Azure Machine Learning.
Aby uruchomić ten samouczek, możesz utworzyć nowy notes i wykonać instrukcje krok po kroku. Możesz również otworzyć i uruchomić istniejący notes o nazwie 3. Włącz rekursywną materializację i uruchom wnioskowanie wsadowe. Ten notes i wszystkie notesy z tej serii można znaleźć w katalogu featurestore_sample/notebooks . Możesz wybrać sdk_only lub sdk_and_cli. Pozostaw ten samouczek otwarty i zapoznaj się z nim, aby uzyskać linki do dokumentacji i więcej wyjaśnień.
Na liście rozwijanej Obliczenia na górnym pasku nawigacyjnym wybierz pozycję Bezserwerowe obliczenia spark w obszarze Bezserwerowa platforma Spark w usłudze Azure Machine Learning.
Skonfiguruj sesję:
- Wybierz pozycję Konfiguruj sesję na górnym pasku stanu.
- Wybierz kartę Pakiety języka Python.
- Wybierz pozycję Przekaż plik conda.
azureml-examples/sdk/python/featurestore-sample/project/env/online.yml
Wybierz plik z komputera lokalnego.- Opcjonalnie zwiększ limit czasu sesji (czas bezczynności), aby uniknąć częstych ponownych uruchomień wymagań wstępnych.
Uruchom sesję 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")
Skonfiguruj katalog główny dla przykładów.
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")
Konfigurowanie interfejsu wiersza polecenia.
Zainicjuj obszar roboczy projektu CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) klienta.
Notes samouczka jest uruchamiany z bieżącego obszaru roboczego.
### 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 )
Zainicjuj zmienne magazynu funkcji.
Aby odzwierciedlić to, co zostało utworzone w pierwszym samouczku, pamiętaj o zaktualizowaniu
featurestore_name
wartości.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, )
Inicjowanie klienta zestawu SDK magazynu 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, )
Włącz rekursyjną materializację w zestawie funkcji transakcji
W drugim samouczku włączono materializację i wykonano wypełnianie transactions
w zestawie funkcji. Wypełnianie na żądanie to jednorazowa operacja, która oblicza i umieszcza wartości cech w magazynie materializacji.
Aby obsłużyć wnioskowanie modelu w środowisku produkcyjnym, warto skonfigurować zadania rekursywnego materializacji, aby zachować aktualność magazynu materializacji. Te zadania są uruchamiane zgodnie z harmonogramami zdefiniowanymi przez użytkownika. Harmonogram cyklicznych zadań działa w następujący sposób:
Wartości interwału i częstotliwości definiują okno. Na przykład następujące wartości definiują trzygodzinne okno:
interval
=3
frequency
=Hour
Pierwsze okno rozpoczyna się od wartości zdefiniowanej
start_time
wRecurrenceTrigger
pliku itd.Pierwsze cykliczne zadanie jest przesyłane na początku następnego okna po czasie aktualizacji.
Później powtarzane zadania są przesyłane w każdym oknie po pierwszym zadaniu.
Jak wyjaśniono we wcześniejszych samouczkach, po zmaterialieniu danych (wypełnianie lub rekursja materializacja) pobieranie funkcji domyślnie używa zmaterializowanych danych.
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())
(Opcjonalnie) Zapisywanie pliku YAML dla zasobu zestawu funkcji
Zaktualizowane ustawienia służą do zapisywania pliku YAML.
## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")
Uruchamianie potoku wnioskowania wsadowego
Wnioskowanie wsadowe zawiera następujące kroki:
Używasz tego samego wbudowanego składnika pobierania funkcji na potrzeby pobierania funkcji używanego w potoku trenowania (omówionego w trzecim samouczku). W przypadku trenowania potoku podano specyfikację pobierania funkcji jako dane wejściowe składnika. W przypadku wnioskowania wsadowego należy przekazać zarejestrowany model jako dane wejściowe. Składnik szuka specyfikacji pobierania funkcji w artefaktie modelu.
Ponadto w przypadku trenowania dane obserwacji miały zmienną docelową. Jednak dane obserwacji wnioskowania wsadowego nie mają zmiennej docelowej. Krok pobierania funkcji łączy dane obserwacji z funkcjami i generuje dane dla wnioskowania wsadowego.
Potok używa danych wejściowych wnioskowania wsadowego z poprzedniego kroku, uruchamia wnioskowanie w modelu i dołącza przewidywaną wartość jako dane wyjściowe.
Uwaga
W tym przykładzie użyto zadania do wnioskowania wsadowego. Możesz również użyć punktów końcowych wsadowych w usłudze 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)
Sprawdzanie danych wyjściowych pod kątem wnioskowania wsadowego
W widoku potoku:
Wybierz
inference_step
na karcieoutputs
.Data
Skopiuj wartość pola. Wygląda to mniej więcej tak:azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1
.Data
Wklej wartość pola w poniższej komórce z oddzielnymi wartościami nazwy i wersji. Ostatnim znakiem jest wersja poprzedzona dwukropkiem (:
).Zwróć uwagę na kolumnę
predict_is_fraud
wygenerowaną przez potok wnioskowania wsadowego.W potoku wnioskowania wsadowego (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) system utworzył nieśledzony zasób danych z identyfikatorem GUID jako wartością nazwy i
1
wartością wersji. Stało się tak, ponieważ nie zostały podanename
wartości lubversion
dlaoutputs
elementuinference_step
. W tej komórce utworzysz źródło danych, a następnie wyświetlisz ścieżkę danych z zasobu.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))
Czyszczenie
Piąty samouczek z serii opisuje sposób usuwania zasobów.
Następne kroki
- Dowiedz się więcej o pojęciach dotyczących magazynu funkcji i jednostkach najwyższego poziomu w magazyn zarządzanych funkcji.
- Dowiedz się więcej na temat tożsamości i kontroli dostępu dla magazyn zarządzanych funkcji.
- Zapoznaj się z przewodnikiem rozwiązywania problemów dla magazyn zarządzanych funkcji.
- Wyświetl dokumentację YAML.