Reading Note(8) ——GNN for DSE

news2024/11/16 9:17:03

这篇博客是一篇论文阅读札记,这篇论文的主题是使用GNN来优化加速器设计中的设计空间探索耗时过长的问题

这篇文章的标题是《Enabling Automated FPGA Accelerator Optimization Using Graph Neural Networks》,值得注意的是这是它的预印版,2021年发布在arxiv上。正文后经过修改删减之后发布在DAC‘22上(6页),标题也改为了《Automated accelerator optimization aided by graph neural networks》,这篇文章的目的在于使用图神经网络来拟合HLS综合工具的结果,以期快速地对设计做出准确评估,加快DSE的过程。

0 Abstract

这部分作为全文的摘要, 和上一篇AutoDSE一样,提出了当前开发FPGA加速器的主要难点在于FPGA的开发门槛太高。另一方面虽然HLS的诞生在一定程度上缓解了这个问题,但是它在很多层次上涉及到HLS参数的选择,这个解决空间是非常大的,这个选择非常依赖于设计者的经验。另一方面,从HLS工具获得结果反馈耗时也非常大,一般在几分钟到数小时。

这篇工作针对这种情况开发了DSE-GNN框架,主要方法是通过GNN来拟合HLS模型来使得它可以应用于非常广泛的应用场景,从而使得设计者在毫秒级就可以得到高精度的设计点质量汇报,这可以帮助无论是手工设计者还是已有DSE框架在更更短的时间内找到帕累托最优解。

1 Introduction

这部分开头和摘要部分差不多,主要讲明了现有使用HLS来设计FPGA的困难之处,也就是HLS涉及到的重要选择点太多,这些不同的选择点组成了一个超大规模的设计空间。如何高效地去执行设计空间的搜索从而找出最优解是一个非常耗时的任务。所以一个全自动化的设计空间探索(DSE)框架是非常有现实意义的,但是

随后,这部分总结出了HLS-based DSE框架面临的几个挑战:

1.现有的商用HLS框架综合时间往往很长,这使得评估一个设计点的时间非常长,如若不然就必须得减小设计待搜索空间的尺寸,否则就会导致探索时间过长而难以承受。

2.超大规模设计空间设计空间的规模随着候选参数的数量指数上升,为了高效地进行设计空间探索,每个配置点(configuration)的搜索时间必须尽可能短

3.设计参数对性能的影响是非单调的并且相关的,文中举出的一个例子是性能随着UNROLL因子的变化不会呈现完全的单调效果

不仅如此,这部分提到虽然FPGA加速器的应用范围遍及各个领域,但其实不同的应用之间会有一些共享的代码结构,使用一种学习算法学会这种通用的结构就可以实现不同领域之间知识的相互迁移

这篇工作为了解决上述的问题,采纳了包含迁移学习的图神经网络(GNN with support for transfer learning)。这项工作首先建立了可以快速估计HLS加速器设计的模型,估算的时间大约在毫秒级,在这个过程中完全不用调用HLS工具来估算设计的表现。因为HLS在优化设计时使用了许多启发式方法(个人觉得这里所提到的启发式方法是HLS设计经验中的一些RTL专家经验),并且设计参数之间彼此会相互影响,所以在这里采用了深度学习模型来学习它们之间的相互作用关系

本项工作将程序表示为一个图,这张图使用控制数据调用设计参数(pragma)的形式来表示程序语义,并且使用GNN来提取预测设计质量所需要的图特征。除此之外,本项工作还提出了一些其他技术来提升模型预测的精度,包含:

1.跳跃知识网络(Jumping Knowledge Network, JKN)
2.节点注意力(Node Attention)
3.多头目标预测(Multi-head Objective Prediction)

在完成上述模型的构建之后,在其上运行DSE工具,结果表明在此模型的帮助下,DSE不仅可以快速地找到训练集中的设计最优点,也可以找到数据库之外的内核设计最优点。并且此模型的实现与工具无关,既可以用于Xilinx的FPGA,也可以迁移至Intel的FPGA。

