本文为2021 MAXP 系列公开课第二讲完整版直播回顾,由亚马逊云科技上海人工智能研究院张建博士主讲。介绍了图机器学习任务的概况,并着重讲解了本次大赛的图机器学习赛题,文中附基线模型开源地址。
在过去的几年中,神经网络的兴起与应用成功推动了模式识别和数据挖掘的研究。许多曾经严重依赖于手工提取特征的机器学习任务,如今都已被各种端到端的深度学习范式彻底改变了。尽管传统的深度学习方法被应用在提取欧氏空间数据的特征方面取得了巨大的成功,但许多实际应用场景中的数据是从非欧式空间生成的,传统的深度学习方法在处理非欧式空间数据上的表现却仍难以使人满意。
近年来,人们对深度学习方法在图上的扩展越来越感兴趣。在多方因素的成功推动下,研究人员借鉴了卷积网络、循环网络和深度自动编码器的思想,定义和设计了用于处理图数据的神经网络结构,由此一个新的研究热点——“图神经网络”。
10月11日,biendata邀请亚马逊云科技上海人工智能研究院张建博士,针对2021 MAXP 命题赛:基于DGL的图机器学习任务,开展了一场线上直播。张建博士为直播观众详细讲解了图神经网络框架DGL,以及本次赛题的官方基线模型。
模型地址:https://github.com/dglai/maxp_baseline_model
直播视频回顾:https://www.bilibili.com/video/BV1cL4y1B75C?spm_id_from=333.999.0.0
关于2021 MAXP
2021 MAXP 高性能云计算创新大赛(2021 MAXP)由中国计算机学会高性能计算专业委员会和中国信息通信研究院指导,ACM中国高性能计算专家委员会(ACMSIGHPC)和云计算开源产业联盟联合主办,亚马逊云科技和腾讯云支持,阿里云、华为云、UCloud、天翼云等厂商参与。大赛以高性能云计算为主题,旨在进一步推动国内高性能计算的发展,并为参赛者提供了高达40万元的奖金池,还会提供实习机会和权威荣誉证书。
扫描竞赛助手二维码添加「MAXP大赛」小助手,备注“机构+姓名+比赛赛道”(“MAXP 创新赛”,“MAXP DGL”,“MAXP Lambda”,“MAXP 性能赛”),即可进入赛题沟通群。
大赛官网:https://biendata.xyz/maxp/
直播回顾
本篇文章将分为五个模块介绍图数据任务。
模块一是讲解为什么要做图相关数据的任务。
模块二会介绍近几年图机器学习方面的进展,特别是和图神经网络相关的进展,以及主要由亚马逊云科技上海人工智能研究院主导开源的Deep Graph Library(DGL)图形网络框架,这也是大赛需要使用到的框架。
模块三是针对赛道题目进行讲解。
模块四是本篇文章最核心的内容,将对基线DGL模型进行讲解,特别是针对初赛的数据的处理和DGL模型的构建。
模型地址:https://github.com/dglai/maxp_baseline_model
模块五会分享一些学习和掌握DGL的相关资源。
本次大赛用到的图数据是人工智能的新数据金矿,就是图结构化的数据。在实际生活和工作中,图数据无处不在。例如社交网络、知识图谱及用户相互之间的关系等,这些都是图。化学分子也可以看成一个图,这是一种构图的新方法。
现在计算机视觉或自然语言处理所用到的图像数据和自然语言数据本质上也是一种图,通常称为网格状的图。例如图像数据,每一个圈代表一个像素点,表达了这个像素点和它临近的这8个像素点之间的关系。
计算机视觉中用的卷积神经网络,本质就是对于一个或一片区域的像素以及它们之间的关系进行建模。那么自然语言就可以认为是链型的图,从讲话时的第一个字到后面的字通过线性的关系串联起来。
很多自然语言中使用的模型。例如GPT,它的本质是在线性串联的图结构上构建点和点之间的潜在关系。
对于图数据这类比较新的数据,近几年学术界针对于图的论文数量一直在持续增长。
论文标题里包含graph的论文数量呈现指数增长的形式。尤其是2016年,在图像深度学习的算法得到应用之后,这几年都保持着百分之四十多的年增长率。到2020年,已经至少有2,000多篇论文都在讨论图和图数据及与图数据相关的机器学习的内容。
随着图数据的广泛应用及出现新的人工智能思路后,与图数据相关的一些算法和模型都出现井喷式增长。
其中比较典型的代表是2016年出现的《GCN图卷积神经网络》论文,这篇论文代表了图神经网络的开端。
对于图上机器学习来说,通常会利用它完成三类任务。
第一类是点和边的分类。用于识别可疑账户和锁定有价值的用户。
第二类是链接预测。对于图来说有一些特殊的应用,在电商的商品推荐里就用到此类任务。这类任务的本质是预测用户和商品之间是否存在关联关系,如果关联关系的可能性很高,那么就会推荐相关联的商品。
第三类是图分类和回归的问题。用于预测化学分子的特性。
这些都是图上机器学习常见的任务,在深度学习运用到图数据之前,这个学科发展出了很多方法和模型完成图上机器学习的任务。
2012年出现以连接主义为核心的神经网络成为人工智能领域新的主流模型后,很多学者开始研究如何将深度学习的方法运用到图结构化的数据上。
2016年随着相关论文的出现,产生了一种新的图像机器学习的方法,叫图神经网络。
图神经网络的本质是神经网络家族的一员,更多的是研究基于点边和图的特征。
图神经网络的本质是对于图结构化数据上的主要实体,点和边及它们拥有的特征进行卷积运算,同时利用神经网络常见的非线性的激活函数及正则化方法,将图里面的点和边及它们的特征进行多层卷积化处理,最后得到点、边或整个图结构的向量化的表示。
利用向量化表示,可以进一步帮助完成下游的任务。例如要对点、边、图做分类或回归等一系列应用。
目前已经有各种各样的机器学习或深度学习的框架工具,比如TensorFlow、PyTorch等工具都非常好用,但是在实践的过程中如果只使用TensorFlow、PyTorch这类常见的框架开发GNN,就会碰到图结构化数据特有的问题。
因为图结构的特殊性,在使用传统的或常见的深度学习框架的过程中就容易出现out of memory等问题。
因为在图结构化数据时,数据里经常会出现一个点有很多邻居,而邻居的数量是变化的。但是卷积神经网络里所看到的每一个像素,像素周边的邻居数量是固定的,这样针对固定数量张量设计的结构就容易出现内存溢出的问题。
因此在开发图神经网络的过程中,经常会碰到类似这种需要处理不平衡或是不一致数据分布的情况,此时用传统的神经网络框架开发就会碰到各种各样的问题。所以需要有专门针对于图神经网络的通用框架的出现,DGL就是其中之一。
DGL是专门用来编写图神经网络的开源工具,目的是为了让编写图神经网络更加简单,并且易于快速应用到业务场景里面。
简单而言,DGL是一款面向图神经网络深度学习框架。
与其他的图神经网络深度学习框架不同的是,DGL是兼容多个后端的框架,称为后端无知的框架。在整个框架里DGL支持用PyTorch去编写后端,也支持MXNet、TensorFlow编写后端。DGL关注的是应对与图结构化数据相关和图神经网络模型相关的工作。
在DGL中同样支持多种训练模式的情况,包括单机单卡、单机多卡或多机多CPU的分布式训练等在平常做深度学习训练过程中都会用到的情景。
同时针对于常用的GNN模块,都已经做了内置的实现。另外,DGL已有70多个经典和前沿的GNN模型的样例,可以更好的上手 GNN的学习和利用最新的模型完成业务需求,或是开发新的模型需要。
在刚刚过去的9月份, DGL整个开源项目获得了中国信息通信研究院主持“OSCAR 尖峰开源项目及开源社区”的大奖,这样评选中的获胜,也是对DGL作为开源社区的认可。
赛题讲解
图机器学习的常见任务是包括三类:点分类/回归,边分类/回归、链接预测,整图分类/回归。
这次比赛所做的事情就是最常见的点分类,完成图中点的标签分类。
比赛的数据由的数据供应方获取的,基于微软的学术论文引用文献的引用图。
数据是论文引用关系图,节点是论文,边是单向的论文引用关系。每节点都具有300维的特征值,节点属于23个类别之一,这也是论文所处的领域标签。
任务是通过利用已知的标签学习和预测未知节点的标签。
针对这个任务我们开发了基于DGL的GNN基线模型,主要的目的是为了帮助参赛者快速的上手掌握和使用 DGL来开发GNN的模型,并运用到这次大赛过程中。
代码结构包括两部分。
第一部分是4个数据预处理的文件,每个文件都有不同的目的。
第二部分是GNN的目录,其中包括用DGL写的 GNN模型文件及针对模型文件和比赛数据所做的模型训练文件和相应的帮助文件。
首先介绍代码逻辑里数据预处理的部分。
文件一的主要目的是完成针对于初赛数据构建点列表。
初赛数据包含点及论文到论文之间的边列表,但是边列表里包含一些论文的ID,这些ID在论文的点列表里并没有出现,所以数据探索和处理需要将所有点的paper ID合并起来,构成完整的点列表,同时给每一个 paper ID新的点索引。
文件二主要完成将原始文件的300维特征全部读出来,构建成压缩数据。
因为原始数据文件是用文本的格式存储的,处理起来非常花费时间,而且速度很慢,对内存的要求也比较高。所以文件二进行数据预处理后保存下来,直接用到后面的建模过程中,会极大的提升速度。
文件三的主要目的是使用新建的点索引,同每一个paper ID对应的点索引完成对于原有的边列表替换。
利用DGL的Graph类构建了DGL Graph,同时借助DGL的保存图功能存成graph.bin文件。
文件四的主要目的是完成对标签的分割。针对train_nodes.csv有标签的数据进行 train或validation的分割,test的数据集是用validation_nodes.csv里没有标签的点进行索引构建的。
其次介绍代码逻辑的 GNN部分,GNN部分主要包含两个文件。
第一个文件是models.py文件。
在models.py文件中,DGL内置的三个常用的GNN模块被称为基础的模型模块,构建基于邻居采样模式的模型代码。
邻居采样模式的模型代码分为三类:GraphSage,GCN,GAT。
因为赛题的数据相对来说规模较大,达到了百万级的点及千万级的边的规模。因此,如果想把图和300维的特征都使用全图训练模式,全部放到GPU里训练,很容易就会造成GPU显存溢出无法完成训练;全部放到CPU里训练,速度会非常慢。
所以采用mini批次的方法训练。做点分类时可以用邻居采样模式降低每一个批次的计算数据的数据量,从而保证可以使用GPU快速完成数据训练。
每一个模型构建之后都有入参,部分入参可以三个模型共享,另一部分入参是某些模型独有的。
第二个文件是model_train.py文件,这也是基线模型代码的核心文件。它利用构建的GNN模型以及经过预处理后的数据文件构建的训练模型代码。
代码主要逻辑的第一步是完成预处理数据的读取。使用辅助函数可以快速读取预处理数据,供训练模型使用。
训练模型的代码包含三种方式:
一种是使用CPU去训练;一种使用单块GPU进行mini批次训练;一种是使用单机多GPU进行数据并行的mini批次训练。
在主函数里有相应的入口,CPU的训练更多的是进行代码调试。对模型进行修改或使用自己开发的模型,可以先在CPU上进行调试训练,保证代码没有错误,再迁移到 GPU上进行训练。
三个训练方式的训练逻辑是一致的。如果使用多CPU进行训练数据并行的方式,需要对数据集进行多次划分,不同的划分送到不同的显卡上进行训练,将剩下的工作使用DGL点采样器和数据加载器完成mini批次的构建,最后选择构建GNN模型。
因为代码是基于PyTorch 后端写的,可以构建常见的PyTorch损失函数和优化器,最后在整个的 Epoch循环里面完成训练的 mini batch的循环和验证,及最佳模型保存的工作。
针对DGL比赛,我们还提供了与DGL相关的核心资源方便大家学习和掌握。
DGL图神经网络主要的核心资源有两个:
第一个核心资源是dgl.ai的官网。官网中最核心的内容分为两块:
一块是Getting Started,这个页面可以辅助安装DGL。因为安装的过程中针对不同的系统,是否使用GPU,有没有显卡及显卡对应的版本都有不同的安装命令。因此利用 Getting Started页面,快速找到环境对应的安装命令,一条命令就可以将DGL安装好。
另一块是docs,这个页面包含了与DGL相关的和主要的所有核心帮助文档。
Docs中包括DGL对外开放的API说明,还有基于中文的用户手册。方便中国区的用户快速的上手使用DGL构建hello word代码。
第二个核心资源就是DGL GitHub 站。
这里可以看到DGL 的源码及官方的DGL模型实现样例。除了GCN、GAT和GraphConv,还有很多经典样例可以在examples目录中找到,这些样例都可以进行参考使用,也可以修改模型完成本次大赛。
关于DGL的相关问题可以在DGL的官方讨论渠道中探讨。
第一个渠道是DGL官网里的 discuss论坛;
第二个渠道是DGL GitHub站中的 issue区;
第三个渠道是搜索DGL用户群或DGL用户1群、DGL用户2;
第四个渠道是通过 Slack Channel提问题,找到相关同事回复,给到参赛者解惑。
—
扫描二维码添加「MAXP大赛」小助手,备注“机构+姓名+比赛赛道”(“MAXP 创新赛”,“MAXP DGL”,“MAXP Lambda”,“MAXP 性能赛”),即可进入赛题沟通群。
点击阅读原文前往大赛官网