# 算法配置 ## EAS 模型支持 在 Rank 阶段,一般会调用 [EAS](https://help.aliyun.com/document_detail/113696.html?spm=a2c4g.11174283.6.739.45051987PrhSqB) 上的算法模型服务来获取得分。EAS 支持多种类型模型的部署,pairec 也支持不同模型的调用。包括 pmml, ps,alink, tensorflow, easyrec 等。具体的配置在 AlgoConfs 里。 ```bash { "AlgoConfs": [ { "Name": "ps_smart", "Type": "EAS", "EasConf": { "Processor": "PMML", "ResponseFuncName": "pssmartResponseFunc", "Url": "http://1857464601594004.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx", "Auth": "xxx" } }, { "Name": "fm", "Type": "EAS", "EasConf": { "Processor": "ALINK_FM", "ResponseFuncName": "alinkFMResponseFunc", "Url": "http://1857464601594004.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx", "Auth": "xxx" } }, { "Name": "room3_mt_v2", "Type": "EAS", "EasConf": { "Processor": "TensorFlow", "ResponseFuncName": "tfMutValResponseFunc", "Url": "http://1857464601594004.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx", "Auth": "xxx" } }, { "Name": "sv_dbmtl", "Type": "EAS", "EasConf": { "Processor": "EasyRec", "Timeout": 300, "ResponseFuncName": "easyrecMutValResponseFunc", "Url": "http://xxx.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/xxx", "EndpointType": "DIRECT", // 如果引擎和模型都部署在 EAS 上,可以设置此值,通过直连的方式请求模型,性能更高 "Auth": "xxx" } } ] } ``` ResponseFuncName 指定了需要哪个 function 解析返回的数据,这里与 Processor 类型相匹配。 当 Processor 类型为 TensorFlow 时,请求数据由于模型不同需要做不同的实现。这里需要自定义实现并注册到 pairec 里。 ```go algorithm.RegistRequestDataFunc(algo_name, RequestDataFunc) // 第一个参数是 algo name // 第二个参数是特征列表, []map[string]interface{}, 特征列表由 map 表示,这里包含多组特征 type RequestDataFunc func(string, interface{}) interface{} ``` 如果想手动的访问算法模型,只需要构造出相应的 request,根据 algo 名称访问即可。 ```go request := tf.PredictRequest{} // 初始化 request ... ret, err := algorithm.Run("room3_mt_v2", &request) ``` ## 场景下的算法配置 RankConf 里可以配置场景下需要调用哪些算法模型,这里可以并发调用多个 rank 模型。RankAlgoList 的模型名称,必须能在 AlgoConfs 里找到。RankScore 表示多个模型的最终的得分是怎样的。在下面的例子中,单一模型也能可能返回多值,RankScore 会把多值变成一个最终得分。 ```bash { "RankConf": { "live_feed": { "RankAlgoList": [ "fm" ], "RankScore": "${fm}" }, "live_feed_mutval": { "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)" } } ``` EasyRec 的算法配置通常如下: ```json { "RankConf": { "video_feed": { // 场景名称 "RankAlgoList": [ "sv_dbmtl_v10" // 模型名称,可以在 AlgoConfs 里找到 ], "RankScore": "${sv_dbmtl_v10_probs_is_valid_play} + ${sv_dbmtl_v10_y_play_time} + ${sv_dbmtl_v10_y_play_comlete_rate} + 0.5 * ${sv_dbmtl_v10_probs_is_like} + 0.25 * ${sv_dbmtl_v10_probs_is_comment}", "BatchCount": 100, "Processor": "EasyRec" } } ``` * BatchCount 请求模型的 item 数量