第六章
深度学习推荐系统的工程实现
推荐系统的数据流
BigTable、Google File System和MapReduce
批处理大数据架构
传统数据库很难处理海量数据的存储和计算问题,
Google GFS和Apache HDFS的分布式存储系统诞生
MapReduce框架提出,采用分布式数据处理再Reduce的方法并行处理海量数据
流计算大数据架构
Storm、Spark Streaming、Flink
数据处理的延迟小,数据流的灵活性非常强
对于数据监控、推荐系统特征实时更新,以及推荐模型实时训练有很大帮助
Lambda架构
数据通道从最开按时的数据收集阶段裂变成两条分支:实时流和离线处理
实时流部分保持了流计算架构,保障数据实时性
离线处理部分则以批处理的方式为主,保障数据的最终一致性
还存在大量逻辑冗余,需要重复的进行编码工作,浪费了大量的计算资源
Kappa架构
解决了Lambda架构的代码冗余问题
Everything is streaming
原始数据存储:将未经流处理的数据或日志原封不动地保存到分布式系统中
数据重播:将这些原始数据按时间顺序进行重播,并用同样的流处理框架进行处理,从而完成离线状态下的数据批处理
大数据平台与推荐系统的整合
完成特征处理后,数据的流向:
1、以HDFS为代表的离线海量数据存储平台,主要负责存储离线训练用的训练样本
2、以Redis为代表的在线实时特征数据库,主要负责为模型的在线服务提供实时特征
推荐模型离线训练之Spark MLib
spark最典型的应用方式是建立在大量廉价计算节点上
partition是Spark的基础处理单元
将程序拆解成一个任务DAG,找到shuffle和reduce的部分
shuffle:所有partition的数据必须进行洗牌后才能得到下一步的数据,比如groupbykey和join
map、filter等操作不需要进行数据间的操作,可以并行处理
stage内部数据高效并行计算,stage边界处进行消耗资源的shuffle操作或最终的reduce操作
Random Forest的模型结构决定了其可以完全进行数据并行的模型训练
GBDT的结构特点决定了数之间只能进行串行的训练
分布式训练的弊端:
- 全局广播的方式,每轮迭代前广播全部模型参数
- 采用阻断式的梯度下降方式,每轮梯度下降由最慢的节点决定
- 不支持复杂深度学习网络结构和大量可调超参
推荐模型离线训练之Parameter Server
parameter server 主要作用就是并行进行梯度下降的计算,完成模型参数的更新直至最终收敛
Spark用同步阻断式的并行梯度下降过程,需要等待所有节点都计算完成,最慢节点会阻断其他所有节点的梯度更新
Parameter Server用 异步非阻断式,代替了 同步阻断式
异步梯度更新的方式虽然加快了训练速度,但是带来了模型一致性的损失
并行训练的结果与原来单点串行训练的结果是不一致的
总结:
- 用异步非阻断式的分布式梯度下降策略替代同步阻断式的梯度下降策略
- 实现多server节点的架构,避免单master节点带来的带宽瓶颈和内存瓶颈
- 使用一致性哈希、参数范围拉取、参数范围推送等工程手段实现信息的最小传递,避免广播操作带来的全局性网络阻塞和带宽浪费
推荐模型离线训练之Tensorflow
存在依赖关系的任务节点或子图之间需要串行执行,不存在依赖关系的任务节点或者子图之间可以并行执行
基于任务关系图进行任务调度和并行计算
上线部署
复杂网络离线训练、生成embedding存入内存数据库、线上实现逻辑回归或浅层神经网络等轻量级模型拟合优化目标
PMML(预测模型标记语言 Predictive Model Markup Language)
经常作为中间媒介连接离线训练平台和线上预测平台
Tensorflow Serving
利用tf自带的模型序列化函数可将训练好的模型参数和结构保存至某路径下。
工程与理论权衡
增强模型稀疏性,加入L1正则化项、采用FTRL等稀疏性强的训练方法