TensorFlow在美团推荐系统中的分布式训练优化实践( 二 )


2.2 系统负载分析
2.2.1 问题分析工具链
TensorFlow是一个非常庞大的开源项目 , 代码有几百万行之多 , 原生系统的监控指标太粗 , 且不支持全局的监控 , 如果要定位一些复杂的性能瓶颈点 , 就比较困难 。我们基于美团已经开源的监控系统CAT[2] , 构建了TensorFlow的细粒度监控链路(如下图1所示) , 可以精准定位到性能的瓶颈问题 。

TensorFlow在美团推荐系统中的分布式训练优化实践

图1 TensorFlow PS架构全链路监控
同时 , 在性能优化的过程中 , 会涉及到大量的性能测试和结果分析 , 这也是一个非常耗费人力的工作 。我们抽象了一套自动化的实验框架(如下图2所示) , 可以自动化、多轮次地进行实验 , 并自动采集各类监控指标 , 然后生成报告 。

TensorFlow在美团推荐系统中的分布式训练优化实践

图2 自动化实验框架
2.2.2 业务视角的负载分析
在推荐系统场景中 , 我们使用了TensorFlow Parameter Server[3](简称PS)异步训练模式来支持业务分布式训练需求 。对于这套架构 , 上述的业务变化会带来什么样的负载变化?如下图3所示:

TensorFlow在美团推荐系统中的分布式训练优化实践

图3 TensorFlow PS架构大规模训练负载分析
总结来看 , 主要包括通信压力、PS并发压力、Worker计算压力 。对于分布式系统来说 , 通常是通过横向扩展来解决负载问题 。虽然看来起可以解决问题 , 但从实验结果来看 , 当PS扩展到一定数量后 , 单步训练时间反而会增加 , 如下图4所示:

TensorFlow在美团推荐系统中的分布式训练优化实践

图4 扩展PS提升训练性能实验
导致这种结果的核心原因是:Worker单步训练需要和所有的PS通信同步完成 , 每增加1个PS要增加N条通信链路 , 这大大增加了链路延迟(如下图5所示) 。而一次训练要执行上百万、上千万步训练 。最终导致链路延迟超过了加PS算力并发的收益 。

TensorFlow在美团推荐系统中的分布式训练优化实践

图5 增加PS带来的链路开销
而对于这个系统 , 优化的核心难点在于:如何在有限的PS实例下 , 进行分布式计算的优化 。
3 优化实践
3.1 大规模稀疏参数介绍
对于推荐系统模型 , 绝大多数参数都是稀疏参数 , 而对稀疏参数来说有一个非常重要的操作是Embedding , 这个操作通常也是负载最重的 , 也是后续优化的重点 。由于我们对稀疏参数进行了重新定义 , 后续的优化也基于此之上 , 所以我们先介绍一下这部分的工作 。
在原生的TensorFlow中构建Embedding模块 , 用户需要首先创建一个足够装得下所有稀疏参数的Variable , 然后在这个Variable上进行Embedding的学习 。然而 , 使用Variable来进行Embedding训练存在很多弊端:
Variable的大小必须提前设定好 , 对于百亿千亿的场景 , 该设定会带来巨大的空间浪费;训练速度慢 , 无法针对稀疏模型进行定制优化 。

推荐阅读