深度学习编译工具链中的核心——图优化。

news2024/11/17 18:50:14
  • 图优化
  1. 图优化的概念:

深度神经网络模型可以看做由多个算子连接而成的有向无环图,图中每个算子代表一类操作(如乘法、卷积),连接各个算子的边表示数据流动。在部署深度神经网络的过程中,为了适应硬件平台的优化、硬件本身支持的算子等,需要调整优化网络中使用的算子或算子组合,这就是深度学习编译工具链中的核心——图优化。

图优化是指对深度学习模型的计算图进行分析和优化的过程,通过替换子图(算子)为在推理平台上性能更佳的另一个等价子图、或优化数据流动,来提高模型推理的性能。图优化的出现很大程度上是因为算法开发人员不熟悉硬件,在算法层面上可以灵活表达的一种计算方式,在硬件底层和推理方式上可能存在显著的性能差异[1]。

为了更好的理解图优化,我们需要先了解几个图相关的基本概念。

(1)节点(Vertex):图的重要概念,也是图的基本单位,可以代表网络中的一个实体;

(2)边(Edge):图的重要概念,是连接两个节点的线,可以是有向的(箭头指向一个方向)或无向的。边可以表示顶点之间的关系,如距离、相似性等;

(3)权重(Weights):边的属性,表示从一个节点到另一个节点的“成本”(如距离、时间或其他资源消耗);

(4)路径(Path):节点的序列,其中任意相邻的节点都通过图中的边相连。

图 1  图的基本概念

基于这些基本的概念,我们可以将优化问题引入到图中来,比如最短路径问题、最小生成树问题、网络流问题、匹配问题等等;为了解决这些优化问题,我们也提出了一系列优化算法,比如Dijkstra算法、Kruskal算法、Ford-Fulkerson算法等等。

  1. 图优化的分类:

图优化问题通常根据解空间的连续性可分为“组合优化问题”和“连续优化问题”,其中前者的解空间是离散的,后者的解空间是连续的。

图 2  组合优化问题之“旅行商问题”[2]

(1)组合优化问题

组合优化问题涉及到在一个有限的、离散的可能解集合中寻找最优解的问题。这类问题的特点是解空间通常由一组离散的选择构成,解决问题的关键在于如何从这些离散的选择中找到满足约束条件的最优组合。

i.旅行商问题(TSP):旅行商问题要求找到一条经过图中每个顶点恰好一次并返回起点的最短可能路径。这是组合优化中的一个典型问题。

ii.图着色问题:给定一个图,目标是使用最少的颜色给图中的每个顶点着色,使得任何两个相邻的顶点颜色不同。这是一个经典的NP难(NP-hard)问题。

(2)连续优化问题

与组合优化不同,连续优化问题的解空间是连续的。这意味着问题的变量可以在某个连续的范围内取值。连续优化问题在工程、经济学、物理学等多个领域都有广泛应用。

i.最小二乘问题:在统计学和数据分析中,最小二乘问题是一种常见的连续优化问题,目标是找到一组参数,使得模型预测值和实际观测值之间的误差平方和最小。

ii.线性规划问题:虽然线性规划问题的解可能是离散的,但大多数情况下它被视为连续优化问题,因为问题的变量可以在连续范围内取值。线性规划问题的目标是在满足一组线性约束的条件下,最大化或最小化一个线性目标函数。

综上所述,在图优化的背景下,组合优化问题通常涉及到图的结构和图上的离散决策,例如路径选择、网络设计、资源分配等。而连续优化问题可能涉及到图的边权重的连续调整,或者在图表示的某种物理系统中寻找最优的连续状态。

  1. 图优化的策略:

传统意义上,图优化包含的具体策略有:

  1. 算子融合,将多个操作融合为一个复合操作,减少内存访问次数和中间数据的存储需求;
  2. 常量折叠,在编译时期预先确定结果的表达式,减少运行时的计算量;
  3. 内存复用,识别和优化计算图中的内存使用,减少内存分配和释放操作;
  4. 数据布局转换,根据硬件特性调整数据的存储格式,提高内存访问效率;
  5. 算子集并行化,识别可以并行执行的操作,利用硬件处理单元的并行计算能力;
  6. 子图替换/合并,如图3所示,将计算图中的某些算子替换为在转为硬件优化的版本或效率更高的实现方式。

图3  深度神经网络模型中的子图合并示意图

对于采用存算一体架构设计的硬件而言,图优化需要特别考虑减少数据移动。具体到图优化策略中,考虑到存算一体加速乘累加的特点及硬件资源,主要考虑的图优化策略有:

(1)子图替换/合并,由于存算一体架构芯片支持的加速算子类型有限,如果深度学习模型中使用了不受支持的算子,则必须被替换;

(2)数据局部性优化,确保负责计算卷积的存算一体核心所存储的权重在一次计算中不需要重新写入,依靠数据流动到存储不同权重的核心进行计算,同时确立统一的数据存储格式,避免计算过程中为对其存储数据付出额外的时间。

  1. 图优化的应用场景:

图优化的应用场景主要体现在优化神经网络以匹配硬件或适应需求。图优化针对特定硬件优化神经网络,减少模型的硬件需求、使用针对硬件优化的算子,以在终端设备部署神经网络模型;针对CPU、GPU、FPGA等不同平台进行特定优化,保证模型的可移植性。图优化针对特定需求,优化模型吞吐量,提升云端模型服务单位时间可处理的访问次数;降低模型处理的延时,以更快速地处理高分辨率视频、满足音频处理的实时性需求。

  • 工具链的图优化

图优化和其他网络优化方法共同支持深度学习模型的开发、训练、优化、部署和执行过程,是深度学习工具链的重要组成部分。下面我们将从文献研究和企业产品两个方面介绍工具链图优化的发展现状。

1.文献研究相关:

图优化有许多经典算法,以下列举了几个经典算法及其参考文献,这些图优化经典算法为工具链的图优化提供了具体的思路与方案。

(1)Dijkstra算法(最短路径问题):用于寻找图中某一节点到其他所有节点的最短路径,特别适用于带权重的有向图和无向图[3]。

(2)Kruskal算法(最小生成树问题):该算法用于在一个加权连通无向图中寻找最小生成树,即找到一个边的子集,使得这些边构成的树包括图中的所有节点,并且树的总权值尽可能小[4]。

(3)Ford-Fulkerson算法(最大流问题):该算法用于计算网络流中的最大流,通过不断寻找增广路径来增加从源点到汇点的流量,直到无法再增加为止[5]。

(4)Hungarian算法(二分图最大匹配问题):该算法用于解决二分图的最大匹配问题,特别是在工作分配等应用中,寻找最优匹配方式,使总成本最低[6]。

2.企业产品相关:

(1)英伟达(NVIDIA)[7]

i.产品与技术:

英伟达是全球领先的 GPU 龙头厂商,所生产的GPU被广泛应用于图计算,尤其是在需要大量并行处理的场景中。CUDA(Compute Unified Device Architecture)是NVIDIA推出的一个并行计算平台和编程模型,它允许软件开发者和软件工程师使用C语言等高级编程语言来编写程序。

ii.图优化工具链:

NVIDIA提供了CUDA图分析库(cuGraph),这是一个基于GPU加速的图分析算法库,旨在处理大规模图形数据。cuGraph提供了一系列优化的图算法,包括最短路径、PageRank、个性化PageRank、最大流和最小割等,为工具链的图优化提供新的思路。通过利用GPU的并行处理能力,cuGraph能够显著加速图计算任务。

(2)谷歌(Google)

i.产品与技术:

谷歌开发了TPU(Tensor Processing Unit),专门为深度学习应用设计,其高效的矩阵运算能力也可以被应用于图计算场景,尤其是在图神经网络(GNN)等领域。

ii.图优化工具链:

TensorFlow是Google开发的一个开源机器学习框架,它支持广泛的机器学习任务,包括图计算。TensorFlow可以利用TPU进行加速,从而提高图计算的效率。此外,Google也在研究如何优化图算法的执行,如图4所示,为GraphX的架构图,通过GraphX在图顶点信息和边信息存储上进行优化,使得图计算框架性能得到较大提升,接近或到达 GraphLab 等专业图计算平台的性能,可以在其大数据处理工具Apache Spark上进行图处理[8]。

图 4  GraphX架构图[8]

(3)Graphcore[9]

i.产品与技术:

Graphcore公司专注于为机器学习和AI应用开发创新的处理器,称为智能处理单元(IPU)。IPU设计目标是提高图计算的效率,其架构优化了复杂的数据结构处理,特别是图形数据结构,这使得其非常适合执行图神经网络和其他图计算任务。

ii.图优化工具链:

