Fork me on GitHub

阿里大规模图学习平台 GraphLearn 在推荐召回、安全风控等场景的应用

图片

分享嘉宾:艾宝乐 阿里巴巴 高级开发工程师
编辑整理:王帅 金山云
出品平台:DataFunTalk

导读: GraphLearn是面向大规模图神经网络(Graph Neural Network,GNN)的研发和应用而设计的 大规模分布式训练推理一体化图学习平台。它从工业应用场景出发,提炼和抽象了一套适合于当下图神经网络模型的编程范式,实现了 采样优化稀疏场景模型优化针对PyTorch的GPU加速 ,并已经成功应用在阿里巴巴内部以及若干互联网公司的如 推荐召回安全风控等场景。

今天的分享将从下面四方面展开:

  • 平台介绍
  • 系统优化
  • 应用案例
  • 在线推理

01 平台介绍

1. GraphLearn—工业级大规模图学习平台

工业场景中的图具有大规模(边可到千亿级别)、异构(不同点边类型多)、属性丰富(点和边Float、标签属性等)的特点,常见的TensorFlow和PyTorch无法直接处理此类图,而传统的图处理和计算引擎欠缺自动微分能力。

GraphLearn将图引擎(Graph Engine)和张量引擎结合起来,一方面,图引擎具有鲁棒性(容错、动态伸缩)、高效性(存储、采样等)特点,通过基于内存的分布式存储和RPC, 能够高效处理大规模图数据,并封装了python接口和类似gremlin的GSL接口提供图采样、特征查询等操作,通过这些操作从大图里采样子图并且组织成EgoGraph或者SubGraph格式。另一方面,基于TensorFlow/PyTorch等深度学习引擎抽象和实现了数据转换和处理模块,常见卷积层和模型,提供用户友好兼具灵活性的算子。基于上述设计,面向工业场景设计的大规模图学习平台GraphLearn,可以有效降低 GNN 应用研发的成本。

图片

2. GraphLearn拓扑和****特征存储

1 GraphLearn****拓扑:

①图较大时,由于单机无法存储,将图进行切分。

②图切分含多种,默认邻接矩阵的行切分,可保证:

  • 一跳邻居存储于本地;
  • 多跳通过热点缓存,减少跨机通信。

(2) 特征存储:

  • Src点和dst点映射,本地index。
  • 基于本地index,构建连续点特征表,保证高效存储。
  • 图的拓扑以邻接表的形式存储,支持存储边的权重、标签、属性等。
  • 构图时,会对邻接表按照边权重预先排序,基于权重的topK大小进行采样,时间复杂度为O(1)。

图片

3. GraphLearn采样实现

由于图是分片存储,并非所有跳的存储全部在本地,需要RPC的调用。采样的执行逻辑是分布式的。

  • 基于Partition算法,通过映射表,获取输入节点的邻居存储所在Server;
  • 在本地Server采用Alias方法进行采样;
  • 按照原顺序将本地采样结果进行拼接,输出采样结果。

上述采样执行逻辑是Op执行的一种实现,整体Op执行逻辑类似,当接到请求,进行Partition,在server端执行后,进行stitch,得到完整的结果。同时,允许用户执行自己的Op,如出入度的查询等。

图片

GraphLearn的采样实现特点:

  • Alias Method O(1)时间复杂度
  • 边权重预排序
  • 多种采样策略:Topk, random, edge_weight, in_degree

4. GraphLearn GNN模型范式

GNN通常分为MiniBatch训练和FullBatch训练,考虑到工业场景下大规模图的训练效率,GraphLearn采用的是MiniBatch方式进行训练。具体地,GNN训练流程包括子图采样、特征预处理以及消息传递。

(1) 子图采样

  • 从输入大图的样本中,采样到节点及其邻居,构建成子图;
  • 支持固定个数邻居的采样,抽象为EgoGraph的形式;
  • 在v0.4版本:EgoGraph:root点称之为Ego;某一跳的邻居个数固定;不同跳数的邻居个数可以不同;形成了dense格式的采样树状子图,可以应用dense的算子,更高效。
  • 在1.0版本:开始支持类似PyG的数据组织格式,包含子图拓扑edge_index和点特征node_feature,适合更加一般的子图表示。

(2) 特征预处理

  • 原始特征多样,如用户统计特征、标签特征等;
  • 类型包括int、Float、string;
  • 工业场景特征较复杂,特征处理模块较重要,会影响后面的模型效果。

(3) 消息传递

  • EgoGraph based: 在v0.4版本里,主要考虑类似GraphSAGE的聚合方式,基于dense格式的EgoGraph构建,计算图为树结构。
  • SubGraph based: 更加general的Message Passing。