这篇工作做出了如下贡献:
1.提出了一种基于图的程序表达方法,它既可以表示程序上下文,还可以包含设计参数流
2.基于图神经网络设计了一个预测模型作为HLS评估工具的代替物,它可以在毫秒级得出一个设计点的质量,并且还开发了一些额外技术来帮助提升它的精度
3.建立了一个自动化框架GNN-DSE,来建立一个关于FPGA设计的数据库,并用其中的数据来训练一个学习模型来预测一个设计的质量,最后在其上运行一个DSE来得到设计的最优点。
4.实验结果表明GNN-DSE框架不仅可以找到数据库内的FPGA设计最优点,还可以找到它未曾见过的其他设计的最优设计配置。

2 Background

这部分简单对以下几部分做了简单的介绍:
1.如何将程序表示成图:这里使用的是将程序经由LLVM编译之后生成的中间表示IR转化为图(CDFG图,Control and Data Flow Graph),图中的节点表示的是LLVM指令,图中的边表示的是指令之间的操作数

2.对图神经网络及其几种变式(GCN/GAT)的基本工作原理做了简单的介绍和概括

3.对Merlin编译器做了简单的介绍,对Merlin编译器支持的设计参数进行了归纳,这一点和AutoDSE中完全一样。

3 Problem Formulation

这部分对问题进行了形式化的定义,首先要构建一个预测模型,它可以尽可能精确地拟合HLS综合工具给出的结果,首先给出一个候选设计点(design candidate)的定义:
在这里插入图片描述
这个候选的定义和AutoDSE中的定义非常接近,有k个候选可以改变,它们的选择共同构成了一个候选(candidate)。标准HLS工具估测出的标准设计耗时和资源使用情况定义如下
在这里插入图片描述
我们要构建的模型预测结果要足够接近HLS工具给出的真实值,这个目标的形式化表示如下:
在这里插入图片描述

在上述预测模型的基础之上,我们就可以快速地进行HLS的自动设计空间探索,在这个过程中要充分考虑FPGA的可用资源并且同时保证设计的性能最高,这个目标的形式化描述如下:
在这里插入图片描述

4 Related Work

这部分介绍了和本工作相关的之前其他工作,分析了它们的不足之处和它们与本文工作的对比,为后文提出本文架构做出了铺垫

5 Our Proposed Methodology

这部分开始介绍GNN-DSE框架,首先给出GNN-DSE框架的整体框图:
在这里插入图片描述
从上图中可以看出GNN-DSE框架有三种运行模式训练模式推理模式设计空间探索模式

在训练模式下,GNN-DSE会从数据库中获取真实设计样例并且使用真实的HLS评估数据来训练预测模型。模型会将每个数据库中的设计抽象成一张图,并将其交给图神经网络来提取图嵌入,最后通过一个多层感知机(MLP)来对各种指标进行预测,在这个过程中不断通过正确的结果对图神经网络进行更新,使得它可以更好地调整图嵌入(Graph Embedding)。

一旦训练阶段完成,GNN-DSE就可以进入推理阶段,GNN-DSE会将输入的C/C++程序传递给图生成器(Graph Generator),并输入当前配置(configuration),图神经网络会抽取当前设计的图嵌入并传递给MLP,最终得到当前配置的指标预测值

在DSE阶段的运行策略和推理阶段一致,也是针对相应的输入给出指标的预测值,但是在完成DSE之后会挑选出Top M个设计点,使用真实的HLS工具再次实际运行这些配置点,并将其纳入数据库。这相当于是在推理时进一步丰富了数据库的知识范围,可以更好的对模型进行训练。

5.1 Database Generation

这部分讲述了GNN-DSE是如何生成初始训练数据库的,这部分生成数据库的工作借助了AutoDSE,它首先采用与AutoDSE完全一致的设计空间定义方法,也采纳了所有AutoDSE中的设计空间剪枝方法(这里的具体细节可以参考AutoDSE的Reading Note) 。