Graphcore提供了Poplar软件开发工具链,这是一个专为IPU设计的软件堆栈。Poplar包含了一系列图计算库和工具,支持开发者高效地在IPU上实现和运行图计算任务,从而充分发挥IPU在图处理上的优势,专门针对AI和图计算任务提供了优化的解决方案,为工具链的图优化提供了新的思路。

图 5  Poplar整体架构示意图[9]

  1. 知存科技[10]

i.产品与技术:

知存科技是全球领先的存内计算芯片企业。公司针对AI应用场景,在全球率先商业化量产基于存内计算技术的神经网络芯片,已有WTM1001、WTM2101、WTM-8等存算一体芯片。

ii.图优化工具链:

如图6所示,WITIN_MAPPER是知存科技自研的用于神经网络映射的编译软件栈,可以将量化后的神经网络模型映射到WTM2101 MPU加速器上,是一种包括RISC-V和MPU的完整解决方案。WITIN_MAPPER工具链可以完成算子和图级别的转换和优化,将预训练权重编排到存算阵列中,并针对网络结构和算子给出存算优化方案,同时将不适合MPU运算的算子调度到CPU上运算,实现整网的调度,让神经网络开发⼈员高效快捷的将训练好的算法运行在WTM2101芯片上,极大缩短模型移植的开发周期并提高算法开发的效率。

图 6  WITIN_MAPPER工具链软件架构图[10]

三.未来展望

当前工具链的图优化研究相对较多,然而存算一体编译工具链的图优化仍处于起步阶段,面临着许多科学与技术问题。此外,由于存算一体架构规模有限,目前存算一体编译工具链的图优化主要是针对硬件的适配,通过层间的调度优化,提高硬件的利用率等。为了解决以上问题,科研工作者仍需进行不断的探索。

同时,随着人工智能技术的持续发展,神经网络的参数数量已经从Alexnet的6000万个增长到OpenAI GPT-3的1750亿个,参数量以指数级别增长,人工智能已进入大模型时代,存算一体编译工具链技术的研究也逐渐增多。在大模型时代,存算一体工具链的图优化将会更多地涉及整网的优化调度,从而极大地加快模型的部署与开发,相信更加成熟全面的存算一体工具链图优化技术指日可待!

参考文献:

[1] Luchang-Li:深度学习性能优化之图优化(blog.csdn.net).

[2] 知乎@玻色量子.

[3] E. W. (1959). A note on two problems in connexion with graphs. Numerische Mathematik, 1(1), 269-271. 

[4]J. B. (1956). On the shortest spanning subtree of a graph and the traveling salesman problem. Proceedings of the American Mathematical Society, 7(1), 48-50. 

[5]L. R., & Fulkerson, D. R. (1956). Maximal flow through a network. Canadian Journal of Mathematics, 8, 399-404. 

[6]H. W. (1955). The Hungarian method for the assignment problem. Naval Research Logistics Quarterly, 2(1-2), 83-97.

[7]机器学习和分析 | NVIDIA 开发者.

[8]Spark GraphX_存储-CSDN博客.

[9]Poplar® 软件 (graphcore.ai).

[10]WITMEM  2023.ALL RIGHTS,知存科技.

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

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

相关文章

3D开发工具HOOPS更新:高效、轻量化模型处理再突破!

随着数字化转型的深入发展,高性能图形显示成为了软件开发领域的重要研究方向。在众多工具和库中,HOOPS因其强大的三维图形处理能力而受到广泛关注。 HOOPS也与时俱进,持续更进与创新,近期又推出了一系列新功能,这些功…

Chrome之解决:插件不能使用问题(十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

MySQL面试汇总(一)

MySQL 如何定位慢查询 如何优化慢查询 索引及其底层实现 索引是一个数据结构,可以帮助MySQL高效获取数据。 聚簇索引和非聚簇索引 覆盖索引 索引创建原则 联合索引

《安富莱嵌入式周报》第335期:大量嵌入式书籍免费下载,CNC电机同步,智能家居比赛作品,EMF2024电子胸牌,Swift语言单片机编程,UDS Boot

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV151421Q7P4/ 《安富莱嵌入式周报》第335期:大量嵌入…

蓝桥杯真题讲解:网络稳定性(Kruskal重构树+LCA)

蓝桥杯真题讲解&#xff1a;网络稳定性&#xff08;Kruskal重构树LCA&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;网络稳定性&#xff08;Kruskal重构树LCA&#xff09; 二、正解代码 //kruskal重构树 lca #include<bits/stdc.h>…

boot整合xfire

最近换了项目组&#xff0c;框架使用的boot整合的xfire&#xff0c;之前没使用过xfire&#xff0c;所以写个例子记录下&#xff0c;看 前辈的帖子 整理下 pom文件 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

力扣面试150 删除有序数组中的重复项 双指针

Problem: 26. 删除有序数组中的重复项 思路 &#x1f469;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int removeDuplicates(int[] nums) {int j 0, n nums.length;for(int i 0;…

后端前行Vue之路(二):模版语法之插值与指令

1.概述 Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展&#xff0c;允许开发者将Vue实例中的数据绑定到HTML元素&#xff0c;以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑…

从MVC 到DDD 架构

目录 一、前言 二、MVC架构 三、DDD架构 四、我为什么会使用DDD&#xff1f; 五、DDD架构分层 一、前言 最近在做一个项目&#xff0c;使用的是DDD架构思&#xff0c;觉得很不错&#xff0c;在此记录下。 二、MVC架构 MVC是一种经典的软件架构模式&#xff0c;主要用于…

GEE:将分类特征和标签提取到样本点,并以(csv/shp格式)下载到本地

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上,下载用于机器学习分类或者回归的样本点数据,样本点数据携带了分类特征和标签信息,可以以csv格式或者SHP格式。 结果如下图所示, 文章目录 一、核心函数1.1 采样1.2 下载函数二、代码链接三、完整代码…

Go-js,css,html压缩和混淆(可直接使用)

前提条件: 本地安装nodejs环境然后配置全局环境变量。 运行以下命令安装uglify压缩工具 npm install uglify-js -g 测试是否安装成功 uglifyjs -v 使用方式: 根据不同的操作系统取对应的压缩工具,然后将压缩工具放到项目根目录下,然后执行即可 工具文件: https://gitee.com…

GPT提示词分享 —— 口播脚本

可用于撰写视频、直播、播客、分镜头和其他口语内容的脚本。 提示词&#x1f447; 请以人的口吻&#xff0c;采用缩略语、成语、过渡短语、感叹词、悬垂修饰语和口语化语言&#xff0c;避免重复短语和不自然的句子结构&#xff0c;撰写一篇关于 [主题] 的文章。 GPT3.5&#…

【论文速读】| 对大语言模型解决攻击性安全挑战的实证评估

本次分享论文为&#xff1a;An Empirical Evaluation of LLMs for Solving Offensive Security Challenges 基本信息 原文作者&#xff1a;Minghao Shao, Boyuan Chen, Sofija Jancheska, Brendan Dolan-Gavitt, Siddharth Garg, Ramesh Karri, Muhammad Shafique 作者单位&a…

喜讯!聚铭网络荣获《日志分类方法及系统》发明专利

近日&#xff0c;聚铭网络又喜获一项殊荣&#xff0c;其申报的《日志分类方法及系统》发明专利成功获得国家知识产权局的授权&#xff0c;正式荣获国家发明专利证书。 在信息化时代&#xff0c;网络安全问题日益凸显&#xff0c;日志分析作为保障网络安全的重要手段&#xff…

【机器学习之旅】概念启程、步骤前行、分类掌握与实践落地

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【旅游景点项目日记 | 第一篇】项目服务架构、数据库表设计

Gitee仓库地址&#xff1a;travel-server&#xff1a;景点旅游项目服务端 文章目录 1.项目服务架构2.数据库设计2.1用户服务—travel_ums2.1.1 ums_user—用户表 2.2景点服务—travel_ams2.2.1 ams_attraction—景点表1.2.2 ams_resource_type—资源类型表 2.3票务服务—trabel…

人工智能的决策树介绍

决策树模型 决策树基于“树”结构进行决策 每个“内部结点”对应于某个属性上的“测试”每个分支节点对应于该测试的一种可能结果&#xff08;即属性的某个取值&#xff09;每个“叶结点”对应于一个“预测结果” 学习过程&#xff1a;通过对训练样本的分析来确定“划分属性”…

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

vector类(一)

文章目录 vector介绍和使用1.vector的介绍2.vector的使用2.1 vector的定义2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector增删查改2.5 vector迭代器失效问题 3.vector 在OJ中的使用 vector介绍和使用 1.vector的介绍 vector是表示 可变大小数组的 序列容器。 就…