图片

5. GraphLearn架构

图片

GraphLearn的架构从下至上为:

(1) 图引擎和NN引擎层

  • 分布式图存储和查询引擎。
  • 兼容常用深度学习框架,支持TensorFlow和PyTorch。

(2) 数据层

  • 提供简洁灵活的数据预处理,如FeatureColumn和FeatureHandler对原始数据进行转化。
  • Dataset,可以将采样的子图组织成EgoGraph或SubGraph的形式。

(3) 网络层: 封装常用图卷积层,支持异构图.

(4) 模型层

  • 实现常见GNNs, KG等算法。
  • 支持自定义算法。

6. GraphLearn GNN训练链路

GraphLearn中GNN的训练链路如下图,用户在准备好点、边数据后,基于GraphLearn进行Graph构建,其次通过GSL(如采样)产生样本流,进行点、边特征处理后构建GNN模型,定义损失函数进行训练、预测,最后导出模型/向量。

图片

7. GraphLearn—分布式图学习平台

1 GraphLearn****功能

  • 支持百亿边、十亿点规模图
  • 支持异构图、属性图、有向图、无向图
  • 支持多种采样、负采样策略
  • 高效的多线程异步采样
  • 支持多种数据源(ODPS, OSS, HDFS)
  • 支持多种GNN算法:GraphSAGE, GCN,GAT, Bipartite-GraphSAGE, RGCN, UltraGCN等
  • 支持Tensorflow1.x和PyTorch / PyG
  • GPU训练优化(即将开源)
  • 在线推理(即将开源)
  • Temporal GNN(开发中)

GraphLearn开源地址:https://github.com/alibaba/graph-learn

GraphLearn文档地址:https://graph-learn.readthedocs.io/zh_CN/latest/

系统优化

1. 采样优化

(1) 图采样

图采样就是从大图中采样一个子图,并做必要的数据对齐,以满足深度学习迭代训练的需要。

图采样大致包含几类

  • 遍历型(Traverse),从图上获取一个batch的点或边数据;
  • 关系型(Neighborhood,Subgraph),获取点的N跳邻域并生成由点构成的子图,用于构造训练样本;
  • 负采样(Negative),与关系型相对,一般用于无监督训练场景,产生负例样本。

问题: GNN****训练采样和特征查找成为瓶颈(耗时占比大)

  • 采样抽象为query,采用DAG进行并行执行
  • 基于Actor的无锁纯异步调度和训练过程pipeline
  • Gremlin-like language

g.E("u2i").batch(64).alias('edge').outV().alias('src');

遍历“加载到图中的u2i数据”,batch size为64,命名为“edge”,输出边的源顶点,命名为“src”。

图片

2. 稀疏场景GNN模型优化

在稀疏场景下,GNN模型优化主要从性能和效果两方面进行优化。

(1)性能优化

  • AdamAsync Optimizer,加速梯度更新;
  • 输入string特征进行hash压缩存储,减少通信和存储;
  • Embedding 融合,高性能embedding lookup。

(2)效果优化

  • 高质量边生成方法
  • Batch-share 负采样 + Softmax CE损失函数
  • Embedding Normalization

3. gl_torch:针对PyTorch的GPU加速

鉴于越来越多的用户选用PyTorch进行训练,由于GraphLearn底层的数据结构与PyTorch的不同,数据转换的开销较大,因此我们针对PyTorch的训练进行了进一步优化。

GNN训练的典型流程如下图:

1.一个batch的输入样本的原始数据;

2.K-Hop采样(在不同机器采样,网络开销高);

3.构建子图数据(拓扑和特征);

4.将数据copy到GPU中进行训练;

5.模型训练得到GNN模型。

图片

[OSDI21] P3: Distributed Deep Graph Learning at Scale

(1) 问题

基于Graph-Learn对接PyTorch的方案瓶颈在IO(通信,数据拷贝和格式转换)。

(2) 优化思路:

  • 通信优化
  • 减少数据转换
  • 利用图的性质(提高locality)

和quiver team合作:https://github.com/quiver-team/torch-quiver

①gl_torch—GPU sampling

  • 图拓扑使用CSR格式存储在GPU/pin memory。
  • CUDA Kernel进行采样。
  • 基于OBGN数据,gl_torch GPU采样是pyg CPU(单核)采样的80倍左右。

图片

②gl_torch UnifiedTensor

  • CPU-GPU统一访问的UnifiedTensor:GPU间p2p访问;GPU Zero-Copy访问内存。

