Kurz 2: Experimentování a trénování modelů pomocí funkcí
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í. V tomto kurzu se dozvíte, jak povolit materializaci a provést obnovení. Ukazuje také, jak experimentovat s funkcemi, jako způsob, jak zlepšit výkon modelu.
V tomto kurzu se naučíte:
- Vytvoření prototypu nové
accounts
specifikace sady funkcí pomocí existujících předpočítaných hodnot jako funkcí Pak zaregistrujte specifikaci místní sady funkcí jako sadu funkcí v úložišti funkcí. Tento proces se liší od prvního kurzu, ve kterém jste vytvořili sadu funkcí s vlastními transformacemi. - Vyberte funkce modelu ze
transactions
sad funkcí aaccounts
uložte je jako specifikaci načítání funkcí. - Spusťte trénovací kanál, který k trénování nového modelu používá specifikaci načtení funkce. Tento kanál používá integrovanou součást načítání funkcí k vygenerování trénovacích dat.
Požadavky
Než budete pokračovat v tomto kurzu, nezapomeňte dokončit první kurz série.
Nastavení
Nakonfigurujte poznámkový blok Spark služby Azure Machine Learning.
Můžete vytvořit nový poznámkový blok a krok za krokem spustit pokyny v tomto kurzu. Můžete také otevřít a spustit existující poznámkový blok s názvem 2.Experiment-train-models-using-features.ipynb z adresáře 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í.
V horní nabídce v rozevíracím seznamu Compute vyberte bezserverové výpočetní prostředí Spark v části Bezserverová sparková služba Azure Machine Learning.
Konfigurace relace:
- Když se na panelu nástrojů zobrazí konfigurace relace, vyberte ji.
- Na kartě Balíčky Pythonu vyberte Nahrát soubor Conda.
- Nahrajte soubor conda.yml, který jste nahráli v prvním kurzu.
- Volitelně můžete zvýšit časový limit relace (dobu nečinnosti), abyste se vyhnuli častým opakovaným spuštěním požadavků.
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")
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")
Nastavte rozhraní příkazového řádku.
Nevztahuje se.
Inicializuje proměnné pracovního prostoru projektu.
Toto je aktuální pracovní prostor a poznámkový blok kurzu běží v tomto prostředku.
### 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 )
Inicializace proměnných úložiště funkcí
Nezapomeňte aktualizovat
featurestore_name
hodnoty takfeaturestore_location
, aby odrážely 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, )
Inicializace klienta ú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, )
Vytvořte výpočetní cluster s názvem
cpu-cluster
v pracovním prostoru projektu.Tento výpočetní cluster potřebujete, když spustíte úlohy trénování nebo dávkového odvozování.
from azure.ai.ml.entities import AmlCompute cluster_basic = AmlCompute( name="cpu-cluster-fs", type="amlcompute", size="STANDARD_F4S_V2", # you can replace it with other supported VM SKUs location=ws_client.workspaces.get(ws_client.workspace_name).location, min_instances=0, max_instances=1, idle_time_before_scale_down=360, ) ws_client.begin_create_or_update(cluster_basic).result()
Vytvoření sady funkcí účtů v místním prostředí
V prvním kurzu jste vytvořili transactions
sadu funkcí, která měla vlastní transformace. Tady vytvoříte accounts
sadu funkcí, která používá předpočítané hodnoty.
Pokud chcete připojit předpočítané funkce, můžete vytvořit specifikaci sady funkcí, aniž byste museli psát kód transformace. Specifikace sady funkcí slouží k vývoji a testování sady funkcí v plně místním vývojovém prostředí.
Nemusíte se připojovat k úložišti funkcí. V tomto postupu vytvoříte specifikaci sady funkcí místně a pak z ní vzorkujete hodnoty. Pro možnosti spravované uložiště funkcí je nutné použít definici prostředku funkce k registraci specifikace sady funkcí v úložišti funkcí. Další podrobnosti najdete v dalších krocích v tomto kurzu.
Prozkoumejte zdrojová data pro účty.
Poznámka:
Tento poznámkový blok používá ukázková data hostovaná v veřejně přístupném kontejneru objektů blob. Ve Sparku
wasbs
ho může číst jenom ovladač. Když vytváříte sady funkcí pomocí vlastních zdrojových dat, hostujte tyto sady funkcí v účtu Azure Data Lake Storage Gen2 a použijteabfss
ovladač v cestě k datům.accounts_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/accounts-precalculated/*.parquet" accounts_df = spark.read.parquet(accounts_data_path) display(accounts_df.head(5))
Vytvořte specifikaci
accounts
sady funkcí místně z těchto předpočítaných funkcí.Tady nepotřebujete žádný transformační kód, protože odkazujete na předpočítané funkce.
from azureml.featurestore import create_feature_set_spec, FeatureSetSpec from azureml.featurestore.contracts import ( DateTimeOffset, Column, ColumnType, SourceType, TimestampColumn, ) from azureml.featurestore.feature_source import ParquetFeatureSource accounts_featureset_spec = create_feature_set_spec( source=ParquetFeatureSource( path="wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/accounts-precalculated/*.parquet", timestamp_column=TimestampColumn(name="timestamp"), ), index_columns=[Column(name="accountID", type=ColumnType.string)], # account profiles in the source are updated once a year. set temporal_join_lookback to 365 days temporal_join_lookback=DateTimeOffset(days=365, hours=0, minutes=0), infer_schema=True, )
Exportovat jako specifikaci sady funkcí
Chcete-li zaregistrovat specifikaci sady funkcí v úložišti funkcí, je nutné uložit specifikaci sady funkcí v určitém formátu.
Po spuštění další buňky zkontrolujte vygenerovanou
accounts
specifikaci sady funkcí. Pokud chcete zobrazit specifikaci, otevřete soubor featurestore/featuresets/accounts/spec/FeatureSetSpec.yaml ze stromu souborů.Specifikace má tyto důležité prvky:
source
: Odkaz na prostředek úložiště. V tomto případě se jedná o soubor Parquet v prostředku úložiště objektů blob.features
: Seznam funkcí a jejich datových typů. Při poskytnutém transformačním kódu musí kód vrátit datový rámec, který se mapuje na funkce a datové typy. Bez poskytnutého transformačního kódu systém sestaví dotaz, který mapuje funkce a datové typy na zdroj. V tomto případě specifikace vygenerovanéaccounts
sady funkcí neobsahuje transformační kód, protože jsou předpočítané funkce.index_columns
: Klíče spojení potřebné pro přístup k hodnotám ze sady funkcí.
Další informace najdete v tématu Vysvětlení entit nejvyšší úrovně v spravované uložiště funkcí a schématu YAML specifikace sady funkcí ROZHRANÍ příkazového řádku (v2).
Zachování navíc podporuje správu zdrojového kódu.
Tady nepotřebujete žádný transformační kód, protože odkazujete na předpočítané funkce.
import os # create a new folder to dump the feature set spec accounts_featureset_spec_folder = root_dir + "/featurestore/featuresets/accounts/spec" # check if the folder exists, create one if not if not os.path.exists(accounts_featureset_spec_folder): os.makedirs(accounts_featureset_spec_folder) accounts_featureset_spec.dump(accounts_featureset_spec_folder, overwrite=True)
Místní experimentování s neregistrovanými funkcemi a registrace v úložišti funkcí, až bude připraveno
Při vývoji funkcí můžete chtít místně otestovat a ověřit je, než je zaregistrujete v úložišti funkcí nebo spustíte trénovací kanály v cloudu. Kombinace místní neregistrované sady funkcí (accounts
) a sady funkcí zaregistrované v úložišti funkcí (transactions
) generují trénovací data pro model strojového učení.
Vyberte funkce modelu.
# get the registered transactions feature set, version 1 transactions_featureset = featurestore.feature_sets.get("transactions", "1") # Notice that account feature set spec is in your local dev environment (this notebook): not registered with feature store yet features = [ accounts_featureset_spec.get_feature("accountAge"), accounts_featureset_spec.get_feature("numPaymentRejects1dPerUser"), transactions_featureset.get_feature("transaction_amount_7d_sum"), transactions_featureset.get_feature("transaction_amount_3d_sum"), transactions_featureset.get_feature("transaction_amount_7d_avg"), ]
Místně generují trénovací data.
Tento krok generuje trénovací data pro ilustrativní účely. Jako možnost můžete modely trénovat místně tady. Další kroky v tomto kurzu vysvětlují, jak vytrénovat model v cloudu.
from azureml.featurestore import get_offline_features # Load the observation data. To understand observatio ndata, refer to part 1 of this tutorial 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"
# 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 next part of the tutorial. display(training_df) # Note: display(training_df.head(5)) displays the timestamp column in a different format. You can can call training_df.show() to see correctly formatted value
accounts
Zaregistrujte sadu funkcí v úložišti funkcí.Po místním experimentování s definicemi funkcí a zdá se, že jsou rozumné, můžete zaregistrovat definici assetu sady funkcí v úložišti funkcí.
from azure.ai.ml.entities import FeatureSet, FeatureSetSpecification accounts_fset_config = FeatureSet( name="accounts", version="1", description="accounts featureset", entities=[f"azureml:account:1"], stage="Development", specification=FeatureSetSpecification(path=accounts_featureset_spec_folder), tags={"data_type": "nonPII"}, ) poller = fs_client.feature_sets.begin_create_or_update(accounts_fset_config) print(poller.result())
Získejte zaregistrovanou sadu funkcí a otestujte ji.
# look up the featureset by providing name and version accounts_featureset = featurestore.feature_sets.get("accounts", "1")
Spuštění trénovacího experimentu
V následujících krocích vyberete seznam funkcí, spustíte trénovací kanál a zaregistrujete model. Tyto kroky můžete opakovat, dokud model nebude fungovat podle potřeby.
Volitelně můžete zjistit funkce z uživatelského rozhraní úložiště funkcí.
První kurz probral tento krok, když jste zaregistrovali
transactions
sadu funkcí. Vzhledem k tomu, že máteaccounts
také sadu funkcí, můžete procházet dostupné funkce:- Přejděte na globální cílovou stránku služby Azure Machine Learning.
- V levém podokně vyberte Úložiště funkcí.
- V seznamuúložišťch
Uživatelské rozhraní zobrazuje sady funkcí a entitu, kterou jste vytvořili. Vyberte sady funkcí a projděte si definice funkcí. Globální vyhledávací pole můžete použít k vyhledání sad funkcí napříč úložišti funkcí.
Volitelně můžete vyhledat funkce ze sady SDK.
# List available feature sets all_featuresets = featurestore.feature_sets.list() for fs in all_featuresets: print(fs) # List of versions for transactions feature set all_transactions_featureset_versions = featurestore.feature_sets.list( name="transactions" ) for fs in all_transactions_featureset_versions: print(fs) # See properties of the transactions featureset including list of features featurestore.feature_sets.get(name="transactions", version="1").features
Vyberte funkce modelu a vyexportujte model jako specifikaci načtení funkce.
V předchozíchkrocích Teď můžete experimentovat v cloudu. Flexibilita při přesouvání modelů se zvyšuje, pokud vybrané funkce uložíte jako specifikaci načítání funkcí a pak použijete specifikaci v rámci operací strojového učení (MLOps) nebo toku kontinuální integrace a průběžného doručování (CI/CD) pro trénování a odvozování.
Vyberte funkce modelu.
# you can select features in pythonic way features = [ accounts_featureset.get_feature("accountAge"), transactions_featureset.get_feature("transaction_amount_7d_sum"), transactions_featureset.get_feature("transaction_amount_3d_sum"), ] # you can also specify features in string form: featurestore:featureset:version:feature more_features = [ f"accounts:1:numPaymentRejects1dPerUser", f"transactions:1:transaction_amount_7d_avg", ] more_features = featurestore.resolve_feature_uri(more_features) features.extend(more_features)
Export vybraných funkcí jako specifikace načítání funkcí
Specifikace načtení funkce je přenosná definice seznamu funkcí přidružených k modelu. Může pomoct zjednodušit vývoj a operacionalizaci modelu strojového učení. Stane se vstupem do trénovacího kanálu, který generuje trénovací data. Pak se zabalí s modelem.
Fáze odvozování používá k vyhledání funkcí načtení funkcí. Integruje všechny fáze životního cyklu strojového učení. Změny kanálu trénování a odvozování můžou zůstat minimálně při experimentování a nasazování.
Použití specifikace načtení funkce a integrované součásti načítání funkcí je volitelné. Rozhraní API můžete přímo použít
get_offline_features()
, jak je znázorněno výše. Název specifikace by měl být feature_retrieval_spec.yaml , když je zabalený s modelem. Systém ho tak dokáže rozpoznat.# Create feature retrieval spec feature_retrieval_spec_folder = root_dir + "/project/fraud_model/feature_retrieval_spec" # check if the folder exists, create one if not if not os.path.exists(feature_retrieval_spec_folder): os.makedirs(feature_retrieval_spec_folder) featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Trénování v cloudu pomocí kanálů a registrace modelu
V tomto postupu ručně aktivujete trénovací kanál. V produkčním scénáři by ho kanál CI/CD mohl aktivovat na základě změn specifikace načtení funkce ve zdrojovém úložišti. Model můžete zaregistrovat, pokud je uspokojivý.
Spusťte trénovací kanál.
Trénovací kanál má tyto kroky:
Načtení funkce: Pro svůj vstup přebírá tato integrovaná komponenta specifikaci načtení funkce, data pozorování a název sloupce s časovým razítkem. Potom vygeneruje trénovací data jako výstup. Tento postup se spustí jako spravovaná úloha Sparku.
Trénování: Na základě trénovacích dat tento krok trénuje model a pak vygeneruje model (ještě není zaregistrovaný).
Vyhodnocení: Tento krok ověří, jestli výkon a kvalita modelu spadají do prahové hodnoty. (V tomto kurzu se jedná o zástupný krok pro ilustraci.)
Registrace modelu: Tento krok zaregistruje model.
Poznámka:
V druhém kurzu jste spustili úlohu backfillu pro materializaci dat pro
transactions
sadu funkcí. Krok načtení funkce čte hodnoty funkcí z offline úložiště pro tuto sadu funkcí. Chování je stejné, i když používáteget_offline_features()
rozhraní API.from azure.ai.ml import load_job # will be used later training_pipeline_path = ( root_dir + "/project/fraud_model/pipelines/training_pipeline.yaml" ) training_pipeline_definition = load_job(source=training_pipeline_path) training_pipeline_job = ws_client.jobs.create_or_update(training_pipeline_definition) ws_client.jobs.stream(training_pipeline_job.name) # Note: First time it runs, each step in pipeline can take ~ 15 mins. However subsequent runs can be faster (assuming spark pool is warm - default timeout is 30 mins)
Zkontrolujte trénovací kanál a model.
- Pokud chcete zobrazit kroky kanálu, vyberte hypertextový odkaz pro kanál webového zobrazení a otevřete ho v novém okně.
Použijte specifikaci načítání funkcí v artefaktech modelu:
- V levém podokně aktuálního pracovního prostoru vyberte Modely s pravým tlačítkem myši.
- Vyberte Otevřít v nové kartě nebo okně.
- Vyberte fraud_model.
- Vyberte Artefakty.
Specifikace načítání funkcí je zabalena spolu s modelem. Tento krok zvládl krok registrace modelu v kanálu trénování. Během experimentování jste vytvořili specifikaci načítání funkcí. Teď je součástí definice modelu. V dalším kurzu se dozvíte, jak ho odvozování používá.
Zobrazení sady funkcí a závislostí modelu
Zobrazí seznam sad funkcí přidružených k modelu.
Na stejné stránce Modely vyberte kartu Sady funkcí. Tato karta zobrazuje
transactions
accounts
sady funkcí, na kterých tento model závisí.Prohlédněte si seznam modelů, které používají sady funkcí:
- Otevřete uživatelské rozhraní úložiště funkcí (vysvětleno výše v tomto kurzu).
- V levém podokně vyberte Sady funkcí.
- Vyberte sadu funkcí.
- Vyberte kartu Modely.
Specifikace načtení funkce určila tento seznam při registraci modelu.
Vyčištění
Pátý kurz v řadě popisuje, jak odstranit prostředky.
Další kroky
- Přejděte k dalšímu kurzu v řadě: Povolte opakující se materializaci a spusťte dávkové odvozování.
- Seznamte se s koncepty úložiště funkcí a entitami nejvyšší úrovně v spravované uložiště funkcí.
- Seznamte se s identitou a řízením přístupu pro spravované uložiště funkcí.
- Prohlédnutí průvodce odstraňováním potíží pro spravované uložiště funkcí
- Umožňuje zobrazit referenční informace k YAML.