算法配置

EAS 模型支持

在 Rank 阶段,一般会调用 EAS 上的算法模型服务来获取得分。EAS 支持多种类型模型的部署,pairec 也支持不同模型的调用。包括 pmml, ps,alink, tensorflow, easyrec 等。具体的配置在 AlgoConfs 里。

{
"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 里。

algorithm.RegistRequestDataFunc(algo_name, RequestDataFunc)
// 第一个参数是 algo name
// 第二个参数是特征列表, []map[string]interface{}, 特征列表由 map 表示,这里包含多组特征
type RequestDataFunc func(string, interface{}) interface{}

如果想手动的访问算法模型,只需要构造出相应的 request,根据 algo 名称访问即可。

    request := tf.PredictRequest{}
    // 初始化 request ...

    ret, err := algorithm.Run("room3_mt_v2", &request)

场景下的算法配置

RankConf 里可以配置场景下需要调用哪些算法模型,这里可以并发调用多个 rank 模型。RankAlgoList 的模型名称,必须能在 AlgoConfs 里找到。RankScore 表示多个模型的最终的得分是怎样的。在下面的例子中,单一模型也能可能返回多值,RankScore 会把多值变成一个最终得分。

 {
 "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 的算法配置通常如下:

{
 "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 数量