全部产品
Search
文档中心

Platform For AI:Bangun sistem rekomendasi menggunakan FeatureStore Python SDK

更新时间:Jan 29, 2026

Topik ini menjelaskan cara menggunakan kit pengembangan perangkat lunak (SDK) FeatureStore Python untuk membangun dan menerbitkan sistem rekomendasi end-to-end di Platform for AI (PAI) FeatureStore.

Prasyarat

Sebelum memulai, pastikan Anda telah menyelesaikan persiapan berikut.

Ketergantungan produk

Prosedur

Platform for AI (PAI)

MaxCompute

FeatureDB

DataWorks

Langkah 1. Persiapan Data

Menyinkronkan tabel data

Untuk skenario rekomendasi, Anda biasanya perlu menyiapkan tabel data berikut: tabel fitur pengguna, tabel fitur item, tabel label, tabel fitur sekuens, dan tabel perilaku.

Untuk menyederhanakan tutorial ini, kami telah menyiapkan contoh tabel pengguna, item, label, fitur sekuens, dan perilaku di proyek MaxCompute pai_online_project. Anda perlu menjalankan perintah SQL di DataWorks untuk menyinkronkan tabel-tabel tersebut dari proyek pai_online_project ke proyek MaxCompute Anda sendiri. Prosedurnya sebagai berikut:

  1. Masuk ke Konsol DataWorks.

  2. Pada panel navigasi kiri, klik Data Development & O&M > Data Development.

  3. Pilih ruang kerja DataWorks Anda dan klik Enter Data Development.

  4. Arahkan kursor ke New, lalu pilih New Node > MaxCompute > ODPS SQL. Pada kotak dialog yang muncul, konfigurasikan parameter node.

    Parameter

    Nilai yang disarankan

    Engine Instance

    Pilih engine MaxCompute Anda.

    Node Type

    ODPS SQL

    Path

    Business Flow/Workflow/MaxCompute

    Name

    Anda dapat menentukan nama kustom.

  5. Klik Confirm.

  6. Pada editor node, jalankan perintah SQL berikut untuk menyinkronkan tabel pengguna, item, label, fitur sekuens, dan perilaku dari proyek pai_online_project ke proyek MaxCompute Anda. Untuk grup sumber daya, pilih grup sumber daya eksklusif yang telah Anda buat.

    Menyinkronkan tabel pengguna: rec_sln_demo_user_table_preprocess_all_feature_v1 (Klik untuk detail)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_user_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_user_table_preprocess_all_feature_v1 PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024';

    Setelah menjalankan perintah, perintah tersebut mengembalikan data dari tiga partisi berikut:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    Menyinkronkan tabel item: rec_sln_demo_item_table_preprocess_all_feature_v1 (Klik untuk detail)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_item_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_item_table_preprocess_all_feature_v1 PARTITION(ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024';

    Setelah menjalankan perintah, perintah tersebut mengembalikan data dari tiga partisi berikut:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    Menyinkronkan tabel label: rec_sln_demo_label_table (Klik untuk detail)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_label_table
    like pai_online_project.rec_sln_demo_label_table
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_label_table PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_label_table
    WHERE ds >= '20231022' and ds <='20231024'

    Setelah menjalankan perintah, perintah tersebut mengembalikan data dari tiga partisi berikut:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    Menyinkronkan tabel fitur sekuens: rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3 (Klik untuk detail)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3
    like pai_online_project.rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3 PARTITION(ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3
    WHERE ds >= '20231022' and ds <='20231024';

    Setelah menjalankan perintah, perintah tersebut mengembalikan data dari tiga partisi berikut:

    • ds=20231022

    • ds=20231023

    • ds=20231024

    Menyinkronkan tabel perilaku: rec_sln_demo_behavior_table_preprocess_v3 (Klik untuk detail)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_behavior_table_preprocess_v3
    like pai_online_project.rec_sln_demo_behavior_table_preprocess_v3
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    
    INSERT OVERWRITE TABLE rec_sln_demo_behavior_table_preprocess_v3 PARTITION(ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_behavior_table_preprocess_v3
    WHERE ds >= '20231022' and ds <='20231024';

Setelah menyelesaikan langkah-langkah ini, tabel yang telah disinkronkan tersedia di ruang kerja Anda. Kelima tabel ini digunakan sebagai contoh pada bagian selanjutnya.

Konfigurasikan sumber data

Anda biasanya perlu mengonfigurasi dua sumber data untuk FeatureStore: sumber data offline (MaxCompute) dan sumber data online (FeatureDB, Hologres, atau TableStore). Topik ini menggunakan MaxCompute dan FeatureDB sebagai contoh.

  1. Masuk ke Konsol PAI. Pada panel navigasi kiri, klik Data Preparation > FeatureStore.

  2. Pilih ruang kerja dan klik Enter FeatureStore.

  3. Konfigurasikan sumber data MaxCompute.

    1. Pada tab Data Source, klik Create Store. Pada kotak dialog yang muncul, konfigurasikan parameter sumber data MaxCompute.

      Parameter

      Nilai yang disarankan

      Type

      MaxCompute

      Name

      Masukkan nama kustom.

      MaxCompute Project Name

      Pilih proyek MaxCompute Anda.

    2. Setelah konfigurasi selesai, klik Submit.

  4. Konfigurasikan sumber data FeatureDB.

    1. Jika Anda telah membuat sumber data FeatureDB, Anda dapat melewati langkah ini.

    2. Pada tab Store, klik Create Store. Pada kotak dialog yang muncul, konfigurasikan parameter sumber data FeatureDB.

      Parameter

      Nilai yang disarankan

      Type

      FeatureDB (Jika ini pertama kali Anda menggunakannya, ikuti petunjuk di layar untuk mengaktifkan FeatureDB)

      Name

      Nama kustom tidak didukung. Nilai default adalah feature_db.

      Username

      Tetapkan username.

      Password

      Tetapkan password.

      VPC High-speed Connection (Optional)

      Setelah konfigurasi berhasil, Anda dapat menggunakan FeatureStore SDK dalam VPC untuk langsung mengakses FeatureDB melalui koneksi PrivateLink. Hal ini meningkatkan kinerja baca/tulis data dan mengurangi latensi akses.

      VPC

      Pilih VPC tempat layanan FeatureStore online Anda berada.

      Zone and vSwitch

      Pilih zona dan vSwitch. Pastikan memilih vSwitch di zona tempat mesin layanan online Anda berada. Kami menyarankan Anda memilih vSwitch di minimal dua zona untuk memastikan ketersediaan tinggi dan stabilitas layanan Anda.

    3. Setelah konfigurasi selesai, klik Submit.

Langkah 2. Proses pembuatan menggunakan FeatureStore Python SDK

Instal FeatureStore Python SDK. SDK ini memerlukan lingkungan Python 3. Kami menyarankan menjalankan semua kode berikut di lingkungan Jupyter Notebook.

! pip install https://feature-store-py.oss-cn-beijing.aliyuncs.com/package/feature_store_py-2.0.2-py3-none-any.whl

Anda dapat mengimpor modul fungsional yang diperlukan.

import unittest
import sys
import os
from os.path import dirname, join, abspath
from feature_store_py.fs_client import FeatureStoreClient
from feature_store_py.fs_project import FeatureStoreProject
from feature_store_py.fs_datasource import UrlDataSource, MaxComputeDataSource, DatahubDataSource, HologresDataSource, SparkDataSource, LabelInput, TrainingSetOutput
from feature_store_py.fs_type import FSTYPE
from feature_store_py.fs_schema import OpenSchema, OpenField
from feature_store_py.fs_feature_view import FeatureView
from feature_store_py.fs_features import FeatureSelector
from feature_store_py.fs_config import LabelInputConfig, PartitionConfig, FeatureViewConfig, TrainSetOutputConfig, SequenceFeatureConfig, SequenceTableConfig
import logging
logger = logging.getLogger("foo")
logger.addHandler(logging.StreamHandler(stream=sys.stdout))

Proyek rekayasa fitur

Anda dapat membuat beberapa proyek independen di FeatureStore. Untuk informasi selengkapnya, lihat Konfigurasikan proyek FeatureStore. Untuk menjalankan Notebook, Anda memerlukan lingkungan sisi server FeatureStore. Setelah mengaktifkan FeatureStore, Anda juga harus mengonfigurasi sumber data. Untuk informasi selengkapnya, lihat Buat sumber data baru.

Parameter `offline_datasource_id` dan `online_datasource_id` masing-masing menentukan ID sumber data offline dan online.

Topik ini menggunakan proyek bernama fs_movie sebagai contoh.

access_id = ''
access_ak = ''
region = 'cn-beijing'
fs = FeatureStoreClient(access_key_id=access_id, access_key_secret=access_ak, region=region)
cur_project_name = "fs_demo"
project = fs.get_project(cur_project_name)
if project is None:
  raise ValueError("Need to create project : fs_movie")

Jalankan kode berikut untuk mengambil proyek saat ini dan mencetak informasinya.

project = fs.get_project(cur_project_name)
print(project)

Entitas fitur (FeatureEntity)

Entitas fitur menggambarkan sekumpulan fitur terkait. Satu entitas fitur dapat dikaitkan dengan beberapa tampilan fitur. Setiap entitas memiliki JoinId yang digunakan untuk mengaitkan fitur-fitur dari tampilan tersebut. Setiap tampilan fitur memiliki kunci utama (index key) untuk mengambil data fiturnya, tetapi nama index key tersebut dapat berbeda dari nama yang ditentukan oleh JoinId.

Dalam sistem rekomendasi, fitur-fitur biasanya hanya dikaitkan dengan dua entitas fitur: pengguna dan item. Artinya, fitur-fitur tersebut termasuk dalam kategori pengguna atau item. Topik ini memberikan contoh pembuatan entitas fitur pengguna dan item.

  • Buat entitas pengguna

    user_entity_name = "user"
    user_join_id = 'user_id'
    user_entity = project.get_entity(user_entity_name)
    if user_entity is None:
     user_entity = project.create_entity(name = user_entity_name, join_id=user_join_id)
    user_entity.print_summary()
    
  • Buat entitas item

    item_entity_name = "item"
    join_id = 'item_id'
    item_entity = project.get_entity(item_entity_name)
    if item_entity is None:
     item_entity = project.create_entity(name = item_entity_name, join_id=join_id)
    item_entity.print_summary()

Tampilan fitur (FeatureView)

FeatureStore adalah platform untuk mengelola dan mengorganisasi data fitur. Data eksternal dimasukkan ke FeatureStore melalui tampilan fitur. Tampilan fitur mendefinisikan sumber data, operasi pra-pemrosesan atau transformasi yang diperlukan (seperti rekayasa fitur atau transformasi), struktur data fitur (termasuk nama dan jenis fitur), serta lokasi penyimpanan (online store atau offline store). Tampilan fitur juga mengelola metadata fitur, seperti kunci utama, waktu event, kunci partisi, entitas fitur, dan pengaturan waktu hidup (TTL). TTL -1 (default) menunjukkan bahwa data disimpan secara permanen. Angka positif berarti kueri online akan mengambil data fitur terbaru dalam TTL yang ditentukan.

Ada tiga jenis tampilan fitur: Batch FeatureView (untuk fitur offline atau fitur hari T-1), Stream FeatureView (untuk fitur real-time), dan Sequence FeatureView (untuk fitur sekuens).

Batch FeatureView (tampilan fitur offline)

Batch FeatureView memasukkan data offline ke offline store FeatureStore dan dapat menyinkronkan data tersebut ke online store untuk mendukung kueri real-time. Jenis tampilan ini biasanya digunakan untuk fitur offline atau fitur hari T-1.

  • Daftarkan tabel fitur offline sisi pengguna

    1. Daftarkan tabel rec_sln_demo_user_table_preprocess_all_feature_v1 ke FeatureStore.

      user_feature_view_name = "user_table_preprocess_all_feature_v1"
      user_table_name = "rec_sln_demo_user_table_preprocess_all_feature_v1"
      user_feature_view = project.get_feature_view(user_feature_view_name)
      if user_feature_view is None:
       ds = MaxComputeDataSource(project.offline_datasource_id, user_table_name)
       user_feature_view = project.create_batch_feature_view(name=user_feature_view_name, datasource=ds, online=True, entity= user_entity_name, primary_key='user_id', register=True)
      print(user_feature_view)
    2. Menyinkronkan data dari partisi 20231023 tabel rec_sln_demo_user_table_preprocess_all_feature_v1 di offline store ke online store.

      user_task = user_feature_view.publish_table({'ds':'20231023'})
      user_task.wait()
    3. Lihat status tugas yang sedang berjalan.

      user_task.print_summary()
  • Daftarkan tabel fitur offline sisi item

    1. Daftarkan tabel rec_sln_demo_item_table_preprocess_all_feature_v1 ke FeatureStore.

      item_feature_view_name = "item_table_preprocess_all_feature_v1"
      item_table_name = "rec_sln_demo_item_table_preprocess_all_feature_v1"
      item_feature_view = project.get_feature_view(item_feature_view_name)
      if item_feature_view is None:
        ds = MaxComputeDataSource(project.offline_datasource_id, item_table_name)
        item_feature_view = project.create_batch_feature_view(name=item_feature_view_name, datasource=ds, online = True, entity= item_entity_name, primary_key='item_id', register=True)
      print(item_feature_view)
    2. Menyinkronkan data dari partisi 20231023 tabel rec_sln_demo_item_table_preprocess_all_feature_v1 di offline store ke online store.

      item_task = item_feature_view.publish_table({'ds':'20231023'})
      item_task.wait()
    3. Lihat status tugas yang sedang berjalan.

      item_task.print_summary()

Sequence FeatureView (tampilan sekuens real-time)

Sequence FeatureView mendukung penulisan fitur sekuens offline dan kueri fitur sekuens real-time. Dalam skenario rekomendasi khas, tabel fitur sekuens offline (F1) awalnya dihasilkan dari data simulasi dan kemudian dapat diganti dengan log online. Selama kueri sekuens real-time online, data diambil dari dua tabel perilaku online: tabel perilaku hari T-1 (B1) dan tabel perilaku real-time hari T (B2). B2 berisi fitur yang diperbarui secara real-time. Setelah data diambil dari tabel B1 dan B2, sekuens fitur dibangun untuk pengguna. Sekuens ini kemudian digabungkan dengan fitur lain dan dikirim ke model untuk scoring.

Tabel perilaku online hari T-1 (B1) biasanya disinkronkan dari tabel perilaku offline hari T-1 (A1). Selama sinkronisasi, FeatureStore secara otomatis melakukan operasi seperti deduplikasi. Anda harus menulis data ke tabel perilaku online hari T (B2) menggunakan operasi API atau produk Alibaba Cloud lainnya, seperti Flink.

Oleh karena itu, saat mendaftarkan tampilan fitur real-time, FeatureStore secara bersamaan mengelola empat tabel: tabel sekuens offline (F1), tabel perilaku offline hari T-1 (A1), tabel perilaku online hari T-1 (B1), dan tabel perilaku online hari T (B2).

Saat pendaftaran, Anda hanya perlu memberikan tabel sekuens offline (F1) dan tabel perilaku offline hari T-1 (A1). FeatureStore menangani tabel perilaku online serta proses sinkronisasi dan deduplikasi.

  1. Daftarkan tampilan fitur real-time.

    seq_feature_view_name = "wide_seq_feature_v3"
    seq_feature_view = project.get_feature_view(seq_feature_view_name)
    if seq_feature_view is None:
      seq_table_name = "rec_sln_demo_behavior_table_preprocess_sequence_wide_seq_feature_v3"
      behavior_table_name = 'rec_sln_demo_behavior_table_preprocess_v3'
      ds = MaxComputeDataSource(project.offline_datasource_id, behavior_table_name)
      event_time = 'event_unix_time' # Nama field waktu event di tabel perilaku.
      item_id = 'item_id' # Nama field item_id di tabel perilaku.
      event = 'event' # Nama field event di tabel perilaku.
      # deduplication_method = 1 menunjukkan deduplikasi berdasarkan ['user_id', 'item_id', 'event'].
      # deduplication_method = 2 menunjukkan deduplikasi berdasarkan ['user_id', 'item_id', 'event', 'event_time'].
      sequence_feature_config_list = [SequenceFeatureConfig(offline_seq_name='click_seq_50_seq', seq_event='click', online_seq_name='click_seq_50', seq_len=50)]
      # offline_seq_name adalah nama field fitur sekuens di tabel sekuens offline. seq_event adalah nama field perilaku. 
      # online_seq_name adalah nama yang digunakan untuk sekuens item_id pengguna, yang diambil oleh FeatureStore online Go SDK.
      # seq_len adalah panjang sekuens. Sekuens yang lebih panjang dari nilai ini akan dipotong.
      seq_table_config = SequenceTableConfig(table_name=seq_table_name, primary_key='user_id', event_time='event_unix_time')
      seq_feature_view = project.create_sequence_feature_view(seq_feature_view_name, datasource=ds,
                                                  event_time=event_time, item_id=item_id, event=event, deduplication_method=1,
                                                  sequence_feature_config=sequence_feature_config_list, sequence_table_config=seq_table_config, entity=user_entity_name)
    # seq_feature_view.print_summary()
    print(seq_feature_view)
  2. Menyinkronkan data dari partisi 20231023 tabel rec_sln_demo_behavior_table_preprocess_v3 di offline store ke online store. Selama sinkronisasi, sistem secara otomatis memeriksa data dari partisi N hari sebelumnya. Jika data hilang, data tersebut akan diisi ulang secara otomatis. Anda dapat menentukan N menggunakan days_to_load. Nilai default adalah 30, yang cukup untuk sebagian besar skenario.

    seq_task = seq_feature_view.publish_table({'ds':'20231023'}, days_to_load=30)
    seq_task.wait()
  3. Lihat status tugas yang sedang berjalan.

    seq_task.print_summary()

Tampilan Fitur Aliran (tampilan fitur waktu nyata)

Menulis data langsung ke OnlineStore dan secara bersamaan menyinkronkannya ke OfflineStore sangat ideal untuk skenario yang memerlukan pembaruan fitur real-time, seperti memperbarui harga produk dan volume penjualan.

Daftarkan Tabel Label

label_table_name = 'rec_sln_demo_label_table'
ds = MaxComputeDataSource(data_source_id=project.offline_datasource_id, table=label_table_name)
label_table = project.get_label_table(label_table_name)
if label_table is None:
  label_table = project.create_label_table(datasource=ds, event_time='event_unix_time')
print(label_table)

Ambil fitur online

Anda dapat mengambil fitur online untuk memecahkan masalah konsistensi data antara offline store dan online store, melakukan analitik data, dan tujuan lainnya. Hologres adalah sumber data yang direkomendasikan.

user_feature_view_name = "user_table_preprocess_all_feature_v1"
user_feature_view = project.get_feature_view(user_feature_view_name)
ret_features_1 = user_feature_view.get_online_features(join_ids={'user_id':['169898460', '148811946']}, features=['user_id', 'gender', 'age', 'city'])
print("ret_features = ", ret_features_1)

TrainingSet

Saat melatih model, Anda harus terlebih dahulu membuat tabel sampel. Tabel sampel terdiri dari data label dan data fitur. Untuk berinteraksi dengan FeatureStore, Anda harus menyediakan data label dan menentukan nama fitur yang ingin diambil. Kemudian dilakukan join berdasarkan titik waktu berdasarkan kunci utama dan waktu event, jika waktu event ada.

# Tentukan tabel label.
label_table_name = 'rec_sln_demo_label_table'

output_ds = MaxComputeDataSource(data_source_id=project.offline_datasource_id)
train_set_output = TrainingSetOutput(output_ds)
user_feature_view_name = "user_table_preprocess_all_feature_v1"
user_feature_selector = FeatureSelector(user_feature_view_name, '*') # '*' memilih semua fitur.
item_feature_view_name = "item_table_preprocess_all_feature_v1"
item_feature_selector = FeatureSelector(item_feature_view_name, '*')
seq_feature_view_name = "wide_seq_feature_v3"
seq_feature_selector = FeatureSelector(seq_feature_view_name, ['click_seq_50_seq'])
train_set = project.create_training_set(label_table_name=label_table_name, train_set_output= train_set_output, feature_selectors=[user_feature_selector, item_feature_selector, seq_feature_selector])
print("train_set = ", train_set)

Fitur Model

Setelah melatih model dan menerapkannya sebagai layanan, Anda dapat menggunakannya untuk prediksi bisnis. Sampel pelatihan dapat diperoleh dari train_set yang disebutkan sebelumnya.

model_name = "fs_rank_v2"
cur_model = project.get_model(model_name)
if cur_model is None:
  cur_model = project.create_model(model_name, train_set)
print("cur_model_train_set_table_name = ", cur_model.train_set_table_name)

Langkah 3. Ekspor tabel sampel dan latih model

Untuk pelatihan aktual, Anda perlu mengekspor tabel sampel.

Ekspor tabel sampel

Tentukan tabel label serta partisi dan event_time untuk setiap tampilan fitur.

cur_day = '20231024'
pre_day = '20231023'
label_partitions = PartitionConfig(name = 'ds', value = cur_day)
label_input_config = LabelInputConfig(partition_config=label_partitions)

user_partitions = PartitionConfig(name = 'ds', value = pre_day)
feature_view_user_config = FeatureViewConfig(name = 'user_table_preprocess_all_feature_v1',
partition_config=user_partitions)

item_partitions = PartitionConfig(name = 'ds', value = pre_day)
feature_view_item_config = FeatureViewConfig(name = 'item_table_preprocess_all_feature_v1',
partition_config=item_partitions)

seq_partitions = PartitionConfig(name = 'ds', value = cur_day)
feature_view_seq_config = FeatureViewConfig(name = 'wide_seq_feature_v3', partition_config=seq_partitions, event_time='event_unix_time', equal=True)
feature_view_config_list = [feature_view_user_config, feature_view_item_config, feature_view_seq_config]
train_set_partitions = PartitionConfig(name = 'ds', value = cur_day)
train_set_output_config = TrainSetOutputConfig(partition_config=train_set_partitions)


model_name = 'fs_rank_v2'
cur_model = project.get_model(model_name)
task = cur_model.export_train_set(label_input_config, feature_view_config_list, train_set_output_config)
task.wait()
print("task_summary = ", task.task_summary)

Latih model

EasyRec adalah framework sistem rekomendasi open source yang terintegrasi mulus dengan FeatureStore untuk pelatihan, ekspor, dan penerbitan model. Kami menyarankan Anda menggunakan tabel fs_demo_fs_rank_v2_training_set sebagai input untuk melatih model dengan EasyRec.

Jika Anda memiliki pertanyaan tentang EasyRec, bergabunglah dengan grup DingTalk (32260796) untuk menghubungi kami.

Langkah 4. Terbitkan model

Setelah melatih dan mengekspor model, Anda dapat menerapkan dan menerbitkannya. Jika Anda memiliki sistem rekomendasi yang dibangun sendiri, FeatureStore menyediakan SDK Python, Go, C++, dan Java yang dapat diintegrasikan dengan sistem Anda. Anda juga dapat menghubungi kami melalui grup DingTalk (32260796) untuk mendiskusikan solusi spesifik. Jika Anda menggunakan produk Alibaba Cloud, Anda dapat mengintegrasikannya secara mulus dengan FeatureStore untuk membangun dan menerbitkan sistem rekomendasi dengan cepat.

Topik ini menggunakan produk Alibaba Cloud sebagai contoh untuk menjelaskan cara menerbitkan model.

Jadwalkan node sinkronisasi data

Sebelum menerbitkan, Anda harus menjadwalkan node sinkronisasi data untuk secara rutin menyinkronkan data dari offline store ke online store.

  1. Masuk ke Konsol DataWorks.

  2. Pada panel navigasi kiri, klik Data Development & O&M > Data Development.

  3. Pilih ruang kerja DataWorks Anda dan klik Enter Data Development.

  4. Secara rutin sinkronkan tabel pengguna.

    1. Arahkan kursor ke New, lalu pilih New Node > MaxCompute > PyODPS 3.

    2. Pada kotak dialog yang muncul, konfigurasikan parameter node dan klik Confirm.

    3. Salin konten berikut ke dalam skrip untuk menyelesaikan sinkronisasi terjadwal user_table_preprocess_all_feature_v1.

      sinkronisasi terjadwal user_table_preprocess_all_feature_v1 (Klik untuk detail)

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      from odps.accounts import StsAccount
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      sts_token = None
      endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
      if isinstance(o.account, StsAccount):
          sts_token = o.account.sts_token
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'user_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite', offline_to_online=True)
      task.wait()
      task.print_summary()
      
    4. Pada panel kanan, klik Scheduling Configuration. Pada kotak dialog yang muncul, konfigurasikan parameter penjadwalan.

      Parameter

      Nilai yang disarankan

      Scheduling Parameters

      Parameter Name

      dt

      Parameter Value

      $[yyyymmdd-1]

      Resource Properties

      Resource Group for Scheduling

      Pilih grup sumber daya eksklusif untuk penjadwalan Anda.

      Scheduling Dependencies

      Pilih tabel pengguna yang Anda buat.

    5. Setelah mengonfigurasi dan menguji node, simpan dan kirimkan konfigurasi node.

    6. Lakukan operasi pengisian ulang data. Untuk informasi selengkapnya, lihat Sinkronkan tabel data.

  5. Jadwalkan sinkronisasi tabel item.

    1. Arahkan kursor ke New, lalu pilih New Node > MaxCompute > PyODPS 3.

    2. Pada kotak dialog yang muncul, konfigurasikan parameter node dan klik Confirm.

    3. Salin konten berikut ke dalam skrip.

      sinkronisasi terjadwal item_table_preprocess_all_feature_v1 (Klik untuk detail)

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      from odps.accounts import StsAccount
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      sts_token = None
      endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
      if isinstance(o.account, StsAccount):
          sts_token = o.account.sts_token
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'item_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite', offline_to_online=True)
      task.wait()
      task.print_summary()
    4. Pada panel kanan, klik Scheduling Configuration. Pada kotak dialog yang muncul, konfigurasikan parameter penjadwalan.

      Parameter

      Nilai yang disarankan

      Scheduling Parameters

      Parameter Name

      dt

      Parameter Value

      $[yyyymmdd-1]

      Resource Properties

      Resource Group for Scheduling

      Pilih grup sumber daya eksklusif untuk penjadwalan Anda.

      Scheduling Dependencies

      Pilih tabel item yang Anda buat.

    5. Setelah mengonfigurasi dan menguji node, simpan dan kirimkan konfigurasi node.

    6. Lakukan operasi pengisian ulang data. Untuk informasi selengkapnya, lihat Sinkronkan tabel data.

  6. Jadwalkan sinkronisasi tabel perilaku sekuens real-time.

    1. Arahkan kursor ke New, lalu pilih New Node > MaxCompute > PyODPS 3.

    2. Pada kotak dialog yang muncul, konfigurasikan parameter node dan klik Confirm.

    3. Salin konten berikut ke dalam skrip.

      sinkronisasi terjadwal wide_seq_feature_v3 (Klik untuk detail)

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      from odps.accounts import StsAccount
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      sts_token = None
      endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
      if isinstance(o.account, StsAccount):
          sts_token = o.account.sts_token
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'wide_seq_feature_v3'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day},days_to_load=30)
      task.wait()
      task.print_summary()
    4. Pada panel kanan, klik Scheduling Configuration. Pada kotak dialog yang muncul, konfigurasikan parameter penjadwalan.

      Parameter

      Nilai yang disarankan

      Scheduling Parameters

      Parameter Name

      dt

      Parameter Value

      $[yyyymmdd-1]

      Resource Properties

      Resource Group for Scheduling

      Pilih grup sumber daya eksklusif untuk penjadwalan Anda.

      Scheduling Dependencies

      Pilih tabel item yang Anda buat.

    5. Setelah mengonfigurasi dan menguji node, simpan dan kirimkan konfigurasi node.

    6. Lakukan operasi pengisian ulang data. Untuk informasi selengkapnya, lihat Sinkronkan tabel data.

  7. Setelah sinkronisasi selesai, Anda dapat melihat fitur terbaru yang telah disinkronkan di Hologres.

