Öğretici 4: Çevrimiçi materyalizasyonu etkinleştirme ve çevrimiçi çıkarım yapma

Azure Machine Learning yönetilen özellik deposu özellikleri keşfetmenize, oluşturmanıza ve kullanıma hazır hale getirmenize yardımcı olur. Özellikler, çeşitli özelliklerle denemeler yaptığınız prototip oluşturma aşamasından başlayarak makine öğrenmesi yaşam döngüsünü birbirine bağlar. Yaşam döngüsü, modellerinizi dağıttığınız kullanıma hazır hale getirme aşamasına devam eder ve çıkarım adımları özellik verilerini arar. Yönetilen özellik deposu hakkında daha fazla bilgi için bkz. Yönetilen özellik deposu nedir?

Önemli

Redis için Azure Önbellek tüm SKU'lar için kullanımdan kaldırma zaman çizelgesini duyurdu. Mevcut Redis için Azure Önbellek örneklerinizi en kısa sürede Azure Yönetilen Redis'e taşımanızı öneririz.

Geçiş kılavuzu:

Kullanımdan kaldırma hakkında daha fazla bilgi için:

Öğretici 1'de özel dönüştürmelerle bir özellik kümesi belirtimi oluşturma ve ardından bu özellik kümesini kullanarak eğitim verileri oluşturma, gerçekleştirmeyi etkinleştirme ve bir geri doldurma gerçekleştirme işlemlerinin nasıl gerçekleştirileceği gösterildi. Öğretici 2,model performansını geliştirmek için özelliklerle deneme yapmayı ve ardından özellikleri kullanan bir modeli eğitip kaydetmeyi gösterdi. Öğretici 3'te özellik kümesi için yinelenen gerçekleştirmenin nasıl etkinleştirileceği transactions ve toplu çıkarım işlem hattının nasıl çalıştırileceği gösterilmiştir.

Bu öğreticide şunları yapacaksınız:

  • Redis için Azure Önbellek ayarla
  • Özellik deposuna çevrimiçi malzeme deposu olarak bir önbellek bağlayın ve gerekli izinleri verin.
  • Çevrimiçi mağazaya bir özellik kümesi entegre etme
  • Sahte verilerle çevrimiçi dağıtımı test edin

Önkoşullar

Not

Bu öğreticide Serverless Spark Compute içeren bir Azure Machine Learning not defteri kullanılır.

  • Bu seride 1 ile 3 arasında Öğreticiler'i tamamladığınızdan emin olun. Bu öğretici, önceki öğreticilerde oluşturduğunuz özellik deposunu ve diğer kaynakları yeniden kullanır.

Kurulum

Bu öğreticide Python özellik deposu çekirdek SDK'sı (azureml-featurestore) kullanılır. Python SDK'sı özellik depolarında, özellik kümelerinde ve özellik deposu varlıklarında oluşturma, okuma, güncelleştirme ve silme (CRUD) işlemleri için kullanılır.

Burada gösterilen kurulum yönergelerinde, online.yml dosyası bunları kapsadığından, bu öğretici için bu kaynakları açıkça yüklemenize gerek yoktur.

  1. Azure Machine Learning Spark not defterini yapılandırın.

    Yeni bir not defteri oluşturabilir ve bu öğreticideki yönergeleri adım adım yürütebilirsiniz. Ayrıca, mevcut not defterini `featurestore_sample/notebooks/sdk_only/4.Enable-online-store-run-inference.ipynb` açabilir ve çalıştırabilirsiniz. Bu öğreticiyi açık tutun ve belge bağlantıları ve daha fazla açıklama için bu öğreticiye başvurun.

    1. Üst gezinti bölmesindeki İşlem açılan listesinde Sunucusuz Spark İşlem'i seçin.

    2. Oturumu yapılandırın:

      1. azureml-examples/sdk/python/featurestore-sample/project/env/online.yml dosyasını yerel makinenize indirin
      2. oturum yapılandırması üst gezinti çubuğunda Python paketleri seçin
      3. Conda dosyasını karşıya yükle'yi seçin
      4. Öğretici 1'de conda.yml dosyasını karşıya yükleme konusunda açıklanan adımları kullanarak yerel makinenizden online.yml dosyasını karşıya yükleyin.
      5. İsteğe bağlı olarak, önkoşul tekrarlarını sık sık yapmamak için oturum zaman aşımını (boşta kalma süresi) artırın.
  2. Bu kod hücresi Spark oturumunu başlatır. Tüm bağımlılıkları yüklemek ve Spark oturumunu başlatmak için yaklaşık 10 dakika gerekir.

    # Run this cell to start the spark session (any code block will start the session ). This can take approximately 10 mins.
    print("start spark session")
  3. Örnekler için kök dizini ayarlama

    import os
    
    # Please update the dir to ./Users/<your_user_alias> (or any custom directory you uploaded the samples to).
    # You can find the name from the directory structure in the left 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")
  4. Proje çalışma alanı için MLClient öğesini başlatın ve öğretici not defterini çalıştırın. MLClient oluşturma, okuma, güncelleştirme ve silme (CRUD) işlemleri için kullanılır.

    import os
    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    project_ws_sub_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    project_ws_rg = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    project_ws_name = os.environ["AZUREML_ARM_WORKSPACE_NAME"]
    
    # Connect to the project workspace
    ws_client = MLClient(
        AzureMLOnBehalfOfCredential(), project_ws_sub_id, project_ws_rg, project_ws_name
    )
  5. Özellik deposu çalışma alanını, özellik deposu çalışma alanındaki oluşturma, okuma, güncelleme ve silme (CRUD) işlemleri için başlatın.

    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    # Feature store
    featurestore_name = (
        "<FEATURESTORE_NAME>"  # use the same name from part #1 of the tutorial
    )
    featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    
    # Feature store MLClient
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )

    Not

    Özellik deposu çalışma alanı, projeler arasında özelliklerin yeniden kullanılmasını destekler. Kullanılan geçerli çalışma alanı olan proje çalışma alanı, modelleri eğitmek ve çıkarabilmek için belirli bir özellik deposundaki özelliklerden yararlanıyor. Birçok proje çalışma alanı, aynı özellik deposu çalışma alanını paylaşabilir ve yeniden kullanabilir.

  6. Daha önce belirtildiği gibi, bu öğreticide Python özellik deposu çekirdek SDK'sı (azureml-featurestore) kullanılmaktadır. Bu başlatılan SDK istemcisi, özellik depolarında, özellik kümelerinde ve özellik deposu varlıklarında oluşturma, okuma, güncelleştirme ve silme (CRUD) işlemleri için kullanılır.

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

Redis için Azure Önbellek'i hazırlayın

Bu öğreticide çevrimiçi gerçekleştirme deposu olarak Redis için Azure Önbellek kullanılır. Yeni bir Redis örneği oluşturabilir veya mevcut bir örneği yeniden kullanabilirsiniz.

  1. Redis için Azure Önbellek kaynağının değerlerini, çevrimiçi gerçekleştirme deposu olarak kullanılacak şekilde ayarlayın. Bu kod hücresinde, oluşturulacak veya yeniden kullanılan Redis için Azure Önbellek kaynağının adını tanımlayın. Diğer varsayılan ayarları geçersiz kılabilirsiniz.

    ws_location = ws_client.workspaces.get(ws_client.workspace_name).location
    
    redis_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    redis_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    redis_name = "<REDIS_NAME>"
    redis_location = ws_location
  2. Yeni bir Redis örneği oluşturabilirsiniz. Uygun Redis Cache katmanını (temel, standart, premium veya kurumsal) seçebilirsiniz. Seçtiğiniz önbellek katmanı için kullanılabilir bir SKU ailesi seçin. Katmanlar ve önbellek performansı hakkında daha fazla bilgi için bu kaynağı ziyaret edin. SKU katmanları ve Azure önbellek aileleri hakkında daha fazla bilgi için bu kaynak adresini ziyaret edin.

    Redis için Azure Önbellek'i premium katman, SKU ailesi P ve önbellek kapasitesi 2 ile oluşturmak için bu kod hücresini çalıştırın. Redis örneğinin hazırlanması 5 ile 10 dakika arasında sürebilir.

    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),
            ),
        )
        .result()
        .id
    )
    
    print(redis_arm_id)
  3. İsteğe bağlı olarak, bu kod hücresi önceden tanımlanmış bir adla var olan bir Redis örneğini yeniden kullanıyor.

    redis_arm_id = "/subscriptions/{sub_id}/resourceGroups/{rg}/providers/Microsoft.Cache/Redis/{name}".format(
        sub_id=redis_subscription_id,
        rg=redis_resource_group_name,
        name=redis_name,
    )

Özellik deposuna çevrimiçi materyalizasyon deposu eklemek

Özellik deposunun, çevrimiçi gerçekleştirme deposu olarak kullanılması için Redis için Azure Önbellek'e bağlı bir kaynak olarak ihtiyacı vardır. Bu kod hücresi bu adımı işler.

from azure.ai.ml.entities import (
    ManagedIdentityConfiguration,
    FeatureStore,
    MaterializationStore,
)

online_store = MaterializationStore(type="redis", target=redis_arm_id)

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

fs = FeatureStore(
    name=featurestore_name,
    online_store=online_store,
)

fs_poller = ml_client.feature_stores.begin_create(fs)
print(fs_poller.result())

Not

Özellik deposu güncelleştirmesi sırasında, yalnızca grant_materiaization_permissions=True ayarının yapılandırılması, UAI için gerekli RBAC izinlerini vermez. UAI'ye rol atamaları yalnızca aşağıdakilerden biri güncelleştirildiğinde gerçekleşir:

  • Materyalizasyon kimliği
  • Çevrimdışı depolama hedefi
  • Çevrimiçi mağaza hedefi

Bunun SDK ile nasıl yapıldığını gösteren bir örnek için Tutorial: Yönetilen Özellik Deposu Sağlama için Farklı Yaklaşımlar kaynağını ziyaret edin.

accounts Özellik kümesi verilerini çevrimiçi mağazaya taşıma

Özellik kümesinde malzeme hale getirmeyi etkinleştir

Bu öğretici serisinin önceki bölümlerinde hesaplar özellik kümesini önceden derlenmiş özelliklere sahip olduğundan ve yalnızca toplu çıkarım senaryolarında kullanıldığı için gerçekleştirmemiştiniz. Bu kod hücresi, özelliklerin düşük gecikme süreli erişimle çevrimiçi mağazada kullanılabilir duruma gelmesi için çevrimiçi gerçekleştirmeyi etkinleştirir. Tutarlılık için çevrimdışı materyalleştirmeyi de etkinleştirir. Çevrimdışı kullanılabilir hale getirmeyi etkinleştirme isteğe bağlıdır.

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

# Turn on both offline and online materialization on the "accounts" featureset.

accounts_fset_config = fs_client._featuresets.get(name="accounts", version="1")

accounts_fset_config.materialization_settings = MaterializationSettings(
    offline_enabled=True,
    online_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,
    },
    schedule=None,
)

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

Özellik kümesini tamamla account

begin_backfill işlevi, verileri bu özellik seti için etkinleştirilmiş tüm gerçekleştirme depolarına doldurur. Burada hem çevrimdışı hem de çevrimiçi gerçekleştirme etkinleştirilmiştir. Bu kod hücresi, verileri hem çevrimiçi hem de çevrimdışı biçimlendirme depolarına geri doldurur.

from datetime import datetime, timedelta

# Trigger backfill on the "accounts" feature set.
# Backfill from 01/01/2020 to all the way to 3 hours ago.

st = datetime(2020, 1, 1, 0, 0, 0, 0)
et = datetime.now() - timedelta(hours=3)

poller = fs_client.feature_sets.begin_backfill(
    name="accounts",
    version="1",
    feature_window_start_time=st,
    feature_window_end_time=et,
    data_status=["None"],
)
print(poller.result().job_ids)

İpucu

  • feature_window_start_time ve feature_window_end_time ayrıntı düzeyi saniyeyle sınırlıdır. Nesnede sağlanan datetime içindeki tüm milisaniye değerleri göz ardı edilir.
  • Bir gerçekleştirme işi yalnızca, özellik penceresindeki veriler geri doldurma işi gönderilirken tanımlanan data_status ile eşleştiği takdirde gönderilir.

Bu kod hücresi, geri doldurma işinin tamamlanmasını izler. daha önce sağlanan Redis için Azure Önbellek premium katmanıyla bu adımın tamamlanması yaklaşık 10 dakika sürebilir.

# Get the job URL, and stream the job logs.
# With PREMIUM Redis SKU, SKU family "P", and cache capacity 2,
# it takes approximately 10 minutes to complete.
fs_client.jobs.stream(poller.result().job_ids[0])

transactions Özellik kümesi verilerini çevrimiçi mağazaya taşıma

Bu öğretici serisinin önceki bölümlerinde, transactions özellik kümesi verilerini çevrimdışı gerçekleştirme deposuna gerçekleştirdiniz.

  1. Bu kod hücresi, özellik kümesinin transactions çevrimiçi gerçekleştirilmesini sağlar.

    # Enable materialization to online store for the "transactions" feature set.
    
    transactions_fset_config = fs_client._featuresets.get(name="transactions", version="1")
    transactions_fset_config.materialization_settings.online_enabled = True
    
    fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)
    print(fs_poller.result())
  2. Bu kod hücresi, her iki deponun da en son verilere sahip olduğundan emin olmak için verileri hem çevrimiçi hem de çevrimdışı malzeme deposuna geri doldurur. Bu serinin Öğretici 3'te ayarladığınız yinelenen materyalizasyon işi, şimdi hem çevrimiçi hem de çevrimdışı materyalizasyon depolarında verileri materyalize ediyor.

    # Trigger backfill on the "transactions" feature set to fill in the online/offline store.
    # Backfill from 01/01/2020 to all the way to 3 hours ago.
    
    from datetime import datetime, timedelta
    from azure.ai.ml.entities import DataAvailabilityStatus
    
    st = datetime(2020, 1, 1, 0, 0, 0, 0)
    et = datetime.now() - timedelta(hours=3)
    
    
    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)

    Bu kod hücresi, geri doldurma işinin tamamlanmasını izler. Daha önce sağlanan premium katmanı Redis için Azure Önbellek kullanarak bu adımın tamamlanması yaklaşık beş dakika sürebilir.

    # Get the job URL, and stream the job logs.
    # With PREMIUM Redis SKU, SKU family "P", and cache capacity 2,
    # it takes approximately 5 minutes to complete.
    fs_client.jobs.stream(poller.result().job_ids[0])

Çevrimiçi özellik gerçekleştirilmesini daha ayrıntılı keşfedin

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

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

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

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

  4. Malzemeleştirme işleri sekmesini seçin

    Malzemeleşme işlerinin kullanıcı arabirimini gösteren özellik kümesi ekran görüntüsü.

  • Veri maddileştirme durumu 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 durum görüntüsünün çevrimdışı malzemeleşme deposunda 16 veri aralığı vardır.
  • Verilerinizin 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.
  • Geri doldurma sırasında, tanımlanan özellik penceresine denk gelen her veri aralığı için yeni bir gerçekleştirme işi gönderilir.
  • Bir malzemeleştirme işi zaten beklemedeyse veya henüz doldurulmamış bir veri aralığında çalışıyorsa, bir veri aralığı için yeni bir iş gönderilmez.

Çevrimiçi maddeleştirme mağazasını güncelleştirme

  • Özellik deposu seviyesinde bir online maddileştirme deposunu güncellemek için, özellik deposundaki tüm özellik kümelerinde online maddileştirme devre dışı bırakılmalıdır.
  • Bir özellik kümesinde çevrimiçi gerçekleştirme devre dışı bırakılırsa, çevrimiçi gerçekleştirme deposundaki zaten gerçekleştirilmiş verilerin gerçekleşme durumu sıfırlanır. Bu, önceden oluşturulmuş verileri kullanılamaz hale getirir. Çevrimiçi gerçekleştirmeyi etkinleştirdikten sonra gerçekleştirme işlerinizi yeniden göndermeniz gerekir.
  • Bir özellik kümesi için başlangıçta yalnızca çevrimdışı gerçekleştirme etkinleştirildiyse ve çevrimiçi gerçekleştirme daha sonra etkinleştirildiyse:
    • Çevrimiçi depodaki verilerin varsayılan veri gerçekleştirme durumu None olacaktır.
    • İlk çevrimiçi gerçekleştirme işi gönderildiğinde, çevrimiçi özellikleri hesaplamak için varsa çevrimdışı depoda zaten gerçekleştirilmiş veriler kullanılır.
    • Çevrimiçi gerçekleştirme için veri aralığı, çevrimdışı depoda bulunan zaten gerçekleştirilmiş verilerin veri aralığıyla kısmen çakışıyorsa, veri aralığının örtüşen ve örtüşmeyen bölümleri için ayrı gerçekleştirme işleri gönderilir.

Yerel olarak test edin

Şimdi, çevrimiçi gerçekleştirme mağazasından özellikleri aramak için geliştirme ortamınızı kullanın. Sunucusuz Spark İşlem'e eklenen öğretici not defteri, geliştirme ortamı görevi görür.

Bu kod hücresi, mevcut özellik alma belirtiminden özellik listesini ayrıştırıyor.

# Parse the list of features from the existing feature retrieval specification.
feature_retrieval_spec_folder = root_dir + "/project/fraud_model/feature_retrieval_spec"

features = featurestore.resolve_feature_retrieval_spec(feature_retrieval_spec_folder)

features

Bu kod, özellik değerlerini çevrimiçi materyalizasyon deposundan alır.

from azureml.featurestore import init_online_lookup
import time

# Initialize the online store client.
init_online_lookup(features, AzureMLOnBehalfOfCredential())

Test için bazı gözlem sonuçları hazırlayın ve bu verileri kullanarak çevrimiçi materyalizasyon mağazasındaki özellikleri bulun. Çevrimiçi arama sırasında, gözlem örneği verilerinde tanımlanan anahtarlar (accountID) Redis'te mevcut olmayabilir (nedeniyle TTL). Bu durumda:

  1. Azure portalını açma

  2. Redis örneğine gidin

  3. Redis örneğinin konsolunu açın ve komutuyla KEYS * mevcut anahtarları denetleyin

  4. accountID Örnek gözlem verilerindeki değerleri mevcut anahtarlarla değiştirin

    import pyarrow
    from azureml.featurestore import get_online_features
    
    # Prepare test observation data
    obs = pyarrow.Table.from_pydict(
        {"accountID": ["A985156952816816", "A1055521248929430", "A914800935560176"]}
    )
    
    # Online lookup:
    # It may happen that the keys defined in the observation sample data above does not exist in the Redis (due to TTL).
    # If this happens, go to Azure portal and navigate to the Redis instance, open its console and check for existing keys using command "KEYS *"
    # and replace the sample observation data with the existing keys.
    df = get_online_features(features, obs)
    df

Bu adımlarda çevrimiçi mağazadan özellikler araştırılmış. Sonraki adımda, Azure Machine Learning yönetilen çevrimiçi uç noktayla çevrimiçi özellikleri test edin.

yönetilen Azure Machine Learning çevrimiçi uç noktasından çevrimiçi özellikleri test edin

Yönetilen çevrimiçi uç nokta, modelleri çevrimiçi/gerçek zamanlı çıkarım için dağıtır ve puanlar. Kullanılabilir herhangi bir çıkarım teknolojisini kullanabilirsiniz; örneğin, Kubernetes.

Bu adım şu eylemleri içerir:

  1. yönetilen Azure Machine Learning çevrimiçi uç nokta oluşturun.
  2. Gerekli rol tabanlı erişim denetimi (RBAC) izinlerini verin.
  3. Bu öğretici serisinin 3. dersinde eğitmiş olduğunuz modeli dağıtın. Bu adımda kullanılan puanlama betiği, çevrimiçi özellikleri aramak için kod içerir.
  4. Örnek veriler ile modeli puanlayın.

yönetilen Azure Machine Learning çevrimiçi uç nokta oluşturma

Yönetilen çevrimiçi uç noktalar hakkında daha fazla bilgi edinmek için bu kaynağı ziyaret edin. Yönetilen Feature Store API'siyle diğer çıkarım platformlarındaki çevrimiçi özellikleri de arayabilirsiniz.

Bu kod hücresi yönetilen çevrimiçi uç noktayı tanımlar fraud-model .

from azure.ai.ml.entities import (
    ManagedOnlineDeployment,
    ManagedOnlineEndpoint,
    Model,
    CodeConfiguration,
    Environment,
)


endpoint_name = "<ENDPOINT_NAME>"

endpoint = ManagedOnlineEndpoint(name=endpoint_name, auth_mode="key")

Bu kod hücresi, önceki kod hücresinde tanımlanan yönetilen çevrimiçi uç noktayı oluşturur.

ws_client.online_endpoints.begin_create_or_update(endpoint).result()

Gerekli RBAC izinlerini verin

Burada, Redis örneği ve özellik deposunda yönetilen çevrimiçi uç noktaya gerekli RBAC izinlerini verirsiniz. Model dağıtımındaki skorlama kodu, yönetilen Özellik Mağazası API'si ile çevrimiçi depodaki özellikleri başarıyla aramak için bu RBAC izinlerine ihtiyaç duyar.

Yönetilen çevrimiçi uç noktanın kimliğini alma

Bu kod hücresi, yönetilen çevrimiçi uç noktanın yönetilen kimliğini alır:

# Get managed identity of the managed online endpoint.
endpoint = ws_client.online_endpoints.get(endpoint_name)

model_endpoint_msi_principal_id = endpoint.identity.principal_id
model_endpoint_msi_principal_id

Contributor rolünü Redis için Azure Önbellek çevrimiçi uç nokta yönetilen kimliğine verme

Redis örneğinde çevrimiçi uç noktanın yönetilen kimliğine Contributor rolü atanır. Redis çevrimiçi deposundaki verileri gerçekleştirmek için bu RBAC izni gereklidir.

from azure.core.exceptions import ResourceExistsError
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.models import RoleAssignmentCreateParameters
from uuid import uuid4

auth_client = AuthorizationManagementClient(
    AzureMLOnBehalfOfCredential(), redis_subscription_id
)

scope = f"/subscriptions/{redis_subscription_id}/resourceGroups/{redis_resource_group_name}/providers/Microsoft.Cache/Redis/{redis_name}"


# The role definition ID for the "contributor" role on the redis cache
# You can find other built-in role definition IDs in the Azure documentation
role_definition_id = f"/subscriptions/{redis_subscription_id}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"

# Generate a random UUID for the role assignment name
role_assignment_name = str(uuid4())

# Set up the role assignment creation parameters
role_assignment_params = RoleAssignmentCreateParameters(
    principal_id=model_endpoint_msi_principal_id,
    role_definition_id=role_definition_id,
    principal_type="ServicePrincipal",
)

# Create the role assignment
try:
    # Create the role assignment
    result = auth_client.role_assignments.create(
        scope, role_assignment_name, role_assignment_params
    )
    print(
        f"Redis RBAC granted to managed identity '{model_endpoint_msi_principal_id}'."
    )
except ResourceExistsError:
    print(
        f"Redis RBAC already exists for managed identity '{model_endpoint_msi_principal_id}'."
    )

Çevrimiçi uç noktanın yönetilen kimliğine özellik deposunda AzureML Veri Bilimci rolü verin

Bu kod hücresi, özellik deposundaki çevrimiçi uç nokta yönetilen kimliğine AzureML Veri Bilimci rolü verir. Modelin çevrimiçi uç noktaya başarılı dağıtımı için bu RBAC izni gereklidir.

auth_client = AuthorizationManagementClient(
    AzureMLOnBehalfOfCredential(), featurestore_subscription_id
)

scope = f"/subscriptions/{featurestore_subscription_id}/resourceGroups/{featurestore_resource_group_name}/providers/Microsoft.MachineLearningServices/workspaces/{featurestore_name}"

# The role definition ID for the "AzureML Data Scientist" role.
# You can find other built-in role definition IDs in the Azure documentation.
role_definition_id = f"/subscriptions/{featurestore_subscription_id}/providers/Microsoft.Authorization/roleDefinitions/f6c7c914-8db3-469d-8ca1-694a8f32e121"

# Generate a random UUID for the role assignment name.
role_assignment_name = str(uuid4())

# Set up the role assignment creation parameters.
role_assignment_params = RoleAssignmentCreateParameters(
    principal_id=model_endpoint_msi_principal_id,
    role_definition_id=role_definition_id,
    principal_type="ServicePrincipal",
)

# Create the role assignment
try:
    # Create the role assignment
    result = auth_client.role_assignments.create(
        scope, role_assignment_name, role_assignment_params
    )
    print(
        f"Feature store RBAC granted to managed identity '{model_endpoint_msi_principal_id}'."
    )
except ResourceExistsError:
    print(
        f"Feature store RBAC already exists for managed identity '{model_endpoint_msi_principal_id}'."
    )

Modeli çevrimiçi uç noktaya dağıtma

Puanlama betiğini project/fraud_model/online_inference/src/scoring.pygözden geçirin. Puanlama betiği

  1. Model eğitimi sırasında modelle birlikte paketlenmiş özellik alma belirtiminden özellik meta verilerini yükler. Bu serinin 3. dersinde bu görev ele alınmıştır. Belirtim hem transactions hem de accounts özellik kümelerinden özelliklere sahiptir.
  2. Giriş çıkarım isteği alındığında istekteki dizin anahtarlarını kullanarak çevrimiçi özellikleri arar. Bu durumda, her iki özellik kümesi için de dizin sütunu olur accountID.
  3. Çıkarımı gerçekleştirmek için özellikleri modele geçirir ve yanıtı döndürür. Yanıt, değişkenini is_fraudtemsil eden bir boole değeridir.

Ardından bu kod hücresini yürüterek model dağıtımı için yönetilen bir çevrimiçi dağıtım tanımı oluşturun.

deployment = ManagedOnlineDeployment(
    name="green",
    endpoint_name=endpoint_name,
    model="azureml:fraud_model:1",
    code_configuration=CodeConfiguration(
        code=root_dir + "/project/fraud_model/online_inference/src/",
        scoring_script="scoring.py",
    ),
    environment=Environment(
        conda_file=root_dir + "/project/fraud_model/online_inference/conda.yml",
        image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
    ),
    instance_type="Standard_DS3_v2",
    instance_count=1,
)

Modeli bu kod hücresiyle çevrimiçi uç noktaya dağıtın. Dağıtım dört ila beş dakika sürebilir.

# Model deployment to online enpoint may take 4-5 minutes.
ws_client.online_deployments.begin_create_or_update(deployment).result()

Sahte verilerle çevrimiçi dağıtımı test edin

Çevrimiçi dağıtımı sahte verilerle test etmek için bu kod hücresini çalıştırın. Hücre çıkışı olarak 0 veya 1 göstermelidir.

# Test the online deployment using the mock data.
sample_data = root_dir + "/project/fraud_model/online_inference/test.json"
ws_client.online_endpoints.invoke(
    endpoint_name=endpoint_name, request_file=sample_data, deployment_name="green"
)

Temizleme

Öğretici 5: Özel bir kaynakla özellik kümesi geliştirme , kaynakların nasıl silineceği hakkında bilgi sağlar.

Sonraki adımlar