Aracılığıyla paylaş


Yönetilen özellik deposu öğreticisi 1: Özellik kümesi geliştirme ve kaydetme

Bu öğretici serisinde Azure Machine Learning özelliklerini keşfetmek, oluşturmak ve kullanıma hazır hale getirmek için yönetilen özellik deposunu kullanmayı öğreneceksiniz. Özellikler makine öğrenmesi yaşam döngüsünün prototip oluşturma, eğitim ve operasyonelleştirme aşamalarını sorunsuz bir şekilde tümleştirir.

Prototip oluşturma aşamasında çeşitli özelliklerle denemeler yapın ve işletimselleştirme aşamasında özellik verilerini aramak için çıkarım adımlarını kullanan modelleri dağıtın. Özellikler yaşam döngüsünde bağ dokusu görevi görür.

Özellik mağazalarındaki özellikleri kullanarak çıkarım modellerini eğitmek için bir Azure Machine Learning proje çalışma alanı kullanırsınız. Birçok proje çalışma alanı aynı özellik depolarını paylaşabilir ve yeniden kullanabilir. Yönetilen özellik deposu hakkında daha fazla bilgi için bkz. Yönetilen özellik deposu nedir ve Yönetilen özellik deposundaki üst düzey varlıkları anlama.

Önkoşullar

SDK + CLI veya yalnızca SDK eğitim izleri

Bu öğretici serisinde geliştirme için bir Azure Machine Learning Spark not defteri kullanılır. İhtiyaçlarınıza bağlı olarak öğretici serisini tamamlamak için iki parça arasından seçim yapabilirsiniz.

  • SDK + CLI izlemesi özellik kümesi geliştirme ve test için Python SDK'sını ve oluşturma, okuma, güncelleştirme ve silme (CRUD) işlemleri için Azure CLI'yi kullanır. CLI ve YAML kullanan sürekli tümleştirme/teslim (CI/CD) veya GitOps senaryoları için bu yol kullanışlıdır.

  • Yalnızca SDK izlemesi yalnızca Python SDK'larını kullanır. Bu parça saf, Python tabanlı geliştirme ve dağıtım sunar.

Kopyaladığınız not defterinin cli_and_sdk veya sdk_only klasörlerindeki not defterlerinden birini açarak bir parça seçebilirsiniz. Eğitimlerin ilgili sekmesindeki yönergeleri izleyin.

SDK + CLI izlemesi, CRUD işlemleri için Azure CLI'yi ve özellik kümesi geliştirme ve test için özellik deposu çekirdek SDK'sını kullanır. Bu yaklaşım, CLI ve YAML kullanan GitOps veya CI/CD senaryoları için kullanışlıdır. Karşıya yüklediğiniz conda.yml dosyası bu kaynakları kurar.

  • CLI, özellik depolarında, özellik kümelerinde ve özellik deposu varlıklarında CRUD işlemleri için kullanılır.
  • Özellik deposu temel SDK'sı azureml-featurestore özellik kümesi geliştirme ve tüketim içindir. SDK aşağıdaki işlemleri gerçekleştirir:

    • Kayıtlı bir özellik kümesini listeler veya getirir.
    • Özellik getirme belirtimini oluşturur veya çözümler.
    • Spark DataFrame oluşturmak için bir özellik kümesi tanımı yürütür.
    • "Point-in-time join'ları kullanarak eğitim verileri oluşturur."

Öğretici 1: Özellik kümesi geliştirme ve kaydetme

Bu ilk öğreticide, özel dönüştürmelerle bir özellik kümesi belirtimi oluşturma adımları gösterilir. Ardından bu özellik kümesini eğitim verileri oluşturmak, materyalleştirmeyi etkinleştirmek ve bir geri doldurma işlemi gerçekleştirmek için kullanırsınız. Şunları yapmayı öğreneceksiniz:

  • Yeni, en düşük düzeyde bir özellik deposu kaynağı oluşturun.
  • Özellik dönüştürme özelliğiyle bir özellik kümesi geliştirin ve yerel olarak test edin.
  • Özellik deposu varlığını özellik deposuna kaydedin.
  • Geliştirdiğiniz özellik kümesini özellik deposuna kaydedin.
  • Oluşturduğunuz özellikleri kullanarak örnek bir eğitim DataFrame oluşturun.
  • Özellik kümelerinde çevrimdışı gerçekleştirmeyi etkinleştirin ve özellik verilerini yedekleyin.

