CN110058883A - 一种基于opu的cnn加速方法及系统 - Google Patents
一种基于opu的cnn加速方法及系统 Download PDFInfo
- Publication number
- CN110058883A CN110058883A CN201910192502.1A CN201910192502A CN110058883A CN 110058883 A CN110058883 A CN 110058883A CN 201910192502 A CN201910192502 A CN 201910192502A CN 110058883 A CN110058883 A CN 110058883A
- Authority
- CN
- China
- Prior art keywords
- instruction
- opu
- layer
- cnn
- mapping
- 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 43
- 238000013507 mapping Methods 0.000 claims abstract description 76
- 230000001133 acceleration Effects 0.000 claims abstract description 69
- 238000005457 optimization Methods 0.000 claims abstract description 13
- 238000003860 storage Methods 0.000 claims description 86
- 238000004364 calculation method Methods 0.000 claims description 60
- 238000006243 chemical reaction Methods 0.000 claims description 23
- 238000013139 quantization Methods 0.000 claims description 20
- 238000005215 recombination Methods 0.000 claims description 20
- 230000006798 recombination Effects 0.000 claims description 20
- 238000012805 post-processing Methods 0.000 claims description 17
- 238000010586 diagram Methods 0.000 claims description 11
- 238000013481 data capture Methods 0.000 claims description 10
- 238000011176 pooling Methods 0.000 claims description 9
- 238000004458 analytical method Methods 0.000 claims description 7
- 230000004913 activation Effects 0.000 claims description 5
- 238000005520 cutting process Methods 0.000 claims description 5
- 230000008521 reorganization Effects 0.000 claims description 5
- 238000011835 investigation Methods 0.000 claims description 3
- 238000012549 training Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 abstract description 5
- 239000010410 layer Substances 0.000 description 90
- 238000013527 convolutional neural network Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 11
- 238000013461 design Methods 0.000 description 11
- 235000019800 disodium phosphate Nutrition 0.000 description 7
- 238000013523 data management Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 230000004807 localization Effects 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000010008 shearing Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/10—Machine learning using kernel methods, e.g. support vector machines [SVM]
-
- 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/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Neurology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于OPU的CNN加速方法及系统,涉及基于FPGA的CNN加速方法领域;方法包括定义OPU指令集;编译器将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;OPU读取上述编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速;本发明通过定义指令类型和设置指令颗粒度、进行网络重组优化、搜索解空间获得保证最大吞吐量的映射方式、硬件采取并行计算模式,解决现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器的问题,达到了不重构FPGA加速器,通过指令快速实现不同网络配置的加速的效果。
Description
技术领域
本发明涉及基于FPGA的CNN加速方法领域,尤其是一种基于OPU的CNN加速方法及系统。
背景技术
深度卷积神经网络(CNNs)在各种应用中表现出很高的准确性,如视觉对象识别,语音识别和物体检测等。然而,它在准确性上的突破在于高计算成本的代价,需要通过计算集群,GPU和FPGA来推动加速。其中,FPGA加速器具有能量效率高,灵活性好,计算能力强等优点,特别是在智能手机上的语音识别和视觉对象识别等边缘设备上的CNN深度应用中脱颖而出;其通常涉及架构探索和优化,RTL编程,硬件实现和软件-硬件接口开发,随着发展人们对FPGA CNN(卷积神经网络)加速的自动编译器进行了深入的研究,其可配置平台提供丰富的并行计算资源和高能效,使其成为边缘计算和数据中心CNN加速的理想选择。但随着DNN(深度神经网络)算法在各种更复杂的计算机视觉任务中的发展,如人脸识别,车牌识别,姿态识别等,多种DNN的级联结构被广泛应用以获得更好的性能,这些新的应用场景要求不同网络的顺序执行,因此需要不断重新配置FPGA器件,带来耗时长的问题;另一方面,客户网络架构中的每次新的更新都可以导致RTL代码的再生和整个实现过程,耗时更长。
近年来,能够快速将CNN部署到FPGA的自动加速器发生器成为另一个焦点,现有技术中有研究者开发了Deep weaver,它根据设计规划者提供的资源分配和硬件组织将CNN算法映射到手工优化设计模板;还有人提出了一个基于RTL模块库的编译器,它由多个优化的手工编码Verilog模板组成,描述了不同类型层的计算和数据流;与定制设计的加速器相比,这两项工作都获得了可比的性能;还有研究者提供了一个基于HLS的编译器,主要关注通过内存访问重组进行的带宽优化;还有研究者提出了一种收缩阵列架构,以实现更高的FPGA运行频率。但是现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,这保证了基于RTL或基于HLS-RTL的模板的合理高性能,但在调整目标网络的情况下硬件升级复杂度高。因此,需要一种CNN部署到FPGA的通用方法,实现不需要对单独网络产生特定硬件描述代码,不涉及对FPGA进行重新烧录,全部部署流程依靠指令配置完成。
发明内容
本发明的目的在于:本发明提供了一种基于OPU的CNN加速方法及系统,解决现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,目标网络改变时硬件升级复杂度高、通用性差的问题。
本发明采用的技术方案如下:
一种基于OPU的CNN加速方法,包括如下步骤:
定义OPU指令集;
编译器将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
OPU根据读取上述编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速;
其中,所述OPU指令集包括直接执行并为有条件指令提供配置参数的无条件指令和满足触发条件后执行的有条件指令,定义的OPU指令集根据CNN网络调研结果和加速需求对指令颗粒度进行优化设置;
所述转换包括文件转换、网络的图层重组和生成统一中间表示IR;
所述映射包括解析IR、根据解析信息搜索解空间获得保证最大吞吐量的映射方式和根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令。
优选地,所述定义OPU指令集包括定义有条件指令、定义无条件指令和设置指令颗粒度,定义有条件指令包括如下步骤:
构建有条件指令,有条件指令包括读存储指令、写存储指令、数据抓取指令、数据后处理指令和计算指令;
设置有条件指令的寄存器和执行方式,执行方式为满足硬件写入的触发条件后执行,寄存器包括参数寄存器和触发条件寄存器;
设置有条件指令的参数配置方式,配置方式为根据无条件指令进行参数配置;
定义无条件指令包括如下步骤:
定义无条件指令的参数;
定义无条件指令参数的执行方式,执行方式为被读取后直接执行。
优选地,设置指令颗粒度的细节为:所述读存储指令的颗粒度设置为每次读入n个数,n>1;所述写存储指令的颗粒度设置为每次写出n个数,n>1;所述数据抓取指令的颗粒度设置为64的倍数,即同时操作64个输入数据;所述数据后处理指令的颗粒度设置为每次操作64的倍数个数据;所述计算指令的颗粒度设置为32。
优选地,所述并行计算模式包括以下步骤:
步骤c1:每次操作大小为IN*IM*IC的块数据,从初始位置开始读取数据,每次读取ICS个数据,按步幅x读取内核第一个参数所对应相乘的所有位置,直至对应于内核初始位置的所有像素被计算;
步骤c2:按步骤c1执行Kx*Ky*(IC/ICS)*(OC/OCS)轮直至对应于所有内核位置的所有像素被计算。
优选地,所述转换步骤细节如下:
分析CNN定义文件的形式后转换文件,压缩并提取其中的网络信息;
将网络进行运算重组为多个图层组,所述图层组包括一个主要层和多个附属层,所述图层组间的结果保存至DRAM,所述主要层和附属层之间数据流通由片上流水完成;所述主要层包括卷积层和完全连接层,所述附属层包括池化层、激活层和残差层;
根据网络信息和重组信息生成IR。
优选地,所述映射步骤中根据解析信息搜索解空间获得最大吞吐量的映射方式包括如下步骤:
步骤a1:计算峰值理论值,计算如以下公式所示:
T=f*TNPE
其中,T表示吞吐量(每秒操作次数),f表示工作频率,TNPE表示芯片上可用的PE总数;
步骤a2:定义整个网络计算所需的时间L的最小值,计算如以下公式所示:
其中,αi表示第i层的PE效率,Ci表示完成第i层所需的操作量;
步骤a3:计算完成第i层所需的操作量Ci,计算如以下公式所示:
其中,表示对应层整体输出大小,表示输入层深度,表示该层权重尺寸;
步骤a4:定义αi,计算如以下公式所示:
其中,ti表示计算第i层所需的时间;
步骤a5:计算ti,计算如以下公式所示:
其中,Kx×Ky表示该层的权重尺寸,ONi×OMi表示输出块大小,ICi×OCi表示片上内核块大小,表示输入层深度,表示输出层深度,表示输入层的大小,INi,IMi表示输入层的输入块的大小;
步骤a6:设定αi相关参数的约束条件,遍历参数的各种取值求解αi最大值,计算如以下公式所示:
maximize
INi,IMi,ICi,OCi αi
INi*IMi≤depththres
ICi*OCi≤NPE
ICi,OCi≤widththres
其中,depththres、widththres表示片上BRAM深度和宽度资源约束。
优选地,所述转换还包括CNN训练数据进行8bit量化,细节如下:
重组后的网络选择8位作为特征映射和内核权重的数据量化标准,即进行8bit量化,所述量化采用动态量化,所述动态量化包括为每一层特征映射和内核权重数据中心寻找最佳范围,细节如以下公式所示:
其中,float表示内核权重或特征映射的原始单精度,fix(floc)表示基于某个分数长度floc将float切割为定点后的值。
一种基于OPU的CNN加速系统,包括
编译单元,用于将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
OPU,用于读取编译器编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速。
优选地,所述OPU包括存储读模块、存储写模块、计算模块、数据抓取模块、数据后处理模块和片上存储模块,所述片上存储模块包括特征图存储模块、内积参数存储模块、偏置存储模块、指令存储模块和中间结果存储模块,所述特征图存储模块、内积参数存储模块、偏置存储模块和指令存储模块结构均采用乒乓结构,所述乒乓结构为任何一个存储模块使用的同时,其他模块进行载入。
优选地,所述编译单元包括
转换单元,用于分析CNN定义文件后进行文件转换、网络图层重组和生成IR;
指令定义单元,用于定义指令后获取OPU指令集,定义指令包括定义有条件指令、定义无条件指令和根据CNN网络和加速需求设置指令颗粒度,其中,有条件指令包括读存储指令、写存储指令、数据抓取指令、数据后处理指令和计算指令;读存储指令的颗粒度设置为每次读入n个数,n>1,写存储指令的颗粒度设置为每次写出n个数,n>1,数据抓取指令的颗粒度设置为同时操作64个输入数据,数据后处理指令的颗粒度设置为每次操作64的倍数个数据,计算指令的颗粒度设置为32;
映射单元,用于获取最优加速器配置对应的映射方式后,根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令;
所述转换单元包括
操作单元,用于分析CNN定义文件后,转换CNN定义文件的形式和压缩CNN定义文件中的网络信息;
重组单元,用于将网络所有层重组为多个图层组,并将图层组分为主要层和附属层;
IR生成单元,用于组合网络信息和图层重组信息;
所述映射单元包括
映射方式获取单元,用于解析IR后,根据解析信息搜索解空间获得保证最大吞吐量的映射方式;
指令生成单元,用于根据OPU指令集将最大吞吐量对应的映射解表达为指令序列,生成不同目标网络的指令后完成映射。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1.本发明通过定义OPU指令集后,将不同目标网络的CNN定义文件进行转换、映射生成不同目标网络的指令完成编译,OPU根据开始信号读取指令,按照OPU指令集定义的并行计算模式运行指令,实现通用CNN加速,不需要对网络产生特定硬件描述代码,不需要对FPGA进行重新烧录,全部部署流程依靠指令配置完成;通过定义有条件指令、无条件指令、根据CNN网络和加速需求选择并行输入及输出通道计算模式设置指令颗粒度克服CNN加速系统中存在指令执行指令集对应处理器的普适性问题,以及无法准确预测指令顺序的问题,通过网络重组优化减少与片外的数据沟通,通过搜索解空间获得保证最大吞吐量的映射方式找到最优的性能配置,硬件采取并行计算模式克服加速结构的普适性问题,解决现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,目标网络改变时硬件升级复杂度高、通用性差的问题,达到了不重构FPGA加速器,通过指令快速实现不同网络配置的加速的效果;
2.本发明定义OPU指令集过程中定义有条件指令和无条件指令,无条件指令为有条件指令提供配置参数,有条件指令设置触发条件,触发条件在硬件中硬写入,有条件指令设置对应寄存器,在触发条件满足后执行,无条件指令在被读取后直接执行,替换参数寄存器内容,避免现有操作周期不确定性大导致无法预测指令排序的问题,达到了准确预测指令顺序的效果,根据CNN网络、加速需求和选择的并行输入及输出通道决定计算模式,并设置指令颗粒度,实现将不同结构的网络映射重组到具体结构,采用并行计算模式适应不同尺寸的网络的内核的大小,解决了指令集对应处理器的普适性,指令集和相应的处理器OPU用FPGA或者ASIC实现,OPU可以加速不同的目标CNN网络,避免了硬件重构;
3.本发明编译过程中通过网络重组优化、搜索解空间获得保证最大吞吐量的映射方式分别克服如何减少与片外的数据沟通、如何找到最优的性能配置的普适性问题;对网络进行优化和重组,将多层计算合并定义以实现流水线作业,以适应硬件结构,减少与片外的数据沟通以实现计算单元的最大利用效率;在搜索空间内寻找最大化吞吐量解,找到性能最优的加速器配置,将不同目标网络的CNN定义文件进行转换、映射生成不同目标网络的OPU可执行指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的快速加速;
4.本发明硬件采取并行输入及输出通道计算模式,在每个时钟周期,读取一个大小为1*1的深度为ICS的输入通道的片段以及相应的内核元素,在一轮流程中只使用一个数据块,最大化数据本地化利用率,保证了任何内核大小或步长的统一数据获取模式,极大地简化了计算之前的数据管理阶段,从而以更少的资源消耗实现更高的频率;输入和输出通道级并行性探索为资源利用提供了更高的灵活性,并保证了最高的泛化性能;
5.本发明进行在转换时对网络做8bit量化,节约运算资源和存储资源;
6.本发明OPU的存储模块除中间结果存储模块外,所有存储模块均设置为乒乓结构,一个存储模块数据在使用时,另一个模块数据进行载入以重叠数据交流时间,达到隐藏数据交流延迟的目的,利于提高加速速度。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明的CNN加速方法流程图;
图2为本发明的图层重组示意图;
图3为本发明的并行计算模式示意图;
图4为本发明的OPU结构示意图;
图5为本发明的指令序列示意图;
图6为本发明的实施例中的实物图;
图7为本发明的实施例中功率比较图;
图8为本发明的指令运行流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以下结合实施例对本发明的特征和性能作进一步的详细描述。
实施例1
一种基于OPU的CNN加速方法,包括如下步骤:
定义OPU指令集;
编译器将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
OPU读取上述编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速;
其中,OPU指令集包括直接执行并为有条件指令提供配置参数的无条件指令和满足触发条件后执行的有条件指令,定义OPU指令集根据CNN网络调研结果和加速需求对指令颗粒度进行优化设置;
转换包括文件转换、网络的图层重组和生成统一中间表示IR;
映射包括解析IR、根据解析信息搜索解空间获得保证最大吞吐量的映射方式和根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令。
一种基于OPU的CNN加速系统,包括
编译单元,用于将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置对应的映射方式生成不同目标网络的指令完成映射;
OPU,用于根据GUI发送的开始信号读取编译器编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速。
根据指令的种类和颗粒度实现基于FPGA硬件微处理器结构为OPU,OPU包括五个用于数据管理和计算的主要模块、四个用于缓存本地临时数据和片外存储载入的数据的存储模块和缓冲区,模块间实现流水线,同时模块内为流水结构,因此操作模块之间不需要额外的存储单元,如图4所示,OPU包括存储读模块、存储写模块、计算模块、数据抓取模块、数据后处理模块和片上存储模块,片上存储模块包括特征图存储模块、内积参数存储模块、偏置存储模块、指令存储模块和中间结果存储模块,特征图存储模块、内积参数存储模块、偏置存储模块和指令存储模块结构均采用乒乓结构,乒乓结构为任何一个存储模块使用中其他模块进行载入以重叠数据交流时间,可隐藏数据传输延迟,在使用缓冲区的数据时,可以重新填充和更新其他缓冲区,因此不会因将主要功能映射从外部存储移动到内部存储而导致额外的延迟;OPU每个输入缓冲器存储INi*IMi*ICi输入特征映射像素,其表示ICi输入通道的尺寸INi*IMi矩形子特征映射,每个内核缓冲区保持ICi*OCi*Kx*Ky个内核权重,对应于ICi输入通道和OCi输出通道内核。块大小和片上权重大小参数是层分解优化中的主要优化因子r,指令缓冲区每个模块缓存1024条指令,输出缓冲区保存未完成的中间结果供之后几轮计算使用。
在本实施例中,将8个不同架构的CNN映射到OPU以进行性能评估,在KC705中使用Xilinx XC7K325T FPGA模块,资源利用率如表1所示,用于运行软件转换器和映射器的Xeon5600CPU,PCIE II用于发送输入图像和读回结果,整体实验设置如图6所示。
表1 FPGA资源利用率表
LUT | 触发器FF | BRAM | DSP | |
利用率 | 133952(65.73%) | 191405(46.96%) | 135.5(30.45%) | 516(61.43%) |
网络描述:
将YOLOV2[22],VGG16,VGG19[23],Inceptionv1[24],InceptionV2,InceptionV3[25],ResidualNet[26],ResidualNetV2[27]映射到OPU,其中YOLOV2是目标检测网络,其余是图像分类网络,详细的网络架构如表2所示,涉及从平方内核(1x1,3x3,5x5,7x7)到拼接内核(1x7,7x1)的不同内核大小,以及各种池化层大小,还包括特殊层,例如inception层和残差层,表中input size表示输入大小,kernel size表示内核大小,pool size/poolstride表示池化大小/池化步幅,conv layer表示conv层,FC layer表示FC层,activationtype表示激活类型,operations表示运算。
表2网络信息表
制图性能:
通过吞吐量(每秒千兆操作),PE效率和每秒实时帧来评估映射性能。所有设计都在200MHZ以下运行,如表3所示,对于任何测试网络,所有类型的层的PE效率平均达到89.23%,卷积层达到92.43%;对于特定网络,PE效率甚至高于最先进的定制CNN实现方方法,如表4所示,表中frequency表示频率,throughput(GOPS)表示衡量处理器计算能力的指标单位,PE efficiency表示PE效率,conv PE efficiency表示卷积PE效率,frame/s表示帧/秒。
表3不同网络的映射性能表
业绩比较:
与定制的FPGA编译器相比,基于FPGA的OPU具有更快的编译和保证的性能,表4显示了与网络VGG16加速时的特殊编译器的比较;表中DSP number表示DSP编号,frequency表示频率,throughput(GOPS)表示衡量处理器计算能力的指标单位,throughout表示吞吐量,PE efficiency表示PE效率;
表4与定制加速器(VGG16)的比较表
由于不同FPGA模块上可用DSP资源相差较大,很难实现直接比较吞吐量,因此定义一个新的指标,为每个DSP的吞吐量以便更好地进行评估。很明显,特定领域设计与最先进的定制设计相比具有相当甚至更好的性能。当与表5中所示的特定于域的ASIC工作进行比较时,OPU专门针对CNN加速而不是通用神经网络操作进行了优化。因此,在运行CNN应用时,OPU可以实现更高的PE效率。表中PE number表示PE编号,frequency表示频率,throughput(GOPS)表示衡量处理器计算能力的指标单位,PE efficiency表示PE效率。
表5与特定领域的比较表
功率比较:
能效是边缘计算应用中的主要问题之一。在这里,将FPGA评估板kc705与运行在2.53GHZ的CPU Xeon W3505,运行在1.58GHZ的GPU Titan XP与3840CUDA核心和运行在1GHZ的GPU GTX 780与2304CUDA核心进行比较,比较结果如图7所示。平均而言,与现有技术的Nvidia Titan XP(2018)相比,kc705板(2012)的电源效率提高了2.66倍。
基于FPGA的OPU适用于各种CNN加速器应用,处理器流程接收来自流行的深度学习框架(如Tensorflow和Caffe)的网络架构,并输出板级FPGA加速系统。每次需要新的应用程序时,都不使用基于架构模板的新设计,而是使用细粒度的管道式统一架构,可以彻底探索不同CNN架构的并行性,从而确保整体利用率超过90%各种场景下的计算资源。因现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,本申请为实现不重构FPGA实现不同网络,设置加速处理器,控制本申请定义的OPU指令,通过编译器编译上述指令后生成指令序列,OPU根据指令定义的计算模式运行指令,实现CNN加速;本申请系统的组成、指令集与现有技术中CNN加速系统完全不一致,因为现有技术中的CNN加速系统采用不同的方法有不同的组成,本申请的硬件、系统和覆盖范围与现有的均不一样;本发明通过定义OPU指令集后,将不同目标网络的CNN定义文件进行转换、映射生成不同目标网络的指令完成编译,OPU根据开始信号读取指令,按照OPU指令集定义的并行计算模式运行指令,实现通用CNN加速,不需要对网络产生特定硬件描述代码,不需要对FPGA进行重新烧录,全部部署流程依靠指令配置完成;通过定义有条件指令、无条件指令、根据CNN网络、加速需求和选择的并行输入及输出通道决定计算模式,并设置指令颗粒度克服CNN加速系统中存在指令执行指令集对应处理器的普适性问题,以及无法准确预测指令顺序的问题,通过网络重组优化减少与片外的数据沟通,通过搜索解空间获得保证最大吞吐量的映射方式找到最优的性能配置,硬件采取并行计算模式克服加速结构的普适性问题,解决现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,目标网络改变时硬件升级复杂度高、通用性差的问题,达到了不重构FPGA加速器,通过指令快速实现不同网络配置的加速的效果;
实施例2
基于实施例1,细化本申请的定义OPU指令集,细节如下:
本申请定义的指令集需要克服指令执行指令集对应处理器的普适性问题,具体为现有CNN加速系统中存在的指令执行时间不确定性大,从而无法准确预测指令序列的问题和指令集对应处理器的普适性,因此采用的技术手段为:定义有条件指令、定义无条件指令和设置指令颗粒度,有条件指令定义其组成,设置有条件指令的寄存器和执行方式,执行方式为满足硬件写入的触发条件后执行,寄存器包括参数寄存器和触发条件寄存器;设置有条件指令的参数配置方式,配置方式为根据无条件指令进行参数配置;定义无条件指令包括定义其参数、定义其执行方式即直接执行;指令长度定义为统一长度,指令集具有图4所示的结构;指令颗粒度的设置:统计CNN网络和加速需求;根据统计结果和选择的并行输入及输出通道决定计算模式,并设置指令颗粒度;
每类指令的指令颗粒度根据CNN网络结构和加速需求设定:所述读存储指令,根据CNN加速特点设置其颗粒度为每次读入n个数,n>1;所述写存储指令,根据CNN加速特点设置其颗粒度为每次写出n个数,n>1;所述数据抓取指令,根据CNN网络的结构,其颗粒度为64的倍数,即同时操作64个输入数据;所述数据后处理指令,其颗粒度为每次操作64的倍数个数据;所述计算指令,因网络输入和输出通道乘积为32的倍数,因此其颗粒度为32(32即为向量的长度,包含32个8bit数据),实现将不同结构的网络映射重组到具体结构。计算模式为并行输入及输出通道,可通过参数调节并行部分输入通道以同时计算更多输出通道,或并行更多输入通道以减少计算轮数,而输入通道和输出通道在普遍CNN结构中为32的倍数,本实施例选并行输入及输出通道计算模式中计算最小单元为32(32即为向量的长度,包含32个8bit数据)的向量内积,可有效保证计算单元的最大利用率;采用并行计算模式适应不同尺寸的网络的内核的大小,综上,解决了指令集对应处理器的普适性。
有条件指令包括读存储指令、写存储指令、数据抓取指令、数据后处理指令和计算指令;无条件指令提供参数更新,参数包括片上存储特征图模块长,宽,通道数、当前层输入长,宽、当前层输入通道数,输出通道数、读存储操作起始地址、读操作模式选择、写存储操作起始地址、写操作模式选择、数据抓取模式及约束、设置计算模式、设置池化操作相关参数、设置激活操作相关参数和设置数据移位,剪切取整相关操作;
触发条件在硬件中硬写入,比如对于存储读取模块指令,共有6种指令触发条件,其中包括1.当上一次存储读取完成且上一次数据抓取重组完成则触发;2.当上一次数据写存储操作完成则触发;3.当上一次数据后处理操作完成则触发等;有条件指令设置触发条件,避免了现有指令序列完全依靠设置的顺序执行耗时长的缺点,实现存储器读取连续地以相同模式操作,无需按设定的固定间隔顺序执行,大大缩短指令序列的长度,进一步加快指令运行速度,如图8所示,对于两个操作即读和写,初始TCI设置为t0,在t1触发存储器读取,其从t1-t5执行,用于下一触发条件的TCI可以在t1和t5之间的任何时间点更新,存储当前TCI,它由新指令更新,在这种情况下,当存储器读取连续地以相同模式操作时,不需要指令(在时间t6和t12,操作由相同的TCI触发),这将指令序列缩短超过10x。
OPU指令运行时包括步骤1:读取指令块(指令集为所有指令的集合列表;指令块为一组连续指令的指令,用于执行一个网络的指令包括多个指令块);步骤2:获取指令块中的无条件指令直接执行,解码出无条件指令中包含的参数写入相应寄存器;获取指令块中的有条件指令,根据有条件指令设置触发条件后跳至步骤3;步骤3:判断触发条件是否满足,若满足,则执行有条件指令;若不满足,则不执行指令;步骤4:判断指令中包含的下一个指令块的读取指令是否满足触发条件,若满足,则返回步骤1继续执行指令;否则寄存器参数和当前条件指令设置的触发条件保持不变,直至满足触发条件。
读存储指令包括按模式A1进行读存储操作和模式A2进行读存储操作;读存储操作指令可配参数包括起始地址、操作数数量、读取后处理模式和片上存储位置。
模式A1:从指定地址开始向后读n个数,n为正整数;
模式A2:根据地址流读n个数,其中,地址流中地址不连续,三种读数后操作:1,读取后无操作;2,读取后拼接为指定长度;3,读取后拆分为指定长度;四个读数操作后片上存储位置:特征图存储模块,内积参数存储模块,偏置参数存储模块,指令存储模块;
写存储指令包括按模式B1进行写存储操作和按模式B2进行写存储操作;写存储操作指令可配参数包括起始地址和操作数数量。
模式B1:从指定地址开始向后写n个数;
模式B2:根据目标地址流写n个数,其中,地址流中地址不连续;
数据抓取指令包括根据不同读取数据模式和数据重组排列模式从片上特征图存储器和内积参数存储器读取数据操作和对读取的数据进行重组排列操作;数据抓取和重组操作指令可配参数包括读特征图存储器和读内积参数存储器,其中,读特征图存储器包括读数地址约束即最小地址和最大地址、读数步长和重排模式;读内积参数存储器包括读数地址约束和读数模式。
数据后处理指令包括池化、激活、定点切割、取整、向量对位相加的一种操作或者多种操作;数据后处理操作指令可配参数包括池化类型、池化尺寸、激活种类和定点切割位置。
计算指令包括根据不同长度向量调配进行向量内积操作,向量内积操作采用的计算基本单元为两个长度为32的向量内积模块,计算操作指令可调配参数包括输出结果数量。
综上,无条件指令为有条件指令提供配置参数,有条件指令设置触发条件,触发条件在硬件中硬写入,有条件指令设置对应寄存器,在触发条件满足后执行,实现读存储、写存储、数据抓取、数据后处理和计算,无条件指令在被读取后直接执行,替换参数寄存器内容,实现根据触发条件运行有条件指令,无条件指令为有条件指令提供配置参数,指令执行顺序准确,不受其他因素影响,同时,设置触发条件有效避免了现有指令序列完全依靠设置的顺序执行时耗时长的缺点,实现存储器读取连续地以相同模式操作,无需按设定的固定间隔顺序执行,大大缩短指令序列的长度;根据CNN网络、加速需求的选择的并行输入及输出通道决定计算模式,并设置指令颗粒度克服CNN加速系统中存在指令执行指令集对应处理器的普适性问题;通过定义OPU指令集后,将不同目标网络的CNN定义文件进行转换、映射生成不同目标网络的指令完成编译,OPU根据开始信号读取指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速,避免了现有网络改变则需要重构FPGA加速器的缺点。
实施例3
基于实施例1,细化编译步骤,细节如下:
将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
其中,所述转换包括文件转换、网络的图层重组和生成统一中间表示IR;
所述映射包括解析IR、根据解析信息搜索解空间获得保证最大吞吐量的映射方式和根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令。
对应的编译器,包括转换单元,用于分析CNN定义文件后进行文件转换、网络图层重组和生成IR;指令定义单元,用于定义指令后获取OPU指令集,定义指令包括定义有条件指令、定义无条件指令和根据CNN网络和加速需求设置指令颗粒度;映射单元,用于获取最优加速器配置对应的映射方式后,根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令;
常规CNN定义包含从上到下连接以形成完整流的各种类型的层,层之间传递的中间数据称为特征映射,通常需要大的存储空间,并且只能在片外存储器中处理。由于片外存储器通信延迟是主要的优化因素,因此需要克服如何减少与片外的数据沟通问题,通过图层重组,定义主要层和附属层以减少片外DRAM访问并避免不必要的写/读回操作,技术手段细节如下:
分析CNN定义文件的形式后转换文件,压缩并提取其中的网络信息;
将网络进行运算重组为多个图层组,图层组包括一个主要层和多个附属层,图层组间的结果保存至DRAM,主要层和附属层之间数据流通由片上流水完成;如图2所示,主要层包括卷积层和完全连接层,附属层包括池化层、激活层和残差层;
根据网络信息和重组信息生成IR;IR包含当前图层组中包含的所有操作,图层索引是分配给每个常规图层的序列号,在初始情况下,单层组可以具有用于输入的多层索引,其中各种先前输出的FM被连接以形成输入;同时,在层组计算期间生成的多个中间FM可以用作其他层组剩余或正常输入源,转出位置特定的FM集以转储到DRAM。
转换还包括CNN训练数据进行8bit量化,考虑到一般网络精度冗余和硬件架构复杂性,选择8位作为我们的特征映射和内核权重的数据量化标准,细节如下:
重组后的网络选择8位作为特征映射和内核权重的数据量化标准,即进行8bit量化,所述量化采用动态量化,所述动态量化包括为每一层特征映射和内核权重数据中心寻找误差最小定点表示,细节如以下公式所示:
其中,float表示内核权重或特征映射的原始单精度,fix(floc)表示基于某个分数长度floc将float切割为定点后的值。
为解决如何找到最优的性能配置问题/如何解决最优的性能配置的普适性问题,映射过程中搜索解空间获得保证最大吞吐量的映射方式,通过所述的映射方式进行映射,包括如下步骤:
步骤a1:计算峰值理论值,计算如以下公式所示:
T=f*TNPE
其中,T表示吞吐量(每秒操作次数),f表示工作频率,TNPE表示芯片上可用的PE总数;
步骤a2:定义整个网络计算所需的时间L的最小值,计算如以下公式所示:
其中,αi表示第i层的PE效率,Ci表示完成第i层所需的操作量;
步骤a3:计算完成第i层所需的操作量Ci,计算如以下公式所示:
其中,表示对应层整体输出大小,表示输入层深度,表示该层权重尺寸;
步骤a4:定义αi,计算如以下公式所示:
其中,ti表示计算第i层所需的时间;
步骤a5:计算ti,计算如以下公式所示:
其中,Kx×Ky表示该层的权重尺寸,ONi×OMi表示输出块大小,ICi×OCi表示片上内核块大小,表示输入层深度,表示输出层深度,表示输入层的大小,INi,IMi表示输入层的输入块的大小;
步骤a6:设定αi相关参数的约束条件,遍历参数的各种取值求解αi最大值,计算如以下公式所示:
maximize
INi,IMi,ICi,OCi αi
INi*IMi≤depththres
ICi*OCi≤NPE
ICi,OCi≤widththres
其中,depththres、widththres表示片上BRAM深度和宽度资源约束。
编译过程中将不同目标网络的CNN定义文件进行转换、映射生成不同目标网络的OPU可执行指令,通过网络重组优化、搜索解空间获得保证最大吞吐量的映射方式分别克服如何减少与片外的数据沟通、如何找到最优的性能配置的普适性问题,对网络进行优化和重组,将多层计算合并定义以实现流水线作业,以适应硬件结构,减少与片外的数据沟通以实现计算单元的最大利用效率;在搜索空间内寻找最大化吞吐量解,找到性能最优的加速器配置;编译输出OPU可执行的指令,OPU根据开始信号读取编译后的指令并运行指令,比如数据读存储、写存储、数据抓取,运行指令时采用指令定义的计算模式,实现通用CNN加速,达到了不需要对网络产生特定硬件描述代码,不需要对FPGA进行重新烧录,通过指令快速实现不同网络配置的加速的效果,解决了现有的FPGA加速工作旨在为不同的CNN生成特定的单独加速器,目标网络改变时硬件升级复杂度高、通用性差的问题。
实施例4
基于实施例1或者2或者3,为解决如何保证加速结构的普适性的问题,最大化数据本地化利用率,硬件采取并行输入及输出通道计算模式,所述并行计算模式包括以下步骤:
步骤c1:每次操作大小为IN*IM*IC的块数据,从初始位置开始读取数据,每次读取ICS个数据,按步幅x读取内核第一个参数所对应相乘的所有位置,直至对应于内核初始位置的所有像素被计算;
步骤c2:按步骤c1执行Kx*Ky*(IC/ICS)*(OC/OCS)轮直至对应于所有内核位置的所有像素被计算。
传统设计倾向于在单个内核中探索并行性,尽管内核并行性是最直接的级别,但它有两个缺点:复杂的FM数据管理和各种内核大小之间的泛化性差。FM数据通常以行或列方式存储,如图3(a)所示,扩展FM的Kx*Ky内核大小窗口意味着在单个时钟周期中读取行和列方向数据,对有限的块RAM带宽提出了巨大的挑战,并且通常需要额外复杂的数据重用管理来完成。此外,为一个内核大小设计的数据管理逻辑不能有效地应用于另一个内核。类似的情况发生在PE阵列设计中,针对某些Kx*Ky长度设计优化的PE架构可能不太适合其他尺寸。这就是为什么许多传统FPGA设计在流行的3*3内核上优化其设计并且仅在具有3*3层的网络上表现最佳的原因。
为了解决这个问题,探索了更高级别的并行性,并采用了一种无论内核大小如何都能实现最高效率的计算模式。图3(b)说明了它的工作原理:在每个时钟周期,读取一个大小为1*1的深度ICS输入通道的片段以及相应的内核元素,这些元素符合自然数据存储模式,只需要很小的带宽。在输入通道(ICS)和输出通道(OCS,涉及的内核集的数量)内实现并行性。图3(c)进一步示出了计算过程。对于第0轮周期0,读取位置(0,0)的输入通道切片,下一个周期我们跳跃步幅x并读取位置(0,2),操作读取继续,直到对应于内核位置(0,0)的所有像素为计算。然后我们进入第1轮并从位置(0,1)开始读取所有像素对应于内核位置(0,1)。为了用OC集内核计算大小为IN*IM*IC的块数据,需要Kx*Ky*(IC/ICS)*(OC/OCS)轮,并行计算模式是在CNN加速中普遍选用的,各个不同设计的区别在于选取的并行模式不同。
OPU中的计算模块考虑指令定义的颗粒度,其中基本计算单元为计算两个长度为32的向量内积(32即为向量的长度,包含32个8bit数据),基本计算单元包括16个DSP和加法树结构,每个DSP拆分为两个8bit x 8bit乘法器使用,可实现A*(B+C)功能,其中A为特征图数据,B和C分别对应两个输出通道内积参数数据;计算模块共包括32个基本计算单元,最大可完成长度为1024的两个向量内积和,也可完成32个长度为32的向量内积和,或32/n个长度为32*n的向量内积和,其中n为整数。
本发明硬件采取并行输入及输出通道计算模式,在每个时钟周期,读取一个大小为1*1的、深度为ICS的输入通道的片段以及相应的内核元素,在一轮流程中只使用一个数据块,最大化数据本地化利用率,保证了任何内核大小或步长的统一数据获取模式,极大地简化了计算之前的数据管理阶段,从而以更少的资源消耗实现更高的频率;输入和输出通道级并行性探索为资源利用提供了更高的灵活性,并保证了最高的泛化性能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于OPU的CNN加速方法,其特征在于:包括如下步骤:
定义OPU指令集;
编译器将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
OPU读取上述编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速;
其中,所述OPU指令集包括直接执行并为有条件指令提供配置参数的无条件指令和满足触发条件后执行的有条件指令,定义的OPU指令集根据CNN网络调研结果和加速需求对指令颗粒度进行优化设置;
所述转换包括文件转换、网络的图层重组和生成统一中间表示IR;
所述映射包括解析IR、根据解析信息搜索解空间获得保证最大吞吐量的映射方式和根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令。
2.根据权利要求1所述的一种基于OPU的CNN加速方法,其特征在于:所述定义OPU指令集包括定义有条件指令、定义无条件指令和设置指令颗粒度,定义有条件指令包括如下步骤:
构建有条件指令,有条件指令包括读存储指令、写存储指令、数据抓取指令、数据后处理指令和计算指令;
设置有条件指令的寄存器和执行方式,执行方式为满足硬件写入的触发条件后执行,寄存器包括参数寄存器和触发条件寄存器;
设置有条件指令的参数配置方式,配置方式为根据无条件指令进行参数配置;
定义无条件指令包括如下步骤:
定义无条件指令的参数;
定义无条件指令参数的执行方式,执行方式为被读取后直接执行。
3.根据权利要求2所述的一种基于OPU的CNN加速方法,其特征在于:设置指令颗粒度的细节为:所述读存储指令的颗粒度设置为每次读入n个数,n>1;所述写存储指令的颗粒度设置为每次写出n个数,n>1;所述数据抓取指令的颗粒度设置为64的倍数,即同时操作64个输入数据;所述数据后处理指令的颗粒度设置为每次操作64的倍数个数据;所述计算指令的颗粒度设置为32。
4.根据权利要求1或者2或者3所述的一种基于OPU的CNN加速方法,其特征在于:所述并行计算模式包括以下步骤:
步骤c1:每次操作大小为IN*IM*IC的块数据,从初始位置开始读取数据,每次读取ICS个数据,按步幅x读取内核第一个参数所对应相乘的所有位置,直至对应于内核初始位置的所有像素被计算;
步骤c2:按步骤c1执行Kx*Ky*(IC/ICS)*(OC/OCS)轮直至对应于所有内核位置的所有像素被计算。
5.根据权利要求1所述的一种基于OPU的CNN加速方法,其特征在于:所述转换步骤细节如下:
分析CNN定义文件的形式后转换文件,压缩并提取其中的网络信息;
将网络进行运算重组为多个图层组,所述图层组包括一个主要层和多个附属层,所述图层组间的结果保存至DRAM,所述主要层和附属层之间数据流通由片上流水完成;所述主要层包括卷积层和完全连接层,所述附属层包括池化层、激活层和残差层;
根据网络信息和重组信息生成IR。
6.根据权利要求1所述的一种基于OPU的CNN加速方法,其特征在于:所述映射步骤中根据解析信息搜索解空间获得最大吞吐量的映射方式包括如下步骤:
步骤a1:计算峰值理论值,计算如以下公式所示:
T=f*TNPE
其中,T表示吞吐量(每秒操作次数),f表示工作频率,TNPE表示芯片上可用的PE总数;
步骤a2:定义整个网络计算所需的时间L的最小值,计算如以下公式所示:
其中,αi表示第i层的PE效率,Ci表示完成第i层所需的操作量;
步骤a3:计算完成第i层所需的操作量Ci,计算如以下公式所示:
其中,表示对应层整体输出大小,表示输入层深度,表示该层权重尺寸;
步骤a4:定义αi,计算如以下公式所示:
其中,ti表示计算第i层所需的时间;
步骤a5:计算ti,计算如以下公式所示:
其中,Kx×Ky表示该层的权重尺寸,ONi×OMi表示输出块大小,ICi×OCi表示片上内核块大小,表示输入层深度,表示输出层深度,表示输入层的大小,INi,IMi表示输入层的输入块的大小;
步骤a6:设定αi相关参数的约束条件,遍历参数的各种取值求解αi最大值,计算如以下公式所示:
INi*IMi≤depththrcs
ICi*OCi≤NPE
ICi,OCi≤widththres
其中,depththres、widththres表示片上BRAM深度和宽度资源约束。
7.根据权利要求5所述的一种基于OPU的CNN加速方法,其特征在于:所述转换还包括CNN训练数据进行8bit量化,细节如下:
重组后的网络选择8位作为特征映射和内核权重的数据量化标准,即进行8bit量化,所述量化采用动态量化,所述动态量化包括为每一层特征映射和内核权重数据中心寻找最佳范围,细节如以下公式所示:
其中,float表示内核权重或特征映射的原始单精度,fix(floc)表示基于某个分数长度floc将float切割为定点后的值。
8.一种如权利要求1-7任一项所述方法的系统,其特征在于:包括
编译单元,用于将不同目标网络的CNN定义文件进行转换,并根据定义的OPU指令集选择最优加速器配置映射,生成不同目标网络的指令完成映射;
OPU,用于读取编译器编译后的指令,按照OPU指令集定义的并行计算模式运行指令,完成不同目标网络的加速。
9.根据权利要求8所述的系统,其特征在于:所述OPU包括存储读模块、存储写模块、计算模块、数据抓取模块、数据后处理模块和片上存储模块,所述片上存储模块包括特征图存储模块、内积参数存储模块、偏置存储模块、指令存储模块和中间结果存储模块,所述特征图存储模块、内积参数存储模块、偏置存储模块和指令存储模块结构均采用乒乓结构,所述乒乓结构为任何一个存储模块使用的同时,其他模块进行载入。
10.根据权利要求8所述的系统,其特征在于:所述编译单元包括
转换单元,用于分析CNN定义文件后进行文件转换、网络图层重组和生成IR;
指令定义单元,用于定义指令后获取OPU指令集,定义指令包括定义有条件指令、定义无条件指令和根据CNN网络和加速需求设置指令颗粒度,其中,有条件指令包括读存储指令、写存储指令、数据抓取指令、数据后处理指令和计算指令;读存储指令的颗粒度设置为每次读入n个数,n>1,写存储指令的颗粒度设置为每次写出n个数,n>1,数据抓取指令的颗粒度设置为同时操作64个输入数据,数据后处理指令的颗粒度设置为每次操作64的倍数个数据,计算指令的颗粒度设置为32;
映射单元,用于获取最优加速器配置对应的映射方式后,根据定义的OPU指令集将上述映射解表达为指令序列,生成不同目标网络的指令;
所述转换单元包括
操作单元,用于分析CNN定义文件后,转换CNN定义文件的形式和压缩CNN定义文件中的网络信息;
重组单元,用于将网络所有层重组为多个图层组,并将图层组分为主要层和附属层;
IR生成单元,用于组合网络信息和图层重组信息;
所述映射单元包括
映射方式获取单元,用于解析IR后,根据解析信息搜索解空间获得保证最大吞吐量的映射方式;
指令生成单元,用于根据OPU指令集将最大吞吐量对应的映射解表达为指令序列,生成不同目标网络的指令后完成映射。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910192502.1A CN110058883B (zh) | 2019-03-14 | 2019-03-14 | 一种基于opu的cnn加速方法及系统 |
US16/743,066 US20200151019A1 (en) | 2019-03-14 | 2020-01-15 | OPU-based CNN acceleration method and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910192502.1A CN110058883B (zh) | 2019-03-14 | 2019-03-14 | 一种基于opu的cnn加速方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110058883A true CN110058883A (zh) | 2019-07-26 |
CN110058883B CN110058883B (zh) | 2023-06-16 |
Family
ID=67316112
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910192502.1A Active CN110058883B (zh) | 2019-03-14 | 2019-03-14 | 一种基于opu的cnn加速方法及系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20200151019A1 (zh) |
CN (1) | CN110058883B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110516790A (zh) * | 2019-08-16 | 2019-11-29 | 浪潮电子信息产业股份有限公司 | 一种卷积网络加速方法、装置及系统 |
CN110852434A (zh) * | 2019-09-30 | 2020-02-28 | 成都恒创新星科技有限公司 | 基于低精度浮点数的cnn量化方法、前向计算方法及装置 |
CN110852416A (zh) * | 2019-09-30 | 2020-02-28 | 成都恒创新星科技有限公司 | 基于低精度浮点数数据表现形式的cnn加速计算方法及系统 |
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111932436A (zh) * | 2020-08-25 | 2020-11-13 | 成都恒创新星科技有限公司 | 一种用于智慧泊车的深度学习处理器架构 |
WO2021036905A1 (zh) * | 2019-08-27 | 2021-03-04 | 安徽寒武纪信息科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN112596718A (zh) * | 2020-12-24 | 2021-04-02 | 中国航空工业集团公司西安航空计算技术研究所 | 一种硬件代码生成和性能评估方法 |
CN113268270A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、系统及装置 |
CN114489496A (zh) * | 2022-01-14 | 2022-05-13 | 南京邮电大学 | 基于fpga人工智能加速器的数据存储和传输方法 |
CN116720585A (zh) * | 2023-08-11 | 2023-09-08 | 福建亿榕信息技术有限公司 | 基于自主可控软硬件平台的低功耗ai模型推理优化方法 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11361133B2 (en) * | 2017-09-26 | 2022-06-14 | Intel Corporation | Method of reporting circuit performance for high-level synthesis |
US12014505B2 (en) * | 2019-01-31 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with convolution neural network processing using shared operand |
IT201900011403A1 (it) * | 2019-07-10 | 2021-01-10 | Ambarella Int Lp | Detecting illegal use of phone to prevent the driver from getting a fine |
CN111738433B (zh) * | 2020-05-22 | 2023-09-26 | 华南理工大学 | 一种可重配置的卷积硬件加速器 |
CN111696025B (zh) * | 2020-06-11 | 2023-03-24 | 西安电子科技大学 | 基于可重构内存计算技术的图像处理装置及方法 |
US11556859B2 (en) * | 2020-06-12 | 2023-01-17 | Baidu Usa Llc | Method for al model transferring with layer and memory randomization |
US11657332B2 (en) | 2020-06-12 | 2023-05-23 | Baidu Usa Llc | Method for AI model transferring with layer randomization |
CN111865397B (zh) * | 2020-06-28 | 2021-01-29 | 军事科学院系统工程研究院网络信息研究所 | 一种可动态调整的卫星通信网络规划方法 |
CN111814675B (zh) * | 2020-07-08 | 2023-09-29 | 上海雪湖科技有限公司 | 基于fpga支持动态分辨率的卷积神经网络特征图组装系统 |
CN111859797A (zh) * | 2020-07-14 | 2020-10-30 | Oppo广东移动通信有限公司 | 一种数据处理方法及装置、存储介质 |
TWI786430B (zh) * | 2020-08-20 | 2022-12-11 | 鴻海精密工業股份有限公司 | 深度學習模型的模型轉換優化裝置、方法及存儲介質 |
CN112215342B (zh) * | 2020-09-28 | 2024-03-26 | 南京俊禄科技有限公司 | 一种船用气象雷达照相装置多通道并行cnn加速器 |
CN112347034B (zh) * | 2020-12-02 | 2024-07-12 | 北京理工大学 | 一种用于老年看护的多功能一体化片上系统 |
CN112488305B (zh) * | 2020-12-22 | 2023-04-18 | 西北工业大学 | 一种神经网络存储装置及其可配置管理方法 |
CN112712164B (zh) * | 2020-12-30 | 2022-08-26 | 上海熠知电子科技有限公司 | 一种神经网络的非均匀量化方法 |
CN112862837B (zh) * | 2021-01-27 | 2023-06-23 | 南京信息工程大学 | 一种基于卷积神经网络的图像处理方法和系统 |
CN112927125B (zh) * | 2021-01-31 | 2023-06-23 | 成都商汤科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN112950656A (zh) * | 2021-03-09 | 2021-06-11 | 北京工业大学 | 一种基于fpga平台的按通道进行预读取数据的分块卷积方法 |
US20220350514A1 (en) * | 2021-04-28 | 2022-11-03 | International Business Machines Corporation | Memory mapping of activations for convolutional neural network executions |
US12017355B2 (en) * | 2021-06-08 | 2024-06-25 | Fanuc Corporation | Grasp learning using modularized neural networks |
US11809521B2 (en) * | 2021-06-08 | 2023-11-07 | Fanuc Corporation | Network modularization to learn high dimensional robot tasks |
CN113780529B (zh) * | 2021-09-08 | 2023-09-12 | 北京航空航天大学杭州创新研究院 | 一种面向fpga的稀疏卷积神经网络多级存储计算系统 |
CN114265801B (zh) * | 2021-12-21 | 2023-07-25 | 中国科学院深圳先进技术研究院 | 一种通用、可配置的高能效池化计算多行输出方法 |
CN114090592B (zh) * | 2022-01-24 | 2022-04-26 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
US12067399B2 (en) | 2022-02-01 | 2024-08-20 | Apple Inc. | Conditional instructions prediction |
CN114281554B (zh) * | 2022-03-08 | 2022-06-17 | 之江实验室 | 用于3d图像处理的3d-cnn加速方法及装置、电子设备 |
CN114925780A (zh) * | 2022-06-16 | 2022-08-19 | 福州大学 | 一种基于fpga的轻量级cnn分类器的优化提速方法 |
CN115829017B (zh) * | 2023-02-20 | 2023-05-23 | 之江实验室 | 一种基于芯粒的数据处理的方法、装置、介质及设备 |
CN116301920B (zh) * | 2023-03-23 | 2023-11-07 | 东北大学 | 一种用于部署cnn模型至基于fpga的高性能加速器的编译系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029471A1 (en) * | 2009-07-30 | 2011-02-03 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
CN105488565A (zh) * | 2015-11-17 | 2016-04-13 | 中国科学院计算技术研究所 | 加速深度神经网络算法的加速芯片的运算装置及方法 |
KR20190005043A (ko) * | 2017-07-05 | 2019-01-15 | 울산과학기술원 | 연산 속도를 향상시킨 simd mac 유닛, 그 동작 방법 및 simd mac 유닛의 배열을 이용한 콘볼루션 신경망 가속기 |
CN109416721A (zh) * | 2016-06-22 | 2019-03-01 | 微软技术许可有限责任公司 | 隐私保护机器学习 |
CN109460813A (zh) * | 2018-09-10 | 2019-03-12 | 中国科学院深圳先进技术研究院 | 卷积神经网络计算的加速方法、装置、设备及存储介质 |
-
2019
- 2019-03-14 CN CN201910192502.1A patent/CN110058883B/zh active Active
-
2020
- 2020-01-15 US US16/743,066 patent/US20200151019A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029471A1 (en) * | 2009-07-30 | 2011-02-03 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
CN105488565A (zh) * | 2015-11-17 | 2016-04-13 | 中国科学院计算技术研究所 | 加速深度神经网络算法的加速芯片的运算装置及方法 |
CN109416721A (zh) * | 2016-06-22 | 2019-03-01 | 微软技术许可有限责任公司 | 隐私保护机器学习 |
KR20190005043A (ko) * | 2017-07-05 | 2019-01-15 | 울산과학기술원 | 연산 속도를 향상시킨 simd mac 유닛, 그 동작 방법 및 simd mac 유닛의 배열을 이용한 콘볼루션 신경망 가속기 |
CN109460813A (zh) * | 2018-09-10 | 2019-03-12 | 中国科学院深圳先进技术研究院 | 卷积神经网络计算的加速方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
CHIEN-HSING CHOU等: "A Block Recognition System Constructed by Using a Novel Projection Algorithm and Convolution Neural Networks", 《IEEE ACCESS 》 * |
晋雅茹: "基于GPU的深度学习算法并行化研究", 《中国优秀硕士学位论文全文数据库》 * |
杨维科等: "基于Rocket-Chip开源处理器的CNN加速模块的设计及实现", 《微电子学与计算机》 * |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110516790A (zh) * | 2019-08-16 | 2019-11-29 | 浪潮电子信息产业股份有限公司 | 一种卷积网络加速方法、装置及系统 |
WO2021031350A1 (zh) * | 2019-08-16 | 2021-02-25 | 浪潮电子信息产业股份有限公司 | 一种卷积网络加速方法、装置及系统 |
CN110516790B (zh) * | 2019-08-16 | 2023-08-22 | 浪潮电子信息产业股份有限公司 | 一种卷积网络加速方法、装置及系统 |
WO2021036905A1 (zh) * | 2019-08-27 | 2021-03-04 | 安徽寒武纪信息科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN110852434B (zh) * | 2019-09-30 | 2022-09-23 | 梁磊 | 基于低精度浮点数的cnn量化方法、前向计算方法及硬件装置 |
CN110852434A (zh) * | 2019-09-30 | 2020-02-28 | 成都恒创新星科技有限公司 | 基于低精度浮点数的cnn量化方法、前向计算方法及装置 |
CN110852416A (zh) * | 2019-09-30 | 2020-02-28 | 成都恒创新星科技有限公司 | 基于低精度浮点数数据表现形式的cnn加速计算方法及系统 |
CN110852416B (zh) * | 2019-09-30 | 2022-10-04 | 梁磊 | 基于低精度浮点数数据表现形式的cnn硬件加速计算方法及系统 |
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN110908667B (zh) * | 2019-11-18 | 2021-11-16 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111932436A (zh) * | 2020-08-25 | 2020-11-13 | 成都恒创新星科技有限公司 | 一种用于智慧泊车的深度学习处理器架构 |
CN111932436B (zh) * | 2020-08-25 | 2024-04-19 | 成都恒创新星科技有限公司 | 一种用于智慧泊车的深度学习处理器架构 |
CN112596718A (zh) * | 2020-12-24 | 2021-04-02 | 中国航空工业集团公司西安航空计算技术研究所 | 一种硬件代码生成和性能评估方法 |
CN113268270A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、系统及装置 |
CN113268270B (zh) * | 2021-06-07 | 2022-10-21 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、系统及装置 |
CN114489496A (zh) * | 2022-01-14 | 2022-05-13 | 南京邮电大学 | 基于fpga人工智能加速器的数据存储和传输方法 |
CN114489496B (zh) * | 2022-01-14 | 2024-05-21 | 南京邮电大学 | 基于fpga人工智能加速器的数据存储和传输方法 |
CN116720585A (zh) * | 2023-08-11 | 2023-09-08 | 福建亿榕信息技术有限公司 | 基于自主可控软硬件平台的低功耗ai模型推理优化方法 |
CN116720585B (zh) * | 2023-08-11 | 2023-12-29 | 福建亿榕信息技术有限公司 | 基于自主可控软硬件平台的低功耗ai模型推理优化方法 |
Also Published As
Publication number | Publication date |
---|---|
US20200151019A1 (en) | 2020-05-14 |
CN110058883B (zh) | 2023-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110058883B (zh) | 一种基于opu的cnn加速方法及系统 | |
Hao et al. | FPGA/DNN co-design: An efficient design methodology for IoT intelligence on the edge | |
CN110378468B (zh) | 一种基于结构化剪枝和低比特量化的神经网络加速器 | |
Blott et al. | FINN-R: An end-to-end deep-learning framework for fast exploration of quantized neural networks | |
US10740674B2 (en) | Layer-based operations scheduling to optimise memory for CNN applications | |
Gorbachev et al. | Openvino deep learning workbench: Comprehensive analysis and tuning of neural networks inference | |
Abdelouahab et al. | Accelerating CNN inference on FPGAs: A survey | |
US20180204110A1 (en) | Compressed neural network system using sparse parameters and design method thereof | |
CN107563512B (zh) | 一种数据处理方法、装置以及存储介质 | |
CN113703775B (zh) | 一种编译方法、装置、设备及存储介质 | |
EP3843013A1 (en) | Systems and methods for quantizing a neural network | |
CN110069284B (zh) | 一种基于opu指令集的编译方法及编译器 | |
CN110058882B (zh) | 一种用于cnn加速的opu指令集定义方法 | |
CN110889439B (zh) | 一种图像特征提取方法、装置及电子设备和存储介质 | |
Shen et al. | Toward an efficient deep pipelined template-based architecture for accelerating the entire 2-D and 3-D CNNs on FPGA | |
CN108304925B (zh) | 一种池化计算装置及方法 | |
Reggiani et al. | Pareto optimal design space exploration for accelerated CNN on FPGA | |
Xie et al. | Exploiting sparsity to accelerate fully connected layers of cnn-based applications on mobile socs | |
Kalantar et al. | FA-LAMP: fpga-accelerated learned approximate matrix profile for time series similarity prediction | |
Voss et al. | Convolutional neural networks on dataflow engines | |
Liang et al. | FCNNLib: A flexible convolution algorithm library for deep learning on FPGAs | |
CN116611476A (zh) | 性能数据预测方法、性能数据预测装置、电子设备及介质 | |
Wang et al. | Balancing memory-accessing and computing over sparse DNN accelerator via efficient data packaging | |
Erdem et al. | Runtime design space exploration and mapping of dcnns for the ultra-low-power orlando soc | |
Ding et al. | Model-platform optimized deep neural network accelerator generation through mixed-integer geometric programming |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200615 Address after: Room 305, building 9, meizhuang new village, 25 Yangzi Jiangbei Road, Weiyang District, Yangzhou City, Jiangsu Province 225000 Applicant after: Liang Lei Address before: 610094 China (Sichuan) Free Trade Pilot Area, Chengdu City, Sichuan Province, 1402, Block 199, Tianfu Fourth Street, Chengdu High-tech Zone Applicant before: Chengdu Star Innovation Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |