图神经网络(AliGraph)在阿里巴巴的发展与应用

背景

 

为什么做GNN?

在大数据的背景下,利用高速计算机去发现数据中的规律似乎是最有效的手段。为了让机器计算的有目的性,需要将人的知识作为输入。我们先后经历了专家系统、经典机器学习、深度学习三个阶段,输入的知识由具体到抽象,由具体规则到特征再到模式,越来越宏观。相对来说,抽象的层次变高了,覆盖面变广了,但我们对底层的感知变弱了,模型的可解释程度变差了。事物发展往往遵循这样的规律,先有客观事实,再有原理支撑,之后是普遍推广。深度学习的应用已经让我们看到了非常可观的价值,但其背后的可解释性工作进展缓慢,也因为如此,当我们用深度学习去解决一些风控、安全等业务场景,那数字效果不足以支撑这项技术的应用,我们更需要知道结果后面的原因。

Graph是知识的载体,其间的实体联系蕴含了很强的因果关系。重要的是,这是一种直观的、人们能够读懂的结构。把Graph作为知识支撑,利用深度学习的泛化技术,看上去是一个可行的方向,在某些问题上,离我们的可解释性目标更近了一步。各种深度学习相关的顶会在近年来的paper分布上,图神经网络(GNN)一直处于蓬勃态势。GNN不一定是可解释性的全部,但对于集团内复杂的生态网数据,无论从技术储备还是业务效果上来说,都是一个非常值得投入的方向。
再者说,GNN是一种解决问题的思路,覆盖范围很广,不仅仅是为了学Graph而存在。目前基于行为历史的搜索推荐类算法,都可以纳入到GNN范式,而这类算法在集团内有着大规模应用。用Graph去组织历史数据,相比现有方式信息量只增不减,理论上模型效果会更好。

 

面向哪些用户>

相比CNN、RNN等成熟技术而言,GNN还处于探索阶段,Graph之于GNN,不如图像之于CNN、自然语言之于RNN来的理所当然。即便有Graph数据,如何使用GNN没有可遵循的固定模式,更没有沉淀下来的类似卷积一样的算子可直接调用。GNN的有效性需要更多的场景去验证,而每一个场景都需要开发者的深入理解,开发者有能力处理Graph数据和编写之上的深度学习模型。有了百花齐放的应用场景做铺垫,才有可能抽象出共性的GNN算子,再将这些相对成熟的能力赋给使用者,GNN才会真正的推广开来。出于这些考虑,比起开发一个成熟算法供用户使用,平台当前阶段会更侧重提供API给开发者,让开发者有能力贴近自己的场景去实现GNN。

另一方面,Graph大多是场景相关,一个电商场景的图和社交网络的图有本质不同,不仅仅是数据构成上,上层的模型计算也很大程度不一样。这是另外一点与图像和自然语言的区别,后两者在不同的场景间具有较好的可复用性,或是结果可复用(FineTune),或是计算模型复用。所以GNN的应用需要更贴近场景,由开发者定制化,平台需要尽可能降低开发成本,加快模型迭代频率。

 

什么样的产品?

早期的GNN称为GraphEmbedding更合适,因为整个模型的输出就是顶点或边的向量化表示,如RandomWalk、Node2Vec,这些向量通过学习Graph本身得到,不涉及跟上层业务的关联。这些向量会作为业务模型的输入,构建深度神经网络。很多深度学习模型调优的经验告诉我们,端到端训练往往带来更多的效果收益,对于贴近场景解决问题的开发者来说,结合业务进行端到端训练而不是只学习Graph本身,方案更为彻底。再者,端到端会省去巨大的中间过程开销,如TB级的训练样本和向量临时存盘。退一步讲,只学习Graph本身的过程是端到端的一个特例,如果需要,完全可以退化成这样。端到端对用户是友好的,在一套IDE里,用户既可以操作复杂的Graph数据,又可以将数据与深度神经网络对接,自由编写上层模型,而不是靠多套系统的拼凑来完成。

所以,我们定位为一个GNN平台,可扩展且与生态兼容,面向GNN开发者提供一体化的解决方案,同时能将通过场景打磨的成熟算法沉淀到平台,推广GNN的应用,致力于为可解释的AI做技术储备。这是一个长期投入的过程,平台作为载体,需要厚实的底座。针对集团内现状,前期我们优先解决图数据与深度学习框架的对接,让二者高效的bridge起来,再投入到GNN编程模型的建设。

 

技术栈

AliGraph涵盖了从原始图数据到GNN应用的整体链路,把GNN算法的探索成本降低到和传统深度学习算法同等水平。平台可以分层来看:数据层,引擎层,应用层。

数据层,支持大规模同构图、异构图、属性图。数据无需提前build好,平台提供API来简化数据解析和建图的过程。数据层接口易扩展,方便对接不同格式、不同介质的Graph数据。

引擎层,包含Graph Engine和Tensor Engine。Graph Engine又可分为逻辑对象层与算子层。逻辑对象层,描述的是把原始数据加载到系统后展现给用户的形态是什么。每一个对象实体都会提供相关的语义接口,比如对于一个Graph对象而言,可以获取图的拓扑信息、异构程度、点边数量等。对于用户而言,实际使用中只需要声明一个逻辑对象并指定其数据源即可。

import aligraph as ag
g = ag.Graph(...)
print(g.get_topology())

算子层,在逻辑对象之上可以进行的计算操作。比如对于Graph对象而言,支持各种Sampler算子,用于对上层GNN算法提供输入。算子层具有很强的扩展性,以满足场景多样化对算子种类的需求。目前,内置支持的算子围绕GNN算法及生态展开,包括图查询、图采样、负采样、KNN等。后续我们会开放支持算子开发的SDK,允许用户自定义算子。

s = g.negative_sampler(type="by_indegree", ...)
print(s.get(ids))
Tensor Engine指深度学习引擎,如TensorFlow、PyTorch,或者其他支持Python接口的Library。Graph Engine的输出为格式对齐的NumPy对象,可无缝与深度学习引擎对接。GNN开发者可自由编写Graph之上的NN逻辑,并可与业务需求相结合,组成一个深度网络模型进行端到端训练。

应用层,强调与业务端到端结合,而非把Graph Embedding的结果割裂开使用。经场景打磨的成熟算法,也会沉淀到应用层,以算法组件的形式提供给用户。

 

系统实现

 

一体化框架

由GCN框架引申,典型的GNN编程范式可概括如下,系统是为了高效支持该范式而设计。

其中,向量化和聚合操作可以利用深度学习引擎的表达能力,因此,为实现上述计算模式,主要在于图相关的操作以及这些操作如何与深度学习引擎对接。我们将技术栈细化成如下图所示,其中Storage、Sampler、Operator是系统要解决的主要问题。信息自底向上在层与层之间前向传播,梯度则自顶向下更新每一层的参数,整个GNN应用在一张深度网络里描述。Storage层的Graph对象是逻辑存储,在其之下有一层抽象的文件接口,可适配多种数据源,这是系统具备可迁移性的前提。Sampler提供丰富的算子,且可独立扩展,不依赖系统框架,满足多样化的需求。Operator进行图语义操作的封装,把性能优化、数据对接隐藏在简洁的接口之下。

 

高效图引擎

再具体的,图引擎是连接图数据与深度学习框架的桥梁,保证数据传递的高效与稳定。这里的图操作是面向GNN的,和一般意义的图计算有很大区别。Graph Engine是一个分布式服务,具有高性能和高可用的特点,支持百亿级边的异构图在2分钟以内完成构建、十毫秒级按batch多跳跨机采样,支持从失败中状态无损的failover。Graph Engine内部深度优化了RPC过程,实现了数据零拷贝,并且Server间的连接是线程级的,在最大化带宽利用率的同时,每个线程可独立无锁的处理请求。这也是系统性能优异的主要原因。此外,我们通过有效的Cache、去中心化等手段来加速采样和负采样,性能具有明显提升。关于线程模型、Cache加速等细节可参考AliGraph paper。

 

算子可扩展

为支持GNN的快速发展需求,系统允许算子自由扩展。系统框架包括用户接口、分布式运行时、分布式存储,3大部分。通过用户接口调用某个算子,算子读取数据并完成分布式计算。我们把分布式运行时和存储的接口进行提炼,将编程接口控制在安全范围内,用户可以基于这些接口开发一个自定义的算子。自定义算子可以统一注册到用户接口上,无需新增用户API。具体的,每种Operator都是一个分布式算子,计算所需的数据会分布在Service的各个Server上,我们抽象了Partition()和Stitch()语义,Partition()用于把计算请求拆分并转发到对应的Server上,保证数据和计算colocate从而避免数据搬迁的代价,Stitch()则把每个Server的结果进行整合。Operator还需实现Process(),用于本地计算,数据序列化、分布式通信等则无需关心。

举个例子,KNN可以检测点与点的相似性(向量召回),再基于相似性来“构图”,因此可作为GNN生态的一部分。基于上述抽象框架,我们把KNN作为一种算子,很容易的实现了大规模KNN。除了作为扩展算子的编程框架,Partition()和Stitch()也可做为Message Passing编程的基础组成部分。

 

灵活的部署

整体上看,GraphEngine是典型的CS架构。轻量级的Client,可嵌入到TF、PyTorch等主流的DL框架使用。Client不做任何数据切片、转发、合并等操作,只是把Request发给对应的Server。Client与Server的连接是一个抽象的Channel,可以是RPC Channel,也可以是In Memory Channel,这也使得AliGraph有灵活的部署方式,即可以独立Service部署,也可以和TF等同进程部署,只要Channel联通Client与Server即可。轻量Client的另一个好处是可以作为Server之间通信的载体,而无需对Server间相互通信再开发新的协议。

 

效果

系统

数据种类:支持同构图、异构图、属性图,有向图、无向图,与ODPS数据无缝对接。
数据规模:支持百亿级边、十亿级顶点的超大规模图(原始存储TB级)。
算子种类:支持几十种可与深度学习相结合的图查询、采样算子,支持向量检索,支持算子按需自定义。
性能指标:支持分钟级超大规模图构建,毫秒级多跳异构图采样,毫秒级大规模向量检索。
用户接口:与PAI-TF构成一体化IDE,支持notebook,开发成本相比一般TF模型无异。

算法

已支持业界主流的GraphEmbedding算法,包括:DeepWalk、Node2Vec、GraphSAGE、GATNE等。多种自研算法正在计划公开,已发表的相关paper参考如下。

Representation Learning for Attributed Multiplex Heterogeneous Network. KDD, 2019. 
Is a Single Vector Enough? Exploring Node Polysemy for Network Embedding. KDD, 2019. 
Towards Knowledge-Based Personalized Product Description Generation in E-commerce. KDD, 2019. 
Sequential Scenario-Specific Meta Learner for Online Recommendation. KDD, 2019. 
AliGraph: A Comprehensive Graph Neural Network Platform. VLDB, 2019. 
Large Scale Evolving Graphs with Burst Detection. IJCAI, 2019. 
Hierarchical Representation Learning for Bipartite Graphs. IJCAI, 2019. 
Cognitive Graph for Multi-Hop Reading Comprehension at Scale. ACL, 2019.

业务

在集团内,已覆盖淘宝推荐搜索、新零售、网络安全、线上支付、优酷、阿里健康等相关业务,百亿级边、十亿级顶点的异构图,单任务节省300TB存储、万CPU时算力,训练时间缩短2/3,线上CTR提升12%。
此外,AliGraph已在阿里云机器学习PAI发布,为更多客户提供服务。我们希望看到GNN为更多的场景带去更优的解决方案,也希望更多的研究者愿意投入到这个方向。

获奖
荣获2019世界人工智能大会最高荣誉SAIL奖项。

双12来袭!500元淘宝红包、iPhone11等你拿。
https://www.aliyun.com/1212/2019/home?utm_content=g_1000092611

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用!五款新型 Linux 命令行工具

作者 | Ricardo Gerardi译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)在Linux/Unix系统的日常使用中,我们需要使用很多命令行工具来完成工作,以及理解和管理我们的系统,例如使用du来监视磁盘…

从零开始入门 K8s | 手把手带你理解 etcd

导读:etcd 是用于共享配置和服务发现的分布式、一致性的 KV 存储系统。本文从 etcd 项目发展所经历的几个重要时刻开始,为大家介绍了 etcd 的总体架构及其设计中的基本原理。希望能够帮助大家更好的理解和使用 etcd。 一、etcd 项目的发展历程 etcd 诞生…

minio 单机安装、部署 centos7环境

文章目录一、默认模式下载运行1. 下载2. 访问minio控制台3. 创建目录3. 上传文件二、企业自定义模式2.1. 指定用户密码2.2. 配置目录2.3. 控制台端口2.4. 启动2.5. minio控制台登录2.6. 效果图一、默认模式下载运行 1. 下载 官网地址:https://docs.min.io/docs/ …

Kubernetes 日志查询分析实践

准备工作 为了完成后续的相关操作,我们需要准备一个 K8s 集群,操作步骤如下: 登陆容器服务控制台。创建一个标准托管集群(杭州区域),在向导中勾选上【使用 EIP 暴露 API Server】 和【使用日志服务】。集…

“编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题:1.想入门人工智能,但不知从何学起,也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xf…

这群程序员疯了!他们想成为IT界最会带货的男人

随着网红主播越来越火,通过直播带货种草的形式也成了今年双12的热点。 不过,网红主播带货早已见怪不怪,但你们见过程序员直播带货吗!? 近日,趁着阿里云双12年末采购节,阿里云邀请了一波程序员GG来为大家直播带货&am…

Minio Docker 单机安装(二种模式) linux

文章目录一、默认单机启动1. docker安装启动2. minio 镜像拉取和启动3. minio登录二、minio纠删码模式2.1. 简述2.2. 启动2.3. minio登录2.4. 总览2.5. 上传文件测试一、默认单机启动 1. docker安装启动 # 在线安装docker yum install docker# 启动docker systemctl start do…

阿里巴巴 Service Mesh 落地的架构与挑战

导读:云原生已成为整个阿里巴巴经济体构建面向未来的技术基础设施,Service Mesh 作为云原生的关键技术之一,顺利完成在 双11 核心应用严苛而复杂场景下的落地验证。本文作者将与大家分享在完成这一目标过程中我们所面临和克服的挑战。 部署架…

看完这篇 HashMap ,和面试官扯皮就没问题了

来源 | Java 建设者责编 | Carol封图 | CSDN 下载自视觉中国(如果你没有时间细抠本文,可以直接看 HashMap 概述,能让你对 HashMap 有个大致的了解)HashMap 是 Map 接口的实现,HashMap 允许空的 key-value 键值对&#…

除了快,5G 有哪些关键技术?

阿里妹导读:5G不仅仅只是网速更快,更多的是生活方式的颠覆,对各行各业都会起到催化作用。5G里不仅仅只有大带宽,而是会有很多与B端用户(企业)相结合的点。接下来,跟阿里大文娱的梓烁一起了解5G的…

聚水潭是如何基于AnalyticDB for PostgreSQL 构筑海量实时数仓平台的

聚水潭数据仓库业务介绍 上海聚水潭网络科技有限公司成立于2014年。聚水潭创建之初,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位。随着客户需求的不断变化,如今聚水潭已经发展成为以SaaS ERP为核心&#…

sqlite3的编译和使用

编译环境准备 这个是nw官网的环境搭建教程,一般需要python2.7、visual studio 2013、node-gyp、 node-pre-gyp,环境这块的文章很多自己可以百度http://docs.nwjs.io/en/latest/For Users/Advanced/Use Native%2 0Node%20Modules/ 编译好之后&#xff0…

阿里巴巴的 Kubernetes 应用管理实践经验与教训

导读:本文整理自孙健波在 ArchSummit 大会 2019 北京站演讲稿记录。首先介绍了阿里巴巴基于 Kubernetes 项目进行大规模应用实践过程中遇到的问题;随后会逐一介绍解决这些问题的现有实践及其本身存在的局限性;最后会介绍阿里巴巴目前正在进行…

Minio 分布式集群部署

文章目录一、分布式存储可靠性常用方法1. 概述2. 冗余3. 校验二、分布式Minio优势2.1. 数据保护2.2. 高可用2.3.一致性三、运行分布式Minio3.1. 启动方案简述3.2. 案例说明3.3. 制作分布式启动脚本3.4. 制作伪分布式启动脚本3.5. 登录minio四、分布式Minio负载均衡4.1. nginx安…

数据分析:为什么说Python比Excel更简单高效 ?

日本最大的证券公司之一野村证券首席数字官马修汉普森,在Quant Conference上发表讲话:“用Excel的人越来越少,大家都在用Python。”甚至直接说:“Python已经取代了Excel。”事实上,为了追求更高的效率和质量&#xff0…

快速搭建 Serverless 在线图片处理应用

简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计…

如何在 PyFlink 1.10 中自定义 Python UDF?

我们知道 PyFlink 是在 Apache Flink 1.9 版新增的,那么在 Apache Flink 1.10 中 Python UDF 功能支持的速度是否能够满足用户的急切需求呢? Python UDF 的发展趋势 直观的判断,PyFlink Python UDF 的功能也可以如上图一样能够迅速从幼苗变成…

Node.js从零开发Web Server博客项目笔记

代码运行流程 首先开启服务器,在npm run dev的时候运行了bin目录下的www.js文件,启动http服务 当前端进行访问的时候,经过app.js文件 App.js是整个项目的入口文件,首先判断这个用户在http的header头中带了那些验证的信息&#…

如何度过二十多岁这段又穷又迷茫的岁月?

我们在后台常常会收到读者的留言我马上毕业了,但是现在很迷茫,不知道学校里学的,能不能真正的适应工作...我工作两三年,还是不知道怎么规划自己的技术成长路线,不知道该学什么来提升自己的竞争力...人生需要长线的经营…

Docker-compose 安装Minio 最新版本

文章目录一、环境准备1.安装docker-compose2. 新版本尝鲜3. 镜像下载二、单机编排2.1. 创建docker-compose.yaml2.2. 运行三、集群编排3.1. 下载docker-compose.yaml3.2. nginx.conf3.3.运行一、环境准备 1.安装docker-compose https://gblfy.blog.csdn.net/article/details/…