Notebook'u kopyala

  1. Azure Machine Learning studio'da sol gezinti menüsünde Not Defterleri'ni seçin ve ardından Not Defterleri sayfasındaki Örnekler sekmesini seçin.

  2. SDK v2>sdk>python klasörlerini genişletin, featurestore_sample klasörüne sağ tıklayın ve Kopyala'yı seçin.

    Azure Machine Learning studio'da örnek dizin seçimini gösteren ekran görüntüsü.

  3. Hedef dizini seçin bölmesinde Kullanıcılar><your_username>>featurestore_sample listelendiğinden emin olun ve Klonla'yı seçin. featurestore_sample çalışma alanı kullanıcı dizininize klonlanır.

  4. Not Defteri sayfasının Dosyalar sekmesinde kopyalanan not defterinize gidin ve Kullanıcılar><your_username>>featurestore_sample>proje>ortamı genişletin.

  5. conda.yml dosyasına sağ tıklayıp İndir'i seçerek bilgisayarınıza indirin; böylece daha sonra sunucu ortamına yükleyebilirsiniz.

    Azure Machine Learning studio'da Conda YAML dosyasının seçimini gösteren ekran görüntüsü.

Dizüstü bilgisayarı hazırlayın ve başlatın

  1. Dosyalar sekmesindeki sol bölmede, çalıştırmak istediğiniz yola bağlı olarak featurestore_sample>notebooks bölümünde > veya sdk_only kısmını genişletin.

  2. Eğitimin ilk bölümünü açmak için onu seçin.

  3. Not Defteri sayfasının sağ üst kısmında İşlem'in yanındaki açılan oku seçin ve Sunucusuz Spark İşlem - Kullanılabilir'i seçin. Hesaplama biriminin bağlanması bir veya iki dakika sürebilir.

  4. Not defteri dosyasının üst çubuğunda Oturumu yapılandır'ı seçin.

    Not defteri için oturum yapılandırma seçimlerini gösteren ekran görüntüsü.

  5. Oturumu yapılandır ekranında, sol bölmede Python paketleri'ni seçin.

  6. Conda dosyasını karşıya yükle'yi seçin ve Conda dosyası seç altında, indirdiğiniz conda.yml dosyasını bulun ve açın.

  7. İsteğe bağlı olarak, sol bölmede Ayarlar'ı seçin ve sunucusuz Spark başlangıç süresinin zaman aşımına uğramasını önlemeye yardımcı olmak için Oturum zaman aşımı uzunluğunu artırın.

  8. Uygula'yı seçin.

    Conda dosyası yüklemeyi gösteren ekran görüntüsü.

Dizüstü bilgisayarı başlat

  1. İlk hücreye ulaşana kadar not defterinde aşağı kaydırın ve oturumu başlatmak için bu hücreyi çalıştırın. Oturumun başlatılması 15 dakika kadar sürebilir.

    # 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")
  2. İkinci hücrede yer tutucuyu <your_user_alias> kullanıcı adınızla güncelleştirin. Örnek için kök dizini ayarlamak üzere hücreyi çalıştır.

    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")
  3. Azure Machine Learning CLI uzantısını yüklemek için sonraki hücreyi çalıştırın.

    # Install AzureML CLI extension
    !az extension add --name ml
  4. Azure CLI'da kimlik doğrulaması yapmak için sonraki hücreyi çalıştırın.

    # Authenticate
    !az login
  5. Varsayılan Azure aboneliğini ayarlamak için sonraki hücreyi çalıştırın.

    # Set default subscription
    import os
    
    subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    
    !az account set -s $subscription_id

En düşük özellik deposu oluşturma

  1. Ad, konum ve diğer değerler de dahil olmak üzere özellik deposu parametrelerini ayarlayın. bir <FEATURESTORE_NAME> sağlayın ve ardından hücreyi çalıştırın.

    # 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. Özellik depoyu oluşturun.

    !az ml feature-store create --subscription $featurestore_subscription_id --resource-group $featurestore_resource_group_name --location $featurestore_location --name $featurestore_name
  3. Azure Machine Learning için bir özellik deposu çekirdek SDK istemcisi başlatın. İstemci, özellikleri geliştirme ve kullanma amacıyla kullanılır.

    # 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. Kullanıcı kimliğinize özellik deposunda AzureML Veri Bilimcisi rolünü verin. Kullanıcı nesne kimliğini bulma bölümünde açıklandığı gibi Azure portalından Microsoft Entra nesne kimliği değerinizi alın.

  5. Özellik deposu çalışma alanında kaynak oluşturabilmesi için kullanıcı kimliğinize AzureML Veri Bilimcisi rolünü atamak için aşağıdaki hücreyi çalıştırın. Yer tutucuyu <USER_AAD_OBJECTID> Microsoft Entra nesne kimliğiniz ile değiştirin. İzinlerin yayılması için biraz zaman gerekebilir.

    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

    Erişim denetimi hakkında daha fazla bilgi için bkz. Yönetilen özellik deposu için erişim denetimini yönetme.

Özellik kümesi prototipi oluşturma ve geliştirme

Bu not defteri, genel olarak erişilebilen bir blob kapsayıcısında barındırılan örnek verileri kullanır ve Spark verilerini yalnızca bir wasbs sürücü aracılığıyla okuyabilirsiniz. Kendi kaynak verilerinizi kullanarak özellik kümeleri oluşturursanız, bunları bir Azure Data Lake Storage hesabında barındırın ve veri yolunda bir abfss sürücü kullanın.

İşlemlerin kaynak verilerini keşfetme

Sıralı pencere toplama tabanlı özelliklere sahip adlı transactions bir özellik kümesi oluşturun.

# 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

Özellik kümesini yerel olarak geliştirme

Özellik kümesi belirtimi, yerel olarak geliştirip test edebilirsiniz özellik kümesinin bağımsız tanımıdır. Aşağıdaki kayan pencere toplama özelliklerini oluşturun:

  • transactions three-day count
  • transactions amount three-day avg
  • transactions amount three-day sum
  • transactions seven-day count
  • transactions amount seven-day avg
  • transactions amount seven-day sum
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,
)

Özellik dönüştürme kodu dosyasını gözden geçirin: featurestore/featuresets/transactions/transformation_code/transaction_transform.py. Özellikler için tanımlanan sıralı toplamaya dikkat edin. Bu dosya bir Spark transformatörüdür. Özellik kümesi ve dönüşümler hakkında daha fazla bilgi için bkz. Yönetilen özellik deposu nedir?

Özellik kümesi belirtimi olarak dışarı aktarma

Özellik kümesi belirtimini özellik deposuna kaydetmek için, bu belirtimi kaynak denetimini destekleyen belirtilen bir konuma ve biçimde kaydedersiniz.

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)

Featurestore/featuresets/accounts/spec/FeaturesetSpec.yaml belirtimini görmek için, dosya ağacından oluşturulan transactions özellik kümesi belirtimini açın. Belirtim şu öğeleri içerir:

  • source: Depolama kaynağına başvuru. Bu durumda, blob depolama kaynağındaki bir parquet dosyasıdır.
  • features: Özelliklerin ve bunların veri türlerinin listesi. Dönüştürme kodu sağlarsanız, kodun özelliklere ve veri türlerine eşleyen bir DataFrame döndürmesi gerekir.
  • index_columns: Özellik kümesinden değerlere erişmek için gereken birleştirme anahtarları.

Özellik deposu varlığını kaydetme

Varlıklar, aynı mantıksal varlıkları kullanan özellik kümeleri arasında aynı birleştirme anahtarı tanımını kullanmanın en iyi uygulamasının uygulanmasına yardımcı olur. Varlıklara örnek olarak accounts ve customers verilebilir. Varlıklar genellikle bir kez oluşturulur ve ardından özellik kümeleri arasında yeniden kullanılır. Daha fazla bilgi edinmek için bkz. Yönetilen özellik deposundaki üst düzey varlıkları anlama.

