一致性检查

功能说明

特征一致性是算法项目中常见的工程课题,指的是模型训练的特征和在线打分的特征逻辑要一致,如果特征不一致会导致产品或应用出现打分不一致、效果异常,所以建议定期执行特征一致性检查任务,避免因特征不一致导致的效果下跌问题。

本功能用于自动化进行离在线特征一致性对比工作,排查以下问题:

  • 特征名称不一致,体现在在线的特征名称与离线的特征不匹配

  • 特征类型不匹配, 相同的特征名称,在线离线类型不匹配

  • 特征缺失, 在线的特征缺失,或者没有构造出相应的特征。传入的上下文特征没有,或者在线服务没有构造出相关特征

  • 特征值不匹配,在线的特征值的处理逻辑或者方法与离线的构造不一致

  • 模型的特征处理逻辑有误,processor在打分之前,如果需要对特征的处理,比如EasyRec,这块特征处理涉及特征加载、特征默认值、特征的衍生(FG特征)。这里通过开启EasyRec Processor debug模式,获取生成的特征,来做进一步的对比

对比流程

流程图

image.png

流程说明

第一步:控制台创建一致性检查任务开启任务

要进行特征一致性对比,首先要在控制台(推荐全链路服务平台->排查工具->一致性检查)启动配置好的任务。

在启动一致性检查任务时,配置中心会先根据任务配置检查和创建执行任务所必要的资源,它们用于处理特征日志和模型日志。资源成功创建后,配置中心会增加服务参数。至此,任务成功开启。

第二步:PAI-REC引擎获取任务参数

PAI-REC引擎通过配置中心SDK获取最新的配置中心服务参数,从中得到已开启的特征一致性检查任务的参数。

第三步:特征日志落盘和配置中心获取日志

PAI-REC引擎得到已开启的特征一致性检查任务的参数后,将服务过程中产生的特征日志落盘至MaxCompute中。

同时配置中心获取到特征日志。

第四步:配置中心调用 PAI-REC 引擎特征重放 API

配置中心在获取到特征日志的同时,根据获得的特征日志,按任务设置的比例,批量地调用 PAI-REC引擎特征重放API( 特征重放:指的是带着上面PAI-REC引擎落盘的特征,再请求一次PAI-REC引擎的另外一个接口,这个接口是专门用来开启模型服务的debug模式的 )。

第五步:PAI-REC 引擎调用 EAS 模型

PAI-REC引擎接受到请求后,以debug模式调用EAS模型服务,在此过程中生成模型的debug信息,debug信息中包含了模型fg前后的所有特征信息 。

第六步:返回模型的debug信息

EAS模型服务中生成模型的debug信息返回PAI-REC引擎中,生成模型的debug日志。

第七步:日志落盘

PAI-REC引擎生成模型的debug日志落盘至MaxCompute中。

第八步:特征日志作为离线样本预测

取到MaxCompute中的特征日志,将特征日志作为离线样本进行预测。

第九步:将离线特征与在线特征进行对比

取到MaxCompute中的模型日志,将模型日志中的在线特征与离线预测结果中的离线特征进行离在线的特征对比,生成一致性检查任务的检查结果。

使用说明

1. 配置特征一致性检查任务

前置条件

在配置特征一致性检查任务前需要添加所需的数据源,包括MaxCompute和模型EAS数据源。如果需要输出结果至OSS,那么还需要添加OSS数据源。

如何添加数据源参考: 元数据管理操作参考文档链接

操作步骤

点击侧边栏中一致性检查,进入特征一致性检查任务管理页面,创建任务或编辑已有任务。

image.png

image.png

image.png

image.png

创建一个一致性任务:

image

