展出| AI技术大本营(ID:rgznai100 ) ) ) ) ) ) ) ) ) ) )。
知识图谱(Knowledge Graph )作为一项重要技术,近年来广泛应用于信息检索、自然语言处理、推荐系统等各个领域。 知识地图嵌入表示是一种生成知识地图结构不受监控的节点特征的方法,所生成的特征可用于各种机器学习任务。 例如,节点的嵌入表示可以预测两个节点之间是否存在链接。
但是,随着社交网络和推荐系统等典型图像数据场景的发展,知识图像的规模也在不断增加。 在工业界的现实场景中,技术人员常常需要面对千万级甚至亿万级节点的大规模图表数据。 如何快速有效地进行大规模知识地图的嵌入表示训练是当前的课题。
最近,亚马逊AI团队紧随DGL之后,开放了一个专门用于大型知识地图嵌入显示的新培训框架DGL-KE,旨在使研究人员和工业界的用户能够方便快捷地在大型知识地图数据集上完成机器学习培训任务
github地址: https://github.com/awslabs/dgl-ke
与现有的开源框架相比,DGL-KE的突出显示如下:
支持多种主要的知识地图显示学习算法,包括TransE、ComplEx、DistMult、TransR、RESCAL和RotatE。
开源框架中唯一支持多核CPU、多卡GPU、CPU-GPU混合训练和分布式训练的知识地图嵌入式显示框架;
使用方便,用户不需要编写代码,直接输入知识地图数据即可
高性能、高扩展性。 根据DGL-KE发布的Freebase数据集(8600多万节点,3亿边) Benchmark,在AWS EC2平台上,一个p 3.16 xlarge (8GPUs )在100分钟内完成了培训四台r5dn.24xlarge(4*48cpus )在30分钟内完成训练,可达到线性加速比。 这一结果比目前最快的同类系统,如脸书发布Pytorch-BigGraph快2-5倍。
图1: DGL-KE系统体系结构
DGL-KE之所以能够提供这样的性能,主要是因为它采用了许多创新的系统和算法优化。
(一)基于METIS图分割算法的分布式训练
训练超大规模图表数据,分布式训练是必不可少的。 其思路主要是将原始大图划分为不同的子图,每台机器在一个子图中进行随机梯度下降训练,所有机器之间通过参数服务器(Parameter Server )进行模型同步。 体系结构如下图所示。
图2: DGL分布式体系结构
但是,如果只是随机切断大图表,训练设备和参数服务器之间的数据通信量就会变大,本地设备需要从远程设备请求必要的模型数据,从而引起网络瓶颈。 为了解决这个问题,DGL-KE在训练前先用METIS地图分割算法剪切原始数据。
METIS算法是计算机科学家blddr Karypis在1995年提出的一种高效的图表分割算法,blddr Karypis也是DGL-KE项目的作者之一。 METIS算法将与大图表相关联的节点尽可能放置在同一“分区”(partition )中。 这将大部分网络通信开销转换为昂贵的计算机内存副本,大大提高了分布式培训的速度。
在名为Freebase的数据集的实际训练中,METIS算法可以节省约90%的模型网络传输带宽,使分布式训练达到线性加速比。 DGL-KE的分布式培训使用DGL-KVStore组件。 DGL-KVStore是一个参数化服务器模块,专门为DGL系统定制开发,用于实现稀疏模型的同步通信。 该组件通过c实现基础套接字、消息队列、稀疏数据序列化的定向优化,与METIS图划分算法无缝兼容。
)二)基于共享内存的单机多进程培训
多核(Multi-core )已成为当前计算机体系结构的标准,许多强大的工作站在一台计算机上拥有数十个以上的CPU内核、数百GB甚至数t的内存。 许多1000万级别节点的图表数据可以通过这种独立性能充分处理这种规模的数据。
DGL-KE还针对这类场景进行了系统优化,使用户能够尽可能发挥一台机器的性能极限。 与传统的基于多线程的并行优化不同,DGL-KE采用基于多进程的粗粒度并行优化。 粗粒度并行处理可以最大限度地提高程序的执行并行度,提高加速比。 另外,DGL-KE
在不同进程之间通过共享内存(Shared-memory)进行模型同步,从而大大减小了进程之间的通信开销。图3: 基于共享内存的单机多进程训练
(三)CPU-GPU 混合训练
知识图谱嵌入表示的训练过程中会产生大量的矩阵运算,而矩阵运算可以通过 GPU 来加速。对于小规模的图数据来说,DGL-KE 允许用户将完整的图模型放入 GPU 中进行训练,从而达到最优性能。然而,相比于 CPU 内存,GPU 内存要小很多,一但模型 Embeddings 的大小超过了 GPU 内存限制就无法进行训练。针对这样的场景,DGL-KE 为用户提供了 CPU-GPU 混合训练的模式。
在 CPU-GPU 混合训练模式中,模型 Embeddings 被存储在 CPU 的内存里,而 GPU 通过 mini-batch 的方式在每一轮迭代过程中将一小部分数据从 CPU 拷贝到 GPU 进行训练。为了避免 CPU 与 GPU 之间的数据拷贝开销,DGL-KE 采用异步训练的方式将数据拷贝与计算 overlap 起来。然而,异步计算会带来模型收敛速度和精确度的下降,DGL-KE 在这里采用了另一个优化,将 Entity Embedding 和 Relation Embedding 的更新采用不同的方式进行:relation 使用同步更新,而 enity 使用异步更新。
之所以这样做是因为在实际的训练过程中,relation 在很多数据集上都表现为长尾分布,即某几种 relation 类型占据绝大多数,所以异步更新会导致 relation embedding 在训练过程中产生大量的模型冲突,从而影响模型的收敛和准确性。而 entity 在训练过程通常是稀疏的,所以异步训练只会产生很小的冲突。采用这样一个简单的优化,DGL-KE 既可以保证模型训练的收敛性,又可以保证系统性能。
图4: CPU-GPU 混合训练
除了以上优化之外,DGL-KE 还提供了其他若干优化方法。例如,使用 Joint Negative Sampler 加速负采样过程,使用 Relation Partition 来减少训练过程中的数据拷贝,以及使用 Periodic synchronization 保证模型的收敛等。DGL-KE 内置了多个处理好格式的知识图谱数据集,用户可以直接下载使用。
除此之外,DGL-KE 在两个小数据集 FB15k,wn18,以及一个大数据集 Freebase 上提供了训练 Benchmark,用户可以直接通过提供的脚本复现训练结果。和已有的开源框架相比,DGL-KE 的性能优势明显,如下结果展示了 DGL-KE 与 Graphvite 在 FB15k 数据集上的性能比较,以及和 Pytorch-Biggraph 在 Freebase 数据集上的比较。
DGL-KE vs Graphvite
DGL-KE vs Pytorch-Biggraph
☞AI 四巨头 Google、DeepMind、Microsoft、Uber 深度学习框架大比拼
☞腾讯面试官这样问我二叉树,我刚好都会 | 原力计划
☞斩获GitHub 2000+ Star,阿里云开源的 Alink 机器学习平台如何跑赢双11数据“博弈”?| AI 技术生态论
☞微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!
☞机器学习项目模板:ML项目的6个基本步骤
☞IBM、微软、苹果、谷歌、三星……这些区块链中的科技巨头原来已经做了这么多事!
☞资深程序员总结:分析Linux进程的6个方法,我全都告诉你
今日福利:评论区留言入选,可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。 快来动动手指,写下你想说的话吧。点击阅读原文,精彩继续!你点的每一个赞,我都认真当成了喜欢