#极速聊科技#亚马逊AI开源知识图谱嵌入表示框架DGL-KE,半小时训练亿级规模知识图谱( 二 )


#极速聊科技#亚马逊AI开源知识图谱嵌入表示框架DGL-KE,半小时训练亿级规模知识图谱
文章图片
图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在这里采用了另一个优化 , 将EntityEmbedding和RelationEmbedding的更新采用不同的方式进行:relation使用同步更新 , 而enity使用异步更新 。
之所以这样做是因为在实际的训练过程中 , relation在很多数据集上都表现为长尾分布 , 即某几种relation类型占据绝大多数 , 所以异步更新会导致relationembedding在训练过程中产生大量的模型冲突 , 从而影响模型的收敛和准确性 。 而entity在训练过程通常是稀疏的 , 所以异步训练只会产生很小的冲突 。 采用这样一个简单的优化 , DGL-KE既可以保证模型训练的收敛性 , 又可以保证系统性能 。
#极速聊科技#亚马逊AI开源知识图谱嵌入表示框架DGL-KE,半小时训练亿级规模知识图谱
文章图片
图4:CPU-GPU混合训练
除了以上优化之外 , DGL-KE还提供了其他若干优化方法 。 例如 , 使用JointNegativeSampler加速负采样过程 , 使用RelationPartition来减少训练过程中的数据拷贝 , 以及使用Periodicsynchronization保证模型的收敛等 。 DGL-KE内置了多个处理好格式的知识图谱数据集 , 用户可以直接下载使用 。
除此之外 , DGL-KE在两个小数据集FB15k , wn18 , 以及一个大数据集Freebase上提供了训练Benchmark , 用户可以直接通过提供的脚本复现训练结果 。 和已有的开源框架相比 , DGL-KE的性能优势明显 , 如下结果展示了DGL-KE与Graphvite在FB15k数据集上的性能比较 , 以及和Pytorch-Biggraph在Freebase数据集上的比较 。
DGL-KEvsGraphvite
【#极速聊科技#亚马逊AI开源知识图谱嵌入表示框架DGL-KE,半小时训练亿级规模知识图谱】DGL-KEvsPytorch-Biggraph