Buat dan terapkan layanan model EAS

Layanan model menerima permintaan dari mesin rekomendasi, memberi skor pada kumpulan item berdasarkan permintaan tersebut, dan mengembalikan skor tersebut. Prosesor EasyRec mencakup FeatureStore C++ SDK, yang memungkinkan pengambilan fitur dengan latensi rendah dan kinerja tinggi. Prosesor EasyRec mengambil fitur dari FeatureStore C++ SDK, mengirimkannya ke model untuk inferensi, mengambil skor, dan mengembalikannya ke mesin rekomendasi.

Prosedur penerapan layanan model adalah sebagai berikut.

  1. Masuk ke Konsol DataWorks.

  2. Pada panel navigasi kiri, klik Data Development & O&M > Data Development.

  3. Pilih ruang kerja DataWorks Anda dan klik Enter Data Development.

  4. Arahkan kursor ke New, lalu pilih New Node > MaxCompute > PyODPS 3.

  5. Pada kotak dialog yang muncul, konfigurasikan parameter node dan klik Confirm.

  6. Salin konten berikut ke dalam skrip.

    import os
    import json
    config = {
      "name": "fs_demo_v1",
      "metadata": {
        "cpu": 4,
        "rpc.max_queue_size": 256,
        "rpc.enable_jemalloc": 1,
        "gateway": "default",
        "memory": 16000
      },
      "model_path": f"oss://beijing0009/EasyRec/deploy/rec_sln_demo_dbmtl_v1/{args['ymd']}/export/final_with_fg",
      "model_config": {
        "access_key_id": f'{o.account.access_id}',
        "access_key_secret": f'{o.account.secret_access_key}',
        "region": "cn-beijing",
        "fs_project": "fs_demo",
        "fs_model": "fs_rank_v2",
        "fs_entity": "item",
        "load_feature_from_offlinestore": True,
        "steady_mode": True,
        "period": 2880,
        "outputs": "probs_is_click,y_ln_playtime,probs_is_praise",
        "fg_mode": "tf"
      },
      "processor": "easyrec-1.8",
      "processor_type": "cpp"
    }
    
    with open("echo.json", "w") as output_file:
        json.dump(config, output_file)
    
    # Jalankan baris ini untuk penerapan pertama kali.
    os.system(f"/home/admin/usertools/tools/eascmd -i {o.account.access_id} -k {o.account.secret_access_key} -e pai-eas.cn-beijing.aliyuncs.com create echo.json")
    
    # Jalankan baris berikut untuk pembaruan terjadwal.
    # os.system(f"/home/admin/usertools/tools/eascmd -i {o.account.access_id} -k {o.account.secret_access_key} -e pai-eas.cn-beijing.aliyuncs.com modify fs_demo_v1 -s echo.json")
  7. Pada panel kanan, klik Scheduling Configuration. Pada kotak dialog yang muncul, konfigurasikan parameter penjadwalan.

    Parameter

    Nilai yang disarankan

    Scheduling Parameters

    Parameter Name

    dt

    Parameter Value

    $[yyyymmdd-1]

    Resource Properties

    Resource Group for Scheduling

    Pilih grup sumber daya eksklusif untuk penjadwalan Anda.

    Scheduling Dependencies

    Pilih tugas pelatihan yang sesuai dan item_table_preprocess_all_feature_v1.

  8. Setelah mengonfigurasi dan menguji node, jalankan untuk melihat status penerapan.

  9. Setelah penerapan selesai, beri komentar pada baris 34, hapus komentar pada baris 37, dan kirimkan tugas untuk eksekusi terjadwal.

  10. (Opsional) Anda dapat melihat layanan yang telah diterapkan pada tab Inference Service di halaman Elastic Algorithm Service (EAS). Untuk informasi selengkapnya, lihat Penerapan kustom.