图片

③gl_torch Feature

  • 基于UnifiedTensor,封装了Feature的实现。

a.将数据分成冷数据和热数据。

b.冷数据存储于CPU,CPU的数据可以采用Shared Memory的方式做进程间的通信。

c.热数据存储于GPU,GPU卡没有NVLink连接的话,每个卡存储replica。GPU卡有NVLink,可在有NVLink连接的GPU组之间进行replica,GPU缓存的数据也更多。

图片

④gl_torch 运行模式

gl_torch支持模式:

  • 图的拓扑存储可在CPU、GPU或Pinned Memory;
  • Feature可存于CPU或者Unified Tensor;
  • 采样和子图的Induce可在CPU或GPU中;
  • 特征Collection可以在CPU或者GPU中。

gl_torch运行模式推荐最后一行的配置。图的拓扑较小,可放于Pinned内存中,特征需要较大带宽,建议放于Unified Tensor中,采样等可以利用空闲的GPU。

图片

⑤gl_torch 性能

基于OGBN-Papers100M数据(亿级别点、十亿级别边),batchsize为1024,三跳采样,利用8卡的V100进行训练,可得到近似线性加速的效果。

基于OGBN-MAG数据(异构图网络),batchsize为1024,二跳采样,利用8卡的V100进行训练,与PyG比较,gl_torch进行优化后可以达到较大的提升。

图片

03 应用案例

1. 推荐召回

(1)GraphSAGE

方案: 把u2i/i2i推荐问题转换成顶点间的边连接预测问题。

  • 构图很关键,图关系意味着模型学习的上限。
  • 数据:user-item关系,item-item关系,user和item原始特征。

图片

优点: 不局限于行为历史序列,可供挖掘多类型高阶关系,易捕捉数据的动态变化,运行效率高。

(2)丰富的模型库(推荐召回)

  • i2i 召回: 构建高质量i2i图,GraphSAGE模型训练进行向量召回,提高对长尾的覆盖。
  • u2i 召回: UltraGCN模型,简化GCN模型,直接计算user和他点击过的item以及user和该item相似的item(共现关系)直接的内积,得到最终的相似度。
  • 序列推荐: SURGE模型,将序列通过metric learning转换成图,从而用GNN挖掘用户兴趣。

2. 安全风控

(1)垃圾注册检测

  • 垃圾注册检测场景,点分类模型
  • 多种类型边的RGCN算法

图片

  • 优点:利用账号之间的多种关系,发掘团伙信息

(2)垃圾评论识别

[CIKM2019] Spam Review Detection with Graph Convolutional Networks

垃圾评论识别,是一个二分类模型,判断评论是否为垃圾,首先构建 商品 - 评论 - 用户的异构图以及 评论 - 相似度 - 评论的同构图 ,其次融合四个embedding向量构建模型。

①异构图

  • 商品-评论-用户;
  • 用GCN计算2-hop局部关系信息;
  • 基于meta-path的GCN·挖掘强化显著特征关系。

②同构图

  • 评论-相似度-评论;
  • 使用approximateKNN Graph算法构建;
  • 同构图上计算GCN,等同于表征LaplacianSmoothing全局特征。

图片

04 在线推理

1. 在线推理采样服务系统架构

(1) 模块构成

  • 数据加载模块,Data Loader
  • 采样模块,Sample Builder
  • 样本收集模块,sample Collector
  • 样本存储模块,Sample Store
  • 采样数据发布模块,Sample Publisher

图片

(2)性能

  • 2跳采样P99延时20ms
  • 分钟级图更新
  • QPS单机2万,支持线性扩展

2. 在线推理链路

  • 用户的数据动态更新到在线动态的图服务引擎
  • 通过推理采样查询得到采样结果
  • 采样结果通过GNN模型服务引擎进行在线推理。

图片

上述在线推理相关内容已经开源,并将在v1.1.0版本release。


在文末分享、点赞、在看,给个3连击呗~


分享嘉宾

图片

艾宝乐 阿里巴巴 高级开发工程师

艾宝乐目前在阿里巴巴计算平台PAI担任高级开发工程师,主要负责图学习平台的研发和图学习算法业务落地工作。其硕士毕业于南京大学,从事深度学习和计算机视觉研究,在阿里主要从事推荐系统、参数服务器、图学习平台的建设和业务落地等工作,其参与开发的图学习框架GraphLearn支撑了阿里内部数十个部门相关业务落地,同时也在其他若干公司的推荐和风控场景取得了实际落地效果。


本文地址:https://www.6aiq.com/article/1664791158757
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出