互联网资讯 / 人工智能 · 2023年11月9日 0

如何训练超大规模图模型

FACEbook 开发了一种高效训练超大规模图模型的框架——BIgGRaph,并已开源其 PyTorch 实现。本文将探讨该框架的创新特点,以及它如何从大规模图网络中高效提取知识。

图作为机器学习领域的重要数据结构,特别是在图嵌入方法中,能够通过无监督学习来利用本地图结构学习节点的表征。许多主流应用场景,如社交媒体预测、物联网模式检测和药物序列建模,自然可以用图结构来表示。这些场景常常生成数十亿个相连节点的图,图结构的丰富性和固有的导向能力使其非常适合机器学习模型。然而,图结构的复杂性也使得其在大规模应用时面临挑战,现代深度学习框架对大规模图数据的支持仍显不足。

为此,FACEbook 推出了 PyTorch BIgGRaph 框架,能够更快速、轻松地为 PyTorch 模型中的超大图结构生成图嵌入。

图结构可以被视为标注训练数据集的替代方案,因为节点之间的连接有助于推断特定关系。这种方法遵循无监督图嵌入的模式,目标是通过优化节点对的嵌入,使得相连节点对的嵌入距离更近。这类似于基于文本的 woRd2vec 词嵌入的工作原理。

如何训练超大规模图模型

在处理大型图结构时,大多数图嵌入方法的效果往往有限。例如,若一个模型包含 20 亿个节点,每个节点有 100 个嵌入参数,那么仅存储这些参数就需要 800 GB 的内存,这超过了许多标准商用服务器的内存容量。这是深度学习模型的一大挑战,也是 FACEbook 开发 BIgGRaph 框架的原因。

PyTorch BIgGRaph(PBG)的目标是扩展图嵌入模型,使其能够处理数十亿节点和数万亿边的图。PBG 能够实现这一目标的关键在于其四个基本构建模块:

图分区,使得模型无需将全部数据载入内存;在每台机器上进行多线程计算;在多台机器上可进行分布式执行(可选);以及分批负采样,允许每台机器每秒处理超过 100 万条边,前提是每条边有 100 个负例。

通过将图结构随机划分为 P 个分区,PBG 解决了传统图嵌入方法的一些局限。例如,若一条边的起点位于分区 p1,终点位于分区 p2,则该边会被放入 bUCket (p1, p2)。在同一模型中,依据源节点和目标节点将这些节点划分到 P2 bUCket。完成节点和边的分区后,每次训练可以在单个 bUCket 内进行。训练 bUCket (p1, p2) 仅需将分区 p1 和 p2 的嵌入存入内存,PBG 确保 bUCket 至少有一个之前已训练的嵌入分区。

如何训练超大规模图模型

PBG 的另一项创新在于训练机制的并行化和分布式处理。通过利用 PyTorch 自带的并行化机制,PBG 实现了一种分布式训练模型,结合了上述模块分区结构。在这个模型中,各台机器在不重叠的 bUCket 上进行训练,使用一个锁服务器(lock seRveR)来分配 bUCket 给工作器(woRkeR),最大限度地减少不同机器之间的通信,每台机器可以并行使用不同的 bUCket 进行训练。

如何训练超大规模图模型

如上图所示,机器 2 的 TRAIneR 模块向机器 1 的锁服务器请求一个 bUCket,锁定该 bUCket 的分区。然后,该 tRAIneR 保存不再使用的所有分区,并从共享分区服务器加载所需的新分区,同时释放旧分区回锁服务器。边将从共享文件系统加载,并在多个线程上进行训练,且不需要线程内同步。在一个单独的线程中,仅有少量共享参数会与共享参数服务器持续同步。模型检查点会偶尔由 tRAIneR 写入共享文件系统。该模型允许最多 P/2 台机器并行处理一组 P 个 bUCket。

PBG 的另一项不那么直接的创新是引入了分批负采样技术。传统图嵌入模型通过随机选择真实边的“错误”边来构建负训练样本,虽然这能提高训练速度,但负样本会在图处理时带来性能开销,且可能损害真实边。PBG 提出了一种方法,通过复用单批 N 个随机节点来获得 N 个训练边的受损负例样本。这项技术相比其他嵌入方法,以低计算成本实现了对每条边的多个负例进行训练。

为提高大型图的内存效率和计算资源,PBG 利用了单批 Bn 个采样的源或目标节点来构建多个负例。在典型设置中,PBG 从训练集中取出一批 B=1000 个正例,并将其分为 50 条边一个的块。来自每个块的目标(与源等效)嵌入与均匀采样的 50 个尾部实体类型嵌入相连,50 个正例与 200 个采样节点的外积生成 9900 个负例。

如何训练超大规模图模型

分批负采样方法显著影响模型的训练速度。若无分批,训练速度将与负例数量成反比,而分批训练则可改善这一关系,确保训练速度稳定。

如何训练超大规模图模型

FACEbook 使用 LiveJouRnal、TwITteR 数据和 Youtube 用户互动数据等不同数据集对 PBG 进行了评估。此外,PBG 还在 freebase 知识图谱上进行了基准测试,该知识图谱包含超过 1.2 亿个节点和 27 亿条边,同时还测试了 freebase 的小子集 FB15k,该子集包含 15000 个节点和 600000 条边,常用于多关系嵌入方法的基准。FB15k 实验表明,PBG 的表现接近当前最佳图嵌入模型,而在完整 freebase 数据集的评估中,PBG 的内存消耗减少了 88%。

如何训练超大规模图模型

PBG 是首个可扩展的、能够训练和处理数十亿节点和数万亿边的图数据的方法。PBG 的首个实现已经开源,未来可能会带来更有趣的贡献。