汇量科技在Spark上 构建推荐算法Pipeline的实践

简介: 内容简要:一、关于汇量科技二、一个典型的推荐算法实验流程三、问题和挑战四、在Spark上构建推荐算法Pipeline

内容简要:

一、关于汇量科技

二、一个典型的推荐算法实验流程

三、问题和挑战

四、在Spark上构建推荐算法Pipeline

 

 

一、关于汇量科技Mobvista

汇量科技是:

• 一站式的移动广告服务和数据统计分析服务

• 日均千亿次的在线广告个性化匹配

• 全流量 DNN 模型排序

• 构建了一站式机器学习平台MindAlpha

 

 

二、一个典型的推荐算法实验流程

推荐算法的数据部分较为复杂,而语音图像数据集是一个静态的数据集

 

推荐算法试验流程解析:

1)  数据准备

数据进行处理结合

2)  特征样本生成

将数据进行特征拼接、Label拼接;

3)  特征存储

存储特征样本,包含在线学习样本和离线学习样本;

4)  模型训练

对样本进行模型训练,包括模型迭代、参数调优;

5)  在线评估

进行线上评估,如果发现问题返回之前的流程。例如参数优化问题则返回模型调优数据问题则返回第一步数据准备,从头开始。

 

 

三、问题和挑战

推荐算法广告搜索类似,首先解决数据的问题,然后解决法的问题。

推荐算法主要存在以下四个问题:

1.数据源多,特征处理流程繁琐

比如有实时特征、离线特征等。

2.离线学习、在线学习转换

在线学习与离线学习之间做无缝的转换

3.模型训练与数据处理的衔接

数据源有很多不同类型的存储,算法需要适配,所以需要模型训练与数据处理的衔接。

4.上下游依赖多且频繁变动

线上算法有很多流量并行的实验,整个上下游的依赖比较繁琐这方面出错的造成的问题比较严重

 

 

四、在Spark上构建推荐算法 Pipeline

(一)Why Spark?

l  选择Spark的原因:

1)数据处理功能强大;

2)支持多种离线、实时数据源;

3DataFrame的抽象;

4)支持多种调度系统和硬件;

5PySpark

 

 

(二)特征工程数据流

在解决特征数据流的问题上,最开始没有构建排版,业务算法工程师们一般是自己做数据拼接。这种拼接没有规范,直接拷贝代码输出数据源,在Spark里面进行 Join每个实验形成一个数据集

这种特征数据流存在许多问题:

• 多个实验各自产出数据

• 99% 的列是重复的

• 极大计算和存储浪费

• 一小时的数据无法在一小时内处理完

 

根据上面的问题,我们总结出特征数据流的解决方案与存储方案。

 

1.特征数据流的解决方案:

统一列存储;

将同样的数据进行归置避免多次计算

基础共用特征列

特征列共用,包括标签

各实验的特征列

每个实验添加自己的特征列共用作业直接产出,其他作业只产出自己实验所需数据。

模型训练通过列名配置读取DataFrame

实验数据产出后做模拟训练,通过列名配置,从数据源里读取DataFrame

 

2.存储方案选型

l  Kudu 实时更新

Online Learning

l 天级 ORC 备份

离线实验

 

目前选用的是Kudu,含行级别和列级别,可以实时插入,近似于流式地写入Kudu。写完可以根据用户设定的调度周期,当时间窗口累计完成,触发一个训练任务,这就是Online Learning准实时学习的方案

Kudu更新之后天级ORC备份,将Kudu一天的数据备份到 OSS上。这里有两个目的,第一是备份,第二是缓Kudu本身的压力

Kudu本地磁盘搭建,本地磁盘存在成本大与性能瓶颈的问题。将数据存放到云存储上,可以借用云存储的服务能力离线实验,实验时可以选择Kudu数据,也可以直接在OSS读历史数据。

 

(三)打通大数据和算法框架

1.Parameter Server on PySpark

l 为什么重新实现一套 Parameter Server

l Python First API

n 与 Spark 调度集成

l 与 DataFrame 集成

 

1Python First API

Python First API做大规模离散深度学习训练时,需要解决Embedding参数稀疏的问题。

Embedding定义了几种Python接口,再向下可以分装成Embedding操作的API对稀疏参数更新的问题,传统解决方法是放在Front Server节点上计算。

做Online Learning的时候,特征的个数是未知的,希望直接用原始的字符串或者用哈希值的方式做特征索引,特征的大小无法提前固定, Tenderflow框架不支持。

我们支持之后做内部转换,将每段哈希值映射到一个连续范围内,使得分片比较小的范围内,它的索引最大不会超过分片总长度,使得可以直接用于各种接口。

 

2.与 Spark 调度集成

对于Parameter Server来说两个部分,一个是Server节点,一个Work节点Spark从2.4开始有Rdd.barrier接口,接口的定义所有的Excutor进程要么不起要么全起。

Spark存在猜测执行的机制,开启Rdd.barrier模式后,不会重复执行已有的进程,将原本大数据处理的方式机器学习方式。

Rdd.barrier可以用于起Parameter Server作业,要起ServerWorker两个节点。通过上述操作,完成了调度集成。

 

3.DataFrame 集成

学习框架完成后开始训练,传统方法是使用UDF读取数据,Spark2.3版本后提供了Pandas UDF以Batch的形式数据直接传到Python,然后转成Pandas的Data Frame。

由上图可看到,训练的代码均为UDF执行训练直接调UDF,将Spark Columns传进去即可。  

下面举例一个更复杂更全面的Demo,功能是在离线实时预估一致性监控On Spark Streaming

实现监控的主要步骤:

1事件的回流

2)特征的回流;

3)做WindowGroupBy

 

 

(四)解决数据上下游调度关系

完成数据、算法与训练后,最后要解决数据上下游调度关系。

在算法场景下的数据上下游调度与传统大数据调度有一定区别,存在以下两个问题:

问题一,最开始解决特征工程数据流时,共享部分拆一个作业,由实验自己产出每个实验自己产出额外需要的部分,此时会发现,其他实验需要依赖共用处于最上游的特征作业

问题二,假设最没有实验,线上是Baseline基线模型。算法工程师做实验例如加一个特征,就会基于Baseline的数据,再加入工程师自己的数据,两个数据之间自然就有上下游关系。后续基于这个Baseline又有其他实验,这样就有许多分支再往后如果有一个实验效果不错,成为新的Baseline,后续新实验就要基于新的Baseline重新进行实验,下图为分支管理方式

实验依赖关系自动化

l  每个时刻,总是有一个Baseline (基线) 模型以及若干小流量模型(Master + 多个Branch);

l  小流量模型可能升级为基线模型(Merge);

l  此时各个实验数据依赖上游需要调整(Rebase);

l  基于Airflow

l  通过一个配置文件自动生成Airflow DAG

l  支持ForkMergeRebase等操作。

 

基于上下游关系,我们将它们做成上下游的管理机制每一个人做实验的时候,会去更新配置文件,描述实验的上游是谁然后配置文件会自动刷新,刷新出来之后生成新的配置文件,就是上下游调度关系。

 

(五)未来方向

• PS on PySpark 2021 Q1开源

• Server/Worker异构资源分配(#SPARK-27495)

• 在 PS on PySpark上支持GNN

相关文章
|
15天前
|
机器学习/深度学习 搜索推荐 算法
推荐系统的算法与实现:深入解析与实践
【6月更文挑战第14天】本文深入探讨了推荐系统的原理与实现,包括用户和项目建模、协同过滤、内容过滤及混合推荐算法。通过收集用户行为数据,系统预测用户兴趣,提供个性化推荐。实践中,涉及数据处理、建模、算法选择及结果优化。随着技术发展,推荐系统将持续改进,提升性能和用户体验。
|
1天前
|
存储 设计模式 算法
数据结构,算法宏观印象构建
数据结构,算法宏观印象构建
|
10天前
|
分布式计算 运维 Serverless
通过Serverless Spark提交PySpark流任务的实践体验
EMR Serverless Spark服务是阿里云推出的一种全托管、一站式的数据计算平台,旨在简化大数据计算的工作流程,让用户更加专注于数据分析和价值提炼,而非基础设施的管理和运维。下面就跟我一起通过Serverless Spark提交PySpark流任务吧。
49 1
|
17天前
|
算法
使用k-近邻算法构建手写识别系统(kNN)
使用k-近邻算法构建手写识别系统(kNN)
21 9
|
15天前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
9 1
|
19天前
|
存储 算法 数据挖掘
螺旋矩阵 II:从理论到实践的五种算法解析
螺旋矩阵 II:从理论到实践的五种算法解析
|
26天前
|
机器学习/深度学习 算法 数据采集
构建一个基于机器学习的交易算法
【6月更文挑战第2天】本文探讨了如何构建基于机器学习的交易算法,关键步骤包括数据收集与预处理、特征选择、模型选择与训练、评估与优化,以及回测与实盘交易。挑战涉及数据质量、过拟合与欠拟合、市场变化与模型适应性。通过结合金融知识与机器学习技术,可创建智能交易系统,但需不断更新优化以应对市场动态。
|
25天前
|
机器学习/深度学习 数据采集 算法
基于机器学习的推荐算法构建技术详解
【6月更文挑战第4天】本文详述了构建基于机器学习的推荐算法,特别是协同过滤方法。从用户和物品相似性的角度,解释了用户-用户和物品-物品协同过滤的工作原理。涵盖了数据准备、预处理、特征工程、模型训练、评估优化及结果展示的构建流程。推荐算法在电商、视频和音乐平台广泛应用,未来将受益于大数据和AI技术的进步,提供更智能的推荐服务。
|
26天前
|
分布式计算 Spark 大数据
深入探究Apache Spark在大数据处理中的实践应用
【6月更文挑战第2天】Apache Spark是流行的开源大数据处理框架,以其内存计算速度和低延迟脱颖而出。本文涵盖Spark概述、核心组件(包括Spark Core、SQL、Streaming和MLlib)及其在数据预处理、批处理分析、交互式查询、实时处理和机器学习中的应用。通过理解Spark内部机制和实践应用,可提升大数据处理效率,发挥其在各行业的潜力。
|
1月前
|
机器学习/深度学习 人工智能 算法
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
77 1
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!