Konfigurasikan PAI-Rec

PAI-Rec adalah layanan mesin rekomendasi yang mengintegrasikan FeatureStore Go SDK. Layanan ini dapat terhubung secara mulus dengan FeatureStore dan EAS.

Prosedur konfigurasinya sebagai berikut.

  1. Konfigurasikan FeatureStoreConfs.

    • RegionId: Ubah ini menjadi wilayah tempat produk Anda berada. Topik ini menggunakan cn-beijing sebagai contoh.

    • ProjectName: Nama proyek FeatureStore Anda. Dalam contoh ini, nama proyek adalah fs_demo.

        "FeatureStoreConfs": {
            "pairec-fs": {
                "RegionId": "cn-beijing",
                "AccessId": "${AccessKey}",
                "AccessKey": "${AccessSecret}",
                "ProjectName": "fs_demo"
            }
        },
  2. Konfigurasikan FeatureConfs.

    • FeatureStoreName: Pertahankan konsistensi dengan pengaturan pairec-fs pada langkah FeatureStoreConfs sebelumnya.

    • FeatureStoreModelName: Nama fitur model Anda. Dalam contoh ini, nama fitur model adalah fs_rank_v1.

    • FeatureStoreEntityName: Nama entitas fitur Anda, user. Ini menunjukkan bahwa mesin PAI-Rec menggunakan FeatureStore Go SDK untuk mengambil fitur pengguna untuk model fs_rank_v1.

        "FeatureConfs": {
            "recreation_rec": {
                "AsynLoadFeature": true,
                "FeatureLoadConfs": [
                    {
                        "FeatureDaoConf": {
                            "AdapterType": "featurestore",
                            "FeatureStoreName": "pairec-fs",
                            "FeatureKey": "user:uid",
                            "FeatureStoreModelName": "fs_rank_v1",
                            "FeatureStoreEntityName": "user",
                            "FeatureStore": "user"
                        }
                    }
                ]
            }
        },
  3. Konfigurasikan AlgoConfs.

    Konfigurasi ini memberi tahu PAI-Rec layanan scoring model EAS mana yang harus dihubungi.

    • Name: Harus sama dengan nama layanan EAS yang telah diterapkan.

    • Url dan Auth: Ini adalah informasi yang disediakan oleh layanan EAS. Di halaman Elastic Algorithm Service (EAS), klik nama layanan tersebut. Kemudian, pada tab Overview, klik View Endpoint Information untuk mengambil URL dan token. Untuk detail konfigurasi lebih lanjut, lihat FAQ EAS.

        "AlgoConfs": [
            {
                "Name": "fs_demo_v1",
                "Type": "EAS",
                "EasConf": {
                    "Processor": "EasyRec",
                    "Timeout": 300,
                    "ResponseFuncName": "easyrecMutValResponseFunc",
                    "Url": "eas_url_xxx",
                    "EndpointType": "DIRECT",
                    "Auth": "eas_token"
                }
            }
        ],