神经网络算法代码_亚马逊马超:如何使用DGL进行大规模图神经网络训练?

2023-11-02

3368bfa79491d6c7663df0b2b1a9dbeb.png 演讲嘉宾 | 马超(亚马逊应用科学家) 整理 | 刘静  出品 | AI科技大本营(ID:rgznai100)

与传统基于张量(Tensor)的神经网络相比,图神经网络将图 (Graph) 作为输入,从图结构中学习潜在的知识,该方法在近些年已被证明在许多场景可以取得很好的效果。然而,使用传统的深度学习框架(比如 TensorFlow、Pytorch、MXNet)并不能方便地进行图神经网络的开发和训练,而 DGL 作为专门面向图神经网络的框架,可以很好地弥补这一缺陷。该框架在开源后于国内外引起了强烈的反响。

基于此,在CSDN主办的2019 AI开发者大会(AI ProCon 2019)上,亚马逊应用科学家马超,同时也是 DGL 项目的合作作者,发表了《使用 DGL 进行大规模图神经网络训练》的主题演讲。他从 API 使用、系统优化以及系统可扩展性等多个维度深入分享了 DGL 的设计思路。

d095d2da142e874f04d561998515b39f.png

以下为马超演讲全文,AI科技大本营整理(ID:rgznai100):

现场大部分朋友都来自工业界,我想应该对传统的图算法了解更多,比如 PageRank 算法应该是我们学生时代学到的第一个传统图算法。但是突然之间,图神经网络算法火了起来。下面这张图是近些年 GNN 论文发表数量的情况,我们可以看到从 2016 年开始,GNN 论文发表数量呈指数上升趋势。

ee30693cbad9b1154b172a411c76e3da.png 什么是图神经网络? 图神经网络在近年来的发展有目共睹。我们发现,光是去年的 ICML 上有近 50 篇论文都在讲图神经网络。而今年的 KDD 和 NeurIPS 上也有非常多有意思的图神经网络研究。所以我们要问的第一个问题是:为什么要在图上做深度学习?这个问题其实很好回答:因为现实生活中很大一部分数据都可能是图数据,而不是传统深度学习算法里的欧几里得(Euclid)结构数据。 相比之下,我们做语音、图像这类任务,输入数据都是规整的张量,例如图像中的像素一个个排列下来。但是现实生活中很多数据并不是这样子,比如社交网络。在社网络中,如果每个用户都被当作一个节点,用户之间的关系被当作节点之间的边,那么整个数据就是一个图,这是没办法用类似于像素这样的欧几里得结构来表示的;还有知识图谱 (Knowledge Graph)这个例子。 比如,我们使用百度百科时,关键词之间所组成关联图谱,也是图结构;此外,还有一些研究人员在正在尝试在医疗领域进行新药或者以及新化学结构的预测和合成,而化学结构本质上也是图。对整个图而言,没有一个节点的嵌入表示是孤立的,而传统 CNN 和 RNN 分别把空间和时间上的相临节点作为处理对象的方法并不能很好的刻画出整个图上的关系,局限性很大。 39bd17e14a109efa9fd3f8c2084db6d5.png 图神经网络能做什么? 在聊 GNN 之前,我们首先思考一下大家熟悉的卷积神经网络 CNN 在做什么。比如指定一张图片,CNN 帮助我们判断是猫还是狗,本质上是卷积神经网络学习了在某些图像上的嵌入表示。而给定一张图,如果用 GNN 来预测节点之间的关系,本质上是 GNN 学习了在图上的嵌入表示。比如我们有一个 NBA 粉丝社群的关系图,这时给你一个新的用户,那么即使我们本来不知道这个新用户应该属于哪个社群,但是仍然可以通过 GNN 来预测这个新用户是不是勇士队的球迷,因为 GNN 发现该用户很多的关系节点都是勇士队的球迷。 那么 GNN 具体的工作机制是怎样的?大家请看这张图。在这张图里,不同颜色的圆圈代表图上不同的节点。我们做图神经网络训练时,每一个节点会给它相邻的节点发消息 message,消息可以来自于边上的特征,也可以来自于节点上的特征。邻居节点拿到消息之后会进行聚合操作,然后通过一个神经网络的非线性变换,例如 ReLu,并把它的输出可以作为下一次发送消息的输入,然后继续发送给邻居节点,通过这样不断迭代学习最终学会图上的参数表示。 0fe687620bf4abba4029ad7e8ea31a47.png 相信这个过程会让大家联想起 PageRank 算法的流程,其实 PageRank 算法和这里演示的 GNN 算法过程类似,只不过在 PageRank 里没有特征向量和神经网络的概念。 我们之前提到,从 2016 年开始出现了大量关于图神经网络的研究论文。但是即使你是一个图神经网络的专家,如果没有好的工具,想要去复现已有的论文工作或者创造新的算法,仍然十分困难。比如遇到内存泄露或者内存爆掉的问题时,大部分研究人员都束手无策。除此之外,还有一个问题就是现在的深度学习框架,无论是Tensorflow、Pytorch 还是 MXNet,默认都是基于稠密的 Tensor 表示。 对于稠密张量的计算和自动求导,目前的框架已经可以做的很好了,而实现一个图神经网络程序却不是遵循这样的范式,大部分时间开发者都是在对稀疏数据进行操作。开发者从稠密数据的编程模式迁移到稀疏数据的编程模式上需要跨越巨大的 Gap。如果用户现在想编写图神经网络程序,可能需要花费很多时间进行程序上的优化,并且效果还不一定好。 正是因为存在这些问题,去年我们亚马逊 AWS 联合 NYU 以及 NYU上海,一起推出了 DGL 这个平台,用来帮助用户解决上述的这些问题。DGL 希望既能方便研究人员进行在图神经网络领域进行研究,又可以帮助工业界的用户进行业务部署。 DGL:专门面向图神经网络的框架 如果大家有关注我们的官网的话(https://www.dgl.ai/),可以在上面找到 dgl 的源代码、文档教程,博客资源,论坛讨论等等。我们的代码目前已获得 3000+ stars,450+ forks,60k+下载量,目前已经持续迭代到 0.4 版本。 DGL 发布之后,用户的主要构成来自中国和美国,这和我们团队构成是一样的。到目前为止,市面上也有了其他的图神经网络框架竞争者,那么DGL的目标是什么?其实主要是两个方面:1. 我们要对已有深度学习框架的向前和向后兼容做到最好;2.在第一个目标基础上尽可能提高框架的性能和可扩展性。 对于第一个目标,或者说是挑战。在面对各种各样的 GNN 算法需求是,DGL 框架能否提供一套灵活易用的 API 让研究人员在框架上面可以快速不断尝试新的想法。经过大量研究现有的图神经网络论文以及代码,DGL 最终选择使用 message passing 作为底层的API 抽象。 945b75c39eb8a98a2b40aac76ab43959.png 图神经网络框架最核心部分就是在处理 message passing,因此 DGL 把消息通信放在了最底层的API,用来适应广泛的算法需求,对于大部分 GNN 算法而言,无论算法如何变化,通常都很难脱离 message passing 的表示。下面这张图展示 DGL 为 message Passing API 提供了不同层级底层的封装。 当然,光有 message passing 是不够的,DGL 可以让用户实现自己需要的 UDF(用户定义函数)。下图是一个简单的 GCN 的 demo,展示了如何用 DGL 编写 GNN 程序。 21f0c46dad5d179ecb2bd5db43f93f56.png DGL 另一个重要的设计是,我们从一开始就把 DGL 设计成 “框架上的框架”。为了避免重复造轮子,DGL 在设计上采用了类似 Keras 的做法,基于已有的主流深度学习框架之上进行开发,目前 DGL 已经可以很好的支持 MXNet 和 Pytorch 两个主流深度学习框架。 考虑到很大一部分用户可能就是想利用现成的代码把已有的算法拿来玩一玩,所以最近我们一口气写了很多现成的 NN moudule,方便大家可以直接调用。此外 DGL 还提供多种 GNN 模型的完整实现和运行脚本,欢迎大家都来玩一玩。包括我们在 0.4 版本即将推出的 Knowledge Graph model zoo. DGL的性能优势 DGL 在性能上做了很多系统优化。例如消息融合,DGL 通过稀疏矩阵乘法的转化来做 message fusion。此外,为了让系统在稀疏数据上的性能达到最好,DGL还专门启动了一个名为 mini-Gun 的项目来做 kernel 优化。除此之外, DGL 内部还会通过 auto-batching 技术来加速批量图的并行处理过程。 00e079d674915ac890177fa39db6cd55.png 谈论了单机上的性能,那么遇到大图怎么办?比如微博有好几亿用户,用户的关系可能是百亿级别,这样的图无论是对 GPU 还是单机来说都装不下。因此 DGL 做了分布式的架构。 bf11ae54d3043c2b7a9542bbb4f223fe.png 这个架构有三层,最底层是采样器,中间这层的 trainer 是训练器,最上面是DGL-PS参数服务器。如果图非常大,我们就先把大图切分成很多小图,再把它分到不同的机器或者不同的GPU上,每次训练时只使用一小部分的 miini-batch 数据,并且通过参数服务器来存储训练过程中需要的模型参数,trainer 和参数服务器之间通过我们自己实现的网络协议进行数据交互。 最后我想说的是,现在深度学习的主要数据结构是 Tensor,但是 Tensor 是真正的数据结构吗?大家可以思考一下这个问题,如果把程序=算法+数据结构这句话扩展到深度学习领域中,会不会Graph就是深度学习的重要Date Structure?这也是为什么说一定要抓住图神经网络这个机会。黑盒式的神经网络一定不是长久走下去的道路,神经网络的发展在某一天可能会遇到可解释问题的瓶颈,图神经网络是否能为我提供一个神经网络可解释性的有效方法,值得我们思考。

(*本文为 AI科技大本营原创文章,转载请微信联系 1092722531)

精彩推荐

e65e754c88ed056a9ec7a3f39db9ae93.png 59908fb1800f4da2a1d477002eb5b1c0.png

推荐阅读

  • 要活102年,阿里凭借的是什么?

  • 参数量110亿,附赠750GB数据集,Google提NLP预训练模型T5

  • 华为提出一种可复制、可靠的攻击方法强大人脸检测系统MTCNN可攻破?

  • VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络

  • 为什么我害怕数据结构学得好的程序员?

  • 迷思:Python学到什么程度可以面试工作?

  • 移动互联网这十年,跨平台技术的演进及 Flutter 的未来

  • 刨根问底 | 红遍全网的SD-WAN,到底是什么?

  • 布隆过滤器、同态加密、PKI体系……一文告诉你密码学在区块链中能做什么?

ef35141ee63aa4bd1c2d86b05d1e8cba.png

你点的每个“在看”,我都认真当成了AI

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络算法代码_亚马逊马超:如何使用DGL进行大规模图神经网络训练? 的相关文章

  • 运动控制(部分)

    第二章 直流PWM调速系统 不可控整流器 大电容滤波 H桥式PWM变换器 泵升电压 在可逆系统进入制动状态时 PWM功率变换器把机器能变成电能回馈到直流侧 但由于二极管整流器到单向导电作用 不能回馈到交流电网 只能向滤波电容充电 使电容两端
  • RabbitMQ系列(四)RabbitMQ进阶-Queue队列特性 (二)工作队列 Work模式

    RabbitMQ进阶 Queue队列特性 二 工作队列 Work模式 文章目录 RabbitMQ进阶 Queue队列特性 二 工作队列 Work模式 1 work 工作队列 工作模式 2 代码实战 2 1 生产者 2 2 新建2个消费者 2
  • 关于 APP 隐私政策文本中个人敏感信息的规范使用声明

    前言 这两年国家对于互联网个人隐私保护非常重视 针对互联网产品对于个人信息的使用 四部委出台了一系列的规范 从去年开始 根据国家出台的相关规范 我们在不断地对我司的 APP 进行优化 包括两个方面 1 APP 中用户隐私政策的内容 2 AP
  • 《MySQL实战45讲》读后感 02

    说明 本来是打算写一些个人心得的 后来发现文中大量高质量的QA都非常精典 所以粘过来了 如有侵权请联系我删除哈 收获到的知识点 当一个表有更新的时候 跟这个表相关的所有缓存都会失效 所以这条语句就会把表T上所有缓存结果清空 MySQL8 版
  • 【腾讯云的1001种玩法】LAMP架构实现动态网站论坛系统

    腾讯云技术社区 博客主页持续为大家呈现云计算技术文章 欢迎大家关注 作者 魏豪 项目背景 LAMP架构 全称为Linux Apache Mariadb PHP 是一种强大的网站解决方案 LAMP是多个开源项目的首字母缩写 LAMP网站架构主
  • vue3之中div盒子的滚动条随着内容的增加而自动向下滚动

    思路 需要用到ref绑定dom元素 以及dom元素的scrollTop和scrollHeight属性 最终在onUpdated函数之中让scrollTop和scrollHeight两者相等即可 scrollTop 指的是滚动条卷去的距离 滚
  • MySQL 与 Redis 缓存的同步方案

    MySQL 与 Redis 缓存的同步方案 概述 MySQL 和 Redis 都是常见的数据存储方案 MySQL 用于存储结构化数据 Redis 用于存储非结构化数据 在一些高并发场景下 为了提升系统的性能 我们通常会将数据存储在 Redi
  • ubuntu下nginx1.0.15的安装

    1 首先到官网下载好nginx的原码 http nginx org en download html 2 安装nginx必备软件 gcc g pcre库 安装gcc sudo apt get install gcc 安装g sudo apt
  • VC设置程序热键

    为程序设置热键就是用到一个RegisterHotKey系统API 当然些API的使用相对简单 但也需要注意一些地方 所以在使用API前请参考MSDN相关文档 本文只给出一个设置程序热键的例子代码如下 1 在OnInitDialog中调用Re
  • docker 下载kafka

    Kafka采用的是订阅 发布的模式 消费者主动的去kafka集群拉取消息 与producer相同的是 消费者在拉取消息的时候也是找leader去拉取 kafka存在的意义 去耦合 异步 中间件的消息系统 首先安装zookeeper dock
  • 使用matlab搭建BP从零搭建BP神经网络完成鸢尾花数据集分类

    iris training mat文件如下 链接 https pan baidu com s 14vb1c0noPB4YKCCdOCsofA pwd ozmz 提取码 ozmz 不赘述 正确率96 7 load iris training
  • c++中的虚函数及虚函数表

    引语 我们在学习c 中经常会碰到一些莫名其妙的性质 特性等 如虚基类继承 虚函数等 但如果从底层 内存 编译器的角度去理解 那将会发现是如此合理且必要 c 中 我们来看这一个代码 class A pubilc void fun cout l
  • 优化网站性能 提高网站速度访问速度的14条实践

    相信互联网已经越来越成为人们生活中不可或缺的一部分 ajax flex等等富客户端的应用使得人们越加 幸福 地体验着许多原先只能在C S实现的功能 比如Google机会已经把最基本的office应用都搬到了互联网上 当然便利的同时毫无疑问的
  • ChatGPT的功能,优势,以及在生活中的应用

    ChatGPT是一种基于人工智能技术的聊天机器人 它可以模拟人类的对话方式 与用户进行交互 ChatGPT的功能和优势非常多 下面将详细介绍 ChatGPT的功能 1 自然语言处理 ChatGPT可以理解自然语言 识别用户的意图和需求 从而
  • 关于golang的http库及常用库

    go语言作为一个面向网络 面向服务 高并发的一门通用语言 http库是非常重要的 下面我们来了解http库及其他标准库 http库可以对客户端做很多的工作 下面我们来看一下 func main resp err http Get https
  • xxl-job的使用及简述原理

    文章目录 前言 1 介绍 2 部署篇 2 1 初始化数据库 2 2 部署调度中心 2 2 1 集群部署 2 3 部署执行器 2 3 1 集群部署 3 使用篇 3 1 设置执行器 3 2 新建任务 3 3 启动任务 3 4 查看日志 4 原理
  • layuiadmin(官方)知识点

    动态模板 layuiAdmin 的视图是一个 动静结合 的载体 除了常规的静态模板 你当然还可以在视图中存放动态模板 因此它可谓是焦点中的焦点 定义模板 在视图文件中 通过下述规则定义模板 下面是一个简单的例子 在不对动态模板设定数据接口地
  • Rust gRPC 库 tonic 使用记录

    tonic 使用记录 服务端 cargo run bin server 客户端 cargo run bin client
  • sendfile“零拷贝”、mmap内存映射、DMA

    原创连接 https blog csdn net z69183787 article details 104760890 utm source app groupmessage KAFKA推送消息用到了sendfile 落盘技术用到了mma

随机推荐

  • Java入门基础第7天【Java Eclipse安装教程和修改汉化教程】

    活动地址 CSDN21天学习挑战赛 六款Java常用的开发工具 我们在学习 Java 语言程序设计必须选择一个功能强大 使用简单 能够辅助程序设计的 IDE 集成开发环境 在Java入门基础第6天 我们认识了Java六款常用的开发工具 这篇
  • 网络层(三)

    网络层 网络层基本上就是围绕着路由器展开的 因此我们很有必要学习路由器的工作原理 首先 路由器由三个部分组成 输入端口 交换结构 输出端口 我们一个一个来分析 输入端口 输入端口需要完成的任务 接收分组 确定分组应该转发到哪个输出端口 那输
  • Vue3实现数据子传父

    Vue3实现数据子传父 子组件页面 html 子组件上需要用到的方法
  • android毕业论文致谢,毕业论文致谢10篇(精选)

    毕业论文致谢10篇 精选 最后深深的感谢呵护我成长的父母 每当我遇到困难的时候 父母总是第一个给我鼓励的人 回顾20多年来走过的路 每一个脚印都浸满着他们无私的关爱和谆谆教诲 10年的在外求学之路 寄托着父母对我的殷切期望 他们在精神上和物
  • 浏览器报错:您的连接不是私密连接。 简单的处理方法

    经常会遇到以上这种提示 您的连接不是私密连接 导致无法访问网页 简单的处理方法就是 鼠标焦点在在浏览器窗口 非浏览器输入框 的任意位置输入以下英文字符串 thisisunsafe 输入完毕页面即可自动跳转正常访问
  • Java十进制转三进制

    pre class java 十进制转三进制 只实现了整数部分 author CaoChenMiao public class TentoSan private int TtS int inNum int index throws Exce
  • Go实战学习笔记-1.3流程控制

    1 前言 这里还是再总结一下流程控制 和其它语言相比做了一些优化 比如相比c增加了迭代器类型的for循环 switch针对c中容易出问题的地方做了一些修改 避免出现缺少break时存在的常见问题 此外 和Java类似也存在跳出循环和多层嵌套
  • 【操作系统】王道考研 p53 文件的基本操作

    文件的基本操作 知识总览 创建文件 在外存中找到空间 在目录中创建目录项 删除文件 找到目录项 回收磁盘块 删除目录项 打开文件 找到文件名对应目录项 将目录项复制到 打开文件表 中 注意 有两种打开文件表 系统的打开文件表和进程的打开文件
  • echarts绘制关系图

    效果图 代码
  • VLC 播放器开发的SDK

    http download videolan org pub videolan vlc 3 0 0 win32 最近想试着自己写个播放器看看 于是选择了VLC 但是找不到sdk 这个是我千辛万苦找到的
  • 十五、多线程【黑马JavaSE笔记】

    文章目录 多线程 一 实现多线程 1 进程 2 线程 3 多线程的第一种实现方式 4 设置和获取线程名称 5 线程控制 6 线程的生命周期 7 多线程的第二种实现方式 二 线程同步 1 案例 卖票 2 卖票案例数据安全问题的解决 3 同步代
  • SQL注入(pikachu)字符型注入和搜索型注入

    一 字符型注入 1 判断column列数 注意 前面加上 进行闭合 中间是判断列数的sql语句 后面的注释掉 在url中要这么写 1 union select 1 2C2 23或者 1 union select 1 2 2 页面源文件代码
  • QT的文件处理

    QFile文件操作 可读写文本文件 二进制文件和QT资源文件 在QFile中可以使用从QIODevice中继承的readLine函数读取文本文件的一行 QFile file zk txt if file open QIODevice Rea
  • C++ new delete new[] delete[]重载实现

    篇博文主要是分析了C new 和构造函数的执行 delete 与析构函数的调用方式 通过全局重载和局部重载看清楚调用的关系 cpp view plain copy using namespace std include
  • 基于航空RFID行李处理应用方案

    1 技术背景 一家意大利公司开发设计了一种新的标记设备技术 其技术在转移的每一个应用环节都使用RFID技术实时跟踪行李 这一进度结束了各个机场行李丢失或延误的情况 为此给航空公司每年减损数十亿美元 提升了行李的安全隐患 基于航空RFID行李
  • fabric启动测试网络test-network并安装链码

    前置准备 下载好fabric samples 启动测试网络 进入到test network目录中执行 network sh up 创建 channel 默认名称 myChannel network sh createChannel 在tes
  • 拷贝构造函数为何可以调用引用参数对象的私有成员?

    拷贝构造函数为何可以调用引用参数对象的私有成员 例如 String const String other m data other x x是String类的私有成员 可以 因为拷贝构造函数是放在本身这个类里的 而类中的函数可以访问这个类的对
  • 公文字体字号标准2020_一文了解公文格式规范,图文并茂(建议收藏备用)

    本方法根据 党政机关公文格式国家标准 GB T9704 2012 制定 具体内容如下 一 办公软件要求 适用于微软OFFICE WORD文字处理软件 二 页面设置 1 选择 文件 页面设置 选择 页边距 附签 上 3 7厘米 下 3 5厘米
  • 股票大数据分析软件V2.7

    分享一个在淘宝买的 股票大数据分析软件 给大家使用 售价是168元的软件 由于有业务要出国 短期不会回国 所以分享给广大股友使用 软件的主要作用是进行个股数据面的分析和选股的作用 软件的功能有龙虎榜 融资融券 大宗交易 股东人数 一眼看市场
  • 神经网络算法代码_亚马逊马超:如何使用DGL进行大规模图神经网络训练?

    演讲嘉宾 马超 亚马逊应用科学家 整理 刘静 出品 AI科技大本营 ID rgznai100 与传统基于张量 Tensor 的神经网络相比 图神经网络将图 Graph 作为输入 从图结构中学习潜在的知识 该方法在近些年已被证明在许多场景可以