Aracılığıyla paylaş


Öğretici 1: Yönetilen Feature Store ile özellik kümesi geliştirme ve kaydetme

Bu öğretici serisi, özelliklerin makine öğrenmesi yaşam döngüsünün tüm aşamalarını sorunsuz bir şekilde tümleştirmesini gösterir: prototip oluşturma, eğitim ve operasyonelleştirme.

Özellikleri keşfetmek, oluşturmak ve kullanıma hazır hale getirmek için Azure Machine Learning Yönetilen Feature Store kullanabilirsiniz. Makine öğrenmesi yaşam döngüsü, çeşitli özelliklerle denemeler yaptığınız bir prototip oluşturma aşaması içerir. Ayrıca modellerin dağıtıldığı ve çıkarım adımlarının özellik verilerini arayabileceği bir işletimselleştirme aşaması da içerir. Özellikler, makine öğrenmesi yaşam döngüsünde bağ dokusu görevi görür. Yönetilen özellik deposuyla ilgili temel kavramlar hakkında daha fazla bilgi edinmek için Yönetilen özellik deposu nedir? ve Yönetilen özellik deposu kaynaklarında üst düzey varlıkları anlama konularını ziyaret edin.

Bu öğreticide, özel dönüştürmelerle özellik kümesi belirtimini oluşturma açıklanmaktadır. Daha sonra eğitim verileri oluşturmak, gerçekleştirmeyi etkinleştirmek ve bir geri doldurma gerçekleştirmek için bu özellik kümesini kullanır. Gerçekleştirme, bir özellik penceresi için özellik değerlerini hesaplar ve ardından 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, değerleri döndürmeden önce özellikleri hesaplamak için dönüştürmeleri anında kaynağa uygular. 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, daha fazla güvenilirlik ve kullanılabilirlik için özellikleri gerçekleştirmenizi öneririz.

Bu öğretici, Yönetilen Feature Store öğretici serisinin ilk bölümüdür. Burada şunların nasıl yapılacağını öğ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.

Bu öğretici serisinin iki parçası vardır:

  • Yalnızca SDK izlemesi yalnızca Python SDK'larını kullanır. Saf, Python tabanlı geliştirme ve dağıtım için bu parçayı seçin.
  • SDK ve CLI izlemesi yalnızca özellik kümesi geliştirme ve test için Python SDK'sını kullanır ve CRUD (oluşturma, okuma, güncelleştirme ve silme) işlemleri için CLI kullanır. Bu izleme, CLI/YAML'nin tercih edildiği sürekli tümleştirme ve sürekli teslim (CI/CD) veya GitOps senaryolarında kullanışlıdır.

Önkoşullar

Bu öğreticiye devam etmeden önce şu önkoşulları karşıladığınızdan emin olun:

  • Azure Machine Learning çalışma alanı. Çalışma alanı oluşturma hakkında daha fazla bilgi için Hızlı Başlangıç: Çalışma alanı kaynakları oluşturma'yı ziyaret edin.

  • Kullanıcı hesabınızda, özellik deposunun oluşturulduğu kaynak grubu için Sahip rolüne ihtiyacınız vardır.

    Bu öğretici için yeni bir kaynak grubu kullanmayı seçerseniz, kaynak grubunu silerek tüm kaynakları kolayca silebilirsiniz.

Not defteri ortamını hazırlama

Bu öğreticide geliştirme için bir Azure Machine Learning Spark not defteri kullanılır.

  1. Azure Machine Learning studio ortamında, sol bölmede Not Defterleri'ni ve ardından Örnekler sekmesini seçin.

  2. featurestore_sample dizinine göz atın (Örnekler>SDK v2>sdk>python>featurestore_sample'ı seçin) ve ardından Kopyala'yı seçin.

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

  3. Hedef dizin seçin paneli açılır. Kullanıcılar dizinini seçin, ardından kullanıcı adınızı seçin ve en sonunda Klonla'yı seçin.

    Örnek kaynak için Azure Machine Learning Studio'da hedef dizin konumunun seçimini gösteren ekran görüntüsü.

  4. Not defteri ortamını yapılandırmak için conda.yml dosyasını karşıya yüklemeniz gerekir:

    1. Sol bölmede Not Defterleri'ni ve ardından Dosyalar sekmesini seçin.
    2. Env dizinine gidin (Kullanıcılar\your_user_name\ >\proje\>), ardından conda.yml dosyasını seçin.
    3. İndir'i seçin.

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

    1. Üst gezinme çubuğundaki İşlem açılan listesinde Sunucusuz Spark İşlem'i seçin. Bu işlem bir ile iki dakika arasında sürebilir. Üst kısımdaki bir durum çubuğunun Oturumu yapılandır'ı görüntülemesini bekleyin.
    2. Üst durum çubuğunda Oturumu yapılandır'ı seçin.
    3. Python paketleri'ne tıklayın.
    4. Karşıya Conda dosyalarını yükle seçeneğini seçin.
    5. Yerel cihazınıza conda.yml indirdiğiniz dosyayı seçin.
    6. (İsteğe bağlı) Sunucusuz Spark kümesi başlatma süresini azaltmak için oturum zaman aşımı süresini (dakika cinsinden boşta kalma süresi) artırın.
  5. Azure Machine Learning ortamında not defterini açın ve "Oturumu Yapılandır" seçeneğini seçin.

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

  6. Oturumu yapılandır panelinde Python paketleri'ni seçin.

  7. Conda dosyasını karşıya yükleyin:

    1. Python paketleri sekmesinde Conda dosyasını karşıya yükle'yi seçin.
    2. Conda dosyasını barındıran dizine göz atın.
    3. conda.yml'ı ve ardından Aç'ı seçin.

    Conda dosyasını barındıran dizini gösteren ekran görüntüsü.

  8. Uygula'yı seçin.

    Conda dosyasını karşıya yüklemeyi gösteren ekran görüntüsü.

Spark oturumunu başlatma

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

Örnekler için kök dizini ayarlama

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

CLI’yi ayarlama

Uygulanamaz.

Not

Özellikleri projeler arasında yeniden kullanmak için bir özellik deposu kullanırsınız. Özellik mağazalarındaki özelliklerden yararlanarak çıkarım modellerini eğitmek için bir proje çalışma alanı (Azure Machine Learning çalışma alanı) kullanırsınız. Birçok proje çalışma alanı aynı özellik depolarını paylaşabilir ve yeniden kullanabilir.

Bu öğreticide iki SDK kullanılır:

  • Özellik deposu CRUD SDK'sı

    Azure Machine Learning çalışma alanında kullandığınız SDK'nın aynısını MLClient (paket adı azure-ai-ml) kullanırsınız. Özellik deposu bir çalışma alanı türü olarak uygulanır. Sonuç olarak, bu SDK özellik depoları, özellik kümeleri ve özellik deposu varlıkları için CRUD işlemleri için kullanılır.

  • Özellik deposu çekirdek SDK'sı

    Bu SDK (azureml-featurestore), özellik kümesi geliştirme ve tüketim içindir. Bu öğreticinin sonraki adımlarında şu işlemler açıklanmaktadır:

    • Özellik kümesi belirtimi geliştirme.
    • Özellik verilerini alma.
    • Kayıtlı bir özellik kümesini listeleyin veya alın.
    • Özellik alma belirtimlerini oluşturma ve çözme.
    • Belirli bir noktaya birleşimleri kullanarak eğitim ve çıkarım verileri oluşturun.

Bu öğretici, bu SDK'ların açıkça yüklenmesini gerektirmez çünkü önceki conda.yml yönergeler bu adımı kapsar.

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

  1. Ad, konum ve diğer değerler de dahil olmak üzere özellik deposu parametrelerini ayarlayı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.

    from azure.ai.ml import MLClient
    from azure.ai.ml.entities import (
        FeatureStore,
        FeatureStoreEntity,
        FeatureSet,
    )
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    ml_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        subscription_id=featurestore_subscription_id,
        resource_group_name=featurestore_resource_group_name,
    )
    
    
    fs = FeatureStore(name=featurestore_name, location=featurestore_location)
    # wait for feature store creation
    fs_poller = ml_client.feature_stores.begin_create(fs)
    print(fs_poller.result())
  3. Azure Machine Learning için bir özellik deposu çekirdek SDK istemcisi başlatın.

    Bu öğreticinin önceki bölümlerinde açıklandığı gibi özellik deposu çekirdek SDK istemcisi özellikleri geliştirmek ve kullanmak için 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. Özellik deposundaki "Azure Machine Learning Veri Bilimci" rolünü kullanıcı kimliğinize 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.

    Özellik deposu çalışma alanında kaynak oluşturabilmesi için kullanıcı kimliğinize AzureML Veri Bilimcisi rolünü atayın. İzinlerin yayılması için biraz zaman gerekebilir.

    Daha fazla bilgi için Yönetilen özellik deposu için erişim denetimini yönetme kaynağını ziyaret edin.

    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

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

Bu adımlarda, sıralı pencere toplama tabanlı özelliklere sahip adlı transactions bir özellik kümesi oluşturursunuz:

  1. transactions Kaynak verileri keşfedin.

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

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

    Özellik kümesi belirtimi, yerel olarak geliştirip test edebilirsiniz özellik kümesinin bağımsız tanımıdır. Burada şu sıralı pencere toplama özelliklerini oluşturursunuz:

    • 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

    Ö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 bir Spark transformatörü.

    Özellik kümesi ve dönüşümler hakkında daha fazla bilgi edinmek için Yönetilen özellik deposu nedir? kaynağını ziyaret edin.

    from azureml.featurestore import create_feature_set_spec
    from azureml.featurestore.contracts import (
        DateTimeOffset,
        TransformationCode,
        Column,
        ColumnType,
        SourceType,
        TimestampColumn,
    )
    from azureml.featurestore.feature_source import ParquetFeatureSource
    
    transactions_featureset_code_path = (
        root_dir + "/featurestore/featuresets/transactions/transformation_code"
    )
    
    transactions_featureset_spec = create_feature_set_spec(
        source=ParquetFeatureSource(
            path="wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source/*.parquet",
            timestamp_column=TimestampColumn(name="timestamp"),
            source_delay=DateTimeOffset(days=0, hours=0, minutes=20),
        ),
        feature_transformation=TransformationCode(
            path=transactions_featureset_code_path,
            transformer_class="transaction_transform.TransactionFeatureTransformer",
        ),
        index_columns=[Column(name="accountID", type=ColumnType.string)],
        source_lookback=DateTimeOffset(days=7, hours=0, minutes=0),
        temporal_join_lookback=DateTimeOffset(days=1, hours=0, minutes=0),
        infer_schema=True,
    )
  3. Özellik kümesi belirtimi olarak dışarı aktarın.

    Özellik kümesi belirtimini özellik deposuna kaydetmek için bu belirtimi belirli bir biçimde kaydetmeniz gerekir.

    Oluşturulan transactions özellik kümesi belirtimini gözden geçirin. Featurestore/featuresets/accounts/spec/FeaturesetSpec.yaml belirtimini görmek için bu dosyayı dosya ağacından 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ı.

    Belirtim hakkında daha fazla bilgi edinmek için Yönetilen özellik deposundaki üst düzey varlıkları anlama ve CLI (v2) özellik kümesi YAML şema kaynaklarını anlama konusunu ziyaret edin.

    Özellik kümesi belirtiminin kalıcı hale getirilmesi başka bir avantaj sunar: özellik kümesi belirtimi kaynak denetimini destekler.

    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)

Özellik deposu varlığını kaydetme

En iyi uygulama olarak varlıklar, aynı mantıksal varlıkları kullanan özellik kümeleri arasında aynı birleştirme anahtarı tanımının kullanılmasını zorunlu kılmaya yardımcı olur. Varlıklara örnek olarak hesaplar ve müşteriler 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 Yönetilen özellik deposundaki üst düzey varlıkları anlama konusunu ziyaret edin.

  1. Özellik deposu CRUD istemcisini başlatın.

    Bu öğreticide daha önce açıklandığı gibi, MLClient bir özellik deposu varlığı oluşturmak, okumak, güncelleştirmek ve silmek için kullanılır. Burada gösterilen not defteri kodu hücre örneği, önceki bir adımda oluşturduğunuz özellik depounu arar. Burada, bu öğreticide ml_client daha önce kullandığınız değerin aynısını yeniden kullanamazsınız çünkü bu değerin kapsamı kaynak grubu düzeyindedir. Özellik deposu oluşturma için uygun kapsam belirleme önkoşullarıdır.

    Bu kod örneğinde, istemcinin kapsamı özellik deposu düzeyindedir.

    # MLClient for feature store.
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )
  2. account Varlığı özellik deposuna kaydedin.

    türünde accountbirleştirme anahtarına accountID sahip bir string varlık oluşturun.

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

İşlem özellik kümesini özellik deposuna kaydetme

Özellik kümesi varlığını özellik deposuna kaydetmek için bu kodu kullanın. 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 öğretici serisinin sonraki adımları yönetilen özellikleri kapsar.

from azure.ai.ml.entities import FeatureSetSpecification

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

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

Ö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 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üne çevrimdışı depodaki kullanıcı hesabınıza erişim verme

Depolama Blobu Veri Okuyucusu rolü, çevrimdışı depodaki kullanıcı hesabınıza atanmalıdır. Bu, kullanıcı hesabının çevrimdışı gerçekleştirme deposundan gerçekleştirilmiş özellik verilerini okuyabilmesini sağlar.

  1. 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.

  2. Özellik Deposu kullanıcı arabirimindeki Genel Bakış sayfasından çevrimdışı materyalizasyon deposu hakkında bilgi edinin. Çevrimdışı gerçekleştirme deposu kartında depolama hesabı abonelik kimliği, depolama hesabı kaynak grubu adı ve çevrimdışı gerçekleştirme deposu için depolama hesabı adı değerlerini bulabilirsiniz.

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

    Yönetilen özellik deposu için erişim denetimini yönetme kaynağını ziyaret ederek erişim denetimi hakkında daha fazla bilgi edinebilirsiniz.

    Rol ataması için bu kod hücresini yürütür. İzinlerin yayılması için biraz zaman gerekebilir.

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

Kayıtlı özellik kümesini kullanarak bir eğitim verileri DataFrame oluşturma

  1. Gözlem verilerini yükleme.

    Gözlem verileri genellikle eğitim ve çıkarım için kullanılan temel verileri içerir. Bu veriler, tam eğitim veri kaynağını oluşturmak için özellik verileriyle birleşir.

    Gözlem verileri, olayın kendisi sırasında yakalanan verilerdir. Burada işlem kimliği, hesap kimliği ve işlem tutarı değerleri dahil olmak üzere temel işlem verileri vardır. Eğitim için kullandığınızdan, ekli bir hedef değişkeni de (is_fraud) 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ı haline gelen özellikleri seçin. Ardından, eğitim verilerinin kendisini oluşturmak için özellik deposu SDK'sını kullanın.

    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

    Belirli bir noktaya birleştirme, özellikleri eğitim verilerine ekler.

Özellik kümesinde çevrimdışı gerçekleştirmeyi transactions etkinleştirme

Özellik kümesi gerçekleştirme etkinleştirildikten sonra bir geri doldurma gerçekleştirebilirsiniz. Yinelenen gerçekleştirme işleri de zamanlayabilirsiniz. Daha fazla bilgi için seri kaynağındaki üçüncü öğreticiyi ziyaret edin.

Yaml dosyasındaki spark.sql.shuffle.partitions dosyasını özellik veri boyutuna göre ayarlama

Spark yapılandırması spark.sql.shuffle.partitions , özellik kümesi çevrimdışı depoya getirildiğinde oluşturulan parquet dosyalarının sayısını (günlük) etkileyebilecek İSTEĞE BAĞLI bir parametredir. Bu parametrenin varsayılan değeri 200'dür. En iyi yöntem olarak, çok sayıda küçük parquet dosyası oluşturulmasını önle. Özellik kümesinin gerçekleştirilmesinden sonra çevrimdışı özellik alma işlemi yavaşlarsa, çevrimdışı depodaki ilgili klasöre giderek sorunun çok fazla küçük parquet dosyası (günde) içerip içermediğini denetleyin ve bu parametrenin değerini buna göre ayarlayın.

Not

Bu not defterinde kullanılan örnek veriler küçüktür. Bu nedenle, bu parametre featureset_asset_offline_enabled.yaml dosyasında 1 olarak ayarlanır.

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

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

transactions_fset_config.materialization_settings = MaterializationSettings(
    offline_enabled=True,
    resource=MaterializationComputeResource(instance_type="standard_e8s_v3"),
    spark_configuration={
        "spark.driver.cores": 4,
        "spark.driver.memory": "36g",
        "spark.executor.cores": 4,
        "spark.executor.memory": "36g",
        "spark.executor.instances": 2,
        "spark.sql.shuffle.partitions": 1,
    },
    schedule=None,
)

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

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

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

Özellik kümesi için transactions verileri geri doldurma

Daha önce açıklandığı gibi, 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.

Bu kod hücresi, tanımlı özellik penceresi için verileri geçerli Durum Yok veya Tamamlanmadı durumuna göre oluşturur.

from datetime import datetime
from azure.ai.ml.entities import DataAvailabilityStatus

st = datetime(2022, 1, 1, 0, 0, 0, 0)
et = datetime(2023, 6, 30, 0, 0, 0, 0)

poller = fs_client.feature_sets.begin_backfill(
    name="transactions",
    version="1",
    feature_window_start_time=st,
    feature_window_end_time=et,
    data_status=[DataAvailabilityStatus.NONE],
)
print(poller.result().job_ids)
# Get the job URL, and stream the job logs.
fs_client.jobs.stream(poller.result().job_ids[0])

İ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. Nesnede datetime sağlanan milisaniyeler yoksayılır.
  • Gerçekleştirme işi yalnızca özellik penceresindeki veriler, geri doldurma işi gönderilirken tanımlanan veriyle eşleşiyorsa data_status gönderilir.

Özellik kümesinden örnek verileri yazdırın. Çıkış bilgileri, verilerin gerçekleştirme deposundan alındığını gösterir. yöntemi, get_offline_features() eğitim ve çıkarım verilerini alır. Ayrıca varsayılan olarak gerçekleştirme depoyu 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, geri doldurma işlemini gerçekleştirdiğiniz özellik depounu seçin.

  4. Gerçekleştirme görevleri 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

    • 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ışı materyalleştirme 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.

  • Tek bir yedekleme işinde birden fazla veri durumunun (örneğin, ["None", "Incomplete"]) listesini sağlayabilirsiniz.

  • Dolum sırasında, tanımlanan özellik penceresi içinde kalan her veri aralığı için yeni bir materyalleştirme işi gönderilir.

  • Bir gerçekleştirme işi bekliyorsa veya bu iş henüz doldurulmamış bir veri aralığı için çalışıyorsa, bu veri aralığı için yeni 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:

    • Materialization jobs özellikleri kullanıcı arayüzüne gidin.
    • DurumuBaşarısız olan belirli bir işin Görünen adını seçin.
    • İş Genel Bakış sayfasında bulunan Ad özelliğinin altında iş ID'sini bulun. ile Featurestore-Materialization-başlar.

poller = fs_client.feature_sets.begin_backfill(
    name="transactions",
    version=version,
    job_id="<JOB_ID_OF_FAILED_MATERIALIZATION_JOB>",
)
print(poller.result().job_ids)

Çevrimdışı gerçekleştirme deposu güncelleştiriliyor

  • Ç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.

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. Ardından, bu özellikleri kullanarak model eğitimini çalıştıracaksınız.

Temizleme

Serideki beşinci öğreticide kaynakların nasıl silineceği açıklanır.

Sonraki adımlar