CN117501278A - 运算加速方法及运算加速器 - Google Patents
运算加速方法及运算加速器 Download PDFInfo
- Publication number
- CN117501278A CN117501278A CN202180099441.XA CN202180099441A CN117501278A CN 117501278 A CN117501278 A CN 117501278A CN 202180099441 A CN202180099441 A CN 202180099441A CN 117501278 A CN117501278 A CN 117501278A
- Authority
- CN
- China
- Prior art keywords
- task
- operator
- target
- tasks
- conditional
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 95
- 230000001133 acceleration Effects 0.000 title claims abstract description 29
- 238000013528 artificial neural network Methods 0.000 claims abstract description 145
- 230000015654 memory Effects 0.000 claims description 61
- 238000003860 storage Methods 0.000 claims description 30
- 238000004590 computer program Methods 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 56
- 238000013473 artificial intelligence Methods 0.000 abstract description 9
- 238000012549 training Methods 0.000 description 35
- 238000010586 diagram Methods 0.000 description 21
- 230000008569 process Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 12
- 230000001537 neural effect Effects 0.000 description 11
- 210000002569 neuron Anatomy 0.000 description 10
- 238000013527 convolutional neural network Methods 0.000 description 8
- 239000013598 vector Substances 0.000 description 8
- 239000011159 matrix material Substances 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 7
- 230000001360 synchronised effect Effects 0.000 description 6
- 208000033748 Device issues Diseases 0.000 description 5
- 238000013500 data storage Methods 0.000 description 5
- 238000005304 joining Methods 0.000 description 5
- 230000004913 activation Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000013480 data collection Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 241001465754 Metazoa Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Image Analysis (AREA)
Abstract
人工智能领域中的一种运算加速方法及运算加速器。该运算加速方法包括:第二装置获取来自第一装置的目标神经网络中的一个或多个任务,该一个或多个任务包括条件算子;第二装置执行该条件算子,以得到目标任务的指示信息,该目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务;第二装置执行该目标任务。该方法能够提高神经网络的处理效率。
Description
本申请涉及人工智能领域的数据计算技术,并且更具体地,涉及一种运算加速方法及运算加速器。
人工智能(artificial intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式作出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能领域的研究包括机器人,自然语言处理,计算机视觉,决策与推理,人机交互,推荐与搜索,AI基础理论等。
神经网络作为人工智能的重要分支,是一种模仿动物神经网络行为特征进行信息处理的网络结构。随着神经网络的不断发展,神经网络对计算力的要求也越来越高。目前,通常采用专用的运算加速器执行神经网络的运算过程,以满足神经网络对庞大计算力的需求。
现有的一些运算加速器可以分为主机侧和设备侧。运行时子系统(runtime subsystem,RTS)可以将主机侧的任务下发至设备侧,由设备侧执行任务。在理想状态下,RTS可以不断下发任务,直至设备侧满载。然而,一些任务中包括有数据依赖的条件算子,当出现有数据依赖的条件算子时,需要通过RTS将条件算子保留在主机侧,由主机侧执行条件算子,即由主机侧进行条件判断,RTS根据判断的结果下发对应的任务,这样会产生较大的中断延时。在该时段内,设备侧为空载状态,浪费了设备侧的算力。
因此,如何提高神经网络的处理效率成为一个亟待解决的问题。
发明内容
本申请提供一种运算加速方法及运算加速装置,能够提高神经网络的处理效率。
第一方面,提供了一种运算加速方法,该运算加速方法包括:第二装置获取来自第一装置的目标神经网络中的一个或多个任务,一个或多个任务包括条件算子;第二装置执行条件算子,以得到目标任务的指示信息,目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务;第二装置执行目标任务。
在本申请实施例的方案中,由第二装置执行第一装置下发的条件算子,可以避免在第二装置处理过程中,返回第一装置执行条件算子,减少了第二装置与第一装置进行数据交换的运行开销,提高了处理效率以及第二装置的利用率。
第一装置可以位于主机侧,例如,第一装置可以为host CPU。第二装置可以位于设备 侧。例如,第二装置可以为神经网络处理器。第一装置调用第二装置的神经网络的计算能力完成相应的处理。
目标神经网络指的是待执行的神经网络。
一个任务可以包括一个或多个任务算子。示例性地,一个任务可以对应神经网络中的一层或多层,这样,该任务中的任务算子即为神经网络的一层中的一个算子,例如,卷积算子。本申请实施例中“任务算子”也可以简称为“算子”。
示例性地,目标任务的指示信息可以为目标任务的标识(ID),或者,指示信息可以为目标任务的位置。本申请实施例对目标任务的指示信息的类型不做限定。
结合第一方面,在第一方面的某些实现方式中,第二装置执行条件算子,以得到目标任务的指示信息,包括:第二装置中的任务调度器执行条件算子,以得到目标任务的指示信息。
任务调度器可以由硬件实现,也可以由软件实现,或者,也可以由硬件和软件的结合来实现。
结合第一方面,在第一方面的某些实现方式中,该条件算子为第二装置中的第一任务调度模块支持的条件算子,以及第二装置执行条件算子,以得到目标任务的指示信息,包括:第一任务调度模块基于硬件执行该条件算子,以得到目标任务的指示信息。
进一步地,第一任务调度模块根据指示信息调度第二装置中的运算单元执行目标任务。
在本申请实施例中,由硬件执行条件算子,提高了处理速度。
结合第一方面,在第一方面的某些实现方式中,第二装置执行条件算子,以得到目标任务的指示信息,包括:第二装置中的第二任务调度模块调用程序执行该条件算子,以得到目标任务的指示信息。
第二任务调度模块可以由软件实现。
进一步地,第二任务调度模块根据指示信息调度第二装置中的运算单元执行目标任务。
或者,第二装置中的第一任务调度模块根据指示信息调度第二装置中的运算单元执行目标任务。
软件可以支持更多的条件算子。例如,在芯片回片之后,可以通过软件升级支持更多的条件算子,进而能够支持更多类型的神经网络的运算,使得方案更加灵活,具有更强的可扩展性。
结合第一方面,在第一方面的某些实现方式中,第二装置执行条件算子,以得到目标任务的指示信息,包括:在条件算子为第二装置中的第一任务调度模块支持的条件算子的情况下,第一任务调度模块基于硬件执行条件算子,以得到目标任务的指示信息。
在本申请实施例中,由硬件执行条件算子,提高了处理速度。
结合第一方面,在第一方面的某些实现方式中,第二装置执行条件算子,以得到目标任务的指示信息,包括:在条件算子为第二装置中的第一任务调度模块不支持的条件算子的情况下,第二装置中的第二任务调度模块调用程序执行条件算子,以得到目标任务的指示信息。
第二任务调度模块可以由软件实现。
这样,在第一任务调度模块不支持条件算子的情况下,由第二任务调度模块调用程序执行条件算子,不需要返回至第一装置中执行该条件算子,提高了第二装置的适应性,能够支持更多的条件算子的执行。
此外,在第一任务调度模块支持条件算子的情况下,可以由第一任务调度模块基于硬件执行条件算子,提高处理速度。
进一步地,第一任务调度模块根据指示信息调度运算单元执行目标任务。
或者,第二任务调度模块根据指示信息调度运算单元执行目标任务。
结合第一方法,在第一方面的某些实现方式中,目标任务的指示信息包括:目标任务所在的流队列(stream queue,SQ)的指示信息、SQ中的目标任务开始处的流队列入口(stream queue entry,SQE)的指示信息和所述SQ中的目标任务结束处的SQE的指示信息。
示例性地,任务的位置可以由任务所在的SQ的标识(id)、该SQ中的任务开始处的SQE的id以及该SQ中的任务结束处的SQE的id指示。
结合第一方面,在第一方面的某些实现方式中,该条件算子为如果/否则(if/else)算子,if/else算子的入参(input parameters)包括以下至少一项:compare_op、compare_type、launch_if_true、launch_if_false、compare_src1或compare_src2,其中,compare_op表示判断操作的类型,compare_type表示判断操作中的数据的类型,launch_if_true用于指示判断操作的执行结果为真时的候选任务、launch_if_false用于指示判断操作的执行结果为假时的候选任务,compare_src1和compare_src2用于指示判断操作中的数据。判断操作的执行结果是基于compare_src1和compare_src2指示的数据执行判断操作得到的。
结合第一方面,在第一方面的某些实现方式中,该条件算子为开关/情况(switch/case)算子,switch/case算子的入参包括以下至少一项:compare_src1、switch/case算子中的各个情况下的待比较值或各个情况下的候选任务的指示信息,其中,compare_src1用于指示判断操作中的目标比较值,目标比较值用于与各个情况下的待比较值进行比较,比较结果用于指示switch/case算子的执行结果所属的情况。
结合第一方面,在第一方面的某些实现方式中,该条件算子为启动流(launch stream)算子,launch stream算子的入参包括launch_param,launch_param用于指示目标任务。
第二方面,提供了一种运算加速方法,包括:第一装置获取目标神经网络;将目标神经网络中的一个或多个任务下发至第二装置,一个或多个任务包括条件算子,以使第二装置执行条件算子得到目标任务的指示信息,目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务,使第二装置执行目标任务。
在本申请实施例的方案中,由第二装置执行第一装置下发的条件算子,可以避免在第二装置处理过程中,返回第一装置执行条件算子,减少了第二装置与第一装置进行数据交换的运行开销,提高了处理效率以及第二装置的利用率。
结合第二方面,在第二方面的某些实现方式中,第一装置以图的形式将该一个或多个任务下发至第二装置。
这样,第一装置可以将图中的一个或多个任务一次性下发至第二装置,减少了任务的下发次数,进而减少第一装置和第二装置之间的通信开销,提高了处理效率以及第二装置的利用率。
结合第二方面,在第二方面的某些实现方式中,将目标神经网络中的一个或多个任务下发至第二装置,包括:获取第二装置的配置信息,配置信息用于指示第二装置支持的条件算子;在条件算子为第二装置支持的条件算子的情况下,将一个或多个任务下发至第二装置。
在该多个任务中的条件算子为第二装置能够支持的条件算子的情况下,第一装置可以将该多个任务一次下发至第二装置。这样可以减少由于第二装置无法执行而使该条件算子返回至第一装置所产生的开销。
可选地,在多个任务中的条件算子为第二装置支持的条件算子的情况下,将该多个任务以一个图的形式下发至第二装置。
第一装置以图的形式下发任务至第二装置,在该多个任务中的条件算子为第二装置能够支持的条件算子的情况下,第一装置无需将该多个任务对应的图进行切分,减少了第一装置中的处理流程,提高了处理效率。
第三方面,提供了一种运算加速器,包括:任务调度器、存储单元和运算单元,其中,存储单元用于存储来自第一装置的目标神经网络中的一个或多个任务,一个多个任务包括条件算子;任务调度器用于执行条件算子,以得到目标任务的指示信息,目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务;运算单元用于执行目标任务。
结合第三方面,在第三方面的某些实现方式中,在条件算子为任务调度器中的第一任务调度模块支持的条件算子的情况下,第一任务调度模块用于:基于硬件执行条件算子,以得到目标任务的指示信息。
结合第三方面,在第三方面的某些实现方式中,在条件算子为任务调度器中的第一任务调度模块不支持的条件算子的情况下,任务调度器中的第二任务调度模块用于:调用程序执行条件算子,以得到目标任务的指示信息。
第四方面,提供了一种运算加速器,包括:获取单元和发送单元,其中,获取单元用于获取目标神经网络;发送单元用于将目标神经网络中的一个或多个任务下发至第二装置,一个或多个任务包括条件算子,以使第二装置执行条件算子得到目标任务的指示信息,目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务,使第二装置执行目标任务。
结合第四方面,在第四方面的某些实现方式中,获取单元还用于:获取第二装置的配置信息,配置信息用于指示第二装置支持的条件算子;以及发送单元具体用于:在条件算子为第二装置支持的条件算子的情况下,将一个或多个任务下发至第二装置。
第五方面,提供了一种运算加速系统,该运算加速系统包括第三方面以及第三方面中的任意一种实现方式中的加速器和第四方面以及第四方面中的任意一种实现方式中的任一种实现方式中的运算加速器。
应理解,在上述第一方面中对相关内容的扩展、限定、解释和说明也适用于第二方面、第三方面、第四方面和第五方面中相同的内容。
第六方面,提供了一种运算加速器,该运算加速器包括:存储器,用于存储程序;处理器,用于执行所述存储器存储的程序,当所述存储器存储的程序被执行时,所述处理器用于执行第一方面以及第一方面中的任意一种实现方式中的方法。
上述第六方面中的处理器既可以是中央处理器(central processing unit,CPU),也可 以是CPU与神经网络运算处理器的组合,这里的神经网络运算处理器可以包括图形处理器(graphics processing unit,GPU)、神经网络处理器(neural-network processing unit,NPU)和张量处理器(tensor processing unit,TPU)等等。其中,TPU是谷歌(google)为机器学习全定制的人工智能加速器专用集成电路。
第七方面,提供了一种运算加速器,该运算加速器包括:存储器,用于存储程序;处理器,用于执行所述存储器存储的程序,当所述存储器存储的程序被执行时,所述处理器用于执行第二方面以及第二方面中的任意一种实现方式中的方法。
上述第七方面中的处理器既可以是中央处理器,也可以是CPU与神经网络运算处理器的组合,这里的神经网络运算处理器可以包括图形处理器、神经网络处理器和张量处理器等等。其中,TPU是谷歌为机器学习全定制的人工智能加速器专用集成电路。
第八方面,提供一种计算机可读存储介质,该计算机可读介质可读存储用于设备执行的程序代码,该程序代码包括用于执行第一方面或第二方面中的任意一种实现方式中的方法。
第九方面,提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第一方面或第二方面中的任意一种实现方式中的方法。
第十方面,提供一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行上述第一方面或第二方面中的任意一种实现方式中的方法。
可选地,作为一种实现方式,所述芯片还可以包括存储器,所述存储器中存储有指令,所述处理器用于执行所述存储器上存储的指令,当所述指令被执行时,所述处理器用于执行第一方面或第二方面中的任意一种实现方式中的方法。
上述芯片具体可以是现场可编程门阵列(field-programmable gate array,FPGA)或者专用集成电路(application-specific integrated circuit,ASIC)。
图1为本申请实施例提供的一种系统架构的结构示意图;
图2为一种包括条件算子的任务队列的示意图;
图3为另一种包括条件算子的任务队列的示意图;
图4为包括条件算子的任务队列的执行过程的示意图;
图5为本申请实施例提供的一种运算加速器的示意性框图;
图6为本申请实施例提供的一种运算加速方法的示意性流程图;
图7为本申请实施例提供的一种运算加速流程的示意图;
图8为本申请实施例提供的一种包括if/else算子的任务序列的示意图;
图9为本申请实施例提供的另一种包括if/else算子的任务序列的示意图;
图10为本申请实施例提供的一种包括switch/case算子的任务序列的示意图;
图11为本申请实施例提供的一种包括if/else算子和launch stream算子的任务序列的示意图;
图12是本申请实施例提供的一种运算加速器的示意性框图;
图13是本申请实施例提供的另一种运算加速器的示意性框图;
图14是本申请实施例提供的又一种运算加速器的示意性框图。
下面将结合附图,对本申请中的技术方案进行描述。
本申请实施例可以应用在智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶以及智能终端等需要使用神经网络的领域。
具体而言,本申请实施例的方法能够应用在图片分类和监控场景中,下面分别对这两种应用场景进行简单的介绍。
图片分类:
当用户在终端设备(例如,手机)或者云盘上存储了大量的图片时,通过对相册中图像进行识别可以方便用户或者系统对相册进行分类管理,提升用户体验。深度神经网络在图像分类中发挥着重要作用。
利用本申请实施例的运算加速方法,能够提高深度神经网络的处理效率,即提高对图片进行分类的速度,有利于实时为不同的类别的图片打上标签,便于用户查看和查找。
监控:
监控场景包括:智慧城市、野外监控、室内监控、室外监控、车内监控等。其中,智慧城市场景下,需要进行多种属性识别,例如行人属性识别和骑行属性识别,深度神经网络凭借着其强大的能力在多种属性识别中发挥着重要的作用。
采用本申请实施例的运算加速方法,能够提高深度神经网络的处理效率,有利于对输入的道路画面进行实时处理,更快地识别出道路画面中的不同的属性信息。
由于本申请实施例涉及大量神经网络的应用,为了便于理解,下面先对本申请实施例可能涉及的神经网络的相关术语和概念进行介绍。
(1)神经网络
神经网络可以是由神经单元组成的,神经单元可以是指以x
s和截距1为输入的运算单元,该运算单元的输出可以为:
其中,s=1、2、……n,n为大于1的自然数,W
s为x
s的权重,b为神经单元的偏置。
f为神经单元的激活函数(activation functions),用于将非线性特性引入神经网络中,来将神经单元中的输入信号变换为输出信号。该激活函数的输出信号可以作为下一层的输入。
神经网络是将多个上述单一的神经单元联结在一起形成的网络,即一个神经单元的输出可以是另一个神经单元的输入。每个神经单元的输入可以与前一层的局部接受域相连,来提取局部接受域的特征,局部接受域可以是由若干个神经单元组成的区域。
(2)深度神经网络
深度神经网络(deep neural network,DNN),也称多层神经网络,可以理解为具有多层隐含层的神经网络。按照不同层的位置对DNN进行划分,DNN内部的神经网络可以分为三类:输入层,隐含层,输出层。一般来说第一层是输入层,最后一层是输出层,中间的层数都是隐含层。层与层之间是全连接的,也就是说,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。
虽然DNN看起来很复杂,但是就每一层的工作来说,其实并不复杂,简单来说就是如下线性关系表达式:
其中,
是输入向量,
是输出向量,
是偏移向量,W是权重矩阵(也称系数),α()是激活函数。每一层仅仅是对输入向量
经过如此简单的操作得到输出向量。由于DNN层数多,系数W和偏移向量
的数量也比较多。这些参数在DNN中的定义如下所述:以系数W为例:假设在一个三层的DNN中,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为
上标3代表系数W所在的层数,而下标对应的是输出的第三层索引2和输入的第二层索引4。
综上,第L-1层的第k个神经元到第L层的第j个神经元的系数定义为
需要注意的是,输入层是没有W参数的。在深度神经网络中,更多的隐含层让网络更能够刻画现实世界中的复杂情形。理论上而言,参数越多的模型复杂度越高,“容量”也就越大,也就意味着它能完成更复杂的学习任务。训练深度神经网络的也就是学习权重矩阵的过程,其最终目的是得到训练好的深度神经网络的所有层的权重矩阵(由很多层的向量W形成的权重矩阵)。
(3)卷积神经网络
卷积神经网络(convolutional neuron network,CNN)是一种带有卷积结构的深度神经网络。卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器,该特征抽取器可以看作是滤波器。卷积层是指卷积神经网络中对输入信号进行卷积处理的神经元层。在卷积神经网络的卷积层中,一个神经元可以只与部分邻层神经元连接。一个卷积层中,通常包含若干个特征平面,每个特征平面可以由一些矩形排列的神经单元组成。同一特征平面的神经单元共享权重,这里共享的权重就是卷积核。共享权重可以理解为提取图像信息的方式与位置无关。卷积核可以以随机大小的矩阵的形式化,在卷积神经网络的训练过程中卷积核可以通过学习得到合理的权重。另外,共享权重带来的直接好处是减少卷积神经网络各层之间的连接,同时又降低了过拟合的风险。
如图1所示,本申请实施例提供了一种系统架构100。在图1中,数据采集设备170用于采集训练数据。例如,训练数据可以包括训练图像以及训练图像对应的真值(ground truth),训练图像对应的真值可以为训练图像对应的分类结果,训练图像的分类结果可以是人工预先标注的结果。
在采集到训练数据之后,数据采集设备170将这些训练数据存入数据库130,训练设备120基于数据库130中维护的训练数据训练得到目标模型/规则101。
下面对训练设备120基于训练数据得到目标模型/规则101进行描述,训练设备120对输入的原始数据进行处理,将输出值与目标值进行对比,直到训练设备120输出的值与目标值的差值小于一定的阈值,从而完成目标模型/规则101的训练。
本申请实施例中的目标模型/规则101具体可以为神经网络模型。例如,卷积神经网络或残差网络。需要说明的是,在实际的应用中,所述数据库130中维护的训练数据不一定都来自于数据采集设备170的采集,也有可能是从其他设备接收得到的。另外需要说明的是,训练设备120也不一定完全基于数据库130维护的训练数据进行目标模型/规则101的训练,也有可能从云端或其他地方获取训练数据进行模型训练,上述描述不应该作为对本申请实施例的限定。
训练设备120可以采用本申请实施例中的运算加速器。
根据训练设备120训练得到的目标模型/规则101可以应用于不同的系统或设备中,如应用于图1所示的执行设备110,所述执行设备110可以是终端,如手机终端,平板电脑,笔记本电脑,增强现实(augmented reality,AR)AR/虚拟现实(virtual reality,VR),车载终端等,还可以是服务器或者云端等。在图1中,执行设备110配置输入/输出(input/output,I/O)接口112,用于与外部设备进行数据交互,用户可以通过客户设备140向I/O接口112输入数据,输入数据可以包括:客户设备输入的待处理的数据。
在执行设备110对输入数据进行预处理,或者在执行设备110的计算模块111执行计算等相关的处理过程中,执行设备110可以调用数据存储系统150中的数据、代码等以用于相应的处理,也可以将相应处理得到的数据、指令等存入数据存储系统150中。
最后,I/O接口112将处理结果,如上述得到的数据的处理结果返回给客户设备140,从而提供给用户。
值得说明的是,训练设备120可以针对不同的目标或不同的任务,基于不同的训练数据生成相应的目标模型/规则101,该相应的目标模型/规则101即可以用于实现上述目标或完成上述任务,从而为用户提供所需的结果。
执行设备110可以采用本申请实施例的运算加速器。
在图1中所示情况下,用户可以手动给定输入数据,该手动给定可以通过I/O接口112提供的界面进行操作。另一种情况下,客户设备140可以自动地向I/O接口112发送输入数据,如果要求客户设备140自动发送输入数据需要获得用户的授权,则用户可以在客户设备140中设置相应权限。用户可以在客户设备140查看执行设备110输出的结果,具体的呈现形式可以是显示、声音、动作等具体方式。客户设备140也可以作为数据采集端,采集如图所示输入I/O接口112的输入数据及输出I/O接口112的输出结果作为新的样本数据,并存入数据库130。当然,也可以不经过客户设备140进行采集,而是由I/O接口112直接将如图所示输入I/O接口112的输入数据及输出I/O接口112的输出结果,作为新的样本数据存入数据库130。
值得注意的是,图1仅是本申请实施例提供的一种系统架构的示意图,图中所示设备、器件、模块等之间的位置关系不构成任何限制,例如,在图1中,数据存储系统150相对执行设备110是外部存储器,在其它情况下,也可以将数据存储系统150置于执行设备110中。
如图1所示,根据训练设备120训练得到目标模型/规则101,该目标模型/规则101在本申请实施例中可以是神经网络模型,例如,CNN或残差网络等。
现有的一些运算加速器可以分为主机侧(host side)和设备侧(device side)。主机侧通常包括主中央处理器(central processing unit,CPU)(host CPU)。RTS为将任务从host CPU下发到device的接口。在理想状态下,RTS可以将任务不断地下发至device,直至device满载。然而,一些任务中包括有数据依赖的条件算子,这种条件算子的执行结果与该条件算子之前的任务的执行结果有关。也就是说,该条件算子的判断条件中的数据依赖于该条件算子之前的任务的执行结果。
图2示出了包括条件算子的任务队列的示意图。如图2所示,在执行完任务(task)0和task1之后,将执行结果写入主存(main memory)中。其中task1的执行结果写入主存中地址为XXX的位置。图2中的if mem[XXX]==yy,即为一个具有数据依赖的条件算子。 具体地,if mem[XXX]==yy表示在主存的地址为XXX处的数据是否等于yy。如果主存的地址为XXX处的数据等于yy,则依次执行任务task2a和task3a;如果主存的地址为XXX处的数据不等于yy,则依次执行task2b和task3b。主存的地址为XXX处的数据是在执行完task1后得到的数据,即task1的执行结果。也就是说,该条件算子的执行结果依赖于task1的执行结果,该条件算子即为有数据依赖的条件算子。
然而,当出现有数据依赖的条件算子时,需要通过RTS将条件算子保留在主机侧,由主机执行条件算子,即由主机进行条件判断,RTS根据判断的结果下发对应的任务。例如,若图2中的条件判断的结果为“是”,则RTS下发task2a。
图3示出了另一种包括条件算子的任务队列的示意图。图4示出了该任务队列的执行过程的示意图。图3中将需要运算的神经网络表示为图(graph)的形式。图3中神经网络与图2中的神经网络相同。将神经网络的图输入至RTS中,图中包括有数据依赖的条件算子,RTS以该条件算子为分界点将该图切分为三个子图:graph0、graph1和graph2,并将三个子图分别下发至device。
如图4所示,RTS将graph0从host CPU中下发至device,即图4中GPU。GPU根据graph0依次执行task0和task1。在执行完task0之后分别通知(notify)RTS task0已完成,在执行完task1之后通知RTS task1已完成(complete)。由host CPU执行图3中的条件算子中的条件判断。如图4所示,RTS根据条件判断的结果确定下发graph2。由于存在数据依赖,host CPU需要在task1完成后执行该条件算子的条件判断,这样,RTS的开销则无法隐藏,影响了处理效率。即使通过软件优化减少RTS的开销(overhead),也依然无法完全避免操作系统(operation system)的中断开销。在该中断开销内,GPU是空闲(idle)状态,浪费了GPU的算力。
本申请实施例提供了一种运算加速方法,将条件算子下发至设备侧,由设备侧执行该条件算子,减少了与主机侧交换的开销,提高了处理效率。
为了更好的描述本申请实施例中的运算加速方法,下面先对本申请实施例中的运算加速器进行说明。
图5示出了本申请实施例提供的一种运算加速器。该运算加速器可以被设置在如图1所示的执行设备110中,用以完成计算模块111的计算工作。该运算加速器也可以被设置在如图1所示的训练设备120中,用以完成训练设备120的训练工作并输出目标模型/规则101。神经网络可在如图5所示的运算加速器中得以实现。该运算加速器可以应用于图像、视频、语音或文字处理等相关的场景。
在一种可能的实现方式中,运算加速器500包括主机侧(host side)的第一装置510和设备侧(device side)的第二装置520。在该情况下,运算加速器500也可以称为运算加速系统。第二装置520可以作为协处理器挂载到第一装置510,第一装置510即主机,由主机分配任务。第一装置能够调用第二装置的神经网络计算能力完成相应的处理。例如,该第一装置可以为host CPU,即由host CPU分配任务。第二装置可以为神经网络处理器。
在另一种可能的实现方式中,该运算加速器500包括设备侧的第二装置520。运算加速器500不包括主机侧的第一装置510。在该情况下运算加速器500可以作为协处理器挂载到主机侧,由主机分配任务。主机能够调用运算加速器500的神经网络计算能力完成相应的处理。例如,该运算加速器500可以挂在到host CPU上,由host CPU分配任务。
本申请实施例中仅以host CPU作为主机侧的设备为例进行说明,不对本申请实施例的方案构成限定。
第二装置520包括任务调度器521、运算单元522和存储单元523。
存储单元523用于存储来自第一装置510的目标神经网络中的一个或多个任务。该一个或多个任务包括条件算子。
第一装置510位于主机侧。例如,第一装置510可以为host CPU。即host CPU下发目标神经网络中的一个或多个任务,存储单元523存储该一个或多个任务。
示例性地,存储单元523包括第二装置520的主存(main memory)。例如,主存可以为双倍数据率同步动态随机存储器(double data rate synchronous dynamic random access memory,DDR SDRAM)、高带宽存储器(high bandwidth memory,HBM)或其他可读可写的存储器。
任务调度器521用于实现任务的分配和调度。
任务调度器521还用于执行该条件算子,以得到目标任务的指示信息。该目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务。
任务调度器521从存储单元523中读取来自该一个或多个任务,若任务中不包括条件算子,则任务调度器521调度运算单元522执行该任务。若任务中包括条件算子,则任务调度器521可以执行该条件算子,得到目标任务的指示信息,进而根据该目标任务的指示信息调度运算单元522执行目标任务。
任务调度器521执行该条件算子中的条件判断操作,该条件判断操作的执行结果可以作为指示信息,指示在执行完该条件算子之后需要执行的任务,即目标任务。
进一步地,任务调度器521包括第一任务调度模块。第一任务调度模块采用硬件实现。例如,第一任务调度模块可以采用硬件任务调度器实现。这样,任务调度模块可以由硬件实现,即由硬件执行条件算子,提高了处理速度。
或者,任务调度器521包括第二任务调度模块。第二任务调度模块采用软件实现。例如,第二任务调度模块可以采用TS微控制单元(microcontroller unit,MCU)实现。软件可以支持更多的条件算子。例如,在芯片回片之后,可以通过软件升级支持更多的条件算子,进而能够支持更多类型的神经网络的运算,使得方案更加灵活,具有更强的可扩展性。
或者,任务调度器521包括第一任务调度模块和第二任务调度模块。在第一任务调度模块支持条件算子的情况下,由第一任务调度模块基于硬件执行条件算子,提高处理速度。在第一任务调度模块不支持条件算子的情况下,由第二任务调度模块调用程序执行条件算子,不需要返回至第一装置中执行该条件算子,提高了第二装置的适应性,能够支持更多的条件算子的执行。
运算单元522用于执行神经网络中的运算操作。
具体地,被任务调度器521调度的运算单元用于执行目标任务。
示例性地,运算单元522可以包括以下至少一项:AI核(AI core)或AI CPU。
AI core可以用于处理神经网络中的常用计算,例如,矩阵乘法运算或卷积运算等。
AI CPU可以用于处理非矩阵类的复杂计算。
根据本申请实施例的方案,由第二装置执行第一装置下发的条件算子,可以避免在第二装置处理过程中,返回第一装置执行条件算子,减少了第二装置与第一装置进行数据交 换的运行开销,提高了处理效率以及第二装置的利用率。
值得注意的是,图5仅是本申请实施例提供的一种运算加速器的示意图,图中所示设备、器件、模块等之间的位置关系不构成任何限制。尽管上述运算加速器500仅仅示出了任务调度器、存储单元和运算单元。但在具体实现过程中,该运算加速器500还可以包括其他模块,例如,外设接口模块。外设接口模块可以包括USB、磁盘、网卡、GPIO或电源管理接口等。
此外,本领域的技术人员应当理解,运算加速器500也可仅仅包括实现本申请实施例所必须的器件,而不必包括图5中所示的全部器件。
下面结合图6至图11对本申请实施例的方法进行详细的描述。
图6示出了本申请实施例的一种运算加速方法600,图6所示的方法600可以由运算加速器来执行,例如,由图5所示的运算加速器500执行。该运算加速器可以位于云服务设备,也可以位于终端设备,例如,电脑、服务器、手机、摄像头、车辆或无人机等装置,也可以位于由云服务设备和终端设备构成的系统。示例性地,方法600可以由训练设备或推理设备执行。
方法600包括步骤S610至步骤S640。下面对步骤S610至步骤S640进行详细介绍。
S610,第一装置获取目标神经网络。
第一装置可以位于主机侧,例如,第一装置可以为host CPU。
目标神经网络指的是待执行的神经网络。
示例性地,该目标神经网络可以是由用户输入至第一装置中的。可替换地,该目标神经网络可以是第一装置从其他设备接收的。
具体地,第一装置包括获取单元。获取单元用于获取目标神经网络。
示例性地,获取单元可以为RTS接口。RTS接口可以接收目标神经网络的图(graph)。
图(graph)可以理解为神经网络的一种描述方式。目标神经网络的图中包括实现目标神经网络的运算所需执行的全部任务。目标神经网络的图可以称为全图。
一个任务可以包括一个或多个任务算子。示例性地,一个任务可以对应神经网络中的一层或多层,这样,该任务中的任务算子即为神经网络的一层中的一个算子,例如,卷积算子。本申请实施例中“任务算子”也可以简称为“算子”。
目标神经网络可以包括一个或多个神经网络。在目标神经网络包括多个神经网络的情况下,即目标神经网络是由多个神经网络组合得到的情况下,该目标神经网络也可以称为复合神经网络。例如,图3所示的神经网络可以为目标神经网络。该目标神经网络包括神经网络1#、神经网络2#和神经网络3#,分别对应graph0、graph1和graph2。以graph0为例,graph0中的task0和task1即为实现神经网络1#所需要的执行的任务。
本申请实施例中的目标神经网络可以为现有的神经网络,例如,长短期记忆(long short-term memory,LSTM)网络。或者,本申请实施例中的目标的神经网络可以为根据需要构建的神经网络,例如,由多个现有的神经网络组合得到的复合神经网络。本申请实施例对此不做限定。
S620,第一装置将目标神经网络中的一个或多个任务下发至第二装置。一个或多个任务包括条件算子。
具体地,第一装置包括发送单元,发送单元用于将目标神经网络中的一个或多个任务 下发至第二装置。一个或多个任务包括条件算子。
示例性地,发送单元可以包括RTS。
第二装置可以位于设备侧。例如,第二装置可以为神经网络处理器。第一装置调用第二装置的神经网络的计算能力完成相应的处理。
示例性地,第一装置可以将目标神经网络中的一个或多个任务写入第二装置的存储单元中。
示例性地,第一装置以图的形式将该一个或多个任务下发至第二装置。
例如,图2中,host CPU分别将task0和task1下发至device。图3中,host CPU将graph0下发至device,也就是将task0和task1一次性下发至device。
一个图中可以包括一个或多个任务,这样,第一装置可以将图中的一个或多个任务一次性下发至第二装置,减少了任务的下发次数,进而减少第一装置和第二装置之间的通信开销,提高了处理效率以及第二装置的利用率。
步骤S620中的一个或多个任务包括条件算子可以理解为,该一个或多个任务中的至少一个任务包括条件算子。
本申请实施例中的条件算子指的是有数据依赖的条件算子。有数据依赖的条件算子的执行结果与该条件算子之前的任务的执行结果有关。也就是说,该条件算子的判断条件中的数据依赖于该条件算子之前的任务的执行结果。条件算子对应多个候选任务,条件算子的执行结果用于指示该多个候选任务中的目标任务。条件算子对应的候选任务也可以理解为条件算子的条件分支。例如,如图2所示的条件算子对应的候选任务包括task2a和task2b。根据条件算子的执行结果即可确定下一步执行task2a或task2b。
应理解,步骤S620中的目标神经网络中的一个或多个任务可以为实现该目标神经网络所需执行的全部或部分任务,只要该多个任务中包括条件算子即可。该多个任务可以是一次下发至第二装置的,也可以是分多次下发至第二装置的。
可选地,步骤S620包括:第一装置获取第二装置的配置信息,该配置信息用于指示第二装置支持的条件算子;在多个任务中的条件算子为第二装置支持的条件算子的情况下,将该多个任务下发至第二装置。
示例性地,第一装置中的获取单元还用于获取第二装置的配置信息。
第一装置中的发送单元具体用于在条件算子为所述第二装置支持的条件算子的情况下,将目标神经网络中的一个或多个任务下发至第二装置。
第一装置根据第二装置的配置信息可以确定第二装置支持的条件算子。
示例性地,该配置信息可以包括第二装置能够支持的条件算子的模板,例如,如表1所示的条件算子的模板。
在一种可能的实现方式中,第二装置支持的条件算子也可以理解为图描述符支持的条件算子。
图描述符用于指示任务执行所需的信息。
第二装置可能无法支持所有条件算子,在该多个任务中的条件算子为第二装置能够支持的条件算子的情况下,第一装置可以将该多个任务一次下发至第二装置。这样可以减少由于第二装置无法执行而使该条件算子返回至第一装置所产生的开销。
可选地,在多个任务中的条件算子为第二装置支持的条件算子的情况下,将该多个任 务以一个图的形式下发至第二装置。
第一装置以图的形式下发任务至第二装置,在该多个任务中的条件算子为第二装置能够支持的条件算子的情况下,第一装置无需将该多个任务对应的图进行切分,减少了第一装置中的处理流程,提高了处理效率。
在一种可能的实现方式中,若目标神经网络的全图中的条件算子均为第二装置支持的条件算子,第一装置可以将获取到的目标神经网络的全图下发至第二装置,即将待执行的神经网络的全部任务下发至第二装置。这样,第一装置不需要对全图进行切分,将全图下发至第二装置,或者说,将全图“下沉”到第二装置,减少了第一装置中的处理流程,提高了处理效率。
例如,RTS接口获取到目标神经网络的全图后,若全图中的条件算子为第二装置可以支持的算子,则不需要对全图进行切分,可以将全图写入第二装置的存储单元中。
S630,第二装置执行该条件算子,以得到目标任务的指示信息。该目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务。
具体地,可以由图5中的第二装置中的任务调度器521执行步骤S630。
如图5所示,第二装置还包括运算单元522。
在一种实现方式中,任务调度器521获取存储单元523中的一个或多个任务。若任务中不包括条件算子,则任务调度器521调度运算单元522执行该任务。若任务中包括条件算子,则任务调度器521可以执行该条件算子,得到目标任务的指示信息,进而根据该目标任务的指示信息调度运算单元522执行目标任务。
任务调度器521执行该条件算子中的条件判断操作,该条件判断操作的执行结果可以作为指示信息,指示在执行完该条件算子之后需要执行的任务,即目标任务。
如图2所示的神经网络中,若任务调度器521在执行该条件算子之后,执行结果为“是”,该执行结果对应的任务为task2a,则目标任务即为task2a。
示例性地,目标任务的指示信息可以为目标任务的标识(ID),或者,目标任务的指示信息可以为目标任务的位置。本申请实施例对指示信息的类型不做限定。
目标任务的位置包括目标任务所在的流队列SQ的指示信息、SQ中的目标任务开始处的流队列入口SQE的指示信息和SQ中的目标任务结束处的SQE的指示信息。
例如,目标任务的位置可以由目标任务所在的SQ的id、该SQ中的任务开始处的SQE的id以及该SQ中的任务结束处的SQE的id指示。
也就是说,目标任务的指示信息可以包括目标任务所在的流队列SQ的指示信息、SQ中的目标任务开始处的流队列入口SQE的指示信息和SQ中的目标任务结束处的SQE的指示信息。
任务调度器可以由硬件实现,也可以由软件实现,或者,也可以由硬件和软件的结合来实现。
可选地,任务调度器包括第一任务调度模块。第一任务调度模块基于硬件执行该条件算子,以得到目标任务的指示信息。第一任务调度模块根据目标任务的指示信息调度运算单元执行目标任务。在该情况下,该条件算子为第一任务调度模块支持的条件算子。
第一任务调度模块可以由硬件实现。例如,第一任务调度模块可以采用硬件调度加速器。
进一步地,在该条件算子为任务调度器中的第一任务调度模块所支持的条件算子的情况下,第一任务调度模块基于硬件执行该条件算子,以得到目标任务的指示信息。也就是说,在该条件算子为硬件能够执行的条件算子的情况下,由硬件执行该条件算子,得到目标任务的指示信息。
示例性地,第一任务调度模块支持的条件算子的模板可以如后文中的表1所示。
在本申请实施例中,由硬件执行条件算子,提高了处理速度。
可选地,任务调度器包括第二任务调度模块。第二任务调度模块调用程序执行该条件算子,以得到目标任务的指示信息。
第二任务调度模块可以由软件实现。例如,第二任务调度模块可以采用TS MCU。
示例性地,由第二任务调度模块根据指示信息调度运算单元执行目标任务。
可替换地,任务调度器还包括第一任务调度模块。可以由第一任务调度模块根据第二任务调度模块返回的指示信息调度运算单元执行目标任务。
软件可以支持更多的条件算子。例如,在芯片回片之后,可以通过软件升级支持更多的条件算子,进而能够支持更多类型的神经网络的运算,使得方案更加灵活,具有更强的可扩展性。
可选地,在条件算子为任务调度器中的第一任务调度模块不支持的条件算子的情况下,任务调度器中的第二任务调度模块调用程序执行条件算子,以得到目标任务的指示信息。
例如,在条件算子为任务调度器中的硬件模块不支持的类型时,可以由第二任务调度模块采用软件实现。
这样,在第一任务调度模块不支持条件算子的情况下,由第二任务调度模块调用程序执行条件算子,不需要返回至第一装置中执行该条件算子,提高了第二装置的适应性,能够支持更多的条件算子的执行。
此外,在第一任务调度模块支持条件算子的情况下,可以由第一任务调度模块基于硬件执行条件算子,提高处理速度。
进一步地,第一任务调度模块根据指示信息调度运算单元执行目标任务。
或者,第二任务调度模块根据指示信息调度运算单元执行目标任务。
任务调度器可以包括第一任务调度模块或第二任务调度模块。或者,任务调度器可以包括第一任务调度模块和第二任务调度模块。
S640,第二装置执行目标任务。
具体地,第二装置中被任务调度器调度的运算单元执行目标任务。
根据本申请实施例的方案,由设备侧的第二装置执行主机侧的第一装置下发的条件算子,可以避免在第二装置处理过程中,返回第一装置执行条件算子,减少了与第一装置进行数据交换的运行开销,提高了处理效率以及第二装置的利用率。
而且,较小的神经网络所需的算力较小,若运行在算力较大的硬件上,运算所需的时间很小,甚至不足微秒。由第一装置执行条件算子带来的中断开销为微秒级别,中断开销的占比大大影响了整体的运行时间。本申请实施例的方案能够显著减少中断开销,提高处理效率。
此外,相对于由主机侧的第一装置执行该条件算子而言,虽然在第二装置中由软件执 行条件算子也需要转发中断,但任务调度器所服务的应用较少,中断时延小于100微秒,远小于由主机侧执行条件算子带来的毫秒级别的中断时延。
本申请实施例还提供了一种运算加速方法700。运算加速方法700可以理解为方法600的一种具体实现方式,为了避免重复,在介绍方法700时适当省略部分描述。
方法700包括步骤S710至步骤S730。下面对步骤S710至步骤S730进行说明。
S710,第一装置获取目标神经网络。
示例性地,第一装置包括RTS接口。RTS接口可以用于获取目标神经网络的图。通过RTS接口获取的图中的任务为第二装置支持的任务。也就是说,该目标神经网络的条件算子为第二装置支持的条件算子,即第二装置能够执行的条件算子。
S720,第一装置将目标神经网络中的一个或多个任务下发至第二装置中,该一个或多个任务包括条件算子。
示例性地,RTS将目标神经网络中的任务封装下发至第二装置中。
以图7为例,图7中的运算加速器包括main memory、硬件调度加速器、TS MCU和AI cores。图7中的运算加速器可以作为图5中的运算加速器的一种具体实现方式。main memory、硬件任务调度器、TS MCU和AI cores分别作为图5中的存储单元、第一任务调度模块、第二任务调度模块和运算单元的一种具体实现方式。
RTS将目标神经网络中的任务封装下发至图7中的main memory中的流队列(stream queue,SQ)中。或者说,RTS将目标神经网络中的任务对应的流队列入口(stream queue entry,SQE)写入第二装置的存储单元中。RTS写完SQE之后,可以更新该SQ的尾部信息,例如,尾指针,以通知任务调度器。图7中头指针和尾指针之间的格子即为第二装置需要执行的任务,第二装置按照顺时针的顺序执行需要执行的任务。
SQ指的是一个顺序执行的任务队列。一个图可以包括多个SQ以及该多个SQ之间的同步描述符。同步描述符用于指示该多个SQ之间的执行顺序。
示例性地,同步描述符中包括事件标识(event id)。在执行一个SQ时,若执行到用于事件记录(event record)的SQE时,将事件表(event table)中对应的event id置为1。在另一SQ中,若执行到等待事件(wait event)的SQE,则查找event table中对应的event id,若该event id为0,则不继续执行,直至event id为1。例如,如果包含wait event的SQ先执行,当发现对应的event id为0,会停止执行,直至另一个包括event record的SQ执行后将event id置为1,以实现该两个SQ“同步”的效果。
RTS可以根据目标神经网络的图将目标神经网络中的任务写入第二装置中相应的SQ中。
一个SQ包括多个SQE,一个SQE对应一个任务。SQE也可以理解为命令符或者图描述符,即用于指示任务执行所需的信息。本申请实施例中的图描述符可以包括调度描述符和条件描述符。具体地,调度描述符可以用于指示普通任务算子执行所需的信息。或者说,调度描述符用于调度运算单元执行该调度描述符对应的任务。普通任务算子指的是条件算子以外的其他算子。条件描述符用于指示条件算子执行所需的信息。
如图7所示,第二装置的存储单元中包括SQ0、SQ1…SQN这N+1个SQ。一个SQ中的一个格子表示一个任务。对于条件算子,RTS可以根据条件算子的图描述符将该条件算子对应的候选任务写入相应的位置。例如,对于if/else形式的条件算子,图描述符能够 指示在条件判断的结果为真(true)时的一个或多个候选任务的位置,以及条件判断的结果为假(false)时的一个或多个候选任务的位置。也就是说,在条件判断的结果为true时,可以并发执行多个任务。在条件判断的结果为false时,可以并发执行多个任务。
S730,第二装置执行该一个或多个任务。
对于该一个或多个任务中不包括条件算子的任务,或者说,对于调度命令符,任务调度器从main memory中读取该命令符,解释并执行该命令符,调度运算单元执行该任务,例如,调度AI core执行该任务。当一个任务执行完成,可以更新SQ的头部信息。例如,如图7所示,将头指针顺时针移动至下一格。
需要说明的是,在该过程中,RTS可以继续写入其他SQE,并更新“尾指针”以通知任务调度器。
对于该一个或多个任务中不包括条件算子的任务,或者说,对于条件命令符,任务调度器不调度运算单元执行该任务,而是在任务调度器中执行该条件算子。例如,在硬件调度加速器或TS MCU中执行该条件算子。
在一种可能的形式中,可以由TS MCU执行该条件算子,并将执行结果返回至硬件调度加速器中,硬件调度加速器根据执行结果调度运算单元,例如,AI cores,执行该目标任务。
例如,转发中断至TS MCU中,由TS MCU执行该条件算子,并根据执行结果将对应的SQ段落发射至硬件调度加速器上,由硬件调度加速器调度运算单元执行该SQ段落,即目标任务。
由TS MCU执行该条件算子,即由软件执行该条件算子,这样,在芯片回片之后,可以通过软件升级支持更多的条件算子,使方案更加灵活,具有更强的可扩展性。
而且,相对于由主机侧执行该条件算子而言,虽然由TS MCU执行条件算子也需要转发中断,但TS MCU所服务的应用较少,例如,TS MCU可以仅服务执行条件算子这一应用,中断时延小于100微秒,远小于由主机侧执行条件算子带来的毫秒级别的中断时延。
在另一种可能的实现方式中,若该条件算子为硬件调度加速器支持的条件算子,例如,该条件算子满足表1中的条件算子的模板,硬件调度加速器可以执行该条件算子,根据该条件算子的执行结果即可确定目标任务。硬件调度加速器根据执行结果调度运算单元,例如AI cores,执行该目标任务。以if/else算子为例,硬件调度加速器执行该条件算子,得到执行结果为true或false,硬件调度加速器可以根据该条件算子的命令符调度运算单元执行true或false对应的任务,即目标任务。
可选地,该条件算子为if/else算子,if/else算子的入参包括以下至少一项:compare_op、compare_type、launch_if_true、launch_if_false、compare_src1或compare_src2,其中,compare_op表示判断操作的类型,compare_type表示判断操作中的数据的类型,launch_if_true表示执行结果为真时的候选任务、launch_if_false表示执行结果为假时的候选任务,compare_src1和compare_src2用于指示判断操作中的数据。判断操作的执行结果是基于compare_src1和compare_src2指示的数据执行判断操作得到的。
表1示出了第一任务调度模块支持的条件算子的模板(template)。该目标神经网络中的if/else算子满足表1中的条件算子的模板,也就是说,在目标神经网络的一个或多个任务中的if/else算子的入参包括compare_op、compare_type、launch_if_true、launch_if_false、 compare_src1或compare_src2时,该条件算子即为第一任务调度模块支持的条件算子。
可选地,该条件算子为switch/case算子,switch/case算子的入参包括以下至少一项:compare_src1、switch/case算子中的各个情况(case)下的待比较值或各个case下的候选任务的指示新,其中,compare_src1用于指示判断操作中的目标比较值。目标比较值用于与各个case下的待比较值进行比较,以得到switch/case算子的执行结果所属的case。
示例性地,该条件算子包括多个情况,该多个情况中的case0中的待比较值与目标比较值相等,则该条件算子的执行结果为case0,对应的候选任务即为case0对应的候选任务。
该目标神经网络中的switch/case算子满足表1中的条件算子的模板,也就是说,在目标神经网络的一个或多个任务中的switch/case算子的入参包括compare_src1、各个情况下的待比较值或各个情况下的候选任务的指示信息时,该条件算子即为第一任务调度模块支持的条件算子。
可选地,该条件算子为launch stream算子,launch stream算子的入参包括launch_param,launch_param用于指示目标任务。
表1中示出了if/else算子、switch/case算子和launch stream算子的入参和入参的示例性描述。
在表1的if/else算子的入参中,compare_op表示判断操作的类型,或者说比较操作的类型,即在if/else算子中判断真(true)或假(false)时采用的操作。例如,操作的类型可以包括:大于(>)、小于(小于)、大于或等于(>=)、小于或等于(<=)、不等于(!=)或等于(==)等。compare_type表示判断操作中的数据类型。launch_if_true用于描述如果执行结果为true时,if/else算子应该怎么操作。或者说,launch_if_true用于指示执行结果为true时对应的候选任务。launch_if_true包括执行结果为true时的候选任务所在的SQ的id和候选任务对应的SQ的段落的标识,即候选任务对应的SQ的段落中的该任务开始处的sqe的id和该任务结束处的sqe的id。launch_if_false是与launch_if_true相对的入参,用于描述如果执行结果为false时,if/else算子应该怎么操作。或者说,launch_if_false用于指示执行结果为false时对应的候选任务。launch_if_false包括执行结果为false时的候选任务所在的SQ的id和候选任务对应的SQ的段落的标识。需要说明的是,SQ id也可以是当前if/else算子所在的SQ的id。也就是说,可以支持循环操作。compare_src1用于回读该指针指向的数据,并将该数据作为compare_op的左手输入。compare_op的左手输入即为该判断操作符的左侧的输入。compare_src2若为一个直接值,该值可以作为compare_op的右手输入。compare_op的右手输入即为该判断操作符的右侧的输入。compare_src2若为一个用户态指针,则用于回读该指针指向的数据,并将该数据作为compare_op的右手输入。
以图2中的if/else算子为例,其中,compare_op为==,compare_src1为mem[XXX],即一个用户态指针,用于回读地址为XXX处的数据,并将该数据作为==的左侧的输入数据。compare_src2为yy,即一个直接值,该数据作为==右侧的输入数据。launch_if_true可以包括task2a和task3a所在的SQ的id以及task2a和task3a对应的任务开始处的sqe id和任务结束处的sqe id。launch_if_false可以包括task2b和task3b所在的SQ的id以及task2b和task3b对应的任务开始处的sqe id和任务结束处的sqe id。此外,还可以通过compare_type确定判断操作中的数据类型(图2中未示出)。例如,判断操作中的数据类 型可以为浮点数或整型数等。
图8示出了一种包括if/else算子的任务序列。如图8所示,RTS可以根据该if/else算子的描述将对应的候选任务写入对应的SQ中。图8中,SQn中包括if/else算子,即图8中的if/else节点(node),该if/else节点可以表示为if/else node(addr,#imm/addr,op,type,true_cond,false_cond)。addr即表1中的if/else算子中的compare_src1,表示到全局存储器(global memory)的指针。#imm/addr即表1中的compare_src2,表示直接值(immediate value)或该值的地址,该值用于和addr指示的值执行比较操作。op表1中的compare_op,表示addr指示的值和#imm/addr指示的值之间的操作。type即表1中的compare_type,表示addr指示的值和#imm/addr指示的值的数据类型。true_cond即表1中的launch_if_true,false_cond即表1中的launch_if_false。true_cond和false_cond均包括三个参数:需要执行的SQ、该SQ中执行起点处的SQE偏置、该SQ中执行终点处的SQE偏置。如图8所示,在该if/else的执行结果为“是”时,需要执行的SQ为SQx,SQx中执行起点处的SQE偏置和SQx中执行终点处的SQE偏置即为SQx中的task0、task1和task2对应的起始位置的SQE偏置和终点位置的SQE偏置。在该if/else的执行结果为“否”时,需要执行的SQ为SQy,SQy中执行起点处的SQE偏置和SQy中执行终点处的SQE偏置即为SQy中的task8、task9和task10对应的起始位置的SQE偏置和终点位置的SQE偏置。
需要说明的是,本申请实施例中的执行结果为“是”,也可以称为执行结果为真(true)。执行结果为“否”,可以称为执行结果为假(false)。
图9示出了另一种包括if/else算子的任务序列。如图9所示,RTS可以根据该if/else算子的描述将对应的候选任务写入对应的SQ中。SQn中包括if/else算子,即图9中的if/else节点(node)。图9与图8的区别在于,图9中的条件算子,在该if/else的执行结果为“是”时,需要执行的SQ为SQn,即当前if/else所在的SQ。在该if/else的执行结果为“否”时,中断循环任务,该任务为可选任务。也就是说,本申请实施例中的条件算子支持循环操作。
表1
在switch/case算子的入参中,compare_src1用于回读该指针指向的数据(即目标比较值),该数据用于与各个情况(case)中的入参(即待比较值)执行比较操作。case0_launch用于描述如果满足case0的情况下,switch/case算子应该怎么操作。或者说,case0_launch用于指示执行结果为case0的情况下对应的候选任务。case0_launch包括一个直接值(即待比较值)、执行结果为case0时的候选任务所在的SQ的id以及候选任务对应的SQ的段落的标识,即候选任务对应的SQ的段落中的该任务开始处的sqe的id和该任务结束处的sqe的id。该直接值用于和compare_src1返回的数据进行比较,判断执行结果是否为case0。例如,若该直接值与compare_src1返回的数据相等,则执行结果为case0,执行对应的候选任务。若执行结果不是case0,则继续判断是否满足下一个case,即case1,以此类推。
表1中仅示出了6个case的switch/case算子,也就是说,表1中的switch/case算子最多可以包括6个case。如果多于6个case的情况,可以要求用户串联下一个switch/case算子。
此处的switch/case算子中的case的数量仅为示例,在实际应用中,可以根据需要设置case的数量。
图10示出了一种包括switch/case算子的任务序列。如图10所示,RTS可以根据该switch/case算子的描述将对应的候选任务写入对应的SQ中。图10中,SQn中包括switch/case算子,即图10中的switch/case节点。图10中的addr即表1中的switch/case算子中的compare_src1。#case0_var即表1中的case0_launch中的直接值,case0_cond包括表1中的case0_launch中执行结果为case0时的任务所在的sq id、任务开始处的sqe id和任务结束处的sqe id。如图10所示,在执行结果为case0时,任务所在的SQ为SQx,任务开始处的sqe id和任务结束处的sqe id即为SQx中的task0、task1和task2对应的起始位置的SQE偏置和终点位置的SQE偏置。图10中示出了在超过6个case时,两个switch/case算子串联的情况。#case1_val、case1_cond、#case5_val、case5_cond、#case6_val、case6_cond、#case7_val、case7_cond、#case11_val以及case11_cond的含义可以参考#case0_var和case0_cond的含义,利用对应的case替换case0即可,此处不再赘述。应理解,图10仅以case0的情况下对应的候选任务为例进行说明,其他case对应的候选任务均可以根据相应的入参确定。
在launch stream算子的入参中,launch_param包括任务所在的sq id、任务开始处的sqe id和任务结束处的sqe id。
图11示出了一种包括if/else算子和launch stream算子的任务队列。图11的(a)为输入的目标神经网络的图,图11的(b)为利用if/else算子和launch stream算子对图11的(a)进行转换后得到的任务队列。如图11的(b)所示,RTS可以根据该if/else算子和launch stream算子的描述将对应的候选任务写入对应的SQ中。图11中的条件算子的执行结果为true时对应两个分支,一个分支包括task0和task1,一个分支包括task2和task3。条件算子的执行结果为false时对应的候选任务为task4。launch stream算子(例如,图11中的launch SQ)相当于将该两个分支合并,使得目标神经网络中的条件算子能够通过表1所示的if/else算子的模板表示。将if/else算子执行结果为true时的task0和task1写入SQx,并引入launch SQ。将if/else算子执行结果为false时的task4写入SQz。将if/else算子执行结果为true时的task2和task3写入SQy,并通过launch SQ发起执行SQy。以使得条件算子的执行结果为true时,并行执行SQx和SQy。
应理解,表1中的条件算子的模板仅为第一任务调度模块支持的模板的示例。第一任务调度模块还可以支持表1中的条件算子的组合。此外,在实际应用中,可以根据需要设置该模板。
若该条件算子为硬件调度加速器不支持的条件算子,可以由TS MCU执行该条件算子,并将执行结果返回至硬件调度加速器中,硬件调度加速器根据执行结果调度运算单元,例如,AI cores,执行该目标任务。
在条件算子为硬件支持的条件算子的情况下,由硬件执行该条件算子,可以进一步提高处理速度,减少时延开销。
在执行完一个SQ中的条件算子对应的SQE之后,可能会动态地发起执行该SQ或其他SQ中的一段SQE,即目标任务对应的SQE。目标任务可能位于该SQ中,也可能位于其他SQ中。因此,在执行完一个SQ中的条件算子对应的SQE之后,不一定会更新该SQ中的头指针。
下面结合图12至图14对本申请实施例的装置进行说明。应理解,下面描述的装置能够执行前述本申请实施例的方法,为了避免不必要的重复,下面在介绍本申请实施例的装置时适当省略重复的描述。
图12是本申请实施例的运算加速器的示意性框图。图12所示的运算加速器4000包括任务调度器4010、存储单元4020和运算单元4030。运算加速器4000可以作为第二装置执行本申请实施例中的方法600或方法700。
存储单元4020用于存储来自第一装置的目标神经网络中的一个或多个任务,一个多个任务包括条件算子;
任务调度器4010用于执行条件算子,以得到目标任务的指示信息,目标任务的指示信息用于指示条件算子对应的多个候选任务中的目标任务;
运算单元4030用于执行目标任务。
可选地,在条件算子为任务调度器4010中的第一任务调度模块支持的条件算子的情况下,第一任务调度模块用于:执行条件算子,以得到目标任务的指示信息。
可选地,在条件算子为任务调度器4010中的第一任务调度模块不支持的条件算子的 情况下,任务调度器4010中的第二任务调度模块用于:执行条件算子,以得到目标任务的指示信息。
图13是本申请实施例的运算加速器的示意性框图。图13所示的运算加速器5000包括获取单元5010和发送单元5020。运算加速器5000可以作为第一装置执行本申请实施例中的方法600或方法700。
获取单元5010用于获取目标神经网络;发送单元5020用于将目标神经网络中的一个或多个任务下发至第二装置,一个或多个任务包括条件算子。
可选地,获取单元5010还用于:获取第二装置的配置信息,配置信息用于指示第二装置支持的条件算子;以及发送单元5020具体用于:在条件算子为第二装置支持的条件算子的情况下,将一个或多个任务下发至第二装置。
需要说明的是,上述运算加速器4000和运算加速器5000以功能单元的形式体现。这里的术语“单元”可以通过软件和/或硬件形式实现,对此不作具体限定。
例如,“单元”可以是实现上述功能的软件程序、硬件电路或二者结合。所述硬件电路可能包括应用特有集成电路(application specific integrated circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。
因此,在本申请的实施例中描述的各示例的单元,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
图14是本申请实施例提供的运算加速器的硬件结构示意图。图14所示的运算加速器6000包括存储器6001、处理器6002、通信接口6003以及总线6004。其中,存储器6001、处理器6002、通信接口6003通过总线6004实现彼此之间的通信连接。
存储器6001可以是只读存储器(read only memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(random access memory,RAM)。存储器6001可以存储程序,当存储器6001中存储的程序被处理器6002执行时,处理器6002用于执行本申请实施例的运算加速方法的各个步骤。具体地,处理器6002可以执行上文中的方法600或方法700。
处理器6002可以采用通用的中央处理器(central processing unit,CPU),微处理器,应用专用集成电路(application specific integrated circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请方法实施例的运算加速方法。
处理器6002还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的运算加速方法的各个步骤可以通过处理器6002中的硬件的集成逻辑电路或者软件形式的指令完成。
上述处理器6002还可以是通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体 现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器6001,处理器6002读取存储器6001中的信息,结合其硬件完成图12或图13所示的装置中包括的单元所需执行的功能,或者,执行本申请方法实施例的运算加速方法。
通信接口6003使用例如但不限于收发器一类的收发装置,来实现运算加速器6000与其他设备或通信网络之间的通信。例如,可以通过通信接口6003获取任务。
总线6004可包括在运算加速器6000各个部件(例如,存储器6001、处理器6002、通信接口6003)之间传送信息的通路。
应注意,尽管上述运算加速器6000仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,运算加速器6000还可以包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,运算加速器6000还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,运算加速器6000也可仅仅包括实现本申请实施例所必须的器件,而不必包括图14中所示的全部器件。
本申请实施例还提供了运算加速系统,包括本申请实施例中的第一装置和第二装置。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读介质存储用于设备执行的程序代码,该程序代码包括用于执行本申请实施例中的运算加速方法。
本申请实施例还提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行本申请实施例中的运算加速方法。
本申请实施例还提供一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行本申请实施例中的运算加速方法。
可选地,作为一种实现方式,所述芯片还可以包括存储器,所述存储器中存储有指令,所述处理器用于执行所述存储器上存储的指令,当所述指令被执行时,所述处理器用于执行本申请实施例中的运算加速方法。
上述芯片具体可以是FPGA或者ASIC。
应理解,本申请实施例中的处理器可以为中央处理单元(central processing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随 机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组 件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (17)
- 一种运算加速方法,其特征在于,包括:第二装置获取来自第一装置的目标神经网络中的一个或多个任务,所述一个或多个任务包括条件算子;所述第二装置执行所述条件算子,以得到目标任务的指示信息,所述目标任务的指示信息用于指示所述条件算子对应的多个候选任务中的目标任务;所述第二装置执行所述目标任务。
- 根据权利要求1所述的方法,其特征在于,所述第二装置执行所述条件算子,以得到目标任务的指示信息,包括:在所述条件算子为所述第二装置中的第一任务调度模块支持的条件算子的情况下,所述第一任务调度模块基于硬件执行所述条件算子,以得到所述目标任务的指示信息。
- 根据权利要求1所述的方法,其特征在于,所述第二装置执行所述条件算子,以得到目标任务的指示信息,包括:在所述条件算子为所述第二装置中的第一任务调度模块不支持的条件算子的情况下,所述第二装置中的第二任务调度模块调用程序执行所述条件算子,以得到所述目标任务的指示信息。
- 根据权利要求1至3中任一项所述的方法,其特征在于,所述目标任务的指示信息包括所述目标任务所在的流队列SQ的指示信息、所述SQ中的目标任务开始处的流队列入口SQE的指示信息和所述SQ中的目标任务结束处的SQE的指示信息。
- 一种运算加速方法,其特征在于,包括:第一装置获取目标神经网络;将所述目标神经网络中的一个或多个任务下发至第二装置,所述一个或多个任务包括条件算子,以使所述第二装置执行所述条件算子得到目标任务的指示信息,所述目标任务的指示信息用于指示所述条件算子对应的多个候选任务中的目标任务,使所述第二装置执行所述目标任务。
- 根据权利要求5所述的方法,其特征在于,所述将所述目标神经网络中的一个或多个任务下发至第二装置,包括:获取所述第二装置的配置信息,所述配置信息用于指示所述第二装置支持的条件算子;在所述条件算子为所述第二装置支持的条件算子的情况下,将所述一个或多个任务下发至第二装置。
- 一种运算加速器,其特征在于,包括:任务调度器、存储单元和运算单元,其中,所述存储单元用于存储来自第一装置的目标神经网络中的一个或多个任务,所述一个多个任务包括条件算子;所述任务调度器用于执行所述条件算子,以得到目标任务的指示信息,所述目标任务的指示信息用于指示所述条件算子对应的多个候选任务中的目标任务;所述运算单元用于执行所述目标任务。
- 根据权利要求7所述的运算加速器,其特征在于,在所述条件算子为所述任务调度器中的第一任务调度模块支持的条件算子的情况下,所述第一任务调度模块用于:基于硬件执行所述条件算子,以得到所述目标任务的指示信息。
- 根据权利要求7所述的运算加速器,其特征在于,在所述条件算子为所述任务调度器中的第一任务调度模块不支持的条件算子的情况下,所述任务调度器中的第二任务调度模块用于:调用程序执行所述条件算子,以得到所述目标任务的指示信息。
- 根据权利要求7至9中任一项所述的运算加速器,其特征在于,所述目标任务的指示信息包括所述目标任务所在的流队列SQ的指示信息、所述SQ中的目标任务开始处的流队列入口SQE的指示信息和所述SQ中的目标任务结束处的SQE的指示信息。
- 一种运算加速器,其特征在于,包括:获取单元和发送单元,其中,所述获取单元用于获取目标神经网络;所述发送单元用于将所述目标神经网络中的一个或多个任务下发至第二装置,所述一个或多个任务包括条件算子,以使所述第二装置执行所述条件算子得到目标任务的指示信息,所述目标任务的指示信息用于指示所述条件算子对应的多个候选任务中的目标任务,使所述第二装置执行所述目标任务。
- 根据权利要求11所述的运算加速器,其特征在于,所述获取单元还用于:获取所述第二装置的配置信息,所述配置信息用于指示所述第二装置支持的条件算子;以及所述发送单元具体用于:在所述条件算子为所述第二装置支持的条件算子的情况下,将所述一个或多个任务下发至第二装置。
- 一种运算加速系统,其特征在于,包括:第一装置和第二装置,其中,所述第一装置用于:获取目标神经网络;将所述目标神经网络中的一个或多个任务下发至第二装置,所述一个或多个任务包括条件算子;所述第二装置用于:执行所述条件算子,以得到目标任务的指示信息,所述目标任务的指示信息用于指示所述条件算子对应的多个候选任务中的目标任务;所述第二装置执行所述目标任务。
- 一种运算加速器,其特征在于,包括处理器和存储器,所述存储器用于存储程序指令,所述处理器用于调用所述程序指令以执行如权利要求1至4或权利要求5至6中任一项所述的方法。
- 一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储设备执行的程序代码,所述程序代码包括用于执行如权利要求1至4或权利要求5至6中任一项所述的方法。
- 一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在计算机 上运行时,使得所述计算机执行如权利要求1至4或权利要求5至6中任一项所述的方法。
- 一种芯片,其特征在于,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令以执行如权利要求1至4或权利要求5至6中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/100869 WO2022261928A1 (zh) | 2021-06-18 | 2021-06-18 | 运算加速方法及运算加速器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117501278A true CN117501278A (zh) | 2024-02-02 |
Family
ID=84526104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180099441.XA Pending CN117501278A (zh) | 2021-06-18 | 2021-06-18 | 运算加速方法及运算加速器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117501278A (zh) |
WO (1) | WO2022261928A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902819B (zh) * | 2019-02-12 | 2023-04-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
CN110490309B (zh) * | 2019-08-14 | 2022-06-07 | 中科寒武纪科技股份有限公司 | 一种用于神经网络的算子融合方法及其相关产品 |
US20210158131A1 (en) * | 2019-11-27 | 2021-05-27 | Amazon Technologies, Inc. | Hierarchical partitioning of operators |
CN112686378A (zh) * | 2020-12-23 | 2021-04-20 | 展讯通信(上海)有限公司 | 神经网络的计算部署方法及装置、存储介质、计算机设备 |
-
2021
- 2021-06-18 WO PCT/CN2021/100869 patent/WO2022261928A1/zh active Application Filing
- 2021-06-18 CN CN202180099441.XA patent/CN117501278A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022261928A1 (zh) | 2022-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI746865B (zh) | 深度視覺處理器 | |
CN111797893B (zh) | 一种神经网络的训练方法、图像分类系统及相关设备 | |
US11307864B2 (en) | Data processing apparatus and method | |
EP3612990B1 (en) | Power-efficient deep neural network module configured for layer and operation fencing and dependency management | |
US11307865B2 (en) | Data processing apparatus and method | |
CN107832804A (zh) | 一种信息处理方法及相关产品 | |
Zhang et al. | Compacting deep neural networks for Internet of Things: Methods and applications | |
CN113807399B (zh) | 一种神经网络训练方法、检测方法以及装置 | |
WO2022100165A1 (zh) | 神经网络模型的训练方法、图像处理方法及装置 | |
WO2022156475A1 (zh) | 神经网络模型的训练方法、数据处理方法及装置 | |
US11334358B2 (en) | Hardware accelerator having reconfigurable instruction set and reconfigurable decoder | |
US11436412B2 (en) | Predictive event searching utilizing a machine learning model trained using dynamically-generated event tags | |
CN111161705B (zh) | 语音转换方法及装置 | |
Srinivasan et al. | Deep learning algorithms for emotion recognition on low power single board computers | |
CN114554279B (zh) | 基于远程分析的触发器响应剪辑提取 | |
CN110008922B (zh) | 用于终端设备的图像处理方法、设备、装置、介质 | |
EP3991097A1 (en) | Managing workloads of a deep neural network processor | |
CN113627421B (zh) | 一种图像处理方法、模型的训练方法以及相关设备 | |
WO2023124361A1 (zh) | 芯片、加速卡、电子设备和数据处理方法 | |
CN116259311A (zh) | 一种语音处理方法及其相关设备 | |
CN117501278A (zh) | 运算加速方法及运算加速器 | |
CN116802646A (zh) | 数据处理的方法和装置 | |
CN112771566B (zh) | 图像处理装置和图像处理方法 | |
CN115146757A (zh) | 一种神经网络模型的训练方法及装置 | |
CN117311941B (zh) | 图像处理方法及相关设备 |
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 |