批式任务与流式任务看待数据的方式不同,批式任务将数据当作一个整体(数据集)来看待,流式任务将每条数据作为一个基本单位。
我们先看一个典型的批式任务场景,包括读取数据、数据预处理,特征生成、模型训练、预测、评估环节。各个组件依次对上游的结果数据集进行处理。实际某算法平台的一个批式任务运行状态截图如下:
整个流程可用一个有向无环图(Directed Acyclic Graph,缩写为DAG)来表示。在典型的工作流场景中,每个组件是在其所依赖的前序组件都完成后,才能开始执行的。下图正在运行的是“softmax多分类”组件,关注此处细节。
接入的数据连线是动态的虚线,表明从前序组件获取处理数据进行训练;而计算完成的组件的结果数据集是固定的,在图标左下方显示了该结果数据集的记录条数。“文本特征生成预处理”组件生成的带特征的训练数据为240条。
我们再来看流式任务,和“流水线”的操作类似,每个组件就相当于一名工人,每经过一名工人,产品上就会多一个组件;各个计算组件是同时启动的,每条数据在前一个组件处理完成后,会自动推到下一个组件。对于流式任务,经常用单位时间处理数据的条数来衡量效率。评估需要并发配置的计算资源,以便对线上请求及时响应。
如下图所示,我们看到流式任务的所有组件都在运行状态,每个组件左下角显示的是其每秒处理的数据条数。
还展示了“流批混跑”的情形,如下图所示,右上方和右侧中部的三个组件为批式任务组件,左侧及下方的组件为流式任务组件。先运行批式任务,其最终输出结果会作为流式任务的初始化数据;批式任务都运行结束后,启动流式任务。