türünde accountbirleştirme anahtarına accountID sahip bir string varlık oluşturun. account Varlığı özellik deposuna kaydedin.

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 --feature-store-name $featurestore_name

Özellik kümesini özellik deposuna kaydetme

Aşağıdaki kod bir özellik kümesi varlığını özellik deposuna kaydeder. Daha sonra bu varlığı yeniden kullanabilir ve kolayca paylaşabilirsiniz. Özellik kümesi varlığının kaydı, sürüm oluşturma ve gerçekleştirme dahil olmak üzere yönetilen özellikler sunar. Bu serinin sonraki eğitimleri yönetilen kabiliyetleri kapsar.

account_featureset_path = (
    root_dir + "/featurestore/featuresets/transactions/featureset_asset.yaml"
)
!az ml feature-set create --file $account_featureset_path --resource-group $featurestore_resource_group_name --feature-store-name $featurestore_name

Özellik deposu kullanıcı arabirimini keşfetme

Özellik deposu varlık oluşturma ve güncelleştirmeler yalnızca SDK ve CLI aracılığıyla gerçeklenebilir. Özellik deposunda arama yapmak veya göz atmak için Machine Learning kullanıcı arabirimini kullanabilirsiniz.

  1. Azure Machine Learning genel giriş sayfasını açın.
  2. Sol bölmede Özellik depoları'nı seçin.
  3. Erişilebilir özellik depoları listesinden bu öğreticinin önceki bölümlerinde oluşturduğunuz özellik deposunu seçin.

Depolama Blobu Veri Okuyucusu rolünü atama

Depolama Blobu Veri Okuyucusu rolü, kullanıcı hesabının çevrimdışı gerçekleştirilmiş özellik deposundan gerçekleştirilmiş özellik verilerini okuyadığından emin olmak için kullanıcı hesabınıza atanmalıdır.

Özellik mağazası arayüzü Genel Bakış sayfasından çevrimdışı materyalizasyon deposu hakkında bilgi edinin. Depolama hesabı <SUBSCRIPTION_ID>, depolama hesabı <RESOURCE_GROUP>ve <STORAGE_ACCOUNT_NAME> çevrimdışı gerçekleştirme deposu için değerler Çevrimdışı gerçekleştirme deposu kartında bulunur.

Özellik deposu Genel Bakış sayfasında çevrimdışı mağaza hesabı bilgilerini gösteren ekran görüntüsü.

Rol ataması için aşağıdaki kod hücresini çalıştırın. İzinlerin yayılması için biraz zaman gerekebilir.

storage_subscription_id = "<SUBSCRIPTION_ID>"
storage_resource_group_name = "<RESOURCE_GROUP>"
storage_account_name = "<STORAGE_ACCOUNT_NAME>"

# Set the ADLS Gen2 storage account ARM ID
gen2_storage_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}".format(
    sub_id=storage_subscription_id,
    rg=storage_resource_group_name,
    account=storage_account_name,
)

print(gen2_storage_arm_id)

!az role assignment create --role "Storage Blob Data Reader" --assignee-object-id $your_aad_objectid --assignee-principal-type User --scope $gen2_storage_arm_id

Erişim denetimi hakkında daha fazla bilgi için bkz. Yönetilen özellik deposu için erişim denetimini yönetme.

Eğitim verileri için bir DataFrame oluşturun

Kayıtlı özellik setini kullanarak bir eğitim veri kümesi DataFrame oluşturun.

  1. Olayın kendisi sırasında yakalanan gözlem verilerini yükleyin.

    Gözlem verileri genellikle eğitim ve çıkarım için kullanılan temel verileri içerir ve tam eğitim veri kaynağını oluşturmak için özellik verileriyle birleşir. Aşağıdaki veriler işlem kimliği, hesap kimliği ve işlem tutarı değerleri dahil olmak üzere temel işlem verilerine sahiptir. Verileri eğitim için kullandığınızdan, ekli bir hedef değişkeni is_fraudde vardır.

    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. Kayıtlı özellik kümesini alın ve özelliklerini listeleyin.

    # 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. Eğitim verilerinin parçası olacak özellikleri seçin ve eğitim verilerinin kendisini oluşturmak için özellik deposu SDK'sını kullanın. Belirli bir noktaya birleştirme, özellikleri eğitim verilerine ekler.

    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

