模型配置
在精排阶段,一般会调用 EAS 上面的算法模型服务来获取得分,EAS 支持多种类型模型的部署,PAI-REC也支持不同模型的调用,包括 EasyRec, TorchEasyRec,tensorflow, pmml、ps、alink等,模型的信息配置对应配置总览中的 AlgoConfs。
EasyRec 的代码是开源的,根据 EasyRec 文档 中的介绍训练模型,导出模型 后再使用 EasyRec Processor(推荐打分服务)部署好 EAS 服务后,就可以使用 PAI-Rec 进行调用打分。
TorchEasyRec 是EasyRec的Torch版本,可根据 TorchEasyRec文档中的介绍进行训练模型,导出模型,并使用TorchEasyRec Processor 部署EAS服务,就可以使用 PAI-Rec 进行调用打分。
配置示例
{
"AlgoConfs": [
{
"Name": "room3_mt_v2",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"ResponseFuncName": "easyrecMutValResponseFunc",
"Url": "http:xxx.pai-eas.aliyuncs.com/api/predict/xxx",
"EndpointType": "DIRECT",
"Auth": ""
}
},
{
"Name": "room3_mt_v2_torch",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"ResponseFuncName": "torchrecMutValResponseFunc",
"Url": "http:xxx.pai-eas.aliyuncs.com/api/predict/xxx",
"EndpointType": "DIRECT",
"Auth": ""
}
},
{
"Name": "tf",
"Type": "EAS",
"EasConf": {
"Processor": "TensorFlow",
"ResponseFuncName": "tfMutValResponseFunc",
"Url": "http:xxx.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": ""
}
},
{
"Name": "ps_smart",
"Type": "EAS",
"EasConf": {
"Processor": "PMML",
"ResponseFuncName": "pssmartResponseFunc",
"Url": "http:xxx.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": ""
}
},
{
"Name": "fm",
"Type": "EAS",
"EasConf": {
"Processor": "ALINK_FM",
"ResponseFuncName": "alinkFMResponseFunc",
"Url": "http:xxx.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": ""
}
}
]
}
字段名 | 类型 | 是否必填 | 描述 |
Name | string | 是 | 自定义模型信息名称,在 RankConf 中引用 |
Type | string | 是 | 模型部署类型 |
EasConf
字段名 | 类型 | 是否必填 | 描述 |
Processor | string | 是 | 模型类型,枚举值:
|
Timeout | int | 否 | 请求模型超时时间 |
ResponseFuncName | string | 是 | 需要哪个 function 解析返回的数据,这里与 Processor 类型相匹配。
|
Url | string | 是 | 模型地址 |
EndpointType | string | 否 | 枚举值:DOCKER/DIRECT 如果引擎和模型都部署在 EAS 上,可以设置为 DIRECT,通过直连的方式请求模型,性能更高 |
Auth | string | 是 | 模型的 Token |
其中上面的 easyrecMutValResponseFunc 、 torchrecMutValResponseFunc 和 tfMutValResponseFunc指的是返回值可以是多个目标预测值,多个目标预测值可以通过在PAIREC 中配置操作函数进行处理,如返回的多个值可以全部加起来作为最后的总排序分数依据。
如果模型部署在 EAS上,Url 和 Auth 都可以在 EAS 控制台查到。
算法配置
算法配置对应配置总览中的 RankConf,RankConf 是一个Map[string]object 结构,其中 key 为场景名称(scene_name1和scene_name2是两个推荐场景的名称),可以根据不同场景选用不同的模型,这里需要用之前在模型配置中配置好的模型的自定义名称。
配置示例
{
"RankConf": {
"scene_name1": {
"RankAlgoList": [
"fm"
],
"RankScore": "${fm}"
},
"scene_name2": {
"RankAlgoList": [
"room3_mt_v2"
],
"RankScore": "${room3_mt_v2_probs_ctr} * (${room3_mt_v2_probs_view} + ${room3_mt_v2_y_view_time} + 0.5 * ${room3_mt_v2_probs_on_wheat} + 0.5 * ${room3_mt_v2_y_on_wheat_time} + 0.25 * ${room3_mt_v2_y_gift} + 0.25 * ${room3_mt_v2_probs_add_friend} + 0.1)"
}
}
字段名 | 类型 | 是否必填 | 描述 |
RankAlgoList | []string | 是 | 在 AlgoConfs 中定义的模型,表示这个场景使用哪个模型进行打分 |
RankScore | string | 是 | 模型的融合表达式 |
Processor | string | 否 | 当 AlgoConfs 中的 processor 为 EasyRec 时,必填,也取值为 EasyRec |
BatchCount | int | 否 | 批量请求模型的数据量大小,默认为 100 |
ContextFeatures | []string | 否 | 当 AlgoConfs 中的 processor 为 EasyRec 时, 传递的上下文特征。 如果不需要传特征,可以不设置此值。如果需要传递上下文特征到 processor, 特征的字段名称必须配置到 ContextFeatures |
其中 RankScore 指的是多个目标预测值的融合表达式,其示例如上所示。例如 room3_mt_v2_probs_ctr,其中 room3_mt_v2 指的是上文中模型配置名称,probs_ctr 指的是模型配置服务中的返回值。
BatchCount 的设置是指PAI-Rec 一批请求的数据量大小。例如,推荐排序的候选集有 1000 个 item_id,将BatchCount 设为 100 时,PAI-Rec 将分 10 批发送请求,每一批请求个数为 100 个,可以根据模型推理服务的资源量灵活配置。