深入浅出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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值