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

深入浅出XDL(二):embedding相关推荐

  1. jQuery深入浅出(二)石头剪刀布动画实现

    jQuery深入浅出(二)-石头剪刀布动画实现 1.准备几张可爱的照片素材 2.代码实现 3. 动画效果图 1.准备几张可爱的照片素材 (1)bu.png (2)jaindao.png (3)shit ...

  2. 深入浅出CMake(二): 基础语法

    在<深入浅出CMake(一):基础篇>文章中,我们已经知道了怎么依葫芦画瓢编写简单的 CMake 构建文件了,但如果应对复杂的工程的话,这还是远远不够的. CMake 是一套编译构建体系, ...

  3. 深入浅出XDL(三):framework

    前一篇文章我们分析了xdl的稀疏API embedding的实现.同时也发现了一些的新的问题,首先来回顾一下. embedding接口在模型中创建几类Op:Variable Op, 参数拉取op, C ...

  4. 深入浅出XDL(四):模型训练

    上一篇我们分析了XDL的framework的架构设计,了解了XDL的模型构建和运行机制,以及XDL如何将tensorflow作为自己的backend. 本篇继续分析XDL的架构设计,重点关注XDL的参 ...

  5. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...

  6. 深入浅出XDL(一):Blaze推理引擎

    Blaze是阿里巴巴开源的一款深度学习推理引擎,官方介绍,它是一款面向广告/搜索/推荐场景的高性能深度学习推理引擎.本文对blaze的源码进行简单的分析. 内核源码目录结构 Blaze的内核采用c++ ...

  7. 深入浅出git(二)——分支

    在开发软件的时候,可能很多人会同时为同一个软件开发功能或者修复bug,但是如果都在主分支来进行开发,引起冲突的概率将会大大增加,而且也不利于维护,如果你同时修改多个bug该怎么办?所幸,git的分支功 ...

  8. 深入浅出JMS(二)–ActiveMQ简单介绍以及安装(转载)

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...

  9. docker tag 删除images_深入浅出 Docker (二) —— Docker的基本概念和架构原理

    1. Docker 的基本概念 Docker 有三个基本概念: 镜像(Image) 容器(Container) 仓库(Repository) 1.1 镜像(Image) 操作系统分为内核和用户空间.对 ...

最新文章

  1. 报名 | 顾险峰教授讲座:对抗生成网络的几何理论解释
  2. python语法教程-Python语法教程总结规范
  3. 2019 年容器生态统计报告发布 | 云原生生态周报 Vol. 26
  4. 64位的Linux中运行32位的应用程序
  5. 读取配置文件(configparser,.ini文件)
  6. 【学术杂谈】博士毕业都去哪儿了,谈谈学术的这条路该如何走
  7. UVa 12174 (滑动窗口) Shuffle
  8. C++ 字符串 C#解析后 两个字符串无法连接
  9. mysql 间隙锁 的范围_mysql间隙锁
  10. 用VMWARE安装Mac OSX Tiger 10.4.4 X86
  11. 论文阅读笔记:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieva
  12. 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门
  13. STM32 DCMI调试
  14. 使用万用表来进行简易的运放芯片配对
  15. 『HTMLCSS』选择器(二)
  16. 云端服务器部署前端工程
  17. 铣床是什么?怎么分类
  18. springboot服务器没响应,记一次springboot 故障:接口无响应--》CPU 100%---》log无法写入---》磁盘满了...
  19. The Traitorous Eight in Semiconductor 半导体八叛逆
  20. 我差点错过高校毕业生毕业之后这个3000元现金直接打入银行卡的补贴!

热门文章

  1. iOS 两个tabbarcontroller之间的切换
  2. js中根据元素名获取对象,根据id获取等等。。。
  3. 易优cms响应式网站模板,EyouCMS网络科技公司网站模板
  4. linux ip白名单,黑名单
  5. C语言文件操作(1)
  6. 学生HTML个人网页作业作品下载 个人主页博客网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作
  7. 互联网快讯:晋江文学城将实施分年龄阅读推荐体系;三星SDI进军美国市场;猿辅导推出教育科技新品牌“飞象星球”
  8. 知识产权公证业务构成
  9. 我发的文章变成了0和1,那0和1是怎么发送给你的?计算机网络(二)物理层
  10. PMBOK(第五版)学习笔记 —— ITTO(输入、工具与技术及输出)汇总