背景
Tensorflow是目前使用最广泛的深度学习解决方案,但是在面对高维稀疏数据的场景(如广告,推荐,搜索等)下,有些力不从心,有以下几点缺点:
- 参数必须以固定维度的矩阵形式提前分配(训练开始前),不支持参数的实时(训练过程中)分配与淘汰
- 不支持参数的增量形式的导出
为了克服这些缺点,目前支持高维稀疏场景的深度学习解决方案可以分为三类:
- 自主研发:完全替代Tensroflow。以百度PaddlePaddle为代表,PaddlePaddle目前处于半开源的状态,参数服务器部分的源码并没有开源。
- 使用Tensorflow作为第三方后端深度学习库:以XDL为代表,XDL还支持Tensorflow之外的其他深度学习库;笔者之前对XDL的源码有过详细的分析,可以参考笔者之前的博文:深入浅出XDL
- 扩展Tensorflow:字节跳动的BytePS采用这种方式,但是BytePS并非针对高维稀疏场景的解决方案,它的改进点是分布式深度学习场景下通信效率问题。
TensorflowExtendFramework(以下简称TEF)是笔者开源的针对高维稀疏数据场景(如广告,推荐,搜索等)的深度学习解决方案,Github地址:TensorflowExtendFramework,采用的方式是第三种,扩展Tensorflow。
简介
基本的介绍见项目文档:TEF
源码结构
目录 | 功能 | 备注 |
---|---|---|
docker | 开发与部署环境的Dockerfile | |
examples | tef使用样例 | |
tef/core | tef c++代码 | |
tef/python | tef python代码 | |
third_party | 第三方依赖库 |
实现分析
TEF通过Operation扩展的机制,将Tensorflow的参数分配与更新任务交给自定义的参数服务器来承担,从而克服了以上的几点不足,结构图如下: