本文提供 docker-compose 文件快速搭建基于 PAI-Rec 引擎的推薦服務,可以快速了解 PAI-Rec 引擎提供的服務。
前提
需要 docker 和 docker-compose 來運行服務。
從本文學到什么
1如何測試引擎提供的接口服務
2如何基于 PAI-Rec 快速搭建推薦服務,包括召回、曝光過濾、特征加載等流程
3如何調試推薦接口以及查看服務日志
運行服務
請先下載相關文件。
運行服務
# 解壓文件
tar zxvf pairec-demo-test.tar.gz
cd pairec-demo-test
# 拉起服務
docker-compose -f docker-compose.yaml up -d
可以通過 docker ps
可以看到
服務提供了 8000 可供訪問,引擎本身提供了 /api/rec/feed 接口可供訪問。 接口的具體調用參見PAI-Rec-doc快速開始中的接口測試部分。
測試服務
測試接口
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed"}'
如果看服務的詳細日志,可以
docker logs -f pairec
如果查看更詳細的日志,比如 user 、item 的特征加載是否正常,模型得分是否符合預期,可以加上 debug 參數。 這樣調用
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed", "debug":true}'
停止服務
docker-compose -f docker-compose.yaml down
運行原理
為了描述簡單,本文使用MySQL作為存儲引擎。在正式的服務中,我們更多的使用分布式的存儲引擎,例如 redis、hologres、tablestore(表格存儲)、igraph 等。mysql 如何運行的可以參考 docker-compose.yaml 文件。
整體的配置細節可以參考 config.json 文件。
表數據
pairec_demo_test.sql 提供了創建表以及初始化數據
u2i_recall:召回數據,使用了 U2I 召回
user_expose_history:曝光過濾表。接口返回的數據會寫入到曝光表中,下次調用接口時,不會重復返回已曝光的數據
user_feature:user特征表。 加載user特征供排序模型用
如果查看表的具體結構或者數據
# 登錄到 mysql docker 容器中
docker exec -it pairec-mysql bash
# 登錄到 mysql
mysql -uroot -ptest
# 切換數據庫
use pairec_demo_test
# 查看表
show tables;
數據源配置
pairec-mysql 是自定義的數據源名稱
"MysqlConfs": {
"pairec-mysql" :{
"DSN": "root:test@tcp(db:3306)/pairec_demo_test?multiStatements=true"
}
}
召回配置
"RecallConfs": [
{
"Name": "u2i_recall",
"RecallType": "UserCustomRecall",
"RecallCount": 500,
"DaoConf" :{
"AdapterType": "mysql",
"MysqlName": "pairec-mysql",
"MysqlTable": "u2i_recall"
}
}
]
feed 是我們定義的場景名稱
RecallNames 是多路召回,目前只配置了 u2i_recall
"SceneConfs": {
"feed": {
"default": {
"RecallNames": ["u2i_recall"]
}
}
}
過濾配置
這里我們配置了曝光過濾。
曝光過濾和召回配置類似, FilterConfs 是具體的配置, FilterNames 是場景對過濾配置的引用。 這里沒有具體的場景, default 是對所有場景有效。
"FilterConfs": [
{
"Name":"User2ItemExposureFilter",
"FilterType":"User2ItemExposureFilter",
"WriteLog": true,
"DaoConf":{
"Adapter":"User2ItemExposureMysqlDao",
"AdapterType":"mysql",
"MysqlName": "pairec-mysql",
"MysqlTable": "user_expose_history"
}
}
],
"FilterNames": {
"default": [
"UniqueFilter",
"User2ItemExposureFilter"
]
}
如果查看曝光過濾是否生效,可以多次調用接口,接口返回的數據是不同的。
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed"}'
同時可以觀察服務日志, 可以看到 requestId=d440c298-3890-4a6c-91e3-9654c83cc72a event=User2ItemExposureFilter count=213 cost=5
。 count 記錄了經過曝光過濾之后的 item 數量。 每次調用服務, count 都應該減少。
特征加載
當我們拿到 item 數據后,后續是對 item 進行模型打分,打分之前需要加載 user / item 特征。 PAI-Rec 可以高性能的加載特征數據,而只需要配置即可。具體的配置加載可以參考特征配置。
"FeatureConfs": {
"feed": {
"AsynLoadFeature" : true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "mysql",
"MysqlName": "pairec-mysql",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "userid",
"MysqlTable": "user_feature",
"UserSelectFields":"*",
"FeatureStore":"user"
},
"Features" :[]
}
]
}
}
接下來做什么
從部署PAI-Rec引擎服務查看如何使用官方鏡像部署引擎服務。
從快速創建項目了解如何自定義開發引擎代碼,編譯打包項目。
從引擎配置單了解更詳細的配置說明。