美团:深度学习在美团搜索广告排序的应用实战解析

向作者提问
薛欢,2016年3月加入美团,主要从事搜索广告排序模型相关的工作。 姚强,2016年4月加入美团,主要从事搜索广告召回、机制与排序等相关算法研究应用工作。 玉林,2015年5月加入美团,主要从事搜索广告排序相关的工程优化工作。 王新,2017年4月加入美团,主要从事GPU集群管理与深度学习工程优化的工作。
查看本场Chat

2018年7月9日,周一晚20点30分,美团三位高级工程师带来了主题为《深度学习在美团搜索广告排序的应用实践》的交流。以下是主持人张帅整理的问答实录,记录了作者和读者间问答的竞猜时刻。


内容提要:

  • Tensorflow 对大规模 Embedding 操作可能遇到哪些问题?
  • Tensorflow 实时化会遇到过哪些问题?怎么处理?
  • 拉模型到线上机器的组建详细讲解下可以吗?
  • Tensorflow 建模过程的预处理应注意哪些问题?
  • Tensorflow 模型调优应注意什么问题?
  • 分布式深度学习系统的研究热点是什么?
  • 研究分布式深度学习系统是如何进行模型压缩与通信优化的?
  • 可否讲下 DNN 图像部分训练数据预处理方法 ?以及与其他 Feature 合并使用时,如何解决参数数量膨胀问题?
  • 可否讲一下模型部署,以及后续模型是如何迭代更新的,主要从哪几个方面去迭代,主要用到什么方法管理迭代?

问:Tensorflow 对大规模 Embedding 操作可能遇到哪些问题?

答:主要是这两个问题:

  • Embedding 常常用来对稀疏数据做编码,如果稀疏数据的取值范围比较大,会导致 Embedding 的矩阵很大,通讯量比较大。

  • 除了 Embedding 的 Size 比较大之外,还有一个问题是在 Tensorflow 中,如果把 Embedding 分散在不同的 PS 中,可能导致不同的 PS 的数据不均衡。

解决办法主要是:

  1. 将 Embedding 矩阵分 Partition。

  2. 将 PS 分布在不同的机器上,防止网络阻塞。


问:Tensorflow 实时化会遇到过哪些问题?怎么处理?

答: Tensorflow 实时化,遇到的问题有两个:

  • 第一个是时效性问题。目前解决办法是小批量来模拟流式计算。

  • 主要是如何处理新数据问题,因为 Embedding 矩阵的 Size 要在定义 Tensorflow 图的时候确定,但是如果有新的数据进来,要扩充 Embedding 矩阵的化,如何操作。可以通过在 Embedding 之前根据经验加一个 Hashtable。相当于预留一些位置为新数据。


问:拉模型到线上机器的组建详细讲解一下可以吗?

答:拉取模型美团目前是从 HDFS 上拉取的,直接使用的 HTTPFS 这个工具。主要是考虑模型的多版本存储、灰度发布、快速回滚以及模型更新时对内存、网络、磁盘的影响。 异常情况比如下载较慢时的处理。后面我们正在进行的优化是,通过类似 BitTorrent 的方案提高模型的分发效率。主要是实现稳定可靠的将模型分发的线上服务机器上的目标。


问:Tensorflow 建模过程的预处理应注意哪些问题?

答: Tensorflow 建模过程的预处理,我理解的是对数据及特征的预处理。数据预处理包括清理脏数据,样本标注,样本权重等等。特征预处理包括对离散特征和连续特征等的预处理,包括特征频次过滤、缺失值处理、离散化,连续特征归一化等等。


问:Tensorflow 模型调优应注意什么问题?

答:深度学习模型的参数比较多,有些也会交叉影响,但如果使用 Grid Search 遍历所有的参数的话,代价也比较大。我们调节模型的大体思路是 针对所有的参数,先找到经验上的较优值,然后分阶段调参。先确定模型大小,然后调节学习率,Batch Size,再尝试调节正则化参数等。


问:分布式深度学习系统的研究热点是什么?

答:目前有两个热点:

  • 第一个是通用计算框架的底层扩展。比如如何拓展 Tensorflow 的分布式扩展性,因为 TF 的通讯协议是 GRPC,而目前开源的 GRPC 在以太网上性能一般,在大规模分布式情况下,性能较差。再比如扩展一些目前主流框架没有的算子。或者基于 PS-Lite 这种基础组件自己封装一个框架。

  • 第二个是基于已有的开源框架订制属于自己的上层 Wrapper。比如 Keras 就是其中之一,还有早起比较活跃的 tf.learn。


问:研究分布式深度学习系统是如何进行模型压缩与通信优化的?

答:模型压缩主要是模型量化,以及降精度。量化的思路是用计算来换取空间。通讯的优化目前主要思路是用 RDMA 来替换 TCP,目前 Tensorflow1.5 以上版本已经很好的支持 RDMA 了。


问:可否讲下 DNN 图像部分训练数据预处理方法 ?以及与其他 Feature 合并使用时,如何解决参数数量膨胀问题?

答:预估模型里如果想使用图片内容的话,可以有两种方法。第一种是抽图片的特征,比如用 VGG16 或 Inception 模型,在自己的数据上 Fine Tune, 然后加入到模型中。第二种是训练 E2E 的模型,直接将图片模型当作自己网络的一部分,来训练端到端的网络。

关于参数膨胀的问题,一个可以使用更多的训练数据来避免过拟合,二是可以做特征的降维达到参数下降的效果。


问:可否讲一下模型部署,以及后续模型是如何迭代更新的,主要从哪几个方面去迭代,主要用到什么方法管理迭代?

答:模型通过离线训练平台训练好以后,我们是保存在 HDFS 上。 之后通过前面提到的模型分发工具分发到线上机器。 线上部署的话,模型小的话,我们保存在本地。再大一点的模型,我们保存在我们这的模型服务,基于 Model Sharding 的架构; 我们也有基于 PS 架构的在线服务系统。基本上是随着模型演化的历史,我们线上有这三套架构。


本文首发于 Gitchat,未经授权不得转载,转载需要与 GitChat 联系。

微信扫描登录