但这里存在一个问题,AutoDSE是一个追求“最优解”的自动设计空间探索工具,它会瞄着最好的设计点去探索。但是神经网络不能只学习好的设计点,它也要可以鉴别坏的设计点。为此,GNN-DSE的探索器在原有AutoDSE的探索器上做了扩展,它支持如下几种探索方式:

1.AutoDSE中的已有探索器,这个探索器专门用来找好的解

2.混合探索器,当AutoDSE的探索器的最优解效果每提升X%,探索器自动评估新设计点附近的P个邻居,X、P都是可以由用户指定的超参数,邻居的定义是配置点中仅有一个参数不同
引入混合探索器的意义在于这样可以更加清晰地让神经网络学习到改变不同的参数会对设计造成何种影响
3.随机探索器,专门用来检测前两种探索器接触不到的配置点,增强模型的泛化性

以上三种探索器所搜索到的程序会交给图生成器来生成这个程序对应的图,配置则会和程序一起提交给Merlin编译器来生成最终的评估结果。<图、评估结果>组成的二元组会被纳入数据库,训练数据库会逐渐积累来自不同应用的设计实例,并使用它们来训练模型。

5.2 Program Representation

首先这部分提到CDFG图在程序表示上的不足:它会忽略掉操作数的精度和值。所以GNN-DSE取而代之使用PrograML来表示程序,如何将程序表示为一张图可以参考和学习一下PrograML这份工作。PrograML是构建在CDFG之上的,它为操作数分配独立的节点以补足缺失的信息

PrograML接收LLVM IR作为输入,为程序生成一张包含数据、控制和调用信息的一张有向图
但是为了对设计空间中的参数进行表示,GNN-DSE将PrograML生成的图做了扩展,使得其可以有效表示设计参数。

在这里插入图片描述
比如说对于上述这段简单的代码,扩展后的PrograML图会生成如下的一张图:
在这里插入图片描述
图中蓝色节点表示LLVM的指令(控制流),红色节点表示变量和常量数据(数据流),设计参数则以紫色节点的形式标出,连接在表示循环的特殊节点icmp上

对于多层循环嵌套的情况,则必须要辨别出不同的设计参数被施加在哪一层循环上。这个信息首先可以从图中提取出来,因为图中包含了程序的控制流。另一方面也可以从节点所附加的信息中提取出来,因为节点中包含了LLVM的块ID号

在扩展的PrograML图中节点和边包含的属性如下
在这里插入图片描述
其中type、flow、position字段编号和其所代表的含义展示如下:
在这里插入图片描述
这一部分的最后对GNN-DSE中的图生成器做了简单的介绍,下面是它的简图:
图生成器的输入是C/C++代码,在读入设计代码之后会生成一张扩展的PrograML图,但是其中的候选参数全部由占位符占据着。随后根据5.1节所述的那样,按照不同的探索器探索到的参数按照顺序一一填入占位符中得到完整的图

所以,在同一个kernel的不同配置情况下,只有填入的参数顺序是不一样的
在这里插入图片描述

5.3 Predictive Model

这部分主要描述预测器的结构,首先给出GNN-DSE中使用的神经网络架构概览:
在这里插入图片描述
预测器首先接收上述使用扩展的PrograML表示的程序图作为输入,然后对其节点和边的属性进行编码。在对节点和边进行编码时,首先对数据库中所有属性和所有参数的可用选项都进行统计,并对它们的每一项(指所有属性和所有参数)都构造一个独热码(one-hot encoding),这样有助于模型对其中比较重要的影响因素分配更大的权重

5.3.1 GNN Encoder

首先来看GNN的编码器部分,这部分由三个部分组成:
1.用于提取节点嵌入(node embeddings)的一系列堆叠的TransformerConv层
2.用于将不同层的邻居节点嵌入信息综合起来的跳跃知识网络(Jumping Knowledge Network)
3.用于将节点级嵌入结合起来的注意力机制,用来生成最终图级别嵌入

5.3.1.1 TransformerConv

