6. oktatóanyag: Hálózatelkülönítés funkciótárolóval
Az Azure Machine Tanulás kezelt funkciótár lehetővé teszi a funkciók felderítését, létrehozását és üzembe helyezése. A funkciók a gépi tanulási életciklus kötőszöveteként szolgálnak, kezdve a prototípuskészítési fázistól, ahol különböző funkciókkal kísérletezik. Ez az életciklus továbbra is az üzemeltetési fázisig tart, ahol üzembe helyezi a modelleket, és a következtetési lépések megkeresik a funkcióadatokat. A funkciótárolókkal kapcsolatos további információkért olvassa el a funkciótárolók alapfogalmait ismertető dokumentumot.
Ez az oktatóanyag bemutatja, hogyan konfigurálható a biztonságos bejövő forgalom egy privát végponton keresztül, és hogyan lehet biztonságossá tenni a kimenő forgalmat egy felügyelt virtuális hálózaton keresztül.
Az oktatóanyag-sorozat 1. része bemutatta, hogyan hozhat létre szolgáltatáskészlet-specifikációt egyéni átalakításokkal, és hogyan hozhat létre betanítási adatokat a funkciókészlettel. A sorozat 2. része bemutatta, hogyan engedélyezheti a materializálást, és hogyan végezheti el a visszatöltést. A 2. rész azt is bemutatta, hogyan kísérletezhet a funkciókkal a modell teljesítményének javítása érdekében. A 3. rész bemutatta, hogyan növeli a funkciótároló az agilitást a kísérletezési és betanítási folyamatokban. A 3. rész azt is leírta, hogyan lehet kötegelt következtetést futtatni. A 4. oktatóanyag bemutatja, hogyan használható a funkciótár online/valós idejű következtetési használati esetekhez. Az 5. oktatóanyag bemutatja, hogyan fejleszthet egy szolgáltatáskészletet egy egyéni adatforrással. A 6. oktatóanyag bemutatja, hogyan
- Állítsa be a kezelt funkciótár hálózati elkülönítéséhez szükséges erőforrásokat.
- Hozzon létre egy új szolgáltatástár-erőforrást.
- Állítsa be a szolgáltatástárolót a hálózatelkülönítési forgatókönyvek támogatásához.
- Frissítse a projekt-munkaterületet (az aktuális munkaterületet) a hálózatelkülönítési forgatókönyvek támogatásához.
Előfeltételek
Feljegyzés
Ez az oktatóanyag egy Azure Machine Tanulás-jegyzetfüzetet használ kiszolgáló nélküli Spark Compute használatával.
Mindenképpen végezze el az oktatóanyag-sorozat 1–4. részét
Azure Machine Tanulás munkaterület, amely felügyelt virtuális hálózattal van engedélyezve kiszolgáló nélküli Spark-feladatokhoz
A projekt-munkaterület konfigurálása:
Hozzon létre egy YAML-fájlt:
network.yml
managed_network: isolation_mode: allow_internet_outbound
Hajtsa végre az alábbi parancsokat a munkaterület frissítéséhez és a felügyelt virtuális hálózat kiszolgáló nélküli Spark-feladatokhoz való kiépítéséhez:
az ml workspace update --file network.yml --resource-group my_resource_group --name my_workspace_name az ml workspace provision-network --resource-group my_resource_group --name my_workspace_name --include-spark
További információ: Konfigurálás kiszolgáló nélküli spark-feladathoz.
A felhasználói fióknak rendelkeznie kell a
Owner
funkciótárolót létrehozó erőforráscsoporthoz vagyContributor
szerepkörhöz rendelve. A felhasználói fióknak is szüksége van a szerepkörreUser Access Administrator
.
Fontos
Az Azure Machine Tanulás munkaterületen állítsa be a isolation_mode
következőtallow_internet_outbound
: . Ez az egyetlen támogatott hálózatelkülönítési mód. Ez az oktatóanyag bemutatja, hogyan csatlakozhat biztonságosan a forrásokhoz, a materializálási tárolóhoz és a megfigyelési adatokhoz privát végpontokon keresztül.
Beállítás
Ez az oktatóanyag a Python szolgáltatástároló alapvető SDK-ját (azureml-featurestore
) használja. A Python SDK csak a funkciókészletek fejlesztéséhez és teszteléséhez használható. A parancssori felület használatával létrehozhat, olvashat, frissíthet és törölhet (CRUD) műveleteket a szolgáltatástárolókon, a szolgáltatáskészleteken és a szolgáltatástár-entitásokon. Ez olyan folyamatos integráció és folyamatos teljesítés (CI/CD) vagy GitOps-forgatókönyvek esetében hasznos, ahol a CLI/YAML használata előnyben részesített.
Ehhez az oktatóanyaghoz nem kell explicit módon telepítenie ezeket az erőforrásokat, mert az itt látható beállítási utasításokban a conda.yaml
fájl ismerteti őket.
A jegyzetfüzet környezetének előkészítése a fejlesztéshez:
Klónozza az azureml-examples adattárat a helyi GitHub-erőforrásokba az alábbi paranccsal:
git clone --depth 1 https://github.com/Azure/azureml-examples
Zip-fájlt is letölthet az azureml-examples adattárból. Ezen a lapon először válassza ki a
code
legördülő menüt, majd válassza a lehetőségetDownload ZIP
. Ezután bontsa ki a tartalmat a helyi eszköz egyik mappájába.A szolgáltatástár mintakönyvtárának feltöltése a projekt-munkaterületre
- Az Azure Machine Tanulás munkaterületen nyissa meg az Azure Machine Tanulás studio felhasználói felületét
- Jegyzetfüzetek kiválasztása a bal oldali navigációs panelen
- Válassza ki a felhasználónevet a címtárlistában
- Jelölje ki a három pontot (...), majd válassza a Mappa feltöltése lehetőséget
- Válassza ki a szolgáltatástár mintáinak mappáját a klónozott címtár elérési útjából:
azureml-examples/sdk/python/featurestore-sample
Az oktatóanyag futtatása
1. lehetőség: Hozzon létre egy új jegyzetfüzetet, és hajtsa végre a dokumentumban található utasításokat lépésről lépésre
2. lehetőség: Meglévő jegyzetfüzet
featurestore_sample/notebooks/sdk_and_cli/network_isolation/Network-isolation-feature-store.ipynb
megnyitása. Ezt a dokumentumot megnyitva tarthatja, és további magyarázatokért és dokumentációs hivatkozásokért tekintse meg- Válassza a Kiszolgáló nélküli Spark Compute lehetőséget a felső navigációs Compute legördülő listában. Ez a művelet egy-két percet is igénybe vehet. Várjon egy állapotsort a tetején a Konfigurálás munkamenet megjelenítéséhez
- Válassza a Munkamenet konfigurálása lehetőséget a felső állapotsoron
- Python-csomagok kiválasztása
- Válassza a Conda-fájl feltöltése lehetőséget
- Válassza ki a helyi eszközön található fájlt
azureml-examples/sdk/python/featurestore-sample/project/env/conda.yml
- (Nem kötelező) A kiszolgáló nélküli Spark-fürt indítási idejének csökkentése érdekében növelje a munkamenet időtúllépését (percek alatt üresjárati időt)
Ez a kódcella elindítja a Spark-munkamenetet. Az összes függőség telepítéséhez és a Spark-munkamenet elindításához körülbelül 10 perc szükséges.
# 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")
A minták gyökérkönyvtárának beállítása
import os # Please update your alias below (or any custom directory you have uploaded the samples to). # You can find the name from the directory structure in the left navigation. 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")
Az Azure Machine Tanulás parancssori felületének beállítása:
Az Azure Machine Tanulás CLI-bővítmény telepítése
# install azure ml cli extension !az extension add --name ml
Hitelesítés
# authenticate !az login
Az alapértelmezett előfizetés beállítása
# Set default subscription import os subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] !az account set -s $subscription_id
Feljegyzés
A funkciótár-munkaterület támogatja a funkciók projektek közötti újrafelhasználását. A projekt-munkaterület – a jelenlegi használatban lévő munkaterület – egy adott szolgáltatástároló funkcióit használja a modellek betanításához és következtetéséhez. Számos projekt-munkaterület megoszthatja és újra felhasználhatja ugyanazt a funkciótár-munkaterületet.
A szükséges erőforrások kiépítése
Létrehozhat egy új Azure Data Lake Storage-fiókot (ADLS) Gen2-tárfiókot és -tárolókat, vagy újra felhasználhatja a meglévő tárfiókot és tárolóerőforrásokat a funkciótárolóhoz. Valós helyzetben különböző tárfiókok üzemeltethetik az ADLS Gen2-tárolókat. Mindkét lehetőség a konkrét követelményektől függően működik.
Ebben az oktatóanyagban három különálló tárolót hoz létre ugyanabban az ADLS Gen2-tárfiókban:
- Forrásadatok
- Offline áruház
- Megfigyelési adatok
Hozzon létre egy ADLS Gen2-tárfiókot a forrásadatokhoz, az offline tároláshoz és a megfigyelési adatokhoz.
Adja meg egy Azure Data Lake Storage Gen2-tárfiók nevét az alábbi kódmintában. Az alábbi kódcellát a megadott alapértelmezett beállításokkal hajthatja végre. Igény szerint felülbírálhatja az alapértelmezett beállításokat.
## Default Setting # We use the subscription, resource group, region of this active project workspace, # We hard-coded default resource names for creating new resources ## Overwrite # You can replace them if you want to create the resources in a different subsciprtion/resourceGroup, or use existing resources # At the minimum, provide an ADLS Gen2 storage account name for `storage_account_name` storage_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] storage_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"] storage_account_name = "<STORAGE_ACCOUNT_NAME>" storage_location = "eastus" storage_file_system_name_offline_store = "offline-store" storage_file_system_name_source_data = "source-data" storage_file_system_name_observation_data = "observation-data"
Ez a kódcella létrehozza a fenti kódcellában definiált ADLS Gen2-tárfiókot.
# Create new storage account !az storage account create --name $storage_account_name --enable-hierarchical-namespace true --resource-group $storage_resource_group_name --location $storage_location --subscription $storage_subscription_id
Ez a kódcella létrehoz egy új tárolót az offline tárolóhoz.
# Create a new storage container for offline store !az storage fs create --name $storage_file_system_name_offline_store --account-name $storage_account_name --subscription $storage_subscription_id
Ez a kódcella létrehoz egy új tárolót a forrásadatokhoz.
# Create a new storage container for source data !az storage fs create --name $storage_file_system_name_source_data --account-name $storage_account_name --subscription $storage_subscription_id
Ez a kódcella létrehoz egy új tárolót a megfigyelési adatokhoz.
# Create a new storage container for observation data !az storage fs create --name $storage_file_system_name_observation_data --account-name $storage_account_name --subscription $storage_subscription_id
Másolja az oktatóanyag-sorozathoz szükséges mintaadatokat az újonnan létrehozott tárolókba.
Ha adatokat szeretne írni a tárolókba, győződjön meg arról, hogy a közreműködői és a tárolási blobadat-közreműködői szerepkörök hozzá vannak rendelve a felhasználói identitáshoz a létrehozott ADLS Gen2-tárfiókon az Azure Portalon az alábbi lépéseket követve.
Fontos
Miután meggyőződött arról, hogy a közreműködői és tárolási blobadat-közreműködői szerepkörök hozzá vannak rendelve a felhasználói identitáshoz, várjon néhány percet a szerepkör-hozzárendelés után, és hagyja, hogy az engedélyek propagáljanak, mielőtt továbblép a következő lépésekre. A hozzáférés-vezérléssel kapcsolatos további információkért látogasson el az Azure Storage-fiókok szerepköralapú hozzáférés-vezérlésére (RBAC)
A következő kódcellák az oktatóanyagban használt tranzakciók forrásadatait másolják át egy nyilvános tárfiókból az újonnan létrehozott tárfiókba.
# Copy sample source data for transactions feature set used in this tutorial series from the public storage account to the newly created storage account 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) transactions_src_df.write.parquet( f"abfss://{storage_file_system_name_source_data}@{storage_account_name}.dfs.core.windows.net/transactions-source/" )
Az oktatóanyagban használt fiókfunkció-készlethez másolja a fiókfunkció-készlet mintaforrás-adatait az újonnan létrehozott tárfiókba.
# Copy sample source data for account feature set used in this tutorial series from the public storage account to the newly created storage account accounts_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/accounts-precalculated/*.parquet" accounts_data_df = spark.read.parquet(accounts_data_path) accounts_data_df.write.parquet( f"abfss://{storage_file_system_name_source_data}@{storage_account_name}.dfs.core.windows.net/accounts-precalculated/" )
Másolja a betanításhoz használt mintamegfigyelési adatokat egy nyilvános tárfiókból az újonnan létrehozott tárfiókba.
# Copy sample observation data used for training from the public storage account to the newly created storage account observation_data_train_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/observation_data/train/*.parquet" observation_data_train_df = spark.read.parquet(observation_data_train_path) observation_data_train_df.write.parquet( f"abfss://{storage_file_system_name_observation_data}@{storage_account_name}.dfs.core.windows.net/train/" )
Másolja a kötegelt következtetéshez használt megfigyelési mintaadatokat egy nyilvános tárfiókból az újonnan létrehozott tárfiókba.
# Copy sample observation data used for batch inference from a public storage account to the newly created storage account observation_data_inference_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/observation_data/batch_inference/*.parquet" observation_data_inference_df = spark.read.parquet(observation_data_inference_path) observation_data_inference_df.write.parquet( f"abfss://{storage_file_system_name_observation_data}@{storage_account_name}.dfs.core.windows.net/batch_inference/" )
Tiltsa le a nyilvános hálózati hozzáférést az újonnan létrehozott tárfiókon.
Ez a kódcella letiltja a korábban létrehozott ADLS Gen2 tárfiók nyilvános hálózati hozzáférését.
# Disable the public network access for the above created ADLS Gen2 storage account !az storage account update --name $storage_account_name --resource-group $storage_resource_group_name --subscription $storage_subscription_id --public-network-access disabled
Arm-azonosítók beállítása offline tárolókhoz, forrásadatokhoz és megfigyelési adattárolókhoz.
# set the container arm id offline_store_gen2_container_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default/containers/{container}".format( sub_id=storage_subscription_id, rg=storage_resource_group_name, account=storage_account_name, container=storage_file_system_name_offline_store, ) print(offline_store_gen2_container_arm_id) source_data_gen2_container_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default/containers/{container}".format( sub_id=storage_subscription_id, rg=storage_resource_group_name, account=storage_account_name, container=storage_file_system_name_source_data, ) print(source_data_gen2_container_arm_id) observation_data_gen2_container_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default/containers/{container}".format( sub_id=storage_subscription_id, rg=storage_resource_group_name, account=storage_account_name, container=storage_file_system_name_observation_data, ) print(observation_data_gen2_container_arm_id)
Funkciótár létrehozása a materializálás engedélyezésével
A funkciótároló paramétereinek beállítása
Állítsa be a szolgáltatástár nevét, helyét, előfizetés-azonosítóját, csoportnevét és ARM-azonosító értékeit az alábbi kódcella-mintában látható módon:
# We use the subscription, resource group, region of this active project workspace.
# Optionally, you can replace them to create the resources in a different subsciprtion/resourceGroup, or use existing resources
import os
# At the minimum, define a name for the feature store
featurestore_name = "<FEATURESTORE_NAME>"
# It is recommended to create featurestore in the same location as the storage
featurestore_location = storage_location
featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
feature_store_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.MachineLearningServices/workspaces/{ws_name}".format(
sub_id=featurestore_subscription_id,
rg=featurestore_resource_group_name,
ws_name=featurestore_name,
)
Ez a kódcella létrehoz egy YAML-specifikációs fájlt egy szolgáltatástárolóhoz, és engedélyezve van a materializálás.
# The below code creates a feature store with enabled materialization
import yaml
config = {
"$schema": "http://azureml/sdk-2-0/FeatureStore.json",
"name": featurestore_name,
"location": featurestore_location,
"compute_runtime": {"spark_runtime_version": "3.2"},
"offline_store": {
"type": "azure_data_lake_gen2",
"target": offline_store_gen2_container_arm_id,
},
}
feature_store_yaml = root_dir + "/featurestore/featurestore_with_offline_setting.yaml"
with open(feature_store_yaml, "w") as outfile:
yaml.dump(config, outfile, default_flow_style=False)
A szolgáltatástár létrehozása
Ez a kódcella az előző lépésben létrehozott YAML-specifikációs fájlt használja egy olyan funkciótároló létrehozásához, amely engedélyezve van a materializálással.
!az ml feature-store create --file $feature_store_yaml --subscription $featurestore_subscription_id --resource-group $featurestore_resource_group_name
Az Azure Machine Tanulás szolgáltatástároló alapvető SDK-ügyfélének inicializálása
Az ebben a cellában inicializált SDK-ügyfél megkönnyíti a funkciók fejlesztését és használatát:
# 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,
)
Szerepkörök hozzárendelése a felhasználói identitáshoz a funkciótárolóban
Kövesse ezeket az utasításokat a Felhasználói identitás Microsoft Entra-objektumazonosítójának lekéréséhez. Ezután a Következő parancsban a Microsoft Entra objektumazonosítójával rendelje hozzá az AzureML adattudós szerepkört a létrehozott szolgáltatástároló felhasználói identitásához.
your_aad_objectid = "<YOUR_AAD_OBJECT_ID>"
!az role assignment create --role "AzureML Data Scientist" --assignee-object-id $your_aad_objectid --assignee-principal-type User --scope $feature_store_arm_id
Szerezze be a funkciótároló alapértelmezett tárfiókját és kulcstartóját, és tiltsa le a nyilvános hálózati hozzáférést a megfelelő erőforrásokhoz
A következő kódcella a következő lépések funkciótároló objektumát adja vissza.
fs = featurestore.feature_stores.get()
Ez a kódcella a funkciótároló alapértelmezett tárfiókjának és kulcstartójának nevét adja vissza.
# Copy the properties storage_account and key_vault from the response returned in feature store show command respectively
default_fs_storage_account_name = fs.storage_account.rsplit("/", 1)[-1]
default_key_vault_name = fs.key_vault.rsplit("/", 1)[-1]
Ez a kódcella letiltja a szolgáltatástároló alapértelmezett tárfiókjának nyilvános hálózati hozzáférését.
# Disable the public network access for the above created default ADLS Gen2 storage account for the feature store
!az storage account update --name $default_fs_storage_account_name --resource-group $featurestore_resource_group_name --subscription $featurestore_subscription_id --public-network-access disabled
A következő cella a funkciótároló alapértelmezett kulcstartójának nevét nyomtatja ki.
print(default_key_vault_name)
A korábban létrehozott alapértelmezett szolgáltatástároló kulcstartójának nyilvános hálózati hozzáférésének letiltása
- Az Azure Portalon nyissa meg az előző cellában létrehozott alapértelmezett kulcstartót.
- Válassza a Hálózatkezelés lapot.
- Válassza a Nyilvános hozzáférés letiltása, majd az Alkalmazás elemet a lap bal alsó részén.
A felügyelt virtuális hálózat engedélyezése a funkciótár-munkaterületen
A szolgáltatástároló frissítése a szükséges kimenő szabályokkal
A következő kódcella létrehoz egy YAML-specifikációs fájlt a szolgáltatástárolóhoz definiált kimenő szabályokhoz.
# The below code creates a configuration for managed virtual network for the feature store
import yaml
config = {
"public_network_access": "disabled",
"managed_network": {
"isolation_mode": "allow_internet_outbound",
"outbound_rules": [
# You need to add multiple rules here if you have separate storage account for source, observation data and offline store.
{
"name": "sourcerulefs",
"destination": {
"spark_enabled": "true",
"subresource_target": "dfs",
"service_resource_id": f"/subscriptions/{storage_subscription_id}/resourcegroups/{storage_resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
},
"type": "private_endpoint",
},
# This rule is added currently because serverless Spark doesn't automatically create a private endpoint to default key vault.
{
"name": "defaultkeyvault",
"destination": {
"spark_enabled": "true",
"subresource_target": "vault",
"service_resource_id": f"/subscriptions/{featurestore_subscription_id}/resourcegroups/{featurestore_resource_group_name}/providers/Microsoft.Keyvault/vaults/{default_key_vault_name}",
},
"type": "private_endpoint",
},
],
},
}
feature_store_managed_vnet_yaml = (
root_dir + "/featurestore/feature_store_managed_vnet_config.yaml"
)
with open(feature_store_managed_vnet_yaml, "w") as outfile:
yaml.dump(config, outfile, default_flow_style=False)
Ez a kódcella a létrehozott YAML-specifikációfájlt használja a funkciótároló frissítéséhez.
!az ml feature-store update --file $feature_store_managed_vnet_yaml --name $featurestore_name --resource-group $featurestore_resource_group_name
Privát végpontok létrehozása a megadott kimenő szabályokhoz
A provision-network
parancs privát végpontokat hoz létre a felügyelt virtuális hálózatból, ahol a materializálási feladat a forrásra, az offline tárolóra, a megfigyelési adatokra, az alapértelmezett tárfiókra és a funkciótároló alapértelmezett kulcstartójára fut. A parancs végrehajtásához körülbelül 20 perc szükséges.
#### Provision network to create necessary private endpoints (it may take approximately 20 minutes)
!az ml feature-store provision-network --name $featurestore_name --resource-group $featurestore_resource_group_name --include-spark
Ez a kódcella megerősíti a kimenő szabályok által meghatározott privát végpontok létrehozását.
### Check that managed virtual network is correctly enabled
### After provisioning the network, all the outbound rules should become active
### For this tutorial, you will see 6 outbound rules
!az ml feature-store show --name $featurestore_name --resource-group $featurestore_resource_group_name
A projekt-munkaterület felügyelt virtuális hálózatának frissítése
Ezután frissítse a projekt-munkaterület felügyelt virtuális hálózatát. Először szerezze be a projekt-munkaterület előfizetés-azonosítóját, erőforráscsoportját és munkaterületnevét.
# lookup the subscription id, resource group and workspace name of the current workspace
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"]
A projekt munkaterületének frissítése a szükséges kimenő szabályokkal
A projekt-munkaterületnek hozzá kell férnie az alábbi erőforrásokhoz:
- Forrásadatok
- Offline áruház
- Megfigyelési adatok
- Funkciótár
- A funkciótároló alapértelmezett tárfiókja
Ez a kódcella frissíti a projekt-munkaterületet a létrehozott YAML-specifikációs fájllal a szükséges kimenő szabályokkal.
# The below code creates a configuration for managed virtual network for the project workspace
import yaml
config = {
"managed_network": {
"isolation_mode": "allow_internet_outbound",
"outbound_rules": [
# Incase you have separate storage accounts for source, observation data and offline store, you need to add multiple rules here. No action needed otherwise.
{
"name": "projectsourcerule",
"destination": {
"spark_enabled": "true",
"subresource_target": "dfs",
"service_resource_id": f"/subscriptions/{storage_subscription_id}/resourcegroups/{storage_resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
},
"type": "private_endpoint",
},
# Rule to create private endpoint to default storage of feature store
{
"name": "defaultfsstoragerule",
"destination": {
"spark_enabled": "true",
"subresource_target": "blob",
"service_resource_id": f"/subscriptions/{featurestore_subscription_id}/resourcegroups/{featurestore_resource_group_name}/providers/Microsoft.Storage/storageAccounts/{default_fs_storage_account_name}",
},
"type": "private_endpoint",
},
# Rule to create private endpoint to default key vault of feature store
{
"name": "defaultfskeyvaultrule",
"destination": {
"spark_enabled": "true",
"subresource_target": "vault",
"service_resource_id": f"/subscriptions/{featurestore_subscription_id}/resourcegroups/{featurestore_resource_group_name}/providers/Microsoft.Keyvault/vaults/{default_key_vault_name}",
},
"type": "private_endpoint",
},
# Rule to create private endpoint to feature store
{
"name": "featurestorerule",
"destination": {
"spark_enabled": "true",
"subresource_target": "amlworkspace",
"service_resource_id": f"/subscriptions/{featurestore_subscription_id}/resourcegroups/{featurestore_resource_group_name}/providers/Microsoft.MachineLearningServices/workspaces/{featurestore_name}",
},
"type": "private_endpoint",
},
],
}
}
project_ws_managed_vnet_yaml = (
root_dir + "/featurestore/project_ws_managed_vnet_config.yaml"
)
with open(project_ws_managed_vnet_yaml, "w") as outfile:
yaml.dump(config, outfile, default_flow_style=False)
Ez a kódcella frissíti a projekt-munkaterületet a létrehozott YAML specifikációs fájl használatával a kimenő szabályokkal.
#### Update project workspace to create private endpoints for the defined outbound rules (it may take approximately 15 minutes)
!az ml workspace update --file $project_ws_managed_vnet_yaml --name $project_ws_name --resource-group $project_ws_rg
Ez a kódcella megerősíti a kimenő szabályok által meghatározott privát végpontok létrehozását.
!az ml workspace show --name $project_ws_name --resource-group $project_ws_rg
A kimenő szabályokat az Azure Portalról is ellenőrizheti. Lépjen a Hálózatkezelés lapra a projekt-munkaterület bal oldali navigációs paneljén, majd nyissa meg a Munkaterület felügyelt kimenő hozzáférés lapját.
Tranzakciós összesítési funkciókészlet prototípusa és fejlesztése
A tranzakciók forrásadatainak megismerése
Feljegyzés
Egy nyilvánosan elérhető blobtároló tárolja az oktatóanyagban használt mintaadatokat. Csak illesztőprogramon keresztül wasbs
olvasható a Sparkban. Ha saját forrásadatokkal hoz létre szolgáltatáskészleteket, azokat egy ADLS Gen2-fiókban tárolja, és használjon egy illesztőprogramot abfss
az adatútvonalon.
# remove the "." in the root directory path as we need to generate absolute path to read from Spark
transactions_source_data_path = f"abfss://{storage_file_system_name_source_data}@{storage_account_name}.dfs.core.windows.net/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
Tranzakciós funkciókészlet helyi fejlesztése
A funkciókészlet-specifikáció egy önálló funkciókészlet-definíció, amely helyileg fejleszthető és tesztelhető.
Hozza létre a következő gördülőablak-összesítő funkciókat:
- tranzakciók háromnapos száma
- tranzakciók összege háromnapos összeg
- tranzakciók összege háromnapos átlagos idő
- tranzakciók hétnapos száma
- tranzakciók összege hétnapos összeg
- tranzakciók összege hétnapos átlagos idő
Vizsgálja meg a funkcióátalakítási kódfájlt featurestore/featuresets/transactions/spec/transformation_code/transaction_transform.py
. Ez a spark-transzformátor végrehajtja a funkciókhoz definiált gördülő összesítést.
A funkciókészlettel és az átalakításokkal kapcsolatos további információkért tekintse meg a funkciótár alapfogalmait.
from azureml.featurestore import create_feature_set_spec, FeatureSetSpec
from azureml.featurestore.contracts import (
DateTimeOffset,
FeatureSource,
TransformationCode,
Column,
ColumnType,
SourceType,
TimestampColumn,
)
transactions_featureset_code_path = (
root_dir + "/featurestore/featuresets/transactions/transformation_code"
)
transactions_featureset_spec = create_feature_set_spec(
source=FeatureSource(
type=SourceType.parquet,
path=f"abfss://{storage_file_system_name_source_data}@{storage_account_name}.dfs.core.windows.net/transactions-source/*.parquet",
timestamp_column=TimestampColumn(name="timestamp"),
source_delay=DateTimeOffset(days=0, hours=0, minutes=20),
),
transformation_code=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,
)
# Generate a spark dataframe from the feature set specification
transactions_fset_df = transactions_featureset_spec.to_spark_dataframe()
# display few records
display(transactions_fset_df.head(5))
Szolgáltatáskészlet-specifikáció exportálása
Ha regisztrálni szeretne egy szolgáltatáskészlet-specifikációt a szolgáltatástárolóban, ezt a specifikációt egy adott formátumban kell menteni.
A létrehozott tranzakciós szolgáltatáskészlet specifikációjának vizsgálatához nyissa meg ezt a fájlt a fájlfáról a specifikáció megtekintéséhez:
featurestore/featuresets/accounts/spec/FeaturesetSpec.yaml
A specifikáció a következő elemeket tartalmazza:
source
: egy tárolási erőforrásra mutató hivatkozás – ebben az esetben egy blobtároló-erőforrás parquet-fájljafeatures
: a funkciók és adattípusaik listája. Ha átalakítási kódot ad megindex_columns
: a funkciókészlet értékeinek eléréséhez szükséges illesztőkulcsok
A szolgáltatáskészlet-specifikáció YAML-fájlként való megőrzésének másik előnye, hogy a specifikáció verziókonfigurálható. További információ a funkciókészlet specifikációjáról a legfelső szintű funkciótároló-entitások dokumentumában , valamint a szolgáltatáskészlet specifikációjának YAML-referenciajában.
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 not
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)
Szolgáltatástár-entitás regisztrálása
Az entitások az azonos logikai entitásokat használó funkciókészletek esetében segítenek kikényszeríteni ugyanazon illesztéskulcs-definíciók használatát. Az entitások lehetnek például fiókentitások, ügyfélentitások stb. Az entitások általában egyszer jönnek létre, majd újra felhasználhatók a funkciókészletek között. További információkért látogasson el a legfelső szintű funkciótároló entitások dokumentumára.
Ez a kódcella létrehoz egy fiókentitást a szolgáltatástárolóhoz.
account_entity_path = root_dir + "/featurestore/entities/account.yaml"
!az ml feature-store-entity create --file $account_entity_path --resource-group $featurestore_resource_group_name --workspace-name $featurestore_name
A tranzakciós funkciókészlet regisztrálása a funkciótárolóban, és egy materializálási feladat elküldése
Egy funkciókészlet-objektum megosztásához és újrafelhasználásához először regisztrálnia kell az objektumot a funkciótárolóban. A funkciókészlet eszközregisztrációja felügyelt képességeket kínál, beleértve a verziószámozást és a materializálást. Ez az oktatóanyag-sorozat ezeket a témaköröket ismerteti.
A funkciókészlet-objektum a korábban létrehozott szolgáltatáskészlet-specifikációra és más tulajdonságokra is hivatkozik – például verzió- és materializálási beállításokra.
Szolgáltatáskészlet létrehozása
A következő kódcella egy előre definiált YAML-specifikációs fájlt használ egy szolgáltatáskészlet létrehozásához.
transactions_featureset_path = (
root_dir
+ "/featurestore/featuresets/transactions/featureset_asset_offline_enabled.yaml"
)
!az ml feature-set create --file $transactions_featureset_path --resource-group $featurestore_resource_group_name --workspace-name $featurestore_name
Ez a kódcella az újonnan létrehozott funkciókészletet tekinti meg.
# Preview the newly created feature set
!az ml feature-set show --resource-group $featurestore_resource_group_name --workspace-name $featurestore_name -n transactions -v 1
Backfill materialization feladat elküldése
A következő kódcella meghatározza a funkció materializálási ablakának kezdési és befejezési időértékeit, és beküld egy backfill materialization feladatot.
feature_window_start_time = "2023-02-01T00:00.000Z"
feature_window_end_time = "2023-03-01T00:00.000Z"
!az ml feature-set backfill --name transactions --version 1 --by-data-status "['None']" --workspace-name $featurestore_name --resource-group $featurestore_resource_group_name --feature-window-start-time $feature_window_start_time --feature-window-end-time $feature_window_end_time
Ez a kódcella a backfill materialization feladat állapotának ellenőrzéséhez nyújt <JOB_ID_FROM_PREVIOUS_COMMAND>
segítséget.
### Check the job status
!az ml job show --name <JOB_ID_FROM_PREVIOUS_COMMAND> -g $featurestore_resource_group_name -w $featurestore_name
Ez a kódcella felsorolja az aktuális funkciókészlet összes materializálási feladatát.
### List all the materialization jobs for the current feature set
!az ml feature-set list-materialization-operation --name transactions --version 1 -g $featurestore_resource_group_name -w $featurestore_name
Azure Cache for Redis csatolása online áruházként
Az Azure Cache for Redis létrehozása
A következő kódcellában adja meg a létrehozni vagy újra felhasználni kívánt Azure Cache for Redis nevét. Igény szerint felülbírálhatja az egyéb alapértelmezett beállításokat.
redis_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
redis_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
redis_name = "my-redis"
redis_location = storage_location
Kiválaszthatja a Redis cache réteget (alapszintű, standard vagy prémium). A kiválasztott gyorsítótárszinthez elérhető termékváltozatcsaládot kell választania. Ebben a dokumentációs forrásanyagban további információt talál arról, hogy a különböző szintek kiválasztása hogyan befolyásolhatja a gyorsítótár teljesítményét. Ebben a dokumentációs forrásanyagban további információt talál az Azure Cache for Redis különböző termékváltozat-szintjeinek és családjainak díjszabásáról.
Hajtsa végre a következő kódcellát egy Prémium szintű, termékváltozatcsaláddal P
és 2. gyorsítótárkapacitással rendelkező Azure Cache for Redis létrehozásához. A Redis-példány üzembe helyezése körülbelül 5–10 percet vehet igénybe.
# Create new redis cache
from azure.mgmt.redis import RedisManagementClient
from azure.mgmt.redis.models import RedisCreateParameters, Sku, SkuFamily, SkuName
management_client = RedisManagementClient(
AzureMLOnBehalfOfCredential(), redis_subscription_id
)
# It usually takes about 5 - 10 min to finish the provision of the Redis instance.
# If the following begin_create() call still hangs for longer than that,
# please check the status of the Redis instance on the Azure portal and cancel the cell if the provision has completed.
# This sample uses a PREMIUM tier Redis SKU from family P, which may cost more than a STANDARD tier SKU from family C.
# Please choose the SKU tier and family according to your performance and pricing requirements.
redis_arm_id = (
management_client.redis.begin_create(
resource_group_name=redis_resource_group_name,
name=redis_name,
parameters=RedisCreateParameters(
location=redis_location,
sku=Sku(name=SkuName.PREMIUM, family=SkuFamily.P, capacity=2),
public_network_access="Disabled", # can only disable PNA to redis cache during creation
),
)
.result()
.id
)
print(redis_arm_id)
Funkciótár frissítése az online áruházral
Csatolja az Azure Cache for Redist a szolgáltatástárhoz, hogy online materializációs tárolóként használhassa. A következő kódcella létrehoz egy YAML-specifikációs fájlt a szolgáltatástárolóhoz definiált online áruházi kimenő szabályokkal.
# The following code cell creates a YAML specification file for outbound rules that are defined for the feature store.
## rule 1: PE to online store (redis cache): this is optional if online store is not used
import yaml
config = {
"public_network_access": "disabled",
"managed_network": {
"isolation_mode": "allow_internet_outbound",
"outbound_rules": [
{
"name": "sourceruleredis",
"destination": {
"spark_enabled": "true",
"subresource_target": "redisCache",
"service_resource_id": f"/subscriptions/{storage_subscription_id}/resourcegroups/{storage_resource_group_name}/providers/Microsoft.Cache/Redis/{redis_name}",
},
"type": "private_endpoint",
},
],
},
"online_store": {"target": f"{redis_arm_id}", "type": "redis"},
}
feature_store_managed_vnet_yaml = (
root_dir + "/featurestore/feature_store_managed_vnet_config.yaml"
)
with open(feature_store_managed_vnet_yaml, "w") as outfile:
yaml.dump(config, outfile, default_flow_style=False)
A következő kódcella frissíti a szolgáltatástárolót a létrehozott YAML-specifikációs fájllal az online áruház kimenő szabályaival.
!az ml feature-store update --file $feature_store_managed_vnet_yaml --name $featurestore_name --resource-group $featurestore_resource_group_name
Projekt-munkaterület kimenő szabályainak frissítése
A projekt-munkaterületnek hozzá kell férnie az online áruházhoz. Az alábbi kódcella létrehoz egy YAML-specifikációs fájlt a projekt-munkaterülethez szükséges kimenő szabályokkal.
import yaml
config = {
"managed_network": {
"isolation_mode": "allow_internet_outbound",
"outbound_rules": [
{
"name": "onlineruleredis",
"destination": {
"spark_enabled": "true",
"subresource_target": "redisCache",
"service_resource_id": f"/subscriptions/{storage_subscription_id}/resourcegroups/{storage_resource_group_name}/providers/Microsoft.Cache/Redis/{redis_name}",
},
"type": "private_endpoint",
},
],
}
}
project_ws_managed_vnet_yaml = (
root_dir + "/featurestore/project_ws_managed_vnet_config.yaml"
)
with open(project_ws_managed_vnet_yaml, "w") as outfile:
yaml.dump(config, outfile, default_flow_style=False)
Hajtsa végre a következő kódcellát a projekt munkaterületének a létrehozott YAML-specifikációs fájllal való frissítéséhez az online áruház kimenő szabályaival.
#### Update project workspace to create private endpoints for the defined outbound rules (it may take approximately 15 minutes)
!az ml workspace update --file $project_ws_managed_vnet_yaml --name $project_ws_name --resource-group $project_ws_rg
Tranzakciós funkció online áruházba való beállítása
A következő kódcella lehetővé teszi a funkciókészlet online materializálását transactions
.
# Update featureset to enable online materialization
transactions_featureset_path = (
root_dir
+ "/featurestore/featuresets/transactions/featureset_asset_online_enabled.yaml"
)
!az ml feature-set update --file $transactions_featureset_path --resource-group $featurestore_resource_group_name --workspace-name $featurestore_name
A következő kódcella határozza meg a funkció materializálási ablakának kezdési és befejezési idejét, és beküld egy backfill materialization feladatot.
feature_window_start_time = "2024-01-24T00:00.000Z"
feature_window_end_time = "2024-01-25T00:00.000Z"
!az ml feature-set backfill --name transactions --version 1 --by-data-status "['None']" --feature-window-start-time $feature_window_start_time --feature-window-end-time $feature_window_end_time --feature-store-name $featurestore_name --resource-group $featurestore_resource_group_name
Betanítási adatok létrehozása a regisztrált funkciókkal
Megfigyelési adatok betöltése
Először vizsgálja meg a megfigyelési adatokat. A betanításhoz és következtetéshez használt alapvető adatok általában megfigyelési adatokat foglalnak magukban. Ezek az adatok ezután funkcióadatokkal lesznek összekapcsolva egy teljes betanítási adaterőforrás létrehozásához. A megfigyelési adatok az esemény ideje alatt rögzített adatok. Ebben az esetben alapvető tranzakciós adatokkal rendelkezik, beleértve a tranzakcióazonosítót, a fiókazonosítót és a tranzakció összegének értékeit. Mivel a megfigyelési adatokat a betanításhoz használják, a célváltozó is hozzá van fűzve (is_fraud
).
observation_data_path = f"abfss://{storage_file_system_name_observation_data}@{storage_account_name}.dfs.core.windows.net/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
A regisztrált funkciókészlet lekérése és funkcióinak listázása
Ezután szerezze be a szolgáltatáskészletet a nevének és verziójának megadásával, majd a funkciókészlet funkcióinak listázásával. Emellett nyomtasson ki néhány mintafunkció-értéket is.
# look up the featureset by providing name and 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))
Funkciók kiválasztása és betanítási adatok létrehozása
Válassza ki a betanítási adatok funkcióit, és használja a funkciótároló SDK-t a betanítási adatok létrehozásához.
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: featurestore:featureset:version:feature
more_features = [
"transactions:1:transaction_3d_count",
"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 next 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
Egy időponthoz kötött illesztés fűzte hozzá a funkciókat a betanítási adatokhoz.
Nem kötelező a következő lépések
Most, hogy sikeresen létrehozott egy biztonságos szolgáltatástárolót, és sikeres materializálási futtatásokat küldött be, folytathatja az oktatóanyag-sorozatot, hogy megismerje a funkciótárolót.
Ez az oktatóanyag a sorozat 1. és 2. oktatóanyagának lépéseit tartalmazza. Ne felejtse el lecserélni a többi oktatóanyag-jegyzetfüzetben használt szükséges nyilvános tárolókat az ebben az oktatóanyag-jegyzetfüzetben létrehozott tárolókra a hálózatelkülönítéshez.
Ezzel az oktatóanyag végére ért. A betanítási adatok funkciótárolóból származó funkciókat használnak. Mentheti a tárolóba későbbi használatra, vagy közvetlenül futtathatja rajta a modell betanítását.
Következő lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: