Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Pembelajaran Mesin toko fitur terkelola memungkinkan Anda menemukan, membuat, dan mengoperalisasi fitur. Fitur berfungsi sebagai jaringan konektif dalam siklus hidup pembelajaran mesin, mulai dari fase prototipe, di mana Anda bereksperimen dengan berbagai fitur. Siklus hidup tersebut berlanjut ke fase operasionalisasi, tempat Anda menyebarkan model, dan langkah-langkah inferensi mencari data fitur. Untuk informasi selengkapnya tentang penyimpanan fitur, kunjungi sumber daya konsep penyimpanan fitur.
Bagian 1 dari seri tutorial ini menunjukkan cara membuat spesifikasi set fitur dengan transformasi kustom, mengaktifkan materialisasi dan melakukan isi ulang. Bagian 2 menunjukkan cara bereksperimen dengan fitur dalam alur eksperimen dan pelatihan. Bagian 3 menjelaskan materialisasi berulang untuk transactions set fitur, dan menunjukkan cara menjalankan alur inferensi batch pada model terdaftar. Bagian 4 menjelaskan cara menjalankan inferensi batch.
Dalam tutorial ini, Anda akan
- Tentukan logika untuk memuat data dari sumber data kustom.
- Konfigurasikan dan daftarkan set fitur untuk digunakan dari sumber data kustom ini.
- Uji set fitur terdaftar.
Prasyarat
Catatan
Tutorial ini menggunakan notebook Azure Pembelajaran Mesin dengan Serverless Spark Compute.
- Pastikan untuk menyelesaikan tutorial sebelumnya dalam seri ini. Tutorial ini menggunakan kembali penyimpanan fitur dan sumber daya lain yang dibuat dalam tutorial sebelumnya.
Penyiapan
Tutorial ini menggunakan SDK inti penyimpanan fitur Python (azureml-featurestore). Python SDK digunakan untuk membuat, membaca, memperbarui, dan menghapus (CRUD) operasi pada penyimpanan fitur, set fitur, dan entitas penyimpanan fitur.
Anda tidak perlu menginstal sumber daya ini secara eksplisit untuk tutorial ini, karena dalam instruksi penyiapan yang ditunjukkan di sini, conda.yml file mencakupnya.
Mengonfigurasi notebook Azure Pembelajaran Mesin Spark
Anda dapat membuat buku catatan baru dan menjalankan instruksi dalam tutorial ini, langkah demi langkah. Anda juga dapat membuka dan menjalankan notebook yang sudah ada featurestore_sample/notebooks/sdk_only/5.Develop-feature-set-custom-source.ipynb. Tetap buka tutorial ini dan lihat tautan dokumentasi dan penjelasan lainnya.
Di menu atas, di daftar dropdown Komputasi, pilih Komputasi Spark Tanpa Server di bawah Azure Pembelajaran Mesin Serverless Spark.
Konfigurasikan sesi:
- Pilih Konfigurasikan sesi di bilah status atas
- Pilih tab paket Python, pilih Unggah file Conda
- Pilih Unggah file Conda
- Unggah file conda.yml yang Anda unggah di tutorial pertama
- Secara opsional, tingkatkan waktu habis sesi (waktu diam) untuk menghindari proses ulang prasyarat yang sering
Menyiapkan direktori akar untuk sampel
Sel kode ini menyiapkan direktori akar untuk sampel. Dibutuhkan sekitar 10 menit untuk menginstal semua dependensi dan memulai sesi Spark.
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")Menginisialisasi klien CRUD dari ruang kerja penyimpanan fitur
Inisialisasi MLClient untuk ruang kerja penyimpanan fitur, untuk mencakup operasi buat, baca, perbarui, dan hapus (CRUD) di ruang kerja penyimpanan fitur.
from azure.ai.ml import MLClient
from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
# Feature store
featurestore_name = (
"<FEATURESTORE_NAME>" # use the same name that was used in the tutorial #1
)
featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
# Feature store ml client
fs_client = MLClient(
AzureMLOnBehalfOfCredential(),
featurestore_subscription_id,
featurestore_resource_group_name,
featurestore_name,
)Menginisialisasi klien SDK inti penyimpanan fitur
Seperti disebutkan sebelumnya, tutorial ini menggunakan SDK inti penyimpanan fitur Python (azureml-featurestore). Klien SDK yang diinisialisasi ini mencakup operasi buat, baca, perbarui, dan hapus (CRUD) pada penyimpanan fitur, set fitur, dan entitas penyimpanan fitur.
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,
)Definisi sumber kustom
Anda dapat menentukan logika pemuatan sumber Anda sendiri dari penyimpanan data apa pun yang memiliki definisi sumber kustom. Terapkan kelas fungsi yang ditentukan pengguna prosesor sumber (UDF) (CustomSourceTransformer dalam tutorial ini) untuk menggunakan fitur ini. Kelas ini harus menentukan __init__(self, **kwargs) fungsi, dan process(self, start_time, end_time, **kwargs) fungsi.
kwargs Kamus disediakan sebagai bagian dari definisi spesifikasi set fitur. Definisi ini kemudian diteruskan ke UDF. Parameter start_time dan end_time dihitung dan diteruskan ke fungsi UDF.
Ini adalah kode sampel untuk kelas UDF prosesor sumber:
from datetime import datetime
class CustomSourceTransformer:
def __init__(self, **kwargs):
self.path = kwargs.get("source_path")
self.timestamp_column_name = kwargs.get("timestamp_column_name")
if not self.path:
raise Exception("`source_path` is not provided")
if not self.timestamp_column_name:
raise Exception("`timestamp_column_name` is not provided")
def process(
self, start_time: datetime, end_time: datetime, **kwargs
) -> "pyspark.sql.DataFrame":
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, lit, to_timestamp
spark = SparkSession.builder.getOrCreate()
df = spark.read.json(self.path)
if start_time:
df = df.filter(col(self.timestamp_column_name) >= to_timestamp(lit(start_time)))
if end_time:
df = df.filter(col(self.timestamp_column_name) < to_timestamp(lit(end_time)))
return df
Membuat spesifikasi set fitur dengan sumber kustom, dan bereksperimen dengannya secara lokal
Sekarang, buat spesifikasi set fitur dengan definisi sumber kustom, dan gunakan di lingkungan pengembangan Anda untuk bereksperimen dengan set fitur. Notebook tutorial yang dilampirkan ke Serverless Spark Compute berfungsi sebagai lingkungan pengembangan.
from azureml.featurestore import create_feature_set_spec
from azureml.featurestore.feature_source import CustomFeatureSource
from azureml.featurestore.contracts import (
SourceProcessCode,
TransformationCode,
Column,
ColumnType,
DateTimeOffset,
TimestampColumn,
)
transactions_source_process_code_path = (
root_dir
+ "/featurestore/featuresets/transactions_custom_source/source_process_code"
)
transactions_feature_transform_code_path = (
root_dir
+ "/featurestore/featuresets/transactions_custom_source/feature_process_code"
)
udf_featureset_spec = create_feature_set_spec(
source=CustomFeatureSource(
kwargs={
"source_path": "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source-json/*.json",
"timestamp_column_name": "timestamp",
},
timestamp_column=TimestampColumn(name="timestamp"),
source_delay=DateTimeOffset(days=0, hours=0, minutes=20),
source_process_code=SourceProcessCode(
path=transactions_source_process_code_path,
process_class="source_process.CustomSourceTransformer",
),
),
feature_transformation=TransformationCode(
path=transactions_feature_transform_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,
)
udf_featureset_spec
Selanjutnya, tentukan jendela fitur, dan tampilkan nilai fitur di jendela fitur ini.
from datetime import datetime
st = datetime(2023, 1, 1)
et = datetime(2023, 6, 1)
display(
udf_featureset_spec.to_spark_dataframe(
feature_window_start_date_time=st, feature_window_end_date_time=et
)
)Ekspor sebagai spesifikasi set fitur
Untuk mendaftarkan spesifikasi set fitur dengan penyimpanan fitur, pertama-tama simpan spesifikasi tersebut dalam format tertentu. Tinjau spesifikasi set fitur yang dihasilkan transactions_custom_source . Buka file ini dari pohon file untuk melihat spesifikasi: featurestore/featuresets/transactions_custom_source/spec/FeaturesetSpec.yaml.
Spesifikasi memiliki elemen-elemen ini:
-
features: Daftar fitur dan jenis datanya. -
index_columns: Kunci gabungan diperlukan untuk mengakses nilai dari set fitur.
Untuk informasi selengkapnya tentang spesifikasinya, kunjungi fitur Memahami entitas tingkat atas di toko fitur terkelola dan CLI (v2) mengatur sumber daya skema YAML.
Persistensi spesifikasi set fitur menawarkan manfaat lain: spesifikasi set fitur dapat dikontrol sumber.
feature_spec_folder = (
root_dir + "/featurestore/featuresets/transactions_custom_source/spec"
)
udf_featureset_spec.dump(feature_spec_folder)Daftarkan set fitur transaksi dengan penyimpanan fitur
Gunakan kode ini untuk mendaftarkan aset set fitur yang dimuat dari sumber kustom dengan penyimpanan fitur. Anda kemudian dapat menggunakan kembali aset tersebut, dan dengan mudah membagikannya. Pendaftaran aset set fitur menawarkan kemampuan terkelola, termasuk penerapan versi dan materialisasi.
from azure.ai.ml.entities import FeatureSet, FeatureSetSpecification
transaction_fset_config = FeatureSet(
name="transactions_custom_source",
version="1",
description="transactions feature set loaded from custom source",
entities=["azureml:account:1"],
stage="Development",
specification=FeatureSetSpecification(path=feature_spec_folder),
tags={"data_type": "nonPII"},
)
poller = fs_client.feature_sets.begin_create_or_update(transaction_fset_config)
print(poller.result())
Dapatkan set fitur terdaftar, dan cetak informasi terkait.
# Look up the feature set by providing name and version
transactions_fset_config = featurestore.feature_sets.get(
name="transactions_custom_source", version="1"
)
# Print feature set information
print(transactions_fset_config)Menguji pembuatan fitur dari set fitur terdaftar
to_spark_dataframe() Gunakan fungsi set fitur untuk menguji pembuatan fitur dari set fitur terdaftar, dan menampilkan fitur.
cetak-transaksi-fitur-contoh-nilai
df = transactions_fset_config.to_spark_dataframe()
display(df)
Anda harus berhasil mengambil set fitur terdaftar sebagai dataframe Spark, lalu menampilkannya. Anda sekarang dapat menggunakan fitur-fitur ini untuk gabungan titik waktu dengan data pengamatan, dan langkah-langkah berikutnya dalam alur pembelajaran mesin Anda.
Penghapusan
Jika Anda membuat grup sumber daya untuk tutorial, Anda dapat menghapus grup sumber daya tersebut, yang menghapus semua sumber daya yang terkait dengan tutorial ini. Jika tidak, Anda dapat menghapus sumber daya satu per satu:
- Untuk menghapus penyimpanan fitur, buka grup sumber daya di portal Azure, pilih penyimpanan fitur, dan hapus.
- Identitas terkelola yang ditetapkan pengguna (UAI) yang ditetapkan ke ruang kerja penyimpanan fitur tidak dihapus saat kami menghapus penyimpanan fitur. Untuk menghapus UAI, ikuti instruksi ini .
- Untuk menghapus penyimpanan offline jenis akun penyimpanan, buka grup sumber daya di portal Azure, pilih penyimpanan yang Anda buat, dan hapus.
- Untuk menghapus instans Azure Cache for Redis, buka grup sumber daya di portal Azure, pilih instans yang Anda buat, dan hapus.