传统的GCN和GAT都都忽略了边的嵌入信息(edge embedding),这里使用:
《 Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification》
论文中引入的TransformerConv算子对图的信息进行捕捉,这个算子目前已经被pytorch标准化,可以直接调用之。

简而言之TransformerConv算和GAT的想法非常接近,都有注意力因子,但是TransformerConv的注意力因子计算公式如下:
在这里插入图片描述
其中 W 1 , W 2 , W 3 W_1,W_2,W_3 W1,W2,W3都是可以学习的参数,注意这里面的 e i j e_{ij} eij引入了边嵌入,这使得TransformerConv可以兼顾到边信息,这对于处理PrograML生成的图是很有好处的,因为边也有很多属性(attributes)需要处理。另外,Transformer还有防止过度平滑(over-smoothing)的好处。

5.3.1.2 Jumping Knowledge Network

因为GNN的影响力是逐层传播的,所以一个节点在第一层只能学到1-近邻的信息,第二层才可以学到2-近邻的信息,以此类推。为了灵活的为每个节点选择不同的领域范围,在这里引入了跳跃知识网络(JKN),具体而言它接收前面所有层的嵌入并执行一个最大池化操作,让每个节点自己决定截止到哪个阶段的近邻对其影响最大,从中挑选一个最大值,而忽略此层以后的其他嵌入
在这里插入图片描述
在这里插入图片描述

5.3.1.3 Node attention-based graph-level embedding generation

这里主要介绍了如何使用节点注意力机制为图生成最后的向量表示
一般而言对于一张图可以使用将所有节点的embedding相加的形式创建图的embedding,但是由于扩展的PrograML中有多种不同类型的节点,这种方式会默认将它们等同处理,这样显示是不科学的。

取而代之,这里引入了节点注意力机制来让模型自行学习不同的节点重要性
在这里插入图片描述
通过引入节点注意力机制,模型可以成功地捕捉不同节点的重要性
在这里插入图片描述
比如在上述的benchmark中,节点注意力机制捕捉到了相对重要的节点是参数节点(节点面积越大表示得到的注意力越多),这说明节点注意力机制起到了很好的作用

5.3.2 MLP Prediction Layers

到了这一部分就是如何将上述步骤中生成的图嵌入(graph embedding)送入多层感知机MLP来对最后的参数点进行评估了。这个部分分为两个步骤:

1.首先区分一个方案是否可行,这是一个分类任务

GNN-DSE列举出了几种可能的无效设计点产生情况
1.如果HLS在4小时之内无法综合完成,则此参数组合认为是无效的。
2.因为引用了高并行因子,HLS拒绝完成综合
3.设计参数的组合是非法的,这种情况下Merlin编译器会给出报告,GNN-DSE认为此种组合通通无效

2.根据已有的图嵌入信息进行目标值预测,这是一个回归问题

注意在进行回归时,针对预测的每一个目标值都创建一个MLP,而前面的GNN Encoder部分可以共用(这是因为不同预测目标之间存在相关性),当然也可以创建独立的GNN Encoder

5.4 Design Space Exploration

这部分开始讲述GNN-DSE的设计空间探索模块,对于每个需要评估的设计配置,首先运行分类模型判断它们是否有效。如果有效就开始运行回归模型对目标值进行预测,如果有任何一项资源的利用情况超过0.8(阈值),GNN-DSE就会因为资源过度利用而拒绝此配置点,这是基于经验而得出的阈值。

在剩下的设计中,会选择出Top 10个设计交给HLS进行真实评估,这部分数据会被纳入数据库以方便模型运行的更好。

但是这部分同时也指出,虽然GNN-DSE可以在毫秒级对目标结果进行预测,但是因为庞大的设计空间,往往还是难以穷极。所以在执行DSE时首先设置了时间限制,另一方面还采用了启发式方法首先评估最有可能的备选方案。这里提到,HLS更加擅长处理细粒度的循环优化,所以这里会将最内层循环的参数评估放在最前面,并且pipeline原语优先级高于parallel原语。如果两个循环之间存在依赖关系,那么会首先评估占主导地位的参数,比如嵌套循环中外层循环是pipeline内层循环是parallel的情况。

