文档

快速导览PAI-Rec引擎的功能

更新时间:

本文提供 docker-compose 文件快速搭建基于 PAI-Rec 引擎的推荐服务,可以快速了解 PAI-Rec 引擎提供的服务。

前提

需要 docker 和 docker-compose 来运行服务。

请参见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 可以看到

image.png

服务提供了 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" :[]
       }
      ]
   }
}

接下来做什么

  1. 部署PAI-Rec引擎服务查看如何使用官方镜像部署引擎服务。

  2. 快速创建项目了解如何自定义开发引擎代码,编译打包项目。

  3. 引擎配置单了解更详细的配置说明。