CN114510339A - 一种计算任务调度方法、装置、电子设备及可读存储介质 - Google Patents
一种计算任务调度方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN114510339A CN114510339A CN202210413206.1A CN202210413206A CN114510339A CN 114510339 A CN114510339 A CN 114510339A CN 202210413206 A CN202210413206 A CN 202210413206A CN 114510339 A CN114510339 A CN 114510339A
- Authority
- CN
- China
- Prior art keywords
- task
- network
- target
- network layer
- description data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 238000013473 artificial intelligence Methods 0.000 claims abstract description 49
- 238000013528 artificial neural network Methods 0.000 claims abstract description 39
- 230000001133 acceleration Effects 0.000 claims abstract description 30
- 230000006870 function Effects 0.000 claims description 36
- 230000008569 process Effects 0.000 claims description 33
- 238000004364 calculation method Methods 0.000 claims description 22
- 238000005457 optimization Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 claims description 6
- 238000001514 detection method Methods 0.000 claims description 6
- 238000002360 preparation method Methods 0.000 claims description 5
- 238000013527 convolutional neural network Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 27
- 230000004913 activation Effects 0.000 description 18
- 238000011176 pooling Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000013135 deep learning Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000005236 sound signal Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013144 data compression Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000004927 fusion Effects 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 206010003591 Ataxia Diseases 0.000 description 1
- 206010010947 Coordination abnormal Diseases 0.000 description 1
- 238000001994 activation Methods 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 208000016290 incoordination Diseases 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种计算任务调度方法、装置、电子设备及计算机可读存储介质,应用于神经网络领域;该方法包括:获取网络描述数据;基于网络描述数据,确定各个网络层任务之间的依赖关系;检测人工智能加速计算部件上的空闲寄存器组;基于依赖关系、网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将目标寄存器配置写入到空闲寄存器组;若检测到目标网络层任务完成通知,则基于依赖关系确定目标网络层任务完成通知对应的目标网络层任务的下一任务,并将下一任务在人工智能加速计算部件上对应的第一功能模块启动,以便执行下一任务;该方法能够提高人工智能加速计算部件的计算效率。
Description
技术领域
本申请涉及神经网络技术领域,特别涉及一种计算任务调度方法、计算任务调度装置、电子设备及计算机可读存储介质。
背景技术
人工智能加速引擎(AI Engine)是专门为深度学习算法设计的加速计算部件,深度学习算法常用的卷积神经网络结构(Convolutional Neural Networks,CNN)通常包含多个卷积组合层,每个卷积组合层又包括卷积、激活、池化等小层。卷积组合层用于提取图像中的不同的特征,一个CNN通常包含数十甚至上百个卷积组合层。当AI engine的硬件结构定型后,其理论算力是固定不变的。但在实际应用中,由于配置时间、数据传输时间、模块间的不协调导致的延时等开销,导致AI engine的计算效率较低。
因此,相关技术存在的AI engine的计算效率较低的问题,是本领域技术人员需要解决的技术问题。
发明内容
有鉴于此,本申请的目的在于提供一种计算任务调度方法、计算任务调度装置、电子设备及计算机可读存储介质,提高计算效率。
为解决上述技术问题,本申请提供了一种计算任务调度方法,应用于任务调度器,所述方法包括:
获取网络描述数据;所述网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;
基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系;
检测人工智能加速计算部件上的空闲寄存器组;所述人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;
基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将所述目标寄存器配置写入到所述空闲寄存器组;
若检测到目标网络层任务完成通知,则基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,并将所述下一任务在所述人工智能加速计算部件上对应的第一功能模块启动,以便执行所述下一任务。
可选地,所述网络描述数据的生成过程,包括:
确定所述人工智能加速计算部件的硬件架构;
基于所述硬件架构,生成对应的硬件架构描述数据;
获取所述目标神经网络,并基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据。
可选地,所述基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据,包括:
对所述目标神经网络进行模型解析,得到中间图;
基于所述硬件架构描述数据,对所述中间图进行图优化处理,得到优化图;
对所述优化图进行编译处理,得到所述网络描述数据。
可选地,所述基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据,包括:
确定所述目标神经网络中的各个网络层,以及所述网络层之间的所述依赖关系;
获取各个网络层分别对应的预设网络层描述数据;
利用所述预设网络层描述数据,基于所述依赖关系,生成所述网络描述数据。
可选地,所述基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系,包括:
从所述网络描述数据中确定各个所述网络层任务分别对应的网络描述子数据;
从各个所述网络描述子数据中解析得到对应的下一网络层指针;
基于各个所述下一网络层指针,得到所述依赖关系。
可选地,所述检测人工智能加速计算部件上的空闲寄存器组,包括:
若处于初始化阶段,则将所述人工智能加速计算部件上的所有寄存器组确定为所述空闲寄存器组;
若不处于所述初始化阶段,且检测到目标网络层任务完成通知,则确定所述目标网络层任务对应的第二功能模块;
基于所述第二功能模块的类型,更新所述网络描述数据中与所述类型对应的空闲寄存器组标识;
根据更新后的所述空闲寄存器组标识,确定所述第二功能模块对应的所述空闲寄存器组;其中,所述空闲寄存器组为所述第二功能模块对应的两组乒乓寄存器组中的一个。
可选地,所述基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,包括:
基于所述依赖关系,确定与所述空闲寄存器组类型匹配的候选网络层任务;
在所述网络描述数据中确定与所述候选网络层任务对应的候选描述子数据;
利用所述候选描述子数据和所述人工智能加速计算部件对应的硬件架构描述数据,生成所述目标寄存器配置。
可选地,所述基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,包括:
解析所述目标网络层任务完成通知,得到所述目标网络层任务对应的任务标识;
基于所述依赖关系,利用所述任务标识确定所述目标网络层任务对应的后续任务;
将各个所述后续任务对应的执行等待计数减一;
将所述执行等待减一后为零的目标后续任务确定为所述下一任务。
可选地,还包括:
基于所述依赖关系,确定所述人工智能加速计算部件上各个目标功能模块对应的使能顺序;
基于所述使能顺序的倒序,对各个所述目标功能模块进行使能处理,以使被使能处理后的目标功能模块基于对应的非空闲寄存器组进行数据计算准备操作。
本申请还提供了一种计算任务调度装置,应用于任务调度器,所述装置包括:
网络描述获取模块,用于获取网络描述数据;所述网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;
依赖确定模块,用于基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系;
空闲检测模块,用于检测人工智能加速计算部件上的空闲寄存器组;所述人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;
寄存器配置模块,用于基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将所述目标寄存器配置写入到所述空闲寄存器组;
启动模块,用于若检测到目标网络层任务完成通知,则基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,并将所述下一任务在所述人工智能加速计算部件上对应的第一功能模块启动,以便执行所述下一任务。
本申请还提供了一种电子设备,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现上述的计算任务调度方法。
本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的计算任务调度方法。
本申请提供的计算任务调度方法,应用于任务调度器,方法包括:获取网络描述数据;网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;基于网络描述数据,确定各个网络层任务之间的依赖关系;检测人工智能加速计算部件上的空闲寄存器组;人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;基于依赖关系、网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将目标寄存器配置写入到空闲寄存器组;若检测到目标网络层任务完成通知,则基于依赖关系确定目标网络层任务完成通知对应的目标网络层任务的下一任务,并将下一任务在人工智能加速计算部件上对应的第一功能模块启动,以便执行下一任务。
可见,该方法中,利用CNN是由多个相同或相似的卷积层,且卷积层内部的各种计算可以pipeline(即流水线处理)的特点,结合AI engine的硬件配置,高效调度计算任务,提高计算效率。在获取网络描述数据后,若确定存在空闲寄存器组,则基于依赖关系和空闲寄存器组类型,利用网络描述数据生成与空闲寄存器组相匹配的目标寄存器配置,并将其写入到空闲寄存器组。此外,当检测到目标网络层任务完成通知,则根据依赖关系确定流水线处理的下一任务,由于在检测到空闲寄存器组后会立即对其进行配置,且每个功能模块对应于至少两个寄存器组,且寄存器的配置时长比功能模块利用寄存器进行数据处理的时长短,所以在任意时刻,每个功能模块都对应于至少一个非空闲寄存器组。因此,当检测到目标网络层任务完成且下一任务被确定后,可以立即启动下一任务对应的第一功能模块,使得能够无缝衔接的进行流水处理,提高计算效率;同时,由于各个功能模块的寄存器均被配置好,因此多个功能模块可以并行计算处理,充分利用硬件资源,提高计算效率;此外,寄存器的配置和功能模块的运行可以并行执行,在某一功能模块运行过程中,可以对空闲寄存器组进行配置,或者由其他寄存器组进行数据读写操作,充分利用总线带宽,避免突发性的大量数据传输需求导致的延迟,提高计算效率。
此外,本申请还提供了一种计算任务调度装置、电子设备及计算机可读存储介质,同样具有上述有益效果。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种AI engine的硬件架构示意图;
图2为本申请实施例提供的一种计算任务调度方法流程图;
图3为本申请实施例提供的一种AI加速设备的硬件架构描述数据结构图;
图4为本申请实施例提供的一种AI engine的数据结构图;
图5为本申请实施例提供的一种引擎任务数据的数据结构图;
图6为本申请实施例提供的一种引擎配置数据的数据结构图;
图7为本申请实施例提供的一种网络描述数据生成过程流程图;
图8为本申请实施例提供的一种网络描述数据的数据结构图;
图9为本申请实施例提供的一种功能模块描述数据的数据结构图;
图10为本申请实施例提供的一种依赖描述数据的数据结构图;
图11为本申请实施例提供的一种功能模块描述数据的数据结构图;
图12A为本申请实施例提供的一种寄存器描述数据的数据结构图的第一部分;
图12B为本申请实施例提供的一种寄存器描述数据的数据结构图的第二部分;
图13A为本申请实施例提供的一种输入输出方式描述数据的数据结构图;
图13B为本申请实施例提供的一种卷积数据描述数据的具体数据结构图;
图13C为本申请实施例提供的一种激活数据描述数据的具体数据结构图;
图14为本申请实施例提供的一种卷积神经网络推理过程示意图;
图15为本申请实施例提供的一种具体的任务调度流程图;
图16为本申请实施例提供的一种具体的中断处理流程图;
图17为本申请实施例提供的一种计算任务调度装置的结构示意图;
图18为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
人工智能加速引擎(或称为人工智能加速部件,AI Engine)是专门为深度学习算法设计的加速计算部件,深度学习算法常用的卷积神经网络结构通常包含多个卷积组合层,每个卷积组合层又包括卷积、激活、池化等小层。卷积组合层用于提取图像中的不同的特征,一个CNN通常包含数十甚至上百个卷积组合层。
综上所述,在一种实施方式中,一个任务型AI加速引擎的大致结构请参考图1所示,包含:接口总线AXI(Advanced eXtensible Interface)和APB(Advanced PeripheralBus,外围总线),读写外部存储介质的DMA(Direct Memory Access,存储器直接访问控制器)模块,本地缓存buffer模块,并行数据加载的Data Loader模块,状态监测(即StatusCollector)及中断控制器(即Interrupt Controller),负责计算的MAC单元(或称为乘加计算模块,功能模块的一种)、Activation单元(或称为激活处理模块,功能模块的一种)、Pooling单元(或称为池化处理模块,功能模块的一种)。此外还可以包含数据reshape模块,归一化模块等。
在应用过程中,Registers(即寄存器,或寄存器组)接收各个模块的配置信息,Controller根据这些配置控制各个模块的运转。Controller可以有多种存在方式,图1是集中式的controller,此外,还可以为分散式的controller,即各个controller分别位于各个模块内部,这些模块都挂载在APB上或用菊花链的方式连接。
Status Collector监控各个模块的信息,如buffer空闲空间大小、各模块运行状态、读写数据的数目、阻塞时长或空闲时长等信息,并为Interrupt Controller提供各模块的中断pending,如DMA读取数据完成中断pending、MAC Unit计算完成中断pending、Activation激活完成中断pending、Pooling完成中断pending等。Interrupt Controller内设置中断pending寄存器,pending寄存器的各个bit位映射表示各个功能模块的pending信号。此外,还设置了中断mask寄存器和中断使能寄存器,当中断使能且中断没有被mask时,pending位置1时,产生中断信号Intr。具体是AI engine的哪一个模块完成了任务产生了中断,可以通过查询pending寄存器确定。由此可见,调用AI加速引擎加速计算的过程是不断配置寄存器并等待中断的过程。
一个CNN网络有数十或上百个组合层,若单个组合层的计算量超过了AI加速引擎的计算能力,需要将单个组合层拆分为多个子组合层。每个组合层可能包含load数据、乘加运算、激活、pooling、归一化、融合等多种操作,需要调用多个模块共同完成一个组合层的运算任务。由此可见,完成一次CNN的推理任务,各个模块需要完成成百上千个任务,且各个模块之间需要相互配合。
为了能够保证AI engine以较高的计算效率工作,需要尽可能地使各个功能模块并行计算,各个计算任务呈流水线的形式(即pipeline)处理,此外,还需要尽可能的减少功能模块未进行计算的时长,平衡地利用带宽资源等。为了实现该效果,本申请设计了一种任务调度器,该任务调度器可以用于对AI engine上的任务进行调度,使得AI engine能够高效计算。本实施例并不限定任务调度器的具体形式,在一种实施方式中,任务调度器的角色可以由AI device(人工智能加速计算设备)中的处理器担任,AI device中可以具有任意数量的AI engine,每个AI engine可以对应于一个处理器,或多个AI engine对应于一个处理器。
任务调度器为了能够起到灵活调度计算任务的功能,其可以具备如下特点:
1、通用性和可扩展行:不同的厂家、不同的应用场景以及适用的最优CNN网络的不同,且AI engine的功能模块以及组合方式也会有所不同,但是均具备相同的基本架构。因此,任务调度器可以考虑到通用性和可扩展性,以便适用不同的AI engine。
2、AI engine 内部各模块的组合与pipeline:CNN每层中各模块的组合方式以及pipeline顺序是不同的。各模块实现的功能不同,内部需要配置的寄存器也就不同,不同的功能模块的配置方式也是不同的。因此,任务调度器应当能够根据任意一种CNN网络结构自动切换需要配置的模块,还需要实现不同的配置方式,与模块同步切换。
3、AI engine内部各模块的使能时机:为了提高AI engine的计算效率,某一功能模块的配置通常在CNN的前一层或其他功能模块运行的过程中配置,轮到该模块执行的时候再使能。即模块的配置逻辑与模块的使能逻辑是不相关的。如CNN某2层都为卷积+激活+Pooling组合,当前层在执行运算时,配置下一层运算所需要的配置,这种机制使得运算和配置同时进行,节省了配置时间。当前层运算结束后直接开始下一层的运算,使得模块运行连续不断,提高模块运算效率。为了实现该效果,本申请中各个功能模块对应于至少两组配置寄存器,即两个寄存器组。在一种实施方式中,可以有两个寄存器组,二者组成乒乓配置模式。在同一层内,各模块的使能也有先后,如上述举例,需要先使能pooling模块,再使能激活模块,最后使能卷积模块;即后执行的先使能,使得后续的模块提前做好接收前面模块的运算结果的准备,否则会出现数据丢失的后果。由此可见,模块的配置与模块的使能是两套不相关的逻辑,这种机制有效的实现了模块间的pipeline,任务调度器应当能够支撑这种调度。
4、数据描述:程序的本质是逻辑和数据,因此,任务调度器应当能够用数据描述任务调度流程涉及的各个流程节点,如对输入/输出数据、CNN结构、AI engine的各个功能模块、AI engine的任务、每一步的操作、AI engine的模块间的联系、模块的使能逻辑进行描述等。
综上所述,任务调度器在工作时的流程可以概括为:配置寄存器-->模块运行-->运行完成,产生中断。具体的,AI engine根据任务调度器的控制,利用各功能模块工作的过程为:读取任务数据-->初始化所有的可用模块-->更新模块使能序列-->使能序列为0的模块-->等待中断-->配置该模块的另外一组寄存器或下一个使用的模块的寄存器-->收到中断后更新模块的使能序列-->使能使能序列为0的模块-->等待中断-->……。在该过程中,具体的步骤将在后续描述。
请参考图2,图2为本申请实施例提供的一种计算任务调度方法流程图。该方法包括:
S101:获取网络描述数据。
其中,网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务,网络层任务是指对网络层进行推理计算的任务。根据上述描述可知,网络描述数据受到神经网络的网络结构,以及AI engine的硬件结构的影响。网络描述数据可以从其他电子设备处获取,或者可以由具有任务调度器的电子设备生成。
在一种具体的实施方式中,在生成网络描述数据时,首先确定人工智能加速计算部件的硬件架构,并基于硬件架构,生成对应的硬件架构描述数据。本实施例并不限定硬件架构描述数据的具体生成方式,在一种实施方式中,可以预设有生成规则,在得到硬件架构后,基于生成规则生成硬件架构描述数据。在另一种实施方式中,可以预存有各种硬件架构对应的预设硬件架构描述数据,在确定硬件架构后,从中确定对应的硬件架构描述数据。在另一种实施方式中,在可到硬件架构后,可以将其输出,以便由人工输入硬件架构描述数据。请参考图3,图3示出了一种AI Device的硬件架构描述数据,其中包括初始化所需的device_config配置数据,device设备上配置的AI加速引擎描述的指针AI_engine_ptr,设备处理的任务描述Device_task数据。设备任务Device_task通常是一系列子任务的组合,每个子任务都会有输入数据、输出数据和其他参数数据,这些数据都在主机(即master)下发任务时写入了slave(即AI Device)能够访问的存储空间memory中,slave处理这些任务时需要获取这些任务数据的地址。这些地址组合成address_list。address_list中的数据地址数目即address_num。 AI_device_ptr是指该任务所属于的device,用于分辨任务的执行者(即slave)。设备配置Device_config是用于初始化设备device的数据,包括设备在系统总线上的基地址base_address、设备在系统中的中断号Device_irq、设备平台指针、设备上包含的AI engine的数目等信息。
除了对Device的描述外,还可以利用数据结构的形式对device中的AI Eegine进行描述。请参考图4,图4为本申请实施例提供的一种AI engine的数描述据结构图。其中,AIengine的描述数据包含引擎的任务task、引擎的配置config、引擎所要推理的CNN网络描述network_desc(即网络描述数据)、引擎的内部功能模块processor的描述、引擎状态、引擎设备指针等内容。状态描述和设备指针分别描述了AI engine的状态,并指示了AI engine所属的device。
具体的,AI engine的任务数据描述为Engine_task,请参考图5,Engine_task包括:
设备任务指针device_task_ptr:该指针指向设备任务device_task,指明了该任务的来源,同时也用于索引设备任务device_task相关信息,如任务涉及的数据所在的地址列表、地址数目等。
任务状态task_status:用于标记任务执行的状态。
任务基地址task_base:用于索引task时的地址偏移。
任务操作描述列表的指针operation_desc_ptr:在CNN推理时,通常包含数十上百的卷积层,需要AI engine内部的卷积等processor重复处理这些卷积层,因此每个processor(即功能模块)都有数十上百个不同的任务操作描述数据。这些数据是通过master下发到AI engine的存储空间中,因此,需要为AI engine指明这些任务操作描述数据的地址。
任务输入/输出数据描指针surface_desc_ptr:任务的输入/输出数据即CNN每个卷积层的输入/输出数据的描述,描述了数据的维度大小、是否紧密排列、是否压缩、有没有地址跳转等信息。
任务依赖关系描述数据地址dependency_graph_addr:dependency_graph是任务操作之间的依赖关系,只有processor当前的任务操作所有依赖都解决了,才能使能该任务操作。这种配置使得AI engine可以自动完成任务之间的切换,提高AI engine对不同CNN网络的适用性。
查找表数据地址lut_data_addr:查找表用于实现非线性计算,如sigmoid非线性激活。查找表数据需要由master写入到AI engine的存储空间中。
感兴趣区域(roi)阵列地址:在图像处理领域,感兴趣区域(ROI,region ofinterest)是从图像中选择的一个图像区域,这个区域是图像分析所关注的重点。圈定该区域以便进行进一步处理。同样ROI数据需要master下发到AI engine的存储空间中。
输入/输出数据地址surface_addr:输入/输出数据是指推理时的image(即图像)输入或中间卷积层的中间结果数据。
请参考图6,引擎配置数据主要包括:
元数据大小atom_size:AI engine的总线位宽,通常可以设置为如256bit或512bit,具有较大的数据吞吐能力,能够并行处理32个或64个int8类型的数据。
内部模块使能:不同的CNN推理使用的功能模块不同,并不是所有的AI engine的功能模块能够用到,所以设置了模块processor使能。
数据压缩支持compress_support:若支持数据压缩,则AI engine需要实现数据解压功能。
在得到硬件架构描述数据后,获取目标神经网络,目标神经网络即为需要被推理计算的神经网络,并基于目标神经网络和硬件架构描述数据,生成网络描述数据。本实施例并不限定网络描述数据的具体生成过程,在一种实施方式中,可以预设有对各个网络层对应的预设网络层描述数据,在获取目标神经网络后,确定目标神经网络中的各个网络层,以及网络层之间的依赖关系,并获取各个网络层分别对应的预设网络层描述数据,利用预设网络层描述数据,基于依赖关系进行合成的处理,即可得到网络描述数据。在另一种实施方式中,请参考图7,可以对目标神经网络进行模型解析,得到中间图。如图7所示,目标神经网络具体可以为caffe model、pytorch model、params等模型。目标神经网络模型及其对应的配置参数经过Parser(一种语法解析器)进行模型解析,将深度学习框架模型转换为编译器定义的中间图表示。基于硬件架构描述数据,对中间图进行图优化处理,得到优化图,具体的,Optimizer(一种优化程序)对中间图进行图优化,优化的方式具体可以为,共同子表达式消除(common subexpression elimination,CSE)、算子融合、存储优化等。对优化图进行编译处理,得到网络描述数据。优化后的中间图(即优化图)经过Compiler的编译,生成可部署在硬件上的map文件(即网络描述数据)。map文件后续通过运行时Runtime部署在Device上,Device的Driver或Firmware(即任务调度器)根据map文件调用AI Engine的资源完成此次AI推理计算,还可以将结果反馈给Runtime。
请参考图8,其示出了一种具体的神经网络描述数据Network_desc的数据结构图。其中包括processor操作描述数据operation_desc、输入/输出数据描述surface_desc、任务间的依赖关系描述dependency_desc、查找表数据lut_data、感兴趣的区域数据roi_array、状态数据stat_list、每个processor的operation_desc的起始编号等。由于CNN数据是由master写入到AI engine的存储空间中,AI engine需要在推理计算时基于CNN描述Network_desc从存储空间中提取数据,并参与运算。AI engine提取数据的过程可以拆分为两步:一是根据Network_desc描述的index从Device_task的address_list中获取数据在存储空间中的地址,并将地址写入到Engine task中,以便后续的数据读取;二是根据engine_task中的地址从存储空间中读取数据,参与推理运算。
除此以外,AI engine的描述数据中还可以包括功能模块processor描述数据,请参考图9,processor描述可以分为三部分:processor的属性、processor的输入数据和processor的行为函数(即API)。processor的属性数据包括processor的名称、processor的类型(卷积、激活、池化等)、processor的结果数据接收者或消费者或下一级processor等。在本实施方式中,每个功能模块,即processor对应于两个寄存器组,二者互为乒乓寄存器组。因此,本实施方式中可以利用上一次使用的寄存器组的id计算本次操作需要使用的寄存器组的id,由于只有两组寄存器组,因此id等于0或1。输入的组合数据(即输入数据)包括dependency描述tail_op、processor_group、状态描述stat_data_desc。三者囊括了processor运算所需要的的所有数据,包括:denpendency(用于更新pipline状态,自动使能processor)、operation(processor的操作数据)、surface_desc(输入/输出数据维度等信息描述)、surface(输入数据)等。
图10示出了一种dependency描述数据,其中包括本次processor操作的index(即索引表)、操作类型op_type、依赖计数dependency_count,以及本次processor的输入数据的生产者和输出数据的消费者。processor操作的dependency描述是AI engine内部各种processor pipeline的关键,每个processor操作都有dependency描述,每个denpendency描述都记录了本次操作的前一级与后一级,这样AI engine内部所有的processor就组成了一个链表。dependency_count(即执行等待计数)则决定了该processor是否使能。每个processor 在执行了program()或enable()之后都会更新dependency,更新操作具体为dependency(即dependency_count)减1操作。当该processor的denpendency_count为0时,使能该processor。其中,processor的program()是对AI engine内部相应的模块配置寄存器的操作,而enable()是使能该processor,进行推理运算的操作。
请参考图11,其示出了一种具体的processor group描述数据的数据结构。processor的数据都是通过processor group传入的,AI engine内部的每个功能模块processor都设置了2组寄存器,以乒乓轮换的机制,无间隙控制processor连续运行,因此一个寄存器组的配置操作是在另外一组寄存器控制该processor运行时完成的,该方法缩短了AI engine执行任务的时间,提高了AI engine的运算效率。由于寄存器组控制processor运行,因此可以用processor group描述需要配置的寄存器组的具体信息和processor相关信息。需要说明的是,该信息需要在配置寄存器时生成,具体生成方式不做限定。具体的,图11中的id描述了寄存器组号,由于只有两组寄存器,所以id为0或1。active记录了当前processor是否被enable。event记录了当前processor发生中断后,中断寄存器置位的bit的编号,即processor运算完成后会将32位的中断寄存器中的event位置1。roi_index是当存在ROI时,指明当前roi所在的位置。is_rdma_needed是指当前processor操作是否需要从外部读取其他参数参与运算。pending是指当前processor是否有中断没有处理。lut_index是当processor是激活操作时,查找表的地址在address_list中的位置。本级denpendency用于描述当前processor的依赖,记录了依赖的相关信息。上一级dependency和下一级dependency,即parent和consumers的dependency。当前processor在program()或enable()之后,都需要更新parent和consumers的dependency_count。这里需要注意,并不是上一级先执行,下一级后执行。如卷积->激活->池化,需要先使能‘池化’,然后使能‘激活’,最后使能‘卷积’,而三者基本是同时执行运算,因为三者是pipeline的,‘池化’需要‘激活’的结果作为输入,同样,‘激活’需要‘卷积’的结果作为输入。所以从整个task处理过程来看,三者是同时执行运算的。
operation_container与surface_container是processor的寄存器数据和输入/输出数据信息。具体请参考图12A、图12B、图13A、图13B和图13C,图12A为本申请实施例提供的一种寄存器描述数据的数据结构图的第一部分,图12B为本申请实施例提供的一种寄存器描述数据的数据结构图的第二部分,两个部分共同组成完整的寄存器描述数据的数据结构图。图13A为本申请实施例提供的一种输入输出方式描述数据的数据结构图,图13B为本申请实施例提供的一种卷积数据描述数据的具体数据结构图,图13C为本申请实施例提供的一种激活数据描述数据的具体数据结构图。
operation container包含了该processor group需要配置的所有寄存器的信息,operation_container包含n个processor的操作描述,n为AI engine内部功能模块processor的个数,本例中AI engine只有卷积、激活、池化。每个processor的操作描述的内容是有该processor的硬件设计决定的,如卷积processor设置了卷积模式、数据复用、数据类型、batch大小、数据buffer大小、卷积数据和kernel的大小、步长、是否padding、输入输出精度等。processor的program()操作就是把这些寄存器数据配置给AI engine的相应的功能模块。surface_container则描述了processor的输入/输出数据,AI engine内部有多少个processor,surface_container就需要包含多少个surface_desc。本实施例中,只有卷积、激活、池化三个processor。以卷积为例,conv_surface_desc包含了对输入数据、输出数据、权重数据和当存在数据压缩时的压缩数据的描述,描述从数据类型、数据地址、数据地址偏移、数据大小、数据维度、数据占用的空间等方面说明了数据信息,用于processor读取数据或写出数据。
综上所述,AI engine的描述数据包括了AI device-> AI engine -> processor-> processor group的硬件信息描述,device task-> engine task的任务描述, CNN 描述,操作描述,数据描述。这些描述中包含了processor pipeline的信息,任务自动调度的信息和任务之间的依赖信息。整个描述是对硬件、CNN、任务、操作、数据的抽象,将复杂的任务调度逻辑和硬件配置逻辑抽象为数据的更新迭代。因此,整个CNN推理过程转换为AIengine的内部processor不断被调度、配置、使能执行的过程,dependency_desc描述了processor调用使能逻辑,operation_desc描述了processor的寄存器组配置信息,surface_desc描述了各个processor输入/输出数据的信息。这些信息都是Master根据硬件配置和已经训练完成的CNN通过编译器生成的。Master将这些数据写入AI engine的数据存储空间,然后将各种数据的地址组合成address_list,并把address_list的地址和address_list中的地址数目存放在device task中,Network_desc则描述了这些数据地址在address_list中的索引编号。Network_desc本身的地址则存放在address_list中0位置处。请参考图14,其示出了lenet模型转换为AI engine的processor计算流程的过程。INDEX即为processor的index,通过14次的4个processor的轮流执行,即可完成对lenet卷积神经网络的推理。
由此可见,任务调度器在获取到devcie task后需要先从address_list的0位置处获取Network_desc(即网络描述数据),然后根据Network_desc中的索引编号从Address_list中获取相关数据的存储地址,并存放在engine_task中。AI Engine上的processor在执行推理时,从engine_task中读取地址,赋值给surface_desc中的数据address。processor根据数据的address、offset、size、数据类型,进而从存储空间中读取相关数据。
S102:基于网络描述数据,确定各个网络层任务之间的依赖关系。
对于任务调度器来说,其在进行任务调度时,需要按照网络层任务的依赖关系进行调度,依赖关系说明了各个网络层任务之间的先后顺序。本实施例并不限定确定依赖关系的具体方式,例如在一种实施方式中,从网络描述数据中确定各个网络层任务分别对应的网络描述子数据,并从各个网络描述子数据中解析得到对应的下一网络层指针(即上述的processor描述数据中的processor下一次操作的指针consumer_ptr)。基于各个下一网络层指针,得到依赖关系。
S103:检测人工智能加速计算部件上的空闲寄存器组。
如先前的描述,人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组,例如在一种优选实施方式中,每个processor对应于两个乒乓寄存器组。本申请中的空闲寄存器组是指无数据的寄存器组和存储有已经执行完毕的网络层任务对应的寄存器组数据的寄存器组。对于空闲寄存器组的检测可以实时执行、按照预设周期执行,或者在检测到中断(即有网络层任务完成完毕)时执行,以便在利用其他非空闲寄存器组进行推理时进行寄存器组数据的加载,提高效率。
具体的,在一种实施方式中,若处于初始化阶段,则可以确定所有的寄存器组中都没有有效的数据,因此,可以将人工智能加速计算部件上的所有寄存器组确定为空闲寄存器组,进而对所有寄存器组进行配置。在初始化配置完毕后,还可以启动人工智能加速计算部件,以便开始进行模型推理。若不处于初始化阶段,且检测到目标网络层任务完成通知,则说明目标网络层任务执行完毕,其对应的寄存器组中的寄存器数据无效了,在这种情况下,首先确定目标网络层任务对应的第二功能模块。基于第二功能模块的类型,更新网络描述数据中与类型对应的空闲寄存器组标识(即id),并根据更新后的空闲寄存器组标识,确定第二功能模块对应的空闲寄存器组。可以理解的是,空闲寄存器组为第二功能模块对应的两组乒乓寄存器组中的一个。
需要说明的是,在配置完毕后,需要首先使能各个功能模块,在使能完毕后,对于满足条件的功能模块(即S105中的第一功能模块)进行启动,在使能到启动的过程中,可以完成数据加载等操作,提高并行程度,进而提高计算效率。在一种实施方式中,可以基于依赖关系,确定人工智能加速计算部件上各个目标功能模块对应的使能顺序,目标功能模块可以为任意功能模块,使能顺序为与依赖关系相同方向的顺序。基于使能顺序的倒序,对各个目标功能模块进行使能处理,以使被使能处理后的目标功能模块基于对应的非空闲寄存器组进行数据计算准备操作。通过先使能后执行的功能模块,使得后启动的功能模块预先做好准确,在启动时可以直接进行数据处理,无需执行数据计算准确操作。数据计算准备操作可以为数据加载、变形等操作,具体不做限定。
S104:基于依赖关系、网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将目标寄存器配置写入到空闲寄存器组。
在检测到空闲寄存器组后,需要对其进行配置。本实施来并不限定具体的配置方式,在一种实施方式中,网络层任务的执行具有先后顺序,且每个功能模块仅能够执行其对应类型的网络层任务。在这种情况下,生成目标寄存器配置时,可以基于依赖关系,确定与空闲寄存器组类型匹配的候选网络层任务,空闲寄存器组类型即为对应的功能模块的类型,例如卷积、激活、池化等。根据该类型,可以确定类型匹配的候选任务,例如卷积层对应的任务,或池化层对应的任务。在网络描述数据中确定与候选网络层任务对应的候选描述子数据,即与该网络层任务相关的数据,进而利用候选描述子数据和人工智能加速计算部件对应的硬件架构描述数据,生成目标寄存器配置,具体可以为基于operation_container、suface_container等数据生成对应的寄存器配置数据。
S105:若检测到目标网络层任务完成通知,则基于依赖关系确定目标网络层任务完成通知对应的目标网络层任务的下一任务,并将下一任务在人工智能加速计算部件上对应的第一功能模块启动,以便执行下一任务。
若检测到目标网络层任务完成通知(即中断),则说明目标网络层任务执行完毕,目标网络层任务可以为任意一个网络层任务。根据依赖关系,可以确定该任务对应的下一各网络层任务,即下一任务,由于目标网络层的推理为串行进行,前一个网络层任务的输出为下一各网络层任务的输入。对于一个目标神经网络来说,其对应的一个输入数据依次经过各个网络层任务的处理,即可得到一个输出。在一种实施方式中,为了提高效率,对于多个输入数据来说,每个输入数据可以分别对应于目标神经网络的不同网络层任务,在这种情况下,可以在一个时刻利用不同的功能模块对不同的输入数据进行处理,实现并行处理的效果,进而提高计算效率。但是对于一个输入数据来说,其参与的各个网络层任务均在不同的时刻执行,因此,对于一个输入数据来说,只要目标网络层不是最后一个网络层,则必然存在其对应的下一任务。
由于本申请中所有的寄存器组中的寄存器配置均为有效的数据(因为一旦检测到空闲寄存器就会对其进行配置),因此下一任务对应的寄存器配置已经被写入,在这种情况下,可以直接执行该下一任务。具体的,根据下一任务的类型,可以确定其在人工智能加速计算部件上对应的第一功能模块,启动第一功能模块,第一功能模块即可根据寄存器配置执行该下一任务。本实施例并不限定确定下一任务的具体方式,在一种实施方式中,可以利用上述的dependency_count确定下一任务。具体的,可以解析目标网络层任务完成通知,得到目标网络层任务对应的任务标识(例如event编号),并基于依赖关系,利用任务标识确定目标网络层任务对应的后续任务。后续任务,是指需要在目标网络层任务之后执行的任务,具体数量不做限定。将各个后续任务对应的执行等待计数(dependency_count)减一,并将执行等待减一后为零的目标后续任务确定为下一任务,执行等待减一后为零即表明目标后续任务需要被立即执行。
请参考图15,图15为本申请实施例提供的一种具体的任务调度流程图。其中说明了处理刷的过程,包括AI engine task初始化和processor groups的初始化与寄存器组配置。具体的,AI engine task初始化包括:Master将任务数据下发至slave端的存储空间,并通过中断通知slave端处理器开始解析任务,并启动AI engine任务调度器,以便进行任务调度。调度器读取下发的device_task数据,获取address_list地址以及address_list中的地址数目。
processor groups的初始化与寄存器组配置包括:从address_list中的0位置处读取Network_desc的地址,并读取Network_desc数据。根据Network_desc描述的地址index,读取operation_des、surface_desc、dependency_desc、lut_list等地址,并用这些地址初始化engine_task数据结构。此外,调度器还可以从Network_desc中读取op_head,此op_head指示了每个processor的第一个denpendency_desc的index,并根据index和dependency_desc的数据大小,计算出当前processor的dependency_desc的偏移地址offset,然后根据engine_task中的dependency_graph_addr,得到读取dependency_desc的地址,然后读取数据。根据读出的dependency_desc获取当前processor的op_type,该op_type是processor的编号,若有n个processor,则 0<= op_type <= n-1。调度器根据dependency_desc和processor获取processor group空闲的寄存器组的id和是否读取rdma的id,并根据dependency_desc中的index以及operation_desc数据类型大小、surface_desc数据类型大小,计算地址偏移offset;再根据engine_task中的operation_desc_addr和surface_desc_addr,计算出者两种数据的具体地址,并读取。调度器用以上读取的数据初始化当前processor group,并开始配置当前processor对应的AI engine的功能模块。调度器更新当前processor的代表末尾dependency_desc 的tail_op为当前的依赖数据,用于寻找当前processor的consumers的index。将当前processor的dependency_count减1,并判断是否为0;若为0,则使能该processor对应的AI engine的功能模块,开始进行运算。调度器将当前processor group的id取反,按照以上步骤配置另外一组寄存器组,并按照以上步骤配置其他n-1个processor。
由此可见,运行完以上步骤,所有的processor的所有的寄存器组都已经配置完成,并使能了第一个应该运行的processor。配置过程中,可能会有中断产生,此时会进入中断服务程序,产生相应的中断event编号。但不会立即进入中断event处理程序。必须先完成所有的procesor的2个寄存器组的配置后,在处理中断event。这种机制通用性更强,普遍使用所有的架构不同的AI engine。
请参考图16,图16为本申请实施例提供的一种具体的中断处理流程图。中断服务程序是中断产生后立刻执行的程序,程序中会读取AI engine的中断状态寄存器,判断processor的类型,并产生相应的events编号。然后将中断状态寄存器清零。当前events会存储在processor group的event中,并将event_flag置1。具体的,events处理程序位于while(1)循环中,一直等到task执行完成后才跳出while循环。events处理程序位于process groups初始化与寄存器配置程序之后。当events处理程序发现event_flag为1时,首先清零event_flag,然后轮询所有的processor的两组processor group,判断哪个processor group产生了中断,并随之做相应处理。若是DMA读取image数据或weight数据中断,就会直接更新当前processor group的所有consumers的dependency。若是其他processor中断,首先会轮换group id,并更新所有comsumers的dependency。然后,调度器开始配置当前对group id对应的processor goup寄存器组。需要注意的是,此时按照以上逻辑,当前group的寄存器组的配置数据已经读取并processor group准备完成,这也是用processor运算过程遮掩processor配置过程的机制,以便processor可以无间隙转换两次任务的执行。调度器更新所有consumers的denpency,若有dependency_count为0的processor,则使能。调度器切换processor group,并运行processor groups的初始化与寄存器组配置过程中响应的初始化步骤,直到最后一个中断产生,运行的操作次数等于Netwok_desc中的操作次数,说明task完成。slave端产生中断通知Master读取最终结果。
综上,process group的consumer和parent把整个推理过程转换成了processorgroup的pipeline(流水线处理),并在配置寄存器组后或中断产生后更新所有consumer和parent的processor group的dependency,并在dependency_count为0时,使能processor。
应用本申请实施例提供的计算任务调度方法,利用CNN是由多个相同或相似的卷积层,且卷积层内部的各种计算可以pipeline(即流水线处理)的特点,结合AI engine的硬件配置,高效调度计算任务,提高计算效率。在获取网络描述数据后,若确定存在空闲寄存器组,则基于依赖关系和空闲寄存器组类型,利用网络描述数据生成与空闲寄存器组相匹配的目标寄存器配置,并将其写入到空闲寄存器组。此外,当检测到目标网络层任务完成通知,则根据依赖关系确定流水线处理的下一任务,由于在检测到空闲寄存器组后会立即对其进行配置,且每个功能模块对应于至少两个寄存器组,且寄存器的配置时长比功能模块利用寄存器进行数据处理的时长短,所以在任意时刻,每个功能模块都对应于至少一个非空闲寄存器组。因此,当检测到目标网络层任务完成且下一任务被确定后,可以立即启动下一任务对应的第一功能模块,使得能够无缝衔接的进行流水处理,提高计算效率;同时,由于各个功能模块的寄存器均被配置好,因此多个功能模块可以并行计算处理,充分利用硬件资源,提高计算效率;此外,寄存器的配置和功能模块的运行可以并行执行,在某一功能模块运行过程中,可以对空闲寄存器组进行配置,或者由其他寄存器组进行数据读写操作,充分利用总线带宽,避免突发性的大量数据传输需求导致的延迟,提高计算效率。
下面对本申请实施例提供的计算任务调度装置进行介绍,下文描述的计算任务调度装置与上文描述的计算任务调度方法可相互对应参照。
请参考图17,图17为本申请实施例提供的一种计算任务调度装置的结构示意图,应用于任务调度器,包括:
网络描述获取模块110,用于获取网络描述数据;网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;
依赖确定模块120,用于基于网络描述数据,确定各个网络层任务之间的依赖关系;
空闲检测模块130,用于检测人工智能加速计算部件上的空闲寄存器组;人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;
寄存器配置模块140,用于基于依赖关系、网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将目标寄存器配置写入到空闲寄存器组;
启动模块150,用于若检测到目标网络层任务完成通知,则基于依赖关系确定目标网络层任务完成通知对应的目标网络层任务的下一任务,并将下一任务在人工智能加速计算部件上对应的第一功能模块启动,以便执行下一任务。
可选地,包括:
硬件架构确定模块,用于确定人工智能加速计算部件的硬件架构;
硬件描述生成模块,用于基于硬件架构,生成对应的硬件架构描述数据;
网络描述生成模块,用于获取目标神经网络,并基于目标神经网络和硬件架构描述数据,生成网络描述数据。
可选地,网络描述生成模块,包括:
模型解析单元,用于对目标神经网络进行模型解析,得到中间图;
优化单元,用于基于硬件架构描述数据,对中间图进行图优化处理,得到优化图;
编译单元,用于对优化图进行编译处理,得到网络描述数据。
可选地,网络描述生成模块,包括:
依赖确定单元,用于确定目标神经网络中的各个网络层,以及网络层之间的依赖关系;
获取单元,用于获取各个网络层分别对应的预设网络层描述数据;
生成单元,用于利用预设网络层描述数据,基于依赖关系,生成网络描述数据。
可选地,依赖确定模块120,包括:
子数据确定单元,用于从网络描述数据中确定各个网络层任务分别对应的网络描述子数据;
指针获取单元,用于从各个网络描述子数据中解析得到对应的下一网络层指针;
关系生成单元,用于基于各个下一网络层指针,得到依赖关系。
可选地,空闲检测模块130,包括:
初始检测单元,用于若处于初始化阶段,则将人工智能加速计算部件上的所有寄存器组确定为空闲寄存器组;
模块确定单元,用于若不处于初始化阶段,且检测到目标网络层任务完成通知,则确定目标网络层任务对应的第二功能模块;
标识获取单元,用于基于第二功能模块的类型,更新网络描述数据中与类型对应的空闲寄存器组标识;
空闲确定单元,用于根据更新后的空闲寄存器组标识,确定第二功能模块对应的空闲寄存器组;其中,空闲寄存器组为第二功能模块对应的两组乒乓寄存器组中的一个。
可选地,寄存器配置模块140,包括:
候选确定单元,用于基于依赖关系,确定与空闲寄存器组类型匹配的候选网络层任务;
子数据获取单元,用于在网络描述数据中确定与候选网络层任务对应的候选描述子数据;
配置生成单元,用于利用候选描述子数据和人工智能加速计算部件对应的硬件架构描述数据,生成目标寄存器配置。
可选地,启动模块150,包括:
标识确定单元,用于解析目标网络层任务完成通知,得到目标网络层任务对应的任务标识;
后续任务确定单元,用于基于依赖关系,利用任务标识确定目标网络层任务对应的后续任务;
更新单元,用于将各个后续任务对应的执行等待计数减一;
下一任务确定单元,用于将执行等待减一后为零的目标后续任务确定为下一任务。
可选地,还包括:
使能顺序确定模块,用于基于依赖关系,确定人工智能加速计算部件上各个目标功能模块对应的使能顺序;
使能模块,用于基于使能顺序的倒序,对各个目标功能模块进行使能处理,以使被使能处理后的目标功能模块基于对应的非空闲寄存器组进行数据计算准备操作。
下面对本申请实施例提供的电子设备进行介绍,下文描述的电子设备与上文描述的计算任务调度方法可相互对应参照。
请参考图18,图18为本申请实施例提供的一种电子设备的结构示意图。其中电子设备100可以包括处理器101和存储器102,还可以进一步包括多媒体组件103、信息输入/信息输出(I/O)接口104以及通信组件105中的一种或多种。
其中,处理器101用于控制电子设备100的整体操作,以完成上述的计算任务调度方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在电子设备100的操作,这些数据例如可以包括用于在该电子设备100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,SRAM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、只读存储器(Read-OnlyMemory,ROM)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。
多媒体组件103可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或通过通信组件105发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口104为处理器101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件105用于电子设备100与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件105可以包括:Wi-Fi部件,蓝牙部件,NFC部件。
电子设备100可以被一个或多个应用专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、数字信号处理器(Digital Signal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field ProgrammableGate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例给出的计算任务调度方法。
下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的计算任务调度方法可相互对应参照。
本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的计算任务调度方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (12)
1.一种计算任务调度方法,其特征在于,应用于任务调度器,所述方法包括:
获取网络描述数据;所述网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;
基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系;
检测人工智能加速计算部件上的空闲寄存器组;所述人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;
基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将所述目标寄存器配置写入到所述空闲寄存器组;
若检测到目标网络层任务完成通知,则基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,并将所述下一任务在所述人工智能加速计算部件上对应的第一功能模块启动,以便执行所述下一任务。
2.根据权利要求1所述的计算任务调度方法,其特征在于,所述网络描述数据的生成过程,包括:
确定所述人工智能加速计算部件的硬件架构;
基于所述硬件架构,生成对应的硬件架构描述数据;
获取所述目标神经网络,并基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据。
3.根据权利要求2所述的计算任务调度方法,其特征在于,所述基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据,包括:
对所述目标神经网络进行模型解析,得到中间图;
基于所述硬件架构描述数据,对所述中间图进行图优化处理,得到优化图;
对所述优化图进行编译处理,得到所述网络描述数据。
4.根据权利要求2所述的计算任务调度方法,其特征在于,所述基于所述目标神经网络和所述硬件架构描述数据,生成所述网络描述数据,包括:
确定所述目标神经网络中的各个网络层,以及所述网络层之间的所述依赖关系;
获取各个网络层分别对应的预设网络层描述数据;
利用所述预设网络层描述数据,基于所述依赖关系,生成所述网络描述数据。
5.根据权利要求1所述的计算任务调度方法,其特征在于,所述基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系,包括:
从所述网络描述数据中确定各个所述网络层任务分别对应的网络描述子数据;
从各个所述网络描述子数据中解析得到对应的下一网络层指针;
基于各个所述下一网络层指针,得到所述依赖关系。
6.根据权利要求1所述的计算任务调度方法,其特征在于,所述检测人工智能加速计算部件上的空闲寄存器组,包括:
若处于初始化阶段,则将所述人工智能加速计算部件上的所有寄存器组确定为所述空闲寄存器组;
若不处于所述初始化阶段,且检测到目标网络层任务完成通知,则确定所述目标网络层任务对应的第二功能模块;
基于所述第二功能模块的类型,更新所述网络描述数据中与所述类型对应的空闲寄存器组标识;
根据更新后的所述空闲寄存器组标识,确定所述第二功能模块对应的所述空闲寄存器组;其中,所述空闲寄存器组为所述第二功能模块对应的两组乒乓寄存器组中的一个。
7.根据权利要求1所述的计算任务调度方法,其特征在于,所述基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,包括:
基于所述依赖关系,确定与所述空闲寄存器组类型匹配的候选网络层任务;
在所述网络描述数据中确定与所述候选网络层任务对应的候选描述子数据;
利用所述候选描述子数据和所述人工智能加速计算部件对应的硬件架构描述数据,生成所述目标寄存器配置。
8.根据权利要求1所述的计算任务调度方法,其特征在于,所述基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,包括:
解析所述目标网络层任务完成通知,得到所述目标网络层任务对应的任务标识;
基于所述依赖关系,利用所述任务标识确定所述目标网络层任务对应的后续任务;
将各个所述后续任务对应的执行等待计数减一;
将所述执行等待减一后为零的目标后续任务确定为所述下一任务。
9.根据权利要求1所述的计算任务调度方法,其特征在于,还包括:
基于所述依赖关系,确定所述人工智能加速计算部件上各个目标功能模块对应的使能顺序;
基于所述使能顺序的倒序,对各个所述目标功能模块进行使能处理,以使被使能处理后的目标功能模块基于对应的非空闲寄存器组进行数据计算准备操作。
10.一种计算任务调度装置,其特征在于,应用于任务调度器,所述装置包括:
网络描述获取模块,用于获取网络描述数据;所述网络描述数据用于描述目标神经网络中各个网络层分别对应的网络层任务;
依赖确定模块,用于基于所述网络描述数据,确定各个所述网络层任务之间的依赖关系;
空闲检测模块,用于检测人工智能加速计算部件上的空闲寄存器组;所述人工智能加速计算部件上各个功能模块分别对应于至少两个寄存器组;
寄存器配置模块,用于基于所述依赖关系、所述网络描述数据和空闲寄存器组类型,生成目标寄存器配置,并将所述目标寄存器配置写入到所述空闲寄存器组;
启动模块,用于若检测到目标网络层任务完成通知,则基于所述依赖关系确定所述目标网络层任务完成通知对应的目标网络层任务的下一任务,并将所述下一任务在所述人工智能加速计算部件上对应的第一功能模块启动,以便执行所述下一任务。
11.一种电子设备,其特征在于,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现如权利要求1至9任一项所述的计算任务调度方法。
12.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述的计算任务调度方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210413206.1A CN114510339B (zh) | 2022-04-20 | 2022-04-20 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
PCT/CN2022/102769 WO2023201893A1 (zh) | 2022-04-20 | 2022-06-30 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210413206.1A CN114510339B (zh) | 2022-04-20 | 2022-04-20 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114510339A true CN114510339A (zh) | 2022-05-17 |
CN114510339B CN114510339B (zh) | 2022-07-29 |
Family
ID=81554635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210413206.1A Active CN114510339B (zh) | 2022-04-20 | 2022-04-20 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114510339B (zh) |
WO (1) | WO2023201893A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114860412A (zh) * | 2022-05-19 | 2022-08-05 | 北京百度网讯科技有限公司 | 任务处理方法、装置、电子设备和介质 |
WO2023201893A1 (zh) * | 2022-04-20 | 2023-10-26 | 苏州浪潮智能科技有限公司 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
CN117971437A (zh) * | 2024-03-26 | 2024-05-03 | 摩尔线程智能科技(北京)有限责任公司 | 任务分配方法、电路、设备、介质及程序 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117290074B (zh) * | 2023-11-23 | 2024-02-02 | 知行汽车科技(苏州)股份有限公司 | 一种车型配置中的进程设置方法、装置、设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109978129A (zh) * | 2017-12-28 | 2019-07-05 | 北京中科寒武纪科技有限公司 | 调度方法及相关装置 |
CN109993683A (zh) * | 2017-12-29 | 2019-07-09 | 英特尔公司 | 任意神经网络的机器学习稀疏计算机制、用于训练机制的算术计算微架构以及稀疏性 |
CN111275181A (zh) * | 2018-12-04 | 2020-06-12 | 英特尔公司 | 确定性的神经网络互操作性 |
CN112291293A (zh) * | 2019-07-27 | 2021-01-29 | 华为技术有限公司 | 任务处理方法、相关设备及计算机存储介质 |
CN112949847A (zh) * | 2021-03-29 | 2021-06-11 | 上海西井信息科技有限公司 | 神经网络算法加速系统、调度系统及调度方法 |
US11068641B1 (en) * | 2020-03-04 | 2021-07-20 | Mythic, Inc. | Systems and methods for intelligently buffer tracking for optimized dataflow within an integrated circuit architecture |
CN114239816A (zh) * | 2021-12-09 | 2022-03-25 | 电子科技大学 | 一种卷积神经网络-图卷积神经网络可重构硬件加速架构 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001092657A (ja) * | 1999-09-22 | 2001-04-06 | Toshiba Corp | 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体 |
US20210157283A1 (en) * | 2019-11-26 | 2021-05-27 | Apex Artificial Intelligence Industries, Inc. | Adaptively controlling groups of automated machines |
CN113448692A (zh) * | 2020-03-25 | 2021-09-28 | 杭州海康威视数字技术股份有限公司 | 分布式图计算的方法、装置、设备及存储介质 |
CN112711475B (zh) * | 2021-01-20 | 2022-09-06 | 上海交通大学 | 一种基于图卷积神经网络的工作流调度方法及系统 |
CN113961333B (zh) * | 2021-12-22 | 2022-03-11 | 北京燧原智能科技有限公司 | 循环任务的生成、执行方法、装置、ai芯片及存储介质 |
CN114510339B (zh) * | 2022-04-20 | 2022-07-29 | 苏州浪潮智能科技有限公司 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
-
2022
- 2022-04-20 CN CN202210413206.1A patent/CN114510339B/zh active Active
- 2022-06-30 WO PCT/CN2022/102769 patent/WO2023201893A1/zh unknown
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109978129A (zh) * | 2017-12-28 | 2019-07-05 | 北京中科寒武纪科技有限公司 | 调度方法及相关装置 |
CN109993683A (zh) * | 2017-12-29 | 2019-07-09 | 英特尔公司 | 任意神经网络的机器学习稀疏计算机制、用于训练机制的算术计算微架构以及稀疏性 |
CN111275181A (zh) * | 2018-12-04 | 2020-06-12 | 英特尔公司 | 确定性的神经网络互操作性 |
CN112291293A (zh) * | 2019-07-27 | 2021-01-29 | 华为技术有限公司 | 任务处理方法、相关设备及计算机存储介质 |
US11068641B1 (en) * | 2020-03-04 | 2021-07-20 | Mythic, Inc. | Systems and methods for intelligently buffer tracking for optimized dataflow within an integrated circuit architecture |
CN112949847A (zh) * | 2021-03-29 | 2021-06-11 | 上海西井信息科技有限公司 | 神经网络算法加速系统、调度系统及调度方法 |
CN114239816A (zh) * | 2021-12-09 | 2022-03-25 | 电子科技大学 | 一种卷积神经网络-图卷积神经网络可重构硬件加速架构 |
Non-Patent Citations (2)
Title |
---|
S. KOSTIĆ 等: "Assessment of blast induced ground vibrations by artificial neural network", 《12TH SYMPOSIUM ON NEURAL NETWORK APPLICATIONS IN ELECTRICAL ENGINEERING (NEUREL)》 * |
吴佳骏 等: "网络处理器任务调度", 《网络处理器任务调度》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023201893A1 (zh) * | 2022-04-20 | 2023-10-26 | 苏州浪潮智能科技有限公司 | 一种计算任务调度方法、装置、电子设备及可读存储介质 |
CN114860412A (zh) * | 2022-05-19 | 2022-08-05 | 北京百度网讯科技有限公司 | 任务处理方法、装置、电子设备和介质 |
CN114860412B (zh) * | 2022-05-19 | 2023-04-04 | 北京百度网讯科技有限公司 | 任务处理方法、装置、电子设备和介质 |
CN117971437A (zh) * | 2024-03-26 | 2024-05-03 | 摩尔线程智能科技(北京)有限责任公司 | 任务分配方法、电路、设备、介质及程序 |
Also Published As
Publication number | Publication date |
---|---|
CN114510339B (zh) | 2022-07-29 |
WO2023201893A1 (zh) | 2023-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114510339B (zh) | 一种计算任务调度方法、装置、电子设备及可读存储介质 | |
CN111831287B (zh) | 用于确定执行代码段所需的资源的方法、设备和程序产品 | |
US8782645B2 (en) | Automatic load balancing for heterogeneous cores | |
US10740152B2 (en) | Technologies for dynamic acceleration of general-purpose code using binary translation targeted to hardware accelerators with runtime execution offload | |
US20110022817A1 (en) | Mapping Processing Logic Having Data-Parallel Threads Across Processors | |
US20140157287A1 (en) | Optimized Context Switching for Long-Running Processes | |
TW201409228A (zh) | 剖析應用程式碼以識別用於fpga實施之程式碼部份 | |
US20090172683A1 (en) | Multicore interface with dynamic task management capability and task loading and offloading method thereof | |
CN112148293A (zh) | 用于在异构系统上执行的软件的运行时多调度的方法和装置 | |
US20130036426A1 (en) | Information processing device and task switching method | |
CN111158756B (zh) | 用于处理信息的方法和装置 | |
WO2023124543A1 (zh) | 用于大数据的数据处理方法和数据处理装置 | |
CN114217966A (zh) | 基于资源调整的深度学习模型动态批处理调度方法和系统 | |
KR20210021261A (ko) | 가속기에서 이종 컴포넌트들을 구성하기 위한 방법들 및 장치 | |
CN114153500A (zh) | 指令调度方法、指令调度装置、处理器及存储介质 | |
JP4971679B2 (ja) | プロセッサシステム及びプロセッサシステムの性能測定方法 | |
CN109558226B (zh) | 一种基于核间中断的dsp多核并行计算调度方法 | |
CN108549935B (zh) | 一种实现神经网络模型的装置及方法 | |
US9612863B2 (en) | Hardware device for accelerating the execution of a systemC simulation in a dynamic manner during the simulation | |
CN112219192A (zh) | 用于使用元数据在神经网络中进行机会性负载平衡的方法和系统 | |
EP3779778A1 (en) | Methods and apparatus to enable dynamic processing of a predefined workload | |
CN110704193B (zh) | 一种适合向量处理的多核软件架构的实现方法及装置 | |
Ng et al. | Improving system predictability and performance via hardware accelerated data structures | |
US20220114469A1 (en) | Methods and apparatus for parallel quantum computing | |
JP2008250838A (ja) | ソフトウェア生成装置、方法、およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |