自定义 Pipeline 流程

背景

PAI-Rec 引擎本身就是一个 pipeline 处理流程, 把召回、过滤、粗排、特性加载、精排等各个阶段串联起来。但有时候,只有一条 pipeline 的处理流程是不够的。比如冷启动流程,它需要一条单独的 pipeline 来处理,因为冷启动的粗排、精排等流程与主链路是不同的。另一种情形是,在首页推荐流中,会有图文、视频等多种数据,图文,视频的处理链路是不同的,需要走不同的 pipeline , 最终把数据混排在一起。

目前通过 PAI-Rec 可以自定义 pipeline 流程,来处理单独的链路而区别于主链路流程。 可以通过配置文件来描述 pipeline , 并且可以结合 AB 服务,在实验中动态调整 pipeline 流程。

整体架构

当前主链路的流程如下:

image-20220107150220242.png

当前在同一个场景中,可以配置多条 pipeline 流程,最终与主链路的数据 merge 到一起。

image-20220107151325761.png

自定义 Pipeline 配置

配置如下:

 {
   "PipelineConfs": {
    "video_feed": [ // 场景名称,场景,可以配置多个 pipeline
      {
        "Name": "coldstart", // 自定义 pipeline 名称,全局唯一,不同场景也要唯一
        "RecallNames": [], // 召回列表, RecallConfs 里定义
        "FilterNames": [], // 过滤列表, FilterConfs 里定义
        "GeneralRankConf": { // 粗排定义, 可以参考粗排的配置
          "FeatureLoadConfs":[],
          "RankConf":{},
          "ActionConfs": [
            {
              "ActionType": "filter",
              "ActionName": ""
            }
          ]
        },
        "FeatureLoadConfs":[],
        "RankConf":{
          "RankAlgoList":[],
          "RankScore":"",
          "Processor":"",
          "BatchCount": 100
        },
        "ColdStartRankConf": {
          "AlgoName":"",
          "OnlyEmbeddingFeature": true
        },
        "SortNames":[] // 排序处理,SortConfs 里定义
      }
    ]
  }
 }

上述的配置基本上与主链路的配置是一致的,上面是完整的配置,并不是所有的字段都是必须的。解释说明如下:

  • PipelineConfs 所有的 pipeline 的定义都放在这里, 支持多场景配置

  • Name 自定义pipeline 名称,在配置里全局唯一

  • RecallNames 召回列表,名称可以在 RecallConfs 里定义,也可以是自定义的召回

  • FilterNames 过滤列表, 名称可以在 FilterConfs 里定义,也可以是自定义的过滤

  • GeneralRankConf 粗排配置。 这个不是必须的。 具体的定义可以参考粗排配置

  • FeatureLoadConfs 特征加载,具体可以参考特征配置

  • RankConf/ColdStartRankConf 这两个是互斥的配置,如果是想用冷启动算法, 配置 ColdStartRankConf 就可以了。 如果是模型的精排,可以配置 RankConf

  • SortNames 自定义排序,这个也不是必须的。是否对pipeline 的数据做进一步处理,可以在这里做。 名称可以在 SortConfs 里找到,或者自定义的排序

实验参数支持

在很多情况下,需要对 pipeline 的流程做实验对比,pipeline 中的各个子阶段都支持实验参数,模式为 "pipelines." + {pipeline 名称} + ".{子阶段名称}"。具体详情如下

参数名称

参数类型

参数说明

样例

"pipelines." + {pipeline 名称} + ".RecallNames"

json array

召回的列表,需要包含所有的召回

{"pipelines.coldstart.RecallNames":[ "ColdStartRecall"]}

"pipelines." + {pipeline 名称} + ".FilterNames"

json array

过滤列表,包含所有的过滤流程

{"pipelines.coldstart.FilterNames":["UniqueFilter", "UserExposureFilter"]}

"pipelines." + {pipeline 名称} + ".GeneralRankConf"

recconf.GeneralRankConfig

粗排配置

{"pipelines.coldstart.GeneralRankConf":{"Actions":[]}}

"pipelines." + {pipeline 名称} + ".FeatureLoadConfs"

[]recconf.FeatureLoadConfig

特征加载配置

{"pipelines.coldstart.FeatureLoadConfs":[{"FeatureDaoConf":{}}]}

"pipelines." + {pipeline 名称} + ".RankConf"

recconf.RankConfig

排序算法的配置

{

"pipelines.coldstart.RankConf"

:{

"RankAlgoList"

:[

"pai_homepage_fm"

],

"RankScore":"${pai_homepage_fm}"

}

}

"pipelines." + {pipeline 名称} + ".ColdStartRankConf"

recconf.ColdStartRankConfig

冷启动算法配置

{

"pipelines.coldstart.ColdStartRankConf"

:{

"AlgoName":""

,

"OnlyEmbeddingFeature":true

}

}

"pipelines." + {pipeline 名称} + ".SortNames"

json array

排序列表

{ "pipelines.coldstart.SortNames":[]}