模型配置
在精排階段,一般會調用 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_name}和${scene_name2}是兩個推薦情境的名稱),可以根據不同情境選用不同的模型,這裡需要用之前在模型配置中配置好的模型的自訂名稱。
配置樣本
{
"RankConf": {
"${scene_name1}": {
"RankAlgoList": [
"fm"
],
"RankScore": "${fm}"
},
"${scene_name2}": {
"RankAlgoList": [
"dbmtl_v1"
],
"RankScore": "${dbmtl_v1_probs_ctr} * (${dbmtl_v1_probs_view} + ${dbmtl_v1_y_view_time} + 0.5 * ${dbmtl_v1_probs_on_wheat} + 0.5 * ${dbmtl_v1_y_on_wheat_time} + 0.25 * ${dbmtl_v1_y_gift} + 0.25 * ${dbmtl_v1_probs_add_friend} + 0.1)",
"Processor": "EasyRec"
}
}
}欄位名 | 類型 | 是否必填 | 描述 |
RankAlgoList | []string | 是 | 在 AlgoConfs 中定義的模型,表示這個情境使用哪個模型進行打分 |
RankScore | string | 是 | 模型的融合運算式 |
Processor | string | 否 | 當 AlgoConfs 中的 processor 為 EasyRec 時,必填,也取值為 EasyRec |
BatchCount | int | 否 | 批量請求模型的資料量大小,預設為 100 |
ContextFeatures | []string | 否 | 當 AlgoConfs 中的 processor 為 EasyRec 時, 傳遞的上下文特徵。 如果不需要傳特徵,可以不設定此值。如果需要傳遞上下文特徵到 processor, 特徵的欄位名稱必須配置到 ContextFeatures |
ItemFeatures | []string | 否 | 當 AlgoConfs 中的 processor 為 EasyRec 時,傳遞item特徵到EasyRec processor 中,而不使用processor中緩衝的item特徵。當要傳遞item所有的特徵,可以使用["*"]配置。也可以指定相應的特徵名稱["feature1","feature2"]。此配置可以與ContextFeatures 同步設定。 |
其中 RankScore 指的是多個目標預測值的融合運算式,其樣本如上所示。例如 dbmtl_v1_probs_ctr,其中 dbmtl_v1 指的是上文中模型配置名稱,probs_ctr 指的是多目標模型的其中一個目標。
RankScore中支援的計算類型包括加(+)、減(-)、乘(*)、除(/)、次方(^)、取餘(%),用法都是類似的,如上述配置中兩個參數的相乘和相加,取餘則是 ${dbmel_v1_probs_ctr}%2,次方則是${dbmtl_v1_probs_ctr}^2。
多個模型融合打分也是類似的,例如有兩個模型 dbmtl_v1 和 dbmtl_v2,則 RankAlgoList 中應該填寫為 ["dbmtl_v1","dbmtl_v2"],RankScore可以填寫為 ${dbmtl_v1_probs_ctr}+${dbmtl_v2_probs_y_gift},每個模型服務拼接上各自的目標即可,這裡 probs_ctr 和 y_gift 只是作為舉例。
BatchCount 的設定是指PAI-Rec 一批請求的資料量大小。例如,推薦排序的候選集有 1000 個 item_id,將BatchCount 設為 100 時,PAI-Rec 將分 10 批發送請求,每一批請求個數為 100 個,可以根據模型推理服務的資源量靈活配置。