总而言之,GNN-DSE的DSE部分采纳了一些经验方法来优化探索的速度

6 Evaluation

从略

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

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

相关文章

Java-内部类

内部类的概念 认识内部类 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称之为内部类inner class&#xff0c;嵌套该内部类的类称为外部类。就像双重for循环&#xff0c;外部for循环里面包含着另一个内层循环。内部类是类的第5大成员&#xff0c;[属性&#xff0c;方法…

让我们进入面向对象的世界(一)

让我们进入面向对象的世界 文章目录让我们进入面向对象的世界开场白一.面向对象概述二.认识对象和类2.1什么是类2.2 什么是对象呢&#xff1f;2.3 让我们来创建第一个对象2.3 让我们进一步了解&#xff0c;我们针对对象的操作&#xff0c;是怎样的开场白 大家好&#xff01;&a…

SpringMVC请求、响应与异步请求

文章目录SpringMVC核心架构的具体流程步骤一、SpringMVC请求与响应1、SpringMVC Handle原理与应用1.1 概念1.2 Spring MVC Handler的三种写法2、SpringMVC 视图解析器2.1 概念2.2 配置视图解析器二、SpringMVC异步请求1、 Ajax基本配置2、 异步与同步优缺点&#xff1a;如何设置…

基于TMI8421的3D打印机步进电机解决方案

打印机一直是工作中不可缺少的一部分&#xff0c;当下&#xff0c;随着3D打印技术的推广&#xff0c;3D打印机逐渐进入我们的生活与工作当中。每个人都期望可以在办公室环境下安静快速的打印&#xff0c;更高效地完成每项打印工作&#xff1b;更生动逼真的重现理想的3D模型。而…

实战:如何优雅地扩展Log4j配置?

前言 Log4j 日志框架我们经常会使用到&#xff0c;最近&#xff0c;我就遇到了一个与日志配置相关的问题。简单来说&#xff0c;就是在原来日志配置的基础上&#xff0c;指定类的日志打印到指定的日志文件中。 这样讲述可能不是那么好理解&#xff0c;且听我从需求来源讲起。…

【10】leetcode note

题目&#xff1a; 799. 香槟塔 个人总结 799. 香槟 我们把玻璃杯摆成金字塔的形状&#xff0c;其中 第一层 有 1 个玻璃杯&#xff0c; 第二层 有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&…

基于铁犀牛ironrhino平台的税务档案管理系统

目录 摘要 2 引言 5 1.1 选题背景 6 1.2 国内外研究现状 7 1.3课题研究的重要性 8 2. 系统的需求与分析 8 2.1 系统的功能介绍 9 2.1.1 业务信息描述 9 2.1.2 系统功能说明 10 2.1.3 系统的开发目标 11 2.2 系统分析 12 2.2.1 铁犀牛的功能 12 2.2.2 铁犀牛工作原理 13 2.2.3 铁…

翻阅必备----Java窗口组件,容器,布局,监听,事件 API大全

---------------------------------------------------------------------------------------- &#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 java ⭐Jav…

将存在课题的过程可视化,丰田的“自工程完结”是什么?

将存在课题的过程可视化&#xff0c;丰田的“自工程完结”是什么? “全日本的公司是不是都发生了奇怪的事情呢?人们常说日本人很勤劳。所以要拼命努力。但是&#xff0c;有很多人拼命努力却毫无成果。(中略)这样才不会有动力。明明很努力却没有成果&#xff0c;我认为这才是奇…

将SpringBOOT项目 打成 war 包 并 部署到 Tomcat

当前环境&#xff1a;Windows Tomcat版本&#xff1a;tomcat8.5 SpringBoot版本&#xff1a; 2.2.3 1. pom.xml 修改打包方式 <packaging>war</packaging> 2.加入SpringBoot打包插件&#xff08;pom.xml&#xff09; <build><plugins><plugin&g…

