写在开头:

这个专栏是为了总结我本科毕业设计中所设计的题目《基于GPU的图神经网络算法库的设计钰实现》。这半年来一直在这个方向上啃代码,读论文,真的学到了很多东西。尤其是阅读了大佬团队写的开源框架代码,受益良多。本专栏计划从三个大的方面进行整理:

第一部分是对典型的图神经网络(GNN)模型 进行介绍,抽象出其核心的计算过程;

第二部分是对GPU编程进行介绍,即CUDA代码的编写;

第三部分是对目前学界和业界主流的图神经网络计算平台进行介绍,计划选取DGL和PyG。

绪论:

随着深度学习技术在2012年起开始的爆发式的发展。很多以欧式空间为输入空间并依赖手工特征工程提取特征的机器学习任务,如图像目标检测,语言识别与机器翻译等,被各种端到端的深度学习范式彻底改变了。尽管针对欧式空间设计的DNN(Deep Neural Network,深度神经网络)取得了巨大的成功,但在以图结构为代表的非欧式空间上这些性能强大的算法却难以一展拳脚。主要原因有两点:首先,图数据是不规则的,比如图中各节点的度是不确定的,这就导致一些在规则的欧式空间上定义的算子如卷积操作无法直接应用在图数据上,如图1.1 所示。此外,在很多图数据中每个节点与其邻居节点之间的拓扑结构链接蕴含了依赖或因果关系,而基于欧式空间的神经网络无法有效地对这些关系进行学习。因此,一系列针对图结构设计的GNN网络(Graph Neural Network,图神经网络)被学者们提出,其中代表性的有GCN网络[1](Graph Convolutional Network,图卷积网络),GraphSAGE模型[2],GAT网络[3](Graph Attention Network,图注意力网络)。

图1.1 欧式空间卷积操作(左图)和非欧式空间卷积操作的区别(右图)

于此同时,GPU(Graphics Processing Units, 图形处理单元)已经成为推动深度学习技术快速发展不可或缺的重要力量。GPU从曾经的图形加速器到现在已经演化为一种强大、多用途的、可编程的,用于大规模并行计算的协处理器。GPU的单指令多线程的众核架构有着并行加速神经网络计算天然的优势,如图1.2所示。目前英伟达性能最强悍的GPU是NVIDIA TITAN RTX,其包含了多达4608个单精度CUDA处理核心,这些核心又被划分为72个流式多核处理单元,另外还有一个高达24GB被所有核心共享的全局内存[6]。

图1.2 CPU与GPU架构对比[17]

为了更大程度的发挥出GPU的能力,英伟达公司推出了CUDA(Compute Unified Device Architecture,统一计算设备架构)编程模型[7]。CUDA编程模型提供了一个计算机架构抽象作为应用程序和其可用硬件之间的桥梁,程序员可以使用C语言自由设计所需的并行计算程序。CUDA已经从最早的CUDA 1.0版本发展到现在的CUDA 10.2版本,期间CUDA推出了专门针对神经网络优化的GPU加速库cuDNN(CUDA Deep Neural Network library,CUDA深度神经网络库)。现在GPU已经发展到了十分成熟的阶段,凭借硬件的进步和CUDA的不断发展其运行速度已远远超过了多核 CPU 的运算速度[8]。

GNN的训练难点:

尽管如此,为图数据编写高性能图神经网络算法仍然是一个非常有挑战性的任务。

  1. 首先由于图结构的复杂性导致图神经网络难以像在欧式空间数据上那样实现一个通用且简洁高效的特征提取和消息传递范式。
  2. 第二,由于图数据的不规则导致其很难与深度学习广泛使用的数据流编程范式相融合,这就使得图神经网络无法利用当前成熟的深度学习框架实现如反向传播等神经网络训练时专有的功能。
  3. 第三,图数据的不规则也导致了难以设计出一种高效的并行算子对GNN的进行并行加速计算。
  4. 第四,图数据的尺寸一般十分庞大,一个实际应用场景下的图,比如电商交易关系图和社交网络关系图往往有着数十万的节点和上亿的边,这就导致在设计图神经网络计算框架时需要考虑如何在有限的显存下对GNN进行并行加速。

图神经网络代码_第一篇:图神经网络(GNN)计算框架绪论相关推荐

  1. 04.卷积神经网络_第一周卷积神经网络

    04.卷积神经网络_第一周卷积神经网络 1.1 计算机视觉 上面这张图是64x64像素的图像,它的数据量是12288,下图是1000x1000像素的图像,它的数据量是3百万.如果用全连接网络去处理这张 ...

  2. matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践--第一篇 频率-空间域自适应鬼波压制

    matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践 涵盖了频率-空间域.频率-波数域.拉东域鬼波压制算法     建议实践之前熟练掌握各个域鬼波压制方法的原理,才能对代码有更深入的了 ...

  3. 架构师成长之旅_第一篇:插件与框架是什么?

    架构师成长之旅_第一篇:c++插件开发 目录 踏入工作前的准备 框架是什么? 多人开发 一.踏入工作前的准备 在即将踏入工作时,最主要的是你的代码量和你编码能力,最重要的是你的代码质量,在编码界代码质 ...

  4. 车载以太网之DoIP协议_第一篇

    车载以太网之DoIP协议_第一篇 1.DoIP含义 1.1 DoIP使用场景 1.2 DoIP在Autosar中的位置 2.以太网协议 2.1 物理层与数据链路层 2.2 网络层与传输层 2.3 Do ...

  5. python小海龟画粗细渐变的线_Python 笔记_第一篇_童子功_8. 画图工具 (小海龟 turtle)...

    Python 笔记_第一篇_童子功_8. 画图工具 (小海龟 turtle) turtle 是一个简单的绘图工具 提供一个小海龟, 可以把它理解为一个机器人, 只能听懂有限的命令, 且绘图窗口的原点 ...

  6. arcgis批量出图python代码_【GIS进阶】ArcGIS批量出图_定义出图

    今天的文章是浩哥投稿!!! 下图是我欢呼雀跃的样子~~~~~ 本文亮点: 所有步骤都是用ArcGIS中各种工具和软件操作组合,未使用Arcpy与Python等需要使用代码的工具! 这次的这个批量出图又 ...

  7. bp神经网络代码_机器学习(周志华)课后习题——第五章——神经网络

    5.1 试述将线性函数 用作神经元激活函数的缺陷. 答: 使用线性函数作为激活函数时,无论是在隐藏层还是在输出层(无论传递几层),其单元值(在使用激活函数之前)都还是输入 的线性组合,这个时候的神经网 ...

  8. bat射击游戏代码_这张图打开就是3D射击游戏,我是服气的

    「本期内容标签」 安卓 iOS 电脑 小程序 网站 游戏 教程 今天这个标题好好解读一下,一张图片,里面隐藏了一个3D射击游戏. 首先图片大小应该不太大,那么一个3D射击游戏怎么能隐藏到图片中去?或者 ...

  9. 神经网络变学习率算法代码_机器学习算法之神经网络

    点击蓝字关注我哦 人工神经网络(Artificial Neural Networks,ANN)系统是 20 世纪 40 年代后出现的.它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理.分布 ...

最新文章

  1. Excel中HYPERLINK链接图片的用法
  2. php文本分割成csv,php将文本文件转换csv输出的方法
  3. 【ZJOI2010】数字计数 数位dp
  4. Redis----windows下配置和运行
  5. MFC windows程序设计(第三版)课后习题第二章
  6. Word2013设置多级标题自动编号
  7. MySQL字段约束及多表查询---讲解三
  8. SimpleBGC三轴云台用户手册
  9. 数据分析(1):对比分析法
  10. python二手交易系统毕业设计开题报告
  11. 用Python爬取网易云热门评论(亲测有效)
  12. MATLAB数据类型——整数
  13. 环洋市场调研-2021年全球颜料红48:3行业调研及趋势分析报告
  14. 各种JDBC连接池配置参数比较
  15. 视频教程-SEM实战教程(二)-网络营销
  16. 全部翻译作品 (及时更新)
  17. SecureCRT for mac的坑
  18. 拼多多的评价是真实的吗?多久会消失?
  19. alter table table_name auto_increment
  20. python调用按键精灵插件_按键精灵自动寻路系列换算地图坐标寻路法

热门文章

  1. opencv 人脸识别_Python学习:基于Opencv来快速实现人脸识别(完整版)
  2. QSettings allKeys读取为空分析
  3. jieba是python中一个重要的标准函数库_python——Jieba库整理(基础知识+实例)
  4. docker连不上宿主机mysql_宿主机连接docker中的mysql
  5. numpy列相加_Python数据分析入门:NumPy基础:数组与向量化计算
  6. Pathlib获取当前文件绝对路径
  7. 运算符重载(c++细节篇二)
  8. 中国移动系统集成公司2020春招技术综合在线编程题第二题
  9. 甘肃关于领取软考2021年上半年合格证书的通知
  10. 【青海】2021年下半年软考报考时间及通知