深入浅出XDL(二):embedding

XDL(X-DeepLearning)是阿里巴巴开源的一款深度学习框架。官方介绍,此框架针对广告、推荐、搜索的场景做了很多优化。

广告、推荐和搜索的模型,一个重要的特点是存在大量的稀疏特征,为此xdl提供了稀疏API:

API
xdl.embedding 计算单路稀疏特征的embedding
xdl.merged_embedding 同时计算多路稀疏特征的embedding,内部将通信和计算做了合并,建议embedding较多时使用

本文对XDL的稀疏特征API的实现做个简单的分析。

xdl.embedding

此API属于Python层的, 用于计算单路稀疏特征的embedding
在这里插入图片描述
API的Python代码主要用于构建embedding网络,可以看出构建的embedding网络主要由三种节点构成:

  • Variable节点
  • Sparse Pull节点
  • Combiner节点,支持三种合并方式(sum, mean, tile)

通过xdl.embedding代码的分析,并没有看到参数是如果分配的,实际上关键的逻辑在XDL实现的几个自定义Op中,这点非常类似与tensoflow

PsRegisterVariableOp

参数申请Op,对应Python层的接口为xdl.ps_register_variable_op
在这里插入图片描述

  • 可以看出,此Op被调用的时候,并没有实际的去请求参数服务器创建参数,下面的查询Op中可以看到,实际的创建请求要等到查询时刻。

PsSparsePullOp

在这里插入图片描述

  • 如果变量没有申请,则立即请求参数服务器创建参数
  • 底层与参数服务器的通信通过seastar
  • 需要注意的是,PsSparsePullOp其实并不是tensorflow Op,而是继承自XDL自定义的一套Op,并且XDL自定义了一套graph runtime framework。所以XDL的模型会有两个Graph,一个是tensroflow的Graph,另一个是XDL的graph,关于这两个Graph如果交互,tensor如何在两个graph间流动,不是本文重点,以后独立分析。
  • 以上xdl.embedding接口创建的graph,是XDL自定义的graph,并非tensorflow的graph
  • XDL采用这种方案的原因,个人的猜测,是为了降低对tensorflow的依赖,方便将tensorflow替换为其他的后端训练框架

PsPullOp

在这里插入图片描述

  • 查询参数值Op
发布了52 篇原创文章 · 获赞 105 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gaofeipaopaotang/article/details/100904138