Çevrimdışı maddeleşmeyi etkinleştirme

Gerçekleştirme, bir özellik penceresi için özellik değerlerini hesaplar ve bu değerleri bir gerçekleştirme deposunda depolar. Ardından tüm özellik sorguları bu değerleri gerçekleştirme deposundan kullanabilir.

Gerçekleştirme olmadan, özellik kümesi sorgusu anında kaynağa dönüştürmeler uygular ve değerleri döndürmeden önce özellikleri hesaplar. Bu işlem prototip oluşturma aşamasında iyi çalışır. Ancak, üretim ortamındaki eğitim ve çıkarım işlemleri için özelliklerin gerçekleştirilmesi daha fazla güvenilirlik ve kullanılabilirlik sağlar.

Özellik deposu için varsayılan blob deposu bir Azure Data Lake Storage (ADLS) kapsayıcısıdır. Özellik deposu her zaman çevrimdışı bir gerçekleştirme deposu ve kullanıcı tarafından atanan yönetilen kimlik (UAI) ile oluşturulur.

Varsayılan parametre değerleri offline_store=None ve materialization_identity=Noneile bir özellik deposu oluşturulursa sistem aşağıdaki kurulumu gerçekleştirir:

  1. Çevrimdışı depo olarak bir ADLS kapsayıcısı oluşturur.
  2. Bir UAI oluşturur ve bunu gerçekleştirme kimliği olarak özellik deposuna atar.
  3. Çevrimdışı depodaki UAI'ye gerekli rol tabanlı erişim denetimi (RBAC) izinlerini atar.

İsteğe bağlı olarak, offline_store parametresini tanımlayarak mevcut bir ADLS kapsayıcısını çevrimdışı depo olarak kullanabilirsiniz. Çevrimdışı malzemeleştirme depoları için yalnızca ADLS kapsayıcıları desteklenmektedir.

İsteğe bağlı olarak, bir parametre tanımlayarak mevcut bir materialization_identity UAI sağlayabilirsiniz. Gerekli RBAC izinleri, özellik deposu oluşturma sırasında çevrimdışı depodaki UAI'ye atanır.

Aşağıdaki kod örneği, kullanıcı tanımlı offline_store ve materialization_identity parametreleri olan bir özellik deposunun oluşturulmasını gösterir.

   import os
   from azure.ai.ml import MLClient
   from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
   from azure.ai.ml.entities import (
      ManagedIdentityConfiguration,
      FeatureStore,
      MaterializationStore,
   )
   from azure.mgmt.msi import ManagedServiceIdentityClient

   # Get an existing offline store
   storage_subscription_id = "<OFFLINE_STORAGE_SUBSCRIPTION_ID>"
   storage_resource_group_name = "<OFFLINE_STORAGE_RESOURCE_GROUP>"
   storage_account_name = "<OFFLINE_STORAGE_ACCOUNT_NAME>"
   storage_file_system_name = "<OFFLINE_STORAGE_CONTAINER_NAME>"

   # Get ADLS container ARM ID
   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 = MaterializationStore(
      type="azure_data_lake_gen2",
      target=gen2_container_arm_id,
   )

   # Get an existing UAI
   uai_subscription_id = "<UAI_SUBSCRIPTION_ID>"
   uai_resource_group_name = "<UAI_RESOURCE_GROUP>"
   uai_name = "<FEATURE_STORE_UAI_NAME>"

   msi_client = ManagedServiceIdentityClient(
      AzureMLOnBehalfOfCredential(), uai_subscription_id
   )

   managed_identity = msi_client.user_assigned_identities.get(
      uai_resource_group_name, uai_name
   )

   # Get UAI information
   uai_principal_id = managed_identity.principal_id
   uai_client_id = managed_identity.client_id
   uai_arm_id = managed_identity.id

   materialization_identity1 = ManagedIdentityConfiguration(
      client_id=uai_client_id, principal_id=uai_principal_id, resource_id=uai_arm_id
   )

   # Create a feature store
   featurestore_name = "<FEATURE_STORE_NAME>"
   featurestore_location = "<AZURE_REGION>"
   featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
   featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]

   ml_client = MLClient(
      AzureMLOnBehalfOfCredential(),
      subscription_id=featurestore_subscription_id,
      resource_group_name=featurestore_resource_group_name,
   )

   # Use existing ADLS Gen2 container and UAI
   fs = FeatureStore(
      name=featurestore_name,
      location=featurestore_location,
      offline_store=offline_store,
      materialization_identity=materialization_identity1,
   )

   fs_poller = ml_client.feature_stores.begin_update(fs)

   print(fs_poller.result()) 

İşlemler özellik kümesinde özellik kümesinin maddileştirilmesini etkinleştirdikten sonra veri doldurma işlemi gerçekleştirebilirsiniz. Yinelenen gerçekleştirme işleri de zamanlayabilirsiniz. Daha fazla bilgi için bu serinin üçüncü eğitimi olan Yinelenen gerçekleştirmeyi etkinleştirme ve toplu çıkarım çalıştırma eğitimine bakın.

YAML dosyasında spark.sql.shuffle.partitions ayarlama

Spark yapılandırması spark.sql.shuffle.partitions , özellik kümesi çevrimdışı depoda oluşturulduğunda günlük olarak oluşturulan Parquet dosyalarının sayısını etkileyebilecek isteğe bağlı bir parametredir. Bu parametrenin varsayılan değeri 200'dür.

En iyi uygulama olarak, çok sayıda küçük Parquet dosyası oluşturmaktan kaçının. Özellik kümesinin gerçekleştirilmesinden sonra çevrimdışı özellik alma işlemi yavaşlarsa, çevrimdışı depoda ilgili klasörü açın. Sorunun günde çok fazla küçük Parquet dosyası içerip içermediğini denetleyin ve bu parametrenin değerini özellik veri boyutuna göre ayarlayın.

Not

Bu not defterinde kullanılan örnek veriler küçüktür. Bu nedenle, spark.sql.shuffle.partitions parametresi 1 olarak featureset_asset_offline_enabled.yaml dosyasında ayarlanmıştır.

transaction_asset_mat_yaml = (
    root_dir
    + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled.yaml"
)

!az ml feature-set update --file $transaction_asset_mat_yaml --resource-group $featurestore_resource_group_name --feature-store-name $featurestore_name

Özellik kümesi varlığını YAML kaynağı olarak da kaydedebilirsiniz.

İşlemler özellik kümesi için eksik verileri tamamlama

Gerçekleştirme, bir özellik penceresi için özellik değerlerini hesaplar ve bu hesaplanan değerleri bir gerçekleştirme deposunda depolar. Özellik gerçekleştirme, hesaplanan değerlerin güvenilirliğini ve kullanılabilirliğini artırır. Tüm özellik sorguları artık gerçekleştirme deposundaki değerleri kullanır. Bu adım, 18 aylık bir özellik penceresi için tek seferlik bir geri doldurma gerçekleştirir.

Not

Bir geri doldurma veri penceresi değeri belirlemeniz gerekebilir. Pencere, eğitim verilerinizin penceresiyle eşleşmelidir. Örneğin, eğitim için 18 aylık verileri kullanmak için 18 ay boyunca özellikleri almanız gerekir. Bu, 18 aylık bir süre boyunca geri doldurmanız gerektiği anlamına gelir.

Aşağıdaki kod hücresi verileri geçerli duruma None veya Incomplete tanımlı özellik penceresine göre oluşturur. Birden fazla veri durumunun listesini (örneğin ["None", "Incomplete"], tek bir yedekleme işinde) sağlayabilirsiniz.

feature_window_start_time = "2022-01-01T00:00.000Z"
feature_window_end_time = "2023-06-30T00:00.000Z"

!az ml feature-set backfill --name transactions --version 1 --by-data-status "['None', 'Incomplete']" --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

İpucu

  • Sütun timestamp biçime uygun yyyy-MM-ddTHH:mm:ss.fffZ olmalıdır.
  • feature_window_start_time ve feature_window_end_time tanecikliği saniye ile sınırlıdır. Nesnedeki datetime milisaniyeler yoksayılır.
  • Gerçekleştirme işi, özellik penceresindeki veriler işi gönderirken tanımlanan data_status ile eşleştiğinde yalnızca gönderilir.

