课外天地 李树青学习天地推荐系统原理课件 → [转帖]Amazon开源面向推荐系统的深度学习框架DSSTNE


  共有12251人关注过本帖树形打印复制链接

主题:[转帖]Amazon开源面向推荐系统的深度学习框架DSSTNE

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
[转帖]Amazon开源面向推荐系统的深度学习框架DSSTNE  发帖心情 Post By:2016/5/18 13:43:53 [只看该作者]

也是在GoogleFebook连续开源重磅机器学习系统,并持续高强度PR压力的情况之下,很少开源、也几乎不公开分享的Amazon,居然也开源了自己的一套深度学习框架DSSTNE[1]: Deep Scalable Sparse Tensor Network Engine,让人不得不关注。 DSSTNE是个啥 DSSTNE,对应英文发音「Destiny」,取「命运」之意,放在Amazon的语境下应该是在说,「人类的终极命运就是买买买」。DSSTNE,是Deep Scalable Sparse Tensor Network Engine的缩写,是Amazon用来开发深度学习模型的一套框架,Amazon最新的推荐引擎就在使用DSSTNE。与其他的开源框架相比DSSTNE有一个独特之处,就是它对(极度)稀疏的训练数据具备优势。 为什么要开源DSSTNE Amazon表态,深度学习的研究不应该仅局限于自然语言理解与视觉识别,搜索与推荐领域也有着巨大的应用空间。把DSSTNE开源,Amazon希望能够吸引到世界上的顶级研究者们一起推动这方面的研究进展,同时也期待着能够与其他更多的领域擦出火花。


DSSTNE的由来 Amazon每天都要帮助数以千万计的用户更好地买买买,要做出准确的推荐需要使用神经网络算法。以Amazon的数据规模,假使只构建一个3层网络,输入层有亿级别的节点(每个节点对应一个商品),1000个节点的隐藏层,与输入层规模匹配的输出层,这就意味着需要有万亿级别的参数需要学习。以目前的硬件水平这是几乎不可能实现的。即使把网络的大小限制在单一商品目录+美国境内用户,运算要求也几乎已经是GPU的能力上限了。举个栗子,一个3层的自编码加权矩阵,输入层、输出层各800万个节点,256个隐藏层节点,运行一次单精度计算就需要消耗8G内存。针对千万级的用户数据,利用开源软件训练这样的一个神经网络,即使使用市面上最快的GPU也得算上好几个星期才能得到结果。Amazon在瞎折腾了一阵子之后发现,如果不能写出一套可以在多个GPU中并行运算的框架,这事儿是搞不定的。所以就有了DSSTNE。 与其他深度学习开源库的不同之处 其他库比如Caffe、TensorFlow、Theano和Torch都具备比较大的特征集和特征网络的支持,而DSSTNE并没有,它是针对稀疏数据的情况完全从头构建的。DSSTNE在气质上跟Caffe很像,但更强调生产环境下的性能。在稀疏场景下,DSSTNE的运算速度比其他深度学习库快得多,推荐问题及不少自然语言理解任务都属于这个领域。DSSTNE另外一个强项就是针对单服务器多GPU的使用。DSSTNE能够针对全部可用GPU自动调度计算,加速整个的计算过程,并能构建更大的模型。对于实际场景,这就意味着可以面向千万量级的商品设计推荐系统而不仅仅是数十万量级,或者能够处理包含特别大量词汇的自然语言理解任务。这种规模的问题,其他库都将需要恢复到CPU层面来完成稀疏数据运算,这会带来一个数量级的性能下降。另外,DSSTNE的网络定义语言比Caffe要简单得多,它仅需要33行代码来表达AlexNet图像识别模型,而Caffe需要300行代码。DSSTNE目前还不支持图像处理所需的convolutional layers,对自然语言理解和语音识别任务中常见的recurrent layers的支持也有限,但稍安勿躁,很快就有了。


DSSTNE有哪些创新特征 g2.8xlarge(4块CPU,每块4G显存)单实例下,速度是TensorFlow的2.1倍。 模型并行多GPU的能力,支持同一主机多个互连GPU之间的自动调度,使得训练的计算速度大大加快。DSSTNE可以很容易地在多GPU服务器的各个GPU之间进行并行计算。向外扩展深层神经网络训练工作也是很重要的,因为这些工作可能需要很长的时间来运行,限制了实验。最常见的模式就是跨GPU分割整个的训练数据,让每个GPU在自己分配到的数据上训练自己的模型,然后在用某种方式让它们保持同步。这种模式被称为“数据并行训练”,一般都需要在速度和精度之间进行权衡。而DSSTNE使用的是“模型并行训练”,其中网络的每一层都在可用的GPU上分布开,让每一步都运行得更快。模型的并行训练是很难实现的,但它不不需要受到数据并行训练中同样的速度/准确性权衡的影响。其他神经网络库提供的模型并行训练的版本,其中的每一层或操作只能被分配到一个不同的GPU。虽然这种方法可以解决一些问题,但它在前面Amazon面临的推荐问题中,权重矩阵计算在单一GPU下内存不足的情况下无法工作。 同一份数据多个实例的设定下DSSTNE可以跑吗 是的,它可以在多个实例(如EMR)的集群上运行。一旦MPI集群建立,DSSTNE可以检测到GPU之间对等网络连接的失效,并自动切换到MPI系统集体内存模式。虽说这么搞是支持的,但还请确保您的所有节点通过Elastic File System连接在同一个位置组中,以便可以在多个实例之间共享数据。


早年,Facebook机器学习团队的一位核心工程师离职,说了一句很有名的话,「我们这代人中最聪明的一拨人每天的工作就是想着如何让人们点击广告,这很逊」,现如今,最聪明的一拨人每天都在训练着让机器人早日统治人类。让我们拭目以待吧! 


[1] https://github.com/amznlabs/amazon-dsstne

[此贴子已经被作者于2016-05-18 13:46:37编辑过]

 回到顶部