Özellikler kümesi somutlaştırma kavramları

Malzemeleştirme, kaynak verilerden özellik değerlerini hesaplar. Başlangıç saati ve bitiş saati değerleri bir özellik penceresi tanımlar. Bir gerçekleştirme işi, bu özellik penceresindeki özellikleri hesaplar. Materialize edilmiş özellik değerleri daha sonra çevrimiçi veya çevrimdışı bir materialize etme deposunda saklanır. Veri gerçekleştirme işleminden sonra, tüm özellik sorguları bu değerleri gerçekleştirme deposundan kullanabilir.

Gerçekleştirme olmadan, çevrimdışı bir özellik kümesi sorgusu, sorgu değerleri döndürmeden önce özellikleri hesaplamak için dönüşümleri kaynak üzerinde anında uygular. Bu işlem prototip oluşturma aşamasında iyi çalışır. Ancak, bir üretim ortamında eğitim ve çıkarım işlemleri için, eğitim veya çıkarım öncesinde özelliklerin gerçekleştirilmesi gerekir. Bu aşamada gerçekleştirilmesi daha fazla güvenilirlik ve kullanılabilirlik sağlar.

Özellik somutlaştırmasını keşfetme

Gerçekleştirme işleri kullanıcı arabirimi, çevrimdışı ve çevrimiçi gerçekleştirme depolarındaki veri gerçekleştirme durumunu ve gerçekleştirme işlerinin listesini gösterir.

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

Özellik penceresinde:

  • Üstteki zaman serisi grafiği, hem çevrimdışı hem de çevrimiçi mağazalar için özellik penceresine giren veri aralıklarını ve gerçekleştirme durumunu gösterir.
  • Alttaki iş listesi, seçilen özellik penceresiyle çakışan işleme pencerelerine sahip tüm gerçekleştirme işlerini gösterir.

Veri somutlaştırma durumu ve veri aralığı

Veri aralığı, özellik kümesinin özellik değerlerini şu durumlardan biriyle gerçekleştirdiği bir zaman penceresidir:

  • Tam (yeşil) - başarılı veri materyalizasyonu
  • Eksik (kırmızı) - Bu veri aralığı için iptal edilmiş veya başarısız olmuş bir ya da daha fazla işleme işi
  • Beklemede (mavi) - Bu veri aralığı için bir veya birden fazla maddeleştirme görevi yürütülüyor.
  • Hiçbiri (gri) - bu veri aralığı için hiçbir oluşturma işlemi gönderilmedi

Gerçekleştirme işleri özellik kümesi için çalıştırıldığında veri aralıkları oluşturur veya birleştirir:

  • Zaman çizelgesinde iki veri aralığı sürekli olduğunda ve aynı veri gerçekleştirme durumuna sahipse, bunlar tek bir veri aralığına dönüşür
  • Bir veri aralığında, özellik verilerinin bir bölümü yeniden gerçekleştirildiğinde ve bu bölüm farklı bir veri gerçekleştirme durumu aldığında, bu veri aralığı birden çok veri aralığına bölünür

Bir kullanıcı bir özellik penceresi seçtiğinde, bu pencerede farklı veri gerçekleştirme durumlarına sahip birden çok veri aralığı görünebilir. Ayrıca, zaman çizelgesinde kopuk olan birden çok veri aralığı da görünebilir. Örneğin, önceki anlık görüntüde çevrimdışı gerçekleştirme deposundaki tanımlı özellik penceresi için 16 veri aralığı vardır.

Belirli bir zamanda, bir özellik kümesinin en fazla 2.000 veri aralığı olabilir. Bir özellik kümesi bu sınıra ulaştığında, artık gerçekleştirme işleri çalıştırılamaz. Daha sonra, kullanıcıların materyalizasyonun etkin olduğu yeni bir sürüm özellik kümesi oluşturması gerekir. Yeni özellik kümesi sürümü için çevrimdışı ve çevrimiçi mağazalardaki özellikleri sıfırdan oluşturun.

Sınırı önlemek için kullanıcıların veri aralıklarındaki boşlukları doldurmak için önceden geri doldurma işleri çalıştırması gerekir. Bu, veri aralıklarını birleştirir ve toplam sayıyı azaltır.

Veri gerçekleştirme işleri

Önemli

Özellik deposu malzemeleştirme işleri Apache Spark kullanılarak yapılır. Apache Spark 3.3 için Azure Synapse Runtime, 31 Mart 2025'te destek sonuna ulaştı. Gerçekleştirme işleriniz için Apache Spark 3.4 veya üzerini kullanın.

Veri gerçekleştirme işini çalıştırmadan önce, özellik kümesi düzeyinde çevrimdışı ve/veya çevrimiçi veri gerçekleştirmeleri etkinleştirin.

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

Veri gerçekleştirme işlerini şu şekilde gönderebilirsiniz:

  • geri doldurma işi - el ile gönderilen toplu gerçekleştirme işi
  • yinelenen bir materyalizasyon işi - planlanmış bir aralıkta tetiklenen otomatik bir materyalizasyon işi.

Uyarı

Çevrimdışı ve/veya çevrimiçi oluşturulmuş veriler, özellik kümesi düzeyinde çevrimdışı ve/veya çevrimiçi veri oluşturma devre dışı bırakılırsa artık kullanılamaz. Çevrimdışı ve/veya çevrimiçi gerçekleştirme deposundaki veri gerçekleştirme durumu şu duruma sıfırlanacaktır: None.

Doldurma işlerini şu şekilde gönderebilirsiniz:

  • Veri gerçekleştirme durumu
  • İptal edilen veya başarısız olan bir gerçekleştirme işinin iş kimliği

Veri gerçekleştirme durumuna göre veri geri doldurma

Kullanıcılar aşağıdakilerle bir geri doldurma isteği gönderebilir:

  • Veri gerçekleştirme durum değerlerinin listesi - Tamamlanmadı, Tamamlandı veya Yok
  • Özellik penceresi (isteğe bağlı)
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)

Geri doldurma isteği gönderildikten sonra, eşleşen veri gerçekleştirme durumuna (Eksik, Tamamlandı veya Yok) sahip her veri aralığı için yeni bir gerçekleştirme işi oluşturulur. Ayrıca, ilgili veri aralıkları tanımlı özellik penceresine girmelidir. Veri gerçekleştirme durumu Pending bir veri aralığı içinse, bu aralık için hiçbir gerçekleştirme işi gönderilmez.

Özellik penceresinin hem başlangıç saati hem de bitiş saati, geri doldurma isteğinde isteğe bağlıdır:

  • Özellik penceresi başlangıç zamanı sağlanmadıysa, başlangıç zamanı, veri gerçekleştirme durumu olmayan ilk veri aralığınınNonebaşlangıç zamanı olarak tanımlanır.
  • Özellik penceresi bitiş saati sağlanmadıysa, bitiş saati, veri gerçekleştirme durumu None olmayan son veri aralığının bitiş saati olarak belirlenir.

Not

Bir özellik kümesi için hiçbir geri doldurma veya yinelenen iş gönderilmediyse, ilk geri doldurma işi bir özellik penceresi başlangıç saati ve bitiş saati ile gönderilmelidir.

Bu örnekte şu geçerli veri aralığı ve gerçekleştirme durumu değerleri vardır:

Başlama zamanı Bitiş saati Veri gerçekleştirme durumu
2025-04-01T04:00:00.000 2025-04-02T04:00:00.000 None
2025-04-02T04:00:00.000 2025-04-03T04:00:00.000 Incomplete
2025-04-03T04:00:00.000 2025-04-04T04:00:00.000 None
2025-04-04T04:00:00.000 2025-04-05T04:00:00.000 Complete
2025-04-05T04:00:00.000 2025-04-06T04:00:00.000 None

Bu geri doldurma isteği şu değerlere sahiptir:

  • Veri gerçekleştirme data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
  • Özellik penceresi başlangıcı = 2025-04-02T12:00:00.000
  • Özellik penceresi sonu = 2025-04-04T12:00:00.000

Şu gerçekleştirme işlerini kurar:

  • İş 1: işlem özelliği penceresi [2025-04-02T12:00:00.000, 2025-04-03T04:00:00.000)
  • İş 2: işlem özelliği penceresi [2025-04-04T04:00:00.000, 2025-04-04T12:00:00.000)

her iki iş de başarıyla tamamlanırsa, yeni veri aralığı ve gerçekleştirme durumu değerleri şöyle olur:

Başlama zamanı Bitiş saati Veri gerçekleştirme durumu
2025-04-01T04:00:00.000 2025-04-02T04:00:00.000 None
2025-04-02T04:00:00.000 2025-04-02T12:00:00.000 Incomplete
2025-04-02T12:00:00.000 2025-04-03T04:00:00.000 Complete
2025-04-03T04:00:00.000 2025-04-04T04:00:00.000 None
2025-04-04T04:00:00.000 2025-04-05T04:00:00.000 Complete
2025-04-05T04:00:00.000 2025-04-06T04:00:00.000 None

2025-04-02 günlerinde yeni bir veri aralığı oluşturulur, çünkü o günün yarısı artık farklı bir gerçekleştirme durumuna sahiptir: Complete. 2025-04-04 tarihinde günün yarısı boyunca yeni bir materyalizasyon işi çalıştırıldı, ancak materyalizasyon durumu değişmediğinden veri aralığı değiştirilmedi (bölünmedi).

Kullanıcı, özellik penceresinin başlangıç ve bitiş saatini ayarlamadan yalnızca veri gerçekleştirme data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]ile bir geri doldurma isteğinde bulunursa, istek bu bölümün önceki bölümlerinde belirtilen parametrelerin varsayılan değerini kullanır ve şu işleri oluşturur:

  • İş 1: işlem özelliği penceresi [2025-04-02T04:00:00.000, 2025-04-03T04:00:00.000)
  • İş 2: işlem özelliği penceresi [2025-04-04T04:00:00.000, 2025-04-05T04:00:00.000)

Bu en son istek işlerinin özellik penceresini ve önceki örnekte gösterilen istek işlerini karşılaştırın.

İş kimliğine göre veri tamamlama

Bir iş kimliğiyle bir geri doldurma isteği de oluşturulabilir. Bu, başarısız veya iptal edilmiş bir gerçekleştirme işini yeniden denemenin kullanışlı bir yoludur. İlk olarak, yeniden denenecek işin iş kimliğini bulun:

  • Özellik kümesi Gerçekleştirme işleri kullanıcı arabirimine gidin
  • Belirli bir işin Görünen adı ve BaşarısızDurum değerine sahip olanını seçin
  • İş Genel Bakış sayfasında, Ad özelliği altında ve Featurestore-Materialization- ile başlayan ilgili iş kimliği değerini bulun.

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

Başarısız veya iptal edilmiş bir materyalizasyon işinin iş kimliğine sahip bir geri doldurma görevi gönderebilirsiniz. Bu durumda, özgün başarısız veya iptal edilen gerçekleştirme işi için özellik penceresi veri durumu Incomplete olmalıdır. Bu koşul karşılanmazsa, ID'ye göre doldurma işi bir kullanıcı hatasıyla sonuçlanır. Örneğin, başarısız bir gerçekleştirme işinin bir özellik penceresi başlangıç zamanı 2025-04-01T04:00:00.000 değeri ve bitiş zamanı 2025-04-09T04:00:00.000 değeri olabilir. Bu başarısız işin kimliği kullanılarak gönderilen bir geri doldurma işi, ancak veri durumunun her yerde, zaman aralığında 2025-04-01T04:00:00.000 ile 2025-04-09T04:00:00.000, Incomplete olması durumunda başarılı olur.

Rehberlik ve en iyi deneyimler

Uygun source_delay ve yinelenen zamanlamayı ayarlama

source_delay Kaynak verilerin özelliği, tüketime hazır verilerin alım süresi ile veri oluşturmanın olay süresi arasındaki gecikmeyi gösterir. t zamanında gerçekleşen bir olay, yukarıdaki veri işleme hattı gecikmesi nedeniyle t + x veri tablosuna ulaşır. x değeri kaynak gecikmedir.

source_delay kavramını gösteren çizim.

Düzgün kurulum için, yinelenen iş gerçekleştirme zamanlaması gecikme süresini hesaplar. Yinelenen iş, zaman penceresi için [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay) özellikler üretir.

materialization_settings:
  schedule:
    type: recurrence
    interval: 1
    frequency: Day
    start_time: "2025-04-15T04:00:00.000"

Bu örnek, 15/04/2025 tarihinde saat 04:00'te başlatılan günlük bir işi tanımlar. Ayara source_delay bağlı olarak, 1/5/2025 işlem çalıştırması farklı zaman pencerelerinde özellikler sağlar.

  • source_delay=0 pencerede özellik değerleri üretir [2025-04-30T04:00:00.000, 2025-05-01T04:00:00.000)
  • source_delay=2hours pencerede özellik değerleri üretir [2025-04-30T02:00:00.000, 2025-05-01T02:00:00.000)
  • source_delay=4hours pencerede özellik değerleri üretir [2025-04-30T00:00:00.000, 2025-05-01T00:00:00.000)

Gerçekleştirme deposunu güncelle

Çevrimiçi bir özellik deposunu veya çevrimdışı bir materyalizasyon deposunu güncellemeden önce, ilgili mağazadaki tüm özellik kümelerinde çevrimdışı ve/veya çevrimiçi materyalizasyon devre dışı bırakılmalıdır. Güncelleştirme işlemi, bazı özellik kümelerinin gerçekleştirilmesi etkinleştirilmiş gibi UserError başarısız olur.

Çevrimdışı ve/veya çevrimiçi gerçekleştirme deposundaki verilerin gerçekleştirilmesi durumu, bir özellik kümesinde çevrimdışı ve/veya çevrimiçi gerçekleştirme devre dışı bırakılırsa sıfırlanır. Sıfırlama, gerçekleştirilmiş verileri kullanılamaz hale getirir. Özellik kümesinde çevrimdışı ve/veya çevrimiçi gerçekleştirme daha sonra etkinleştirilirse, kullanıcıların gerçekleştirme işlerini yeniden göndermesi gerekir.

Çevrimiçi veri önyükleme

Çevrimiçi veri önyüklemesi yalnızca gönderilen çevrimdışı gerçekleştirme işleri başarıyla tamamlandıysa geçerlidir. Başlangıçta bir özellik kümesi için 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 şudur: None

  • Çevrimiçi bir malzeme oluşturma işi gönderildiğinde, çevrimdışı depodaki malzeme oluşturma durumuna sahip Complete veriler, çevrimiçi özelliklerin hesaplanması için kullanılır. Buna çevrimiçi veri önyükleme denir. Çevrimiçi veri önyüklemesi, çevrimdışı gerçekleştirme deposunda kaydedilmiş zaten hesaplanmış özellikleri yeniden kullanacağından hesaplama maliyetinden tasarruf sağlar Bu tablo, çevrimiçi veri önyüklemesi ile sonuçlanan veri aralıklarındaki çevrimdışı ve çevrimiçi veri durumu değerlerini özetler:

    Başlama zamanı Bitiş saati Çevrimdışı veri durumu Çevrimiçi veri durumu Çevrimiçi veri önyükleme
    2025-04-01T04:00:00.000 2025-04-02T04:00:00.000 None None Hayır
    2025-04-02T04:00:00.000 2025-04-03T04:00:00.000 Incomplete None Hayır
    2025-04-03T04:00:00.000 2025-04-04T04:00:00.000 Pending None Hiçbir gerçekleştirme görevi gönderilmedi
    2025-04-04T04:00:00.000 2025-04-05T04:00:00.000 Complete None Evet

Kaynak veri hatalarını ve değişikliklerini giderme

Bazı senaryolar, veri gerçekleştirildikten sonra bir hata veya başka nedenlerle kaynak verileri değiştirir. Bu gibi durumlarda, birden çok veri aralığında belirli bir özellik penceresi için özellik verilerini yenilemek hatalı veya eski özellik verilerini çözebilir. Özellik penceresinde, None, Complete ve Incomplete veri durumları için hatalı veya eski özellik verilerini çözümlemek amacıyla gerçekleştirme isteğini gönderin.

Özellik verileri yenilemesi için bir gerçekleştirme isteği göndermeniz, ancak özellik penceresinde Pending veri durumu içeren bir veri aralığı bulunmadığında gereklidir.

Boşlukları doldurma

Gerçekleştirme deposunda, gerçekleştirilmiş verilerde boşluklar olabilir çünkü:

  • Özellik penceresi için hiçbir zaman bir maddileştirme işi gönderilmedi
  • özellik penceresi için gönderilen fizikselleştirme görevleri başarısız oldu veya iptal edildi

Bu durumda, boşlukları doldurmak için data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete] özellik penceresinde bir gerçekleştirme isteği gönderin. Tek bir gerçekleştirme isteği, özellik penceresindeki tüm boşlukları doldurur.

Sonraki adımlar