-
Notifications
You must be signed in to change notification settings - Fork 78
PipeLine介绍
PipeLineTask文件作用是初始化模型,从proto buffer模型文件里面解析模型并加载到内存当中. 同时在每次在线推理请求时,执行推理流程并返回结果,下面进行说明。
函数原型:initModel(Map<String, byte[] modelProtoMap> modelProtoMap存储的是离线模型,包含两个部分:
-
DSL对应的json文件序列化的结果:
Key是:"pipeline.pipeline:Pipeline",DSL是FATE离线和在线建模过程描述语言,用户可通过DSL来描述建模过程。 DSL通过有向无环图来描述建模过程,图上的每个节点都是一个模型组件,每条表代表一个依赖。
通过modelProtoMap索引出DSL文件后,调用DSLParser模块来解析即可得到线上推理的流程图,具体可参考 DSLParser说明文档
需要注意的是在线推理使用的DSL是离线建模自动生成的,包含了一些关键信息,用户无法自己配置,必须通过离线训练。 同时,用户请确保在线使用的DSL描述的图中,出度为0的组件只有一个,即最终推理的结果输出只能由唯一组件产生,其他组件为中间处理过程。可通过配置离线训练的DSL里面将多余的组件增加"need_deploy": false 字段来去掉在线推理不使用的组件 -
各个模型组件 modelProtoMap存储的另一部分内容是离线生成的各组件输出的模型序列化的结果. FATE当前离线生成的模型,包含两个文件,一个是Meta,代表着模型的初始化参数,如场景的学习率、迭代次数等等; 另一个是Param,代表着模型训练过程中的一些参数,如模型权重。
modelProtoMap存储着各模型组件对应的两个文件,其中Key的规则是"组件名.xxxMeta"和"组件名.xxxParam",其中"xxx"是对应组件自定义的名字,在线推理时中无需关注,仅需通过后缀Meta和Param来判别模型文件类型。组件名则是离线/在线建模中对每个建模组件的别称,它也是DSL描述的建模流程图中的节点名称。
通过modelProtoMap得到各组件模型Meta和Param序列化结果后,根据DSLParser得到的流程图各节点信息(每个节点对应的实际建模模块),则可通过调用对应的ProtoBuffer文件来反序列化解析得到模型的实际内容,并保存再内存中。
当接受到在线推理的请求时,FATE-Serving则会调用 predict 函数来进行推理。需要关注的入参是: Map<String, Object> inputData,FATE-Serving要求在线推理传入的参数是key, value形式,其中key代表的是特征名,value代表的是具体的特征值。
实际推理时,根据DSLParser解析DSL后提供的拓扑顺序来调用组件。对于每个组件,索引它的上游依赖组件列表(由DSLParser类提供),并将上游组件的输出当成它的输入,然后调用自身的predict函数来产生结果。各算法组件都须实现自身的predict逻辑。如上所言,在线推理时,DSL有且仅有一个点出度为0,即拓扑序遍历的终点,它的输出即在线推理的算法输出结果。
此处需要注意的是:有些离线组件在线是没有实现的,如采样、交集等,它们在在线推理时是无意义的,对这些不存在的组件,我们将节点设置为null,将它的输入当成输出原路传递给下游组件。