模型配置
在精排階段,一般會調用 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 個,可以根據模型推理服務的資源量靈活配置。