本文以FeatureStore的特徵表為例,為您介紹FeatureStore從建立與註冊到最終上線的過程,協助您瞭解如何從零開始搭建並上線一套完整的推薦系統。
背景資訊
推薦系統是一種能夠根據使用者的興趣和偏好,向使用者推薦個人化的內容或產品的系統。在推薦系統中,提取和配置使用者或物品的特徵資訊非常重要。通過本文提供的解決方案,您可以瞭解如何使用FeatureStore搭建推薦系統,以及FeatureStore在推薦系統中如何通過各個版本的SDK與其他推薦系統產品進行互動。具體表現為:在FeatureStore中建立專案,註冊特徵表,建立模型特徵,匯出訓練樣本表,從離線資料來源同步特徵到線上資料來源,利用訓練樣本表訓練模型,部署EAS模型服務,以及如何使用PAI-REC中的FeatureStore中的相關配置等整個推薦系統流程。
對於熟悉代碼的使用者,您可以通過直接運行Python Notebook查看具體配置流程,具體操作詳情請參見DSW Gallery。
更多關於FeatureStore的資訊,請參見FeatureStore概述。
如果您在配置或使用過程中有任何問題,可以搜尋DingTalk群號:34415007523,進入答疑群聯絡技術人員進行諮詢。
前提條件
在開始執行操作前,請確認您已完成以下準備工作。
依賴產品 | 具體操作 |
人工智慧平台 PAI | 已開通PAI服務並建立PAI工作空間,操作詳情請參見開通PAI並建立預設工作空間。 |
雲原生MaxCompute MaxCompute |
|
即時數倉 Hologres |
|
巨量資料開發治理平台 DataWorks |
|
Object Storage Service | 已開通OSS服務,操作詳情請參見控制台快速入門。 |
步驟一:準備資料
同步資料表
一般對於推薦情境,需要準備三張資料表:user側的特徵表、item側的特徵表以及Label表。
為方便實踐操作,我們在MaxCompute的pai_online_project專案中提前準備了類比產生的使用者表、物料表和Label表進行樣本說明。其中,使用者表、物料表每個分區大約有10萬條資料,在MaxCompute中分別佔用約70 MB;Label表每個分區約45萬條資料,在MaxCompute中佔用約5 MB。
您需要在DataWorks中執行SQL命令,將使用者表、物料表、Label表從pai_online_project專案同步到自己的MaxCompute中。具體操作步驟如下:
登入DataWorks控制台。
在左側導覽列單擊資料開發與治理 > 資料開發。
選擇已建立的DataWorks工作空間後,單擊進入資料開發。
滑鼠移至上方至建立,選擇建立節點 > MaxCompute > ODPS SQL,在彈出的頁面中配置節點參數。
參數
取值建議
引擎執行個體
選擇已建立的MaxCompute引擎。
節點類型
ODPS SQL
路徑
商務程序/Workflow/MaxCompute
名稱
可自訂名稱。
單擊確認。
在建立節點地區運行以下SQL命令,將使用者表、物料表、Label表從pai_online_project專案同步到自己的MaxCompute中。資源群組選擇已建立的獨享資源群組。
同步處理的使用者表:rec_sln_demo_user_table_preprocess_all_feature_v1(單擊查看詳情)
同步物料表:rec_sln_demo_item_table_preprocess_all_feature_v1(單擊查看詳情)
同步Label表:rec_sln_demo_label_table(單擊查看詳情)
對已同步的表進行補資料操作。
在DataWorks控制台介面,單擊左側導覽列的資料開發與治理 > 營運中心,在下拉框中選擇對應工作空間後單擊進入營運中心。
在左側導覽列單擊周期任務營運 > 周期任務,進入周期任務頁面。
單擊周期工作清單中的目標任務,開啟該任務的DAG圖。
按右鍵目標節點,選擇補資料 > 當前節點,選擇相應的補資料模式。
業務日期選擇2023-10-22至2023-10-24,單擊確定。
完成上述操作後,您可以在自己的工作空間內查看使用者表rec_sln_demo_user_table_preprocess_all_feature_v1、物料表rec_sln_demo_item_table_preprocess_all_feature_v1和Label表rec_sln_demo_label_table,後續的實踐操作將以這三張表為例進行說明。
配置資料來源
FeatureStore一般需要配置兩個資料來源:離線資料來源(MaxCompute)和線上資料來源(Hologres/GraphCompute/TableStore)。本文以MaxCompute和Hologres為例進行說明。
登入PAI控制台,在左側導覽列單擊資料準備 > 特徵平台(FeatureStore)。
選擇工作空間後,單擊進入FeatureStore。
配置MaxCompute資料來源。
在資料來源頁簽,單擊建立資料來源,在彈出的頁面中配置MaxCompute資料來源具體參數。
參數
取值建議
類型
MaxCompute
名稱
可自訂名稱。
MaxCompute專案名
選擇已建立的MaxCompute專案。
請複製語句並單擊立即前往,同步資料至Hologres,在DataWorks執行該語句後,即可完成授權。
說明授權操作需要您的帳號擁有admin許可權,具體操作詳情請參見通過命令系統管理使用者許可權或通過控制台系統管理使用者許可權。
完成後單擊提交。
配置Hologres資料來源。
在資料來源頁簽,單擊建立資料來源,在彈出的頁面中配置Hologres資料來源具體參數。
參數
取值建議
類型
Hologres
名稱
可自訂名稱。
執行個體ID
選擇已建立的Hologres執行個體名稱。
資料庫名稱
選擇已建立的執行個體資料庫。
完成後單擊提交。
對Hologres進行授權,具體操作詳情請參見配置資料來源。
安裝FeatureStore Python SDK
登入DataWorks控制台介面。
在左側導覽列單擊資源群組。
在獨享資源群組頁簽中,單擊相應調度資源後的,選擇營運助手。
單擊建立命令,在彈出的頁面中配置命令參數。
參數
取值建議
命令名稱
可自訂名稱。本文以install為例進行說明。
命令類型
手動輸入(無法使用pip命令安裝第三方包)
命令內容
/home/tops/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple https://feature-store-py.oss-cn-beijing.aliyuncs.com/package/feature_store_py-1.3.1-py3-none-any.whl
逾時時間
可自訂時間。
單擊建立,完成命令建立。
單擊運行命令,在彈出的頁面中單擊運行。
可單擊重新整理查看最新執行狀態,待狀態為成功時,即表示完成安裝。
步驟二:建立並註冊FeatureStore
您可以根據實際需求選擇通過控制台或者SDK兩種方式建立並註冊FeatureStore。由於後續匯出Training Set和同步資料都需要使用SDK,所以如果選擇控制台操作的方式,完成控制台配置後,仍需要使用FeatureStore Python SDK。
方式一:控制台操作
建立FeatureStore專案
登入PAI控制台,在左側導覽列單擊資料準備 > 特徵平台(FeatureStore)。
選擇工作空間後,單擊進入FeatureStore。
在專案頁簽,單擊建立專案,在彈出的頁面中設定項目參數。
參數
取值建議
名稱
可自訂名稱。本文以fs_demo為例進行說明。
描述
可自訂描述。
離線資料來源(Offline Store)
選擇已建立的MaxCompute資料來源。
線上資料來源(Online Store)
選擇已建立的Hologres資料來源。
單擊提交,完成FeatureStore專案建立。
建立特徵實體(Feature Entity)
在FeatureStore專案列表頁面,單擊專案名稱,進入專案詳情頁面。
在特徵實體頁簽中單擊建立特徵實體,在彈出的頁面中配置user特徵實體參數。
參數
取值建議
特徵實體名稱
可自訂名稱。本文以user為例進行說明。
Join Id
user_id
單擊提交。
單擊建立特徵實體,在彈出的頁面中配置item特徵實體參數。
參數
取值建議
特徵實體名稱
可自訂名稱。本文以item為例進行說明。
Join Id
item_id
單擊提交,完成特徵實體建立。
建立特徵視圖(Feature View)
在特徵專案詳情頁面的特徵視圖頁簽,單擊建立特徵視圖,在彈出的頁面中配置user特徵視圖參數。
參數
取值建議
視圖名稱
可自訂名稱。本文以user_table_preprocess_all_feature_v1為例進行說明。
類型
離線
寫入方式
使用離線表
資料來源
選擇已建立的MaxCompute資料來源。
特徵表
選擇已準備的使用者表rec_sln_demo_user_table_preprocess_all_feature_v1。
特徵欄位
勾選user_id主鍵。
同步線上特徵表
是
特徵實體
user
特徵生命週期(秒)
保持預設。
單擊提交。
單擊建立特徵視圖,在彈出的頁面中配置item特徵視圖。
參數
取值建議
視圖名稱
可自訂名稱。本文以item_table_preprocess_all_feature_v1為例進行說明。
類型
離線
寫入方式
使用離線表
資料來源
選擇已建立的MaxCompute資料來源。
特徵表
選擇已準備的物料表rec_sln_demo_item_table_preprocess_all_feature_v1。
特徵欄位
勾選item_id主鍵。
同步線上特徵表
是
特徵實體
item
特徵生命週期(秒)
保持預設。
完成後單擊提交,完成特徵視圖建立。
建立Label表
在特徵專案詳情頁面的Label表頁簽,單擊建立Label表,在彈出的頁面中配置Label表資訊。
參數
取值建議
資料來源
選擇已建立的MaxCompute資料來源。
表名
選擇已準備的Label表rec_sln_demo_label_table。
單擊提交。
建立模型特徵
在特徵專案詳情頁面的模型特徵頁簽,單擊建立模型特徵,在彈出的頁面中配置模型特徵參數
參數
取值建議
模型特徵名
自訂。本文以fs_rank_v1為例進行說明。
選擇特徵
選擇已建立的user特徵視圖和item特徵視圖。
Label表名稱
選擇已建立的Label表rec_sln_demo_label_table。
單擊提交,完成模型特徵建立。
在模型特徵列表頁面,單擊已建立模型右側的詳情。
在彈出的模型特徵詳情頁面的基本資料頁簽中,可查看匯出表名為fs_demo_fs_rank_v1_trainning_set,後續基於該表進行特徵生產以及模型訓練。
安裝FeatureStore Python SDK,具體操作詳情請參見方式二:FeatureStore Python SDK操作。
方式二:FeatureStore Python SDK操作
使用SDK的具體操作步驟請參見DSW Gallery。
步驟三:匯出Training Set並訓練模型
匯出Training Set。
登入DataWorks控制台。
在左側導覽列單擊資料開發與治理 > 資料開發。
選擇已建立的DataWorks工作空間後,單擊進入資料開發。
滑鼠移至上方至建立,選擇建立節點 > MaxCompute > PyODPS 3,在彈出的頁面中配置節點參數。
參數
取值建議
引擎執行個體
選擇已建立的MaxCompute引擎。
節點類型
PyODPS 3
路徑
商務程序/Workflow/MaxCompute
名稱
可自訂名稱。
單擊確認。
複製以下內容到指令碼中。
from feature_store_py.fs_client import FeatureStoreClient from feature_store_py.fs_project import FeatureStoreProject from feature_store_py.fs_datasource import LabelInput, MaxComputeDataSource, TrainingSetOutput from feature_store_py.fs_features import FeatureSelector from feature_store_py.fs_config import LabelInputConfig, PartitionConfig, FeatureViewConfig from feature_store_py.fs_config import TrainSetOutputConfig, EASDeployConfig import datetime import sys cur_day = args['dt'] print('cur_day = ', cur_day) offset = datetime.timedelta(days=-1) pre_day = (datetime.datetime.strptime(cur_day, "%Y%m%d") + offset).strftime('%Y%m%d') print('pre_day = ', pre_day) access_key_id = o.account.access_id access_key_secret = o.account.secret_access_key fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, region='cn-beijing') cur_project_name = 'fs_demo' project = fs.get_project(cur_project_name) 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) feature_view_config_list = [feature_view_user_config, feature_view_item_config] train_set_partitions = PartitionConfig(name = 'ds', value = cur_day) train_set_output_config = TrainSetOutputConfig(partition_config=train_set_partitions) model_name = 'fs_rank_v1' 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)
單擊右側調度配置,在彈出的頁面中配置調度參數。
參數
取值建議
調度參數
參數名
dt
參數值
$[yyyymmdd-1]
資源屬性
調度資源群組
選擇已建立的獨享資源群組。
調度依賴
選擇已建立的user表和item表。
節點配置並測試完成後,儲存並提交節點配置。
執行補資料操作。操作詳情請參見同步資料表。
(可選)查看匯出任務。
在FeatureStore專案列表頁面,單擊專案名稱,進入專案詳情頁面。
在特徵實體頁簽中單擊工作中樞。
單擊目標任務右側的詳情,即可查看該任務的基本資料、回合組態和任務日誌。
訓練模型
EasyRec是一個開源的推薦系統架構,可以與FeatureStore無縫銜接,進行訓練模型、匯出模型、上線模型的操作。推薦您將fs_demo_fs_rank_v1_trainning_set表作為輸入,使用EasyRec訓練模型。
更多EasyRec相關的問題,請通過DingTalk群(32260796)加入阿里雲人工智慧平台PAI諮詢群聯絡我們。
步驟四:上線模型
訓練並匯出模型後,可以進行部署和上線的操作。如果是自建推薦系統,FeatureStore提供FeatureStore Python/Go/Cpp/Java SDK,可以與各式各樣的自建推薦系統進行銜接。您也可以通過DingTalk群(32260796)聯絡我們諮詢和商討具體方案。如果是阿里雲系列產品,可以和FeatureStore無縫銜接,快速搭建推薦系統上線。
本文以阿里雲系列產品為例介紹上線模型操作。
步驟一:例行同步資料節點
上線前需要將資料同步節點例行,即例行將資料從離線資料來源同步到線上資料來源中,線上會即時地從線上資料來源中讀取。本樣本需要將user特徵表和item特徵表提交例行,具體操作如下。
登入DataWorks控制台。
在左側導覽列單擊資料開發與治理 > 資料開發。
選擇已建立的DataWorks工作空間後,單擊進入資料開發。
同步例行user表。
滑鼠移至上方至建立,選擇建立節點 > MaxCompute > PyODPS 3。
複製以下內容到指令碼中,完成user_table_preprocess_all_feature_v1例行同步。
user_table_preprocess_all_feature_v1 同步例行(單擊查看詳情)
單擊右側調度配置,在彈出的頁面中配置調度參數。
參數
取值建議
調度參數
參數名
dt
參數值
$[yyyymmdd-1]
資源屬性
調度資源群組
選擇已建立的獨享資源群組。
調度依賴
選擇已建立的user表。
節點配置並測試完成後,儲存並提交節點配置。
執行補資料操作。操作詳情請參見同步資料表。
同步例行item表。
滑鼠移至上方至新增,選擇建立節點 > MaxCompute > PyODPS 3,在彈出的頁面中配置節點參數。
單擊確認。
複製以下內容到指令碼中。
item_table_preprocess_all_feature_v1 同步例行(單擊查看詳情)
單擊右側調度配置,在彈出的頁面中配置調度參數。
參數
取值建議
調度參數
參數名
dt
參數值
$[yyyymmdd-1]
資源屬性
調度資源群組
選擇已建立的獨享資源群組。
調度依賴
選擇已建立的item表。
節點配置並測試完成後,儲存並提交節點配置。
執行補資料操作。操作詳情請參見同步資料表。
同步完成後,可以在Hologres中查看最新同步的特徵。
步驟二:建立與部署EAS模型服務
模型服務是為了接收Recommendation Engine的請求,根據請求對對應的item進行打分,返回分數。其中EasyRec Processor內部包含了FeatureStore Cpp SDK,可以實現低延時、高效能的取特徵操作,EasyRec Processor從Feature Store Cpp SDK取完特徵後,送入到模型進行推理,拿到打分後返回給Recommendation Engine。
部署模型服務的流程如下。
登入DataWorks控制台。
在左側導覽列單擊資料開發與治理 > 資料開發。
選擇已建立的DataWorks工作空間後,單擊進入資料開發。
滑鼠移至上方至新增,選擇建立節點 > MaxCompute > PyODPS 3。
複製以下內容到指令碼中。
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", # 請替換為PAI產品實際部署地區,本文以cn-beijing為例進行說明。 "fs_project": "fs_demo", # 請替換為您的FeatureStore專案名稱,本文以fs_demo為例進行說明。 "fs_model": "fs_rank_v1", # 請替換為您的FeatureStore模型特徵名稱,本文以fs_rank_v1為例進行說明。 "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.9", "processor_type": "cpp" } with open("echo.json", "w") as output_file: json.dump(config, output_file) # 第一次部署時運行下面這行 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") # 例行更新時運行下面這行 # 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")
單擊右側調度配置,在彈出的頁面中配置調度參數。
參數
取值建議
調度參數
參數名
dt
參數值
$[yyyymmdd-1]
資源屬性
調度資源群組
選擇已建立的獨享資源群組。
調度依賴
選擇對應的訓練任務和item_table_preprocess_all_feature_v1。
節點配置並測試完成後,運行查看部署情況。
部署完成後,注釋掉第34行代碼,並將37行取消注釋,提交任務例行。
(可選)您可以在EAS模型線上服務頁面的推理服務頁簽,查看已部署的服務。操作詳情請參見服務部署:控制台。
(可選)當使用 Hologres 等只能通過指定 VPC 訪問的資料來源時,需要打通 EAS 和對應資料來源的 VPC 網路。例如,當使用 Hologres 時,可以在 Hologres 的網路資訊頁面看到指定 VPC 對應的 VPC ID,交換器 ID 等資訊,需要在 EAS 服務頁面的右上方點擊配置高速連結按鈕,填入對應的 VPC ID 和交換器 ID,最後還需要填寫安全性群組名稱,可以選擇已有安全性群組或者建立安全性群組,注意其允許存取的連接埠要符合 Hologres 連結的要求,一般 Hologres 連結使用80連接埠,因此選擇的安全性群組需要開放80連接埠才能正常串連。都填寫完成後,單擊確定,待服務正常更新完成後即可使用。
步驟三:配置PAI-REC
PAI-REC是Recommendation Engine服務,其中整合了FeatureStore的Go SDK,可以與FeatureStore和EAS無縫銜接。
具體配置步驟如下。
配置FeatureStoreConfs。
RegionId
:修改為產品實際所在地區,此處以cn-beijing為例。ProjectName
:已建立的FeatureStore專案名稱,fs_demo。
"FeatureStoreConfs": { "pairec-fs": { "RegionId": "cn-beijing", "AccessId": "${AccessKey}", "AccessKey": "${AccessSecret}", "ProjectName": "fs_demo" } },
配置FeatureConfs。
FeatureStoreName
:和上一步FeatureStoreConfs中的設定pairec-fs保持一致。FeatureStoreModelName
:已建立的模型特徵名稱,fs_rank_v1。FeatureStoreEntityName
:已建立的特徵實體名稱,user。表示讓PAI-REC中的FeatureStore Go SDK來模數型fs_rank_v1中特徵實體為user側的特徵。
"FeatureConfs": { "recreation_rec": { "AsynLoadFeature": true, "FeatureLoadConfs": [ { "FeatureDaoConf": { "AdapterType": "featurestore", "FeatureStoreName": "pairec-fs", "FeatureKey": "user:uid", "FeatureStoreModelName": "fs_rank_v1", "FeatureStoreEntityName": "user", "FeatureStore": "user" } } ] } },
配置AlgoConfs。
此配置代表告訴PAI-REC去串連哪一個EAS模型打分服務。
Name
:和部署的EAS服務名稱一致。Url
和Auth
:EAS服務給出的資訊,您可以在EAS模型線上服務頁面單擊服務名稱,然後在服務詳情頁簽單擊查看調用資訊擷取URL和Token。更多詳細配置可參見EAS常見問題。
"AlgoConfs": [ { "Name": "fs_demo_v1", "Type": "EAS", "EasConf": { "Processor": "EasyRec", "Timeout": 300, "ResponseFuncName": "easyrecMutValResponseFunc", "Url": "eas_url_xxx", "EndpointType": "DIRECT", "Auth": "eas_token" } } ],