一. 综述
深度学习比传统的逻辑回归有着更强的模型刻画能力,同时也带来了计算力百倍提升的需求。相比图像、语音、视频等领域,搜索、广告、推荐等场景有着独特的场景特点: 样本规模和特征空间通常非常巨大,千亿样本、百亿特征并不罕见,同时存在大量的稀疏特征作为Embedding输入。这就要求我们针对此场景下的计算特点对深度学习框架进行设计和优化。
本文所阐述的工作由阿里妈妈基础平台团队与PAI团队合作完成,我们基于TensorFlow在搜索、广告、推荐场景下进行了深度的优化与增强,内部项目名称为TensorFlowRS,主要的成果如下:
(1) 解决了原生TF水平扩展能力不足的问题。在我们的测试中,绝大多数搜索广告模型的训练性能提升在十倍以上,某些模型的极限性能最高可提升百倍。
(2) 支持完备的在线学习语义,模型变更实时写出;稀疏特征无需做连续ID化,可以直接使用原始特征表征进行训练,大幅简化了特征工程的复杂度。
(3) 异步训练的梯度修正优化器(grad-compensation optimizer),有效减少了异步大规模并发引起的训练效果损失。
(4) 集成了高效的Graph Embedding、Memory Network、Cross Media等多种高级训练模式。
(5) 模型可视化系统DeepInSight提供深度模型训练的多维度可视化分析。
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
二. TensorFlowRS分布式架构
在使用TensorFlow的过程中我们发现TF作为一个分布式训练系统有两个主要的问题:
1. 水平扩展能力差:在大部分模型的性能测试中,我们发现随着数据并行度的增加,单个worker的样本处理QPS急剧下降。当worker数量增大到一定规模的时候,系统整体QPS不再有增长甚至有所下降。
2. 缺乏完备的分布式Failover机制:TF基于静态拓扑配置来构建cluster,不支持动态组网,这就意味着当某个ps或者worker挂掉重启之后,如果ip或者端口发生变化(例如机器crash),训练将无法继续。另外TF的checkpoint只包含server存储的参数信息,不包含worker端的状态,不是全局一致性的checkpoint,无法实现Exactly-Once等基本的Failover语义。
针对上述问题,TensorFlowRS采取的解决方案包括:
通过对接独立参数服务器提升水平扩展能力 在对TF做过细致的profiling之后,我们发现TF原生的PS由于设计和实现方面的多种原因(grpc,lock,graph-engine),很难达良好的水平扩展能力。于是我们决定丢掉TF-PS的包袱,重新实现一个高性能的参数服务器:PS-Plus。此外我们提供了完整的TF on PS-Plus方案,可以支持用户在Native-PS和PS-Plus之间自由切换,并且完全兼容TensorFlow的Graph语义和所有API。用户可以在深度网络代码一行不改的情况下,将参数分布和运行在PS-Plus上,享受高性能的参数交换和良好的水平扩展能力。 重新设计Failover机制,支持动态组网和Exactly-Once的FailoverTensorFlowRS引入了worker state,在checkpoint中存储了worker的状态信息,worker重启后,会从接着上次的进度继续训练。此外TensorFlowRS通过zk生成cluster配置,支持了动态组网的Failover。新的Failover机制可以保证任意角色挂掉的情况下,系统都能在分钟级完成Failover,并且不多算和漏算数据
原文链接