Özellik kümesinden örnek verileri yazdırın. Çıkış bilgileri, verilerin gerçekleştirme deposundan alındığını gösterir. get_offline_features() yöntemi, eğitim ve çıkarım verilerini alır ve ayrıca varsayılan olarak malzemeleşme deposunu kullanır.

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

Çevrimdışı özellik gerçekleştirmeyi daha fazla keşfedin

Bir özellik kümesinin özellik gerçekleştirme durumunu Gerçekleştirme işleri kullanıcı arabiriminde inceleyebilirsiniz.

  1. Azure Machine Learning genel giriş sayfasını açın.

  2. Sol bölmede Özellik depoları'nı seçin.

  3. Erişilebilir özellik depoları listesinden, yedekleme gerçekleştirdiğiniz özellik depounu seçin.

  4. Materyalizasyon işleri sekmesini seçin.

    Özellik kümesinin Gerçekleştirme işleri kullanıcı arabirimini gösteren ekran görüntüsü.

Veri gerçekleştirme durumu şu şekilde olabilir:

  • Tamamlandı (yeşil)
  • Eksik (kırmızı)
  • Beklemede (mavi)
  • Hiçbiri (gri)

Veri aralığı, verilerin aynı veri gerçekleştirme durumuna sahip bitişik bir bölümünü temsil eder. Örneğin, önceki anlık görüntünün çevrimdışı malzeme deposunda 16 veri aralığı vardır. Verilerin en fazla 2.000 veri aralığı olabilir. Verileriniz 2.000'den fazla veri aralığı içeriyorsa yeni bir özellik kümesi sürümü oluşturun.

Dolum sırasında, tanımlanan özellik penceresine giren her veri aralığı için yeni bir gerçekleştirme işi gönderilir. Eğer geri doldurulmamış bir veri aralığı için bekleyen veya çalışmakta olan bir malzemeleştirme işi varsa, hiçbir iş gönderilmez.

Başarısız bir gerçekleştirme işini yeniden deneyebilirsiniz.

Not

Başarısız bir gerçekleştirme işinin iş kimliğini almak için:

  1. Materialization jobs özellikleri kullanıcı arayüzüne gidin.
  2. DurumuBaşarısız olan belirli bir işin Görünen adını seçin.
  3. Ad özelliği altında, Genel Bakış sayfasındaki "Featurestore-Materialization-" ile başlayan iş kimliğini bulun.
az ml feature-set backfill --by-job-id <JOB_ID_OF_FAILED_MATERIALIZATION_JOB> --name <FEATURE_SET_NAME> --version <VERSION>  --feature-store-name <FEATURE_STORE_NAME> --resource-group <RESOURCE_GROUP>

Çevrimdışı bir materyalizasyon deposunu güncelleme

Çevrimdışı bir gerçekleştirme deposunun özellik deposu düzeyinde güncelleştirilmesi gerekiyorsa, özellik deposundaki tüm özellik kümelerinde çevrimdışı gerçekleştirme devre dışı bırakılmalıdır.

Bir özellik kümesinde çevrimdışı gerçekleştirme devre dışı bırakılırsa, çevrimdışı gerçekleştirme deposunda zaten gerçekleştirilmiş verilerin gerçekleştirilmesi durumu sıfırlanır. Sıfırlama, zaten gerçekleştirilmiş olan verileri kullanılamaz hale getirir. Çevrimdışı gerçekleştirmeyi etkinleştirdikten sonra gerçekleştirme işlerini yeniden göndermeniz gerekir.

Temizleme

Bu serinin beşinci öğreticisi olan Özel bir kaynakla özellik kümesi geliştirme, kaynakların nasıl silineceği açıklanmaktadır.

Sonraki adım

Bu öğreticide, eğitim verileri özellik deposundaki özelliklerle oluşturulmuş, çevrimdışı özellik deposuna gerçekleştirilmesi etkinleştirilmiştir ve bir geri doldurma gerçekleştirilmiştir.

Serinin sonraki öğreticisi olan Özellikleri kullanarak modelleri deneyip eğitme, bu özellikleri kullanarak model eğitiminin nasıl yapılacağını gösterir.