当前位置: 首页 > 科技观察

美团图神经网络训练框架的实践和探索

时间:2023-03-19 13:45:00 科技观察

美团神经网络训练框架的实践与探索网络框架图龙和配套的图学习平台,提升了模型的规模和迭代效率。1.前言万物相连。图作为一种通用的数据结构,可以很好地描述实体之间的关系。例如,在社交网络中,用图来表示用户之间的友情关系;在电子商务网站中,用图表来表示用户与商品之间的点击购买行为;实体之间的各种关系。另一方面,深度学习技术在计算机视觉、自然语言处理、语音处理等领域取得了巨大成功。深度学习技术将图像、文本、语音等各种数据转化为稠密的向量表示,提供了另一种表示数据的方式。借助硬件日益强大的计算能力,深度学习可以从海量数据中学习到数据之间复杂多样的关联关系。这不禁让人想知道深度学习是否可以应用到更广泛的领域,比如——图?事实上,早在深度学习兴起之前,业界就已经开始了对GraphEmbedding技术的探索[1]。早期的图嵌入算法大多基于启发式矩阵分解和概率图模型;随后出现了以DeepWalk[2]和Node2vec[3]为代表的相对“浅”的神经网络模型;最终,以GCN[4]为代表的一系列研究工作突破了图信号处理与神经网络之间的壁垒,建立了当前基于消息传递机制的图神经网络(GNN:GraphNeuralNetwork)模型的基本范式。近年来,图神经网络逐渐成为学术界的研究热点之一[5]。在工业界,图神经网络在电子商务搜索、推荐、在线广告、金融风控、流量预测等领域也有很多应用,并带来了显着的效益。由于图数据的稀疏性特征(图的所有节点对之间只有少量边连接),使用通用深度学习框架(如TensorFlow和PyTorch)直接训练往往表现不佳。工欲善其事,必先利其器。图神经网络的深度学习框架应运而生:PyG(PyTorchGeometric)[6]、DGL(DeepGraphLibrary)[7]等开源框架大大提高了图神经网络的训练速度,降低了资源消耗[17][18],得到积极的社区支持。很多公司也根据自己的业务特点,构建了自己的图神经网络框架。在长期的实践中,美团搜索和NLP团队总结了实践经验,在训练的规模和性能、功能的丰富性、易用性等方面做了很多优化。本文首先介绍我们在以往落地应用中遇到的实际问题和挑战,然后介绍具体的解决方案。1.1问题与挑战从工业应用的角度来看,一个“简单易用”的图神经网络框架至少具有以下特点。(1)完美支持当前流行的图神经网络模型。从图本身的类型来看,图神经网络模型可以分为HomogeneousGraph、HeterogeneousGraph、DynamicGraph等类型。从训练方式来看,可分为全图消息传递[4]和基于子图采样的消息传递[8]。从推理的角度来看,也可分为转导式和归纳式[9]。此外,下游任务除了经典的节点分类、链路预测和图分类之外,还有很多领域相关的端到端预测任务。在实际应用中,不同的业务场景对图神经网络模型和下游任务有不同的要求,需要个性化定制。例如,在美食推荐场景中,存在用户、商家、菜品等节点,可以用同构图或异构图来描述它们之间的关系;为了描述不同时间的用户偏好,也可以使用动态图模型;对于推荐系统的召回和排序两个阶段也需要设计不同的训练任务。尽管现有的框架提供了通用模型的实现,但是简单地调用这些模型并不能满足上述要求。这时,用户需要自己开发模型和训练流程代码,带来了额外的工作量。如何帮助用户更方便地实现定制模型是一个很大的挑战。(2)支持以合理的成本在大规模图上进行模型训练。在业务应用中,图的规模往往非常大,达到数十亿甚至数百亿条边。在我们最初的尝试中,我们发现使用现有的框架,我们只能在分布式环境中训练一个数百亿边规模的模型,消耗更多的硬件资源(数千个CPU和数TB的内存)。我们希望单机能够在合理的时间内训练出百亿边规模的模型,从而减少对硬件资源的需求。(3)与业务系统无缝对接。图神经网络完整的实现过程至少包括:业务数据的构成、模型的离线训练与评估、在线推理、业务指标的观察。图神经网络技术要成功应用,需要充分理解业务逻辑和业务需求,统一高效地管理业务场景。同样以美食推荐场景为例。在线日志记录了曝光、点击、下单等行为事件。知识图谱提供了丰富的商家和菜品属性数据。实验得到证实。合适的工具可以提高对接业务数据的效率。然而,现有的图神经网络框架大多侧重于模型的离线训练和评估,缺乏此类工具。(4)研发人员易于使用,并提供足够的可扩展性。从研发效率的角度来看,自建图神经网络框架的目的是减少建模中的重复性工作,让研发人员专注于业务本身的特性。因此,一个“易用”的图神经网络框架应该易于使用,通过简单的配置即可完成大部分任务。在此基础上,还可以对一些特殊的建模需求提供适当的支持。1.2美团的解决方案美团搜索和NLP团队在长期实施搜索、推荐、广告、投放等业务中总结实践经验,自主设计开发了图神经网络框架图龙及配套的图学习平台,哪个更好的解决了上面的问题。首先,我们对目前流行的图神经网络模型进行了细粒度的分析,总结了一系列的子操作,实现了一套通用的模型框架。许多现有的图神经网络模型可以通过简单地修改配置来实现。针对基于子图采样的训练方法,我们开发了图计算库“MTGraph”,大大优化了图数据的内存占用和子图采样速度。在单机环境下,与DGL相比,训练速度提升约4倍,内存占用降低约60%。单机可以实现十亿节点、百亿边规模的训练。围绕图龙这个图神经网络框架,我们搭建了一站式的图学习平台,为研发人员提供业务数据接入、图数据构建与管理、模型训练与评估、模型导出与分析等全流程的图形化工具。发射。.图龙实现了高度可配置的训练和评估,从参数初始化到学习率,从模型结构到损失函数类型,都可以通过一套配置文件来控制。针对业务应用的常见场景,我们总结了几种训练模板,开发者通过修改配置即可适应大部分业务场景。比如很多商家在下午高峰和晚高峰都有周期性的波动。为此,我们设计了周期动态图的训练模板,可以针对一天中的不同时间生成不同的GNN表示。在美团配送业务的应用中,需要为每个区域生成不同时间段的GNN表征,作为下游预测任务的输入特征。开发过程中,从开始修改配置到第一版模型输出,仅用了三天时间;在此之前,自己实现一个类似的模型解决方案需要大约两周的时间。2.系统概述如下图1所示,图龙配套的图计算库和图学习平台构成了一个完整的系统。该系统自下而上可分为以下三个组成部分。图1图神经网络计算引擎、框架和平台的系统架构(1)图和深度学习引擎我们将图神经网络的底层算子分为三类:图结构查询、稀疏张量计算和稠密张量计算。我们开发了图计算库MTGraph,提供图数据存储和查询功能,深度优化内存占用和子图采样速度。MTGraph兼容PyTorch和DGL,用户可以直接在MTGraph的基础上编写基于DGL的模型代码。(2)图龙框架图龙框架首先封装了训练图神经网络所需的基本组件,包括图和特征数据的预处理过程、子图采样器、通用GNN模型框架,以及包括基本任务在内的训练和评估.基于以上组件,图龙框架提供了丰富的预定义模型和训练/推理过程。用户可以通过修改配置文件,在业务数据上训练和评估GNN模型。(3)图学习平台图学习平台旨在简化离线模型开发和迭代过程,同时简化业务系统的对接过程。图学习平台提供一系列可视化工具,简化从业务数据接入到模型上线的全过程。下面将从模型框架、训练过程框架、性能优化和图学习平台四个方面详细介绍各模块的分析设计方案。3.模型框架我们从工程实现的角度总结了当前主流图神经网络模型的基本范式,实现了一个通用的框架来覆盖各种GNN模型。下面根据图的类型(同构图、异构图、动态图)分别进行讨论。3.1同构图同构图(HomogeneousGraph)可以定义为一组节点和一组边:边表示节点与节点之间的连接。节点和边上往往会有附加的特征,我们记为节点的特征和边的特征。许多图神经网络框架,包括PyG和DGL,都总结了齐次图上的GNN,并提出了相应的计算范式。例如,DGL将GNN的前向计算过程概括为消息函数、归约函数和更新函数[7]。我们扩展聚合函数的种类,提出更通用的计算范式:上述计算范式仍然分为生成消息、聚合消息、更新当前节点三个步骤,具体包括:层次维度的聚合函数:用于聚合同一节点在模型不同层级的表示。例如,在大多数GNN模型中,层次维度的聚合函数由上层的节点表示;而在JKNet[10]中,层次维度的聚合函数可以设置为LSTM[11]。消息函数:结合起始节点和目标节点以及边的特征,生成消息向量进行消息传递。节点维度的聚合函数:聚合来自邻居节点的所有消息向量。值得注意的是,不同的实现也是可能的。例如,在GCN中它是所有邻居节点,而在GraphSage[9]中它是邻居节点的子集。Update函数:用于聚合节点自身在上一层和当前层的表示。不难看出,上述计算范式可以涵盖目前大部分的GNN模型。在工程实践中,我们将上述功能进一步拆分细化,提前提供多种高效实现。通过配置选项可以实现不同的组合,从而实现大多数主流的GNN模型。3.2异构图与异构图相比,异构图(HeterogeneousGraph)扩展了节点类型和边类型。例如,学术引文网络[13]包含论文、作者、机构等节点,节点之间由“论文引用其他论文”、“作者写论文”、“作者”等类型的边直接相连belongstoinstitutions”,如图2所示:图2同构图与异构图的比较??我们将异构图看作是多个二分图的叠加,每个二分图对应一种边类型。上述学术引文网络可以表示为“paper-citation-paper”、“author-writing-paper”、“author-belonging-institution”,共三个二分图,齐次的GNN模型框架graph可以稍微修改应用于二分图。在此基础上,一个节点会在不同的二分图中产生不同的表示。我们进一步提出了边类型维度的聚合函数,用于聚合节点在不同二分图中的表示(如下图3所示)。该框架还提供了多种边型纬度聚合函数的实现,可以通过配置选项调用。例如,要实现RGCN,可以在二分图上应用GCN,然后对边类型维度进行平均。图3异构图模型框架3.3动态图动态图(DynamicGraph)是指随时间变化的图。相比之下,上述的同构图和异构图都可以称为静态图。例如,学术引文网络会随着时间的推移不断扩大,用户与产品的交互图会随着用户兴趣的变化而变化。动态图上的GNN模型旨在在给定时间生成节点表示。根据时间粒度的粗细,动态图可以分为离散时间动态图和连续时间动态图。在离散时间动态图中,时间被划分为多个时间片(例如以天/小时为单位),每个时间片对应一个静态图。离散时间动态图的GNN模型通常在每个时间片上单独应用GNN模型,然后聚合节点在不同时间的表示[14]。我们将聚合过程抽象为一个离散时间维度的聚合函数,并提供预定义的实现。此外,图龙框架还提供了离散时间动态图数据的加载和管理机制,只在内存中保留必要的时间片,减少硬件资源的消耗。图4离散时间动态图的GNN模型框架在连续时间动态图中,每条边都附有时间戳,表示交互事件发生的时刻。与静态图相比,连续时间动态图中的消息函数还依赖于给定样本的时间戳以及边的时间戳。此外,邻居节点必须与时间相关,例如,出现在时间之后的节点不能出现在邻居节点中。为了解决这个问题,我们在连续时间动态图上开发了多种邻居节点采样器,可以在指定时间范围内高效地采样邻居节点。图5Continuous-timedynamicgraphGNNmodelframework以上分析了同构图、异构图和动态图的计算范式,我们从中提取了通用函数(算子),包括消息函数、聚合函数、更新函数和邻居节点功能,并给出了各种预定义的实现。框架用户可以通过配置选项组装组合算子来实现所需的GNN模型。4.训练过程框架训练GNN模型通常包括加载数据、定义GNN模型、训练评估、导出模型等过程。由于GNN模型和训练任务的多样性,在实际开发过程中,用户往往要针对自己的场景编写模型和流程代码。繁琐的底层细节让用户很难专注于算法模型本身的优化。GraphGym[12]和DGL-Go[16]试图解决这个问题。通过在简化界面的同时集成多个模型和训练任务,用户可以更直接地上手和训练GNN模型。我们用更“工业化”的方式来解决这个问题(如下图6),框架分为两层:基础组件和流程组件。基本组件专注于单一功能。例如图数据组件只在内存中维护图数据结构,不提供图上的采样或张量计算功能;图上的采样函数是通过图采样器提供的。流程组件通过组装基础组件,提供相对完整的数据预处理、训练和评估流程。例如,训练过程结合图数据、图采样器、GNN模型等组件,提供完整的训练功能。图6训练流程框架是一个stepup,我们提供了多种流程配置模板和GNN模型模板。该模板对外暴露了几个超参数,如训练数据路径、模型类型、学习率等参数。结合用户指定的超参数后,就可以完全定义一个训练任务。换句话说,一个GNN模型实验可以完全基于模板和参数进行复现。该框架将解析这些配置并生成可执行应用程序。例如,用户可以选择GraphSage模型的配置模板和链路预测任务的训练模板,指定模型层数和维度,以及训练和评估数据路径,开始训练基于GraphSage的链路预测模型。5.性能优化随着业务的发展,下面业务场景的规模也越来越大。如何以合理的成本高效地训练数十亿甚至数百亿的side-scaleGNN模型成为了一个亟待解决的问题。我们通过优化单机内存使用和优化子图采样算法来解决这个问题。5.1图数据结构优化图数据结构的内存占用是制约可训练图规模的重要因素。以MAG240M-LSC数据集[13]为例,加入反向边后图中共有2.4亿个节点和35亿条边。在基于子图采样的训练方法中,PyG和DGL单机的图数据结构需要占用100GB以上内存,而其他开源框架往往占用更多内存。在更大规模的业务场景图上,内存使用往往会超过硬件配置。我们设计并实现了更紧凑的图数据结构,增加了单机可承载的图规模。我们使用图形压缩技术来减少内存使用。不同于传统的图压缩问题,GNN需要支持场景中的随机查询操作。例如,查询给定节点的邻居节点;确定给定的两个节点是否在图中连接。我们对这个问题的解决方案包括两个部分:图数据预处理和压缩:首先,分析图的统计特征,以轻量级的方式对节点进行聚类和重新编号,以使域结构中编号相似的节点也比较像。然后调整边的顺序,对边数据进行分块编码,生成“node-blockindex-adjacentedge”级别的图数据文件(如下图7)。最后,如果数据包含节点特征或边特征,还需要将特征与压缩图对齐。图7.压缩图数据结构图的随机查询:查询操作分为两步:首先定位需要的边数据块,然后在内存中解压数据块读取查询到的数据。例如查询节点及其是否相连时,先根据两个节点的编号计算边数据块的地址,解压数据后得到少量的候选相邻边(一般不超过16条)块,然后检查是否包含边缘。压缩后,加载MAG240M-LSC数据集只需要15GB的内存。百亿乃至千亿侧尺度图的内存占用明显降低,达到单机可以承载的水平,如下图8所示:图8图8数据结构内存占用对比5.2子-图抽样优化子图抽样是GNN模型训练的性能瓶颈之一。我们发现在一些业务图中,子图采样甚至占用了整体训练时间的80%以上。我们针对静态图和动态图设计并实现了多种高效的邻居节点采样算法。主要的优化方法包括:随机数生成器:相对于通信加密等应用,图上的采样对随机数生成器的“随机性”没有严格的要求。我们适当放宽了对随机性的要求,设计并实现了更快的随机数生成器,可以直接应用于有放回和无放回的采样操作。概率量化:在加权采样中,将浮点数表示的概率值量化为更紧凑的整数,精度损失可以接受。不仅减少了采样器的内存消耗,还将一些浮点运算转换为整数运算。时间戳索引:动态图的子图采样操作需要限制边的时间范围。采样器首先在边上为时间戳构造一个索引,采样时根据索引确定边可以被采样的范围,然后进行实际的采样操作。经过以上优化,子图的采样速度较DGL提升了2~4倍(如下图9)。一个业务场景图A(2亿个节点,40亿条边)使用DGL训练需要2.5小时/epoch,优化后可以达到0.5小时/epoch。业务场景图B(2.5亿个节点和124亿条边)只能分布式训练,耗时6小时/epoch;优化后可在单机上训练,速度可达2小时/epoch。图9子图采样速度对比(2层,每层20条相邻边)6.图学习平台图学习平台旨在简化离线模型开发的迭代过程,简化业务系统的对接过程。一个完整的模型开发迭代过程至少包括三个阶段:准备数据集、定义模型和训练任务、训练和评估模型。我们分析用户在这三个阶段的需求,并提供相应的工具来提高开发效率:数据集管理:从业务数据构建图是模型开发的第一步。图学习平台提供了基于Spark的图合成功能,可以将存储的业务数据转换为图龙自定义的图数据格式。业务数据通常以事件日志的形式存储,关于如何从中抽象图形有很多选择。例如在推荐场景中,业务日志包含了用户对商家的点击和下单记录。除了将“用户-点击-商户”事件描绘成图形外,还可以描述短时间内一起点击的商户之间的关系。另外,还可以引入额外的数据,比如商家所在的地理位置,商家在卖的菜品等等。具体采用哪种构图方案需要通过实验来确定。对此,图学习平台提供了图形作文工具(如下图10所示)帮助用户梳理作文方案;同时还提供了图数据集的版本管理,方便对比不同构图方案的效果。图10图形合成工具实验管理:确定图形数据后,建模方案和训练策略是最终效果的关键。例如,应该使用哪种GNN模型?如何选择损失函数?如何确定模型超参数和训练超参数?这些问题也需要大量的实验来回答。基于图龙框架,可以通过一组配置来控制建模方案和训练策略。图学习平台为配置提供可视化编辑器和版本管理功能,方便比较不同方案的优缺点。流程管理:有了图数据集和建模/训练方案后,整个流程需要自动化。这是模型上线的必要条件,也有利于团队成员相互复制解决方案。图学习平台对常见的“合成、训练、评估、导出”流程提供自动化调度,可以在适当的时候复用上一阶段的结果,提高效率。例如,如果数据集的定义没有变化,则可以跳过Spark组合阶段,直接使用已有的图数据。此外,针对在线模型的需求,平台提供了构图与建模方案集成、时序调度等功能。7.总结本文介绍了美团搜索和NLP团队在构建图神经网络框架的实践经验,包括GNN模型归纳抽象、基础框架、性能优化、上层工具的思考和关键设计.框架的设计思想来源于业务实施中遇到的实际问题,例如大规模图的优化、多人协作中的流程管理等;它还吸收了学术界的最新研究进展,如动态图的计算范式等。除了技术层面的优化,框架的构建也得益于工程团队和算法团队的紧密合作。基于共同和深入的了解,项目才能顺利推进。借助图龙框架,图神经网络技术已经应用于美团搜索、推荐、广告、配送等多个业务场景,取得了可观的商业效益。我们认为图神经网络具有更广阔的应用前景,图神经网络框架作为基础设施也值得不断优化和完善。8.作者简介付豪、先鹏、香舟、余记、徐浩、梦迪、无为等均来自美团平台/搜索和NLP部门。