Jmeter的使用说明

一、安装Jmeter工具 链接&#xff1a;https://pan.baidu.com/s/1ZYc15eq9DO-r0ChKHxMXlg?pwdckcd 提取码&#xff1a;ckcd --来自百度网盘超级会员V5的分享二、Jmeter的常用元器件说明 jmeter八大元件件&#xff1a;取样器&#xff0c;前置处理器&#xff0c;后置处理器&a…

计算机网络——第六章笔记(1)

传输层 传输层是层是整个协议栈(TCP/IP)的核心。 任务&#xff1a;是提供可靠的、高效的数据传输。 面向连接的服务 1、端到端的连接管理 建立连接 数据传输 释放连接 2、流控制 3、差错控制 传输环境&#xff1a;通信子网、物理信道。 传输服务和网络服务的两个主…

网络了解编程五层协议

一:了解 1.了解一下网络: 局域网(LAN),一个上课的机房,多个连在同一个路由器上的设备,就是在一个局域网中---打游戏 (局域网内的主机之间能方便的进行网络通信&#xff0c;又称为内网&#xff1b;局域网和局域网之间在没有连接的情况下&#xff0c;是无法通信的) 广域网(WAN) ,…

无线 LAN 服务概述

无线 LAN 服务是 Windows Server 2008 R2 和 Windows Server 2008 中的一项功能&#xff0c;可用于启用无线 WLAN 自动配置服务&#xff0c;以及配置 WLAN 自动配置以自动启动。一旦启用后&#xff0c;WLAN 自动配置会动态选择计算机将自动连接的无线网络&#xff0c;并配置无线…

项目管理的四大模型,PM必懂的事半功倍模型!

瀑布模型、迭代模型、增量模型、原型模型&#xff0c;是项目管理常见的四种模型。每种模型都有其优缺点和适用的项目类型。项目经理针对不同的项目用对模型&#xff0c;才能起到事半功倍的作用。 今天就讲讲这四种模型及其优缺点&#xff1a; 如果你需要项目管理相关资料可拉…

代码质量与安全 | “吃狗粮”能够影响到代码质量?来了解一下!

“dogfooding”是什么&#xff1f;乍一看&#xff0c;这就是“吃狗粮”的意思&#xff0c;但其实这来源于一句俚语&#xff1a;“Eat your own dog food”&#xff0c;直译过来就是“吃自己的狗粮”&#xff0c;常用于描述公司使用自己产品的这一种情况。 “吃自己的狗粮”实践…

(更新中)【后端入门到入土!】Java+Servlet+JDBC+SSM+SpringBoot+SpringCloud 基础入门

目录 第一部分&#xff1a;Java 基础语法&#xff08;已完结&#xff09; 第二部分&#xff1a;Java 高级&#xff08;已完结&#xff09; 第三部分&#xff1a;Servlet&#xff08;待更新……&#xff09; 第四部分&#xff1a;JDBC&#xff08;待更新……&#xff09; 第…

如何搭建一套指标体系?

一、引言 (1)为什么指标体系这么重要? (2)什么是指标体系? (3)指标体系的衡量标准是什么? (4)如何去搭建一套好好的指标体系? 只要弄清楚了这4个问题,指标体系的搭建工作就迅速地开展、快速地落地,精准地产生业务价值。以上是对于数据同学而言的工作。此外,对于…

漏洞练习环境搭建笔记

Docker 安装&#xff08;ubuntu&#xff09; 1.常归删除操作 sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc 2. 删除docker其他没有没有卸载 dpkg -l | grep docker dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P # 删除无…

雷神MixBook Air笔记本系统故障怎么重装?

雷神MixBook Air笔记本系统故障怎么重装&#xff1f;有用户使用的雷神MixBook Air笔记本系统出现了故障&#xff0c;导致无法正常的使用电脑了。这个情况我们可以使用U盘来重装一个系统&#xff0c;恢复正常的使用。那么具体要怎么去进行操作&#xff0c;看看具体的方法吧。 准…