要填写的信息包括:

  • 任务名称:自定义名称

  • 关联场景:关联的推荐场景,可下拉选择,选择的场景需要和引擎中所使用的配置场景是一样的,还需要与请求体里的场景一一对应

  • 采样比例:调整采样数量,最大为 100%。设置较小的采样率可以减轻任务对服务产生的QPS压力,例如当QPS=10的时候,设置10%的采样率,每秒钟只采样一条推荐请求的日志

  • 数据回落地址:选择想要回落的相应的MaxCompute的project

  • PAI-EAS模型服务名称:引擎对应所用到的EasyRec Processor服务名称,需要从对应的模型中获取一些参数,例如:OSS的模型地址、算法名称等

  • fg_json文件名称:DataWorks MaxCompute 中用于模型训练的 fg 文件名称

  • user特征表:选择需要用到的user特征数据表

  • user_id字段:选择的user特征表的user_id字段,也是表的主键

  • user表分区字段:选择相应的ds字段,分区字段显示有两种形式yyyymmddyyyy-mm-dd,可下拉选择显示的样式

  • item特征表:选择需要用到的item特征数据表

  • item_id字段:选择的item特征表item_id字段,也是表的主键

  • user表分区字段:选择相应的ds字段,分区字段显示有两种形式yyyymmddyyyy-mm-dd,可下拉选择显示的样式

  • 是否需要特征比对:默认选择是,如果选择否模型的详细特征原则不会显示

  • 推荐服务名称:选择需要用到日志回放的服务名称(推荐服务名称,是从系统配置中服务管理来的)

  • 是否需要生成zip包:默认选择否,如果不需要生成zip包,此时点击确定任务创建成功;如果需要生成zip包,选择是后,填写相关对应的信息,包括选择OSS Bucket,填写工作流名称、自定义EasyRec版本、自定义EasyRec包路径、自定义fg_jar版本、特征优先级与特征展示过滤后,点击确定任务创建成功。

image

  • 特征优先级:此参数中的特征优先从特征表中查询,特征表中特征为空,则从行为表中查询,多个特征用逗号分隔。

  • 特征展示过滤:在一致性任务完成之后,进行特征对比时,会在显示的过程中将某些特征过滤掉。

  • 自定义EasyRec版本:如果 eas 服务上已经部署了最新版本的 EasyRec,这里也可以指定一下版本,供离线时使用

  • 自定义 EasyRec包路径:支持oss和odps资源两种路径, oss路径形如:oss://{bucket_name}/xxx/easy_rec_ext_{version}_res.tar.gz,odps资源路径形如:odps://{project_name}/resources/easy_rec_ext_{version}_res.tar.gz

  • 自定义fg_jar包名:形如 fg_on_odps-{version}-jar-with-dependencies.jar

说明

注:在创建一致性检查任务前,需确保user表与item表为当天的数据。

2. 运行特征一致性检查任务和查看结果

运行任务

在特征一致性检查页面,对应任务操作栏点击运行任务来运行任务,需要填写运行时长和运行环境(预发或生产),点击确定后,等待任务结束,或者中途取消任务。

image.png

image.png

查看结果

在一致性检查页面的任务日志中,可查看任务运行情况,一般来说任务执行的实际时长会大于设定的时间。这是因为需要额外的时间等待数据同步完成以及最后做分析。

image.png

当任务执行成功,点击对应日志操作栏的检查结果来查看报表结果。

image.png

展示结果包括,Userid,Itemid,Requestid,打分差异表(按差异大小降序排序)等,点击操作栏的特征对比可以查看对应的特征差异。

image.png

一般 ScoreDiff 的值差异在小数点后四位以外,我们就可以认为离在线的打分是一致的了。

image.png

说明

注:对item_id 来说,Online取值是‘-1024’,表示没有取到正确的物品ID值;对title、author等字段来说,Online取值都是默认值。

Requestid栏后的筛选按钮可对Requestid进行筛选,在Requestid这一栏,如果你觉得某个Requestid没有问题(例如x),则可以选择x,那么Requestid=x都会过滤掉。

image.png

image.png

3. 结果使用

若选择了高级设置,会将生成的任务文件以压缩包(package.zip)的方式存至 OSS,OSS 的存储地址为高级设置中所填地址。

下面说明压缩包如何上传至DataWorks中手动运行任务

  1. 首先将OSS中的压缩包下载至本地

  2. 进入DataWorks,顺序点击如下按钮

image.png

  1. 点击迁移助手,再点击 DataWorks 导入

image.png

  1. 点击右上角 新建导入任务

image.png

  1. 输入自定义名称,点击上传文件,将本地的压缩包上传,随后点击上传确认即可

  2. 任务所在的文件夹即为在高级配置中所填写的 workflow_name