CN116402090B - 神经网络计算图的处理方法、装置和设备 - Google Patents

神经网络计算图的处理方法、装置和设备 Download PDF

Info

Publication number
CN116402090B
CN116402090B CN202310683193.4A CN202310683193A CN116402090B CN 116402090 B CN116402090 B CN 116402090B CN 202310683193 A CN202310683193 A CN 202310683193A CN 116402090 B CN116402090 B CN 116402090B
Authority
CN
China
Prior art keywords
operator
static
runtime
mode
type
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.)
Active
Application number
CN202310683193.4A
Other languages
English (en)
Other versions
CN116402090A (zh
Inventor
袁学鹏
艾国
杨作兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen MicroBT Electronics Technology Co Ltd
Original Assignee
Shenzhen MicroBT Electronics Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen MicroBT Electronics Technology Co Ltd filed Critical Shenzhen MicroBT Electronics Technology Co Ltd
Priority to CN202310683193.4A priority Critical patent/CN116402090B/zh
Publication of CN116402090A publication Critical patent/CN116402090A/zh
Application granted granted Critical
Publication of CN116402090B publication Critical patent/CN116402090B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/042Knowledge-based neural networks; Logical representations of neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/77Processing image or video features in feature spaces; using data integration or data reduction, e.g. principal component analysis [PCA] or independent component analysis [ICA] or self-organising maps [SOM]; Blind source separation
    • G06V10/80Fusion, i.e. combining data from various sources at the sensor level, preprocessing level, feature extraction level or classification level
    • G06V10/806Fusion, i.e. combining data from various sources at the sensor level, preprocessing level, feature extraction level or classification level of extracted features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Multimedia (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Databases & Information Systems (AREA)
  • Medical Informatics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种神经网络计算图的处理方法、装置和设备,其中的方法包括:从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;兼容数据结构中的模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;根据静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;在前一算子和后一算子之间绘制连接线;其中,连接线的类型根据后一算子对应的模式信息确定;在后一算子的模式信息为仅静态存在模式的情况下连接线的类型为第一类型,或者,在后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下连接线的类型为第二类型。本申请实施例可以提高神经网络模型的调试速度。

Description

神经网络计算图的处理方法、装置和设备
技术领域
本申请涉及人工智能技术领域,特别是涉及一种神经网络计算图的处理方法、装置和设备。
背景技术
神经网络(Neural Network)近年来成为人工智能技术领域的研究热点。经过训练后的神经网络模型,可以用于计算机视觉、语音识别等诸多技术领域。
目前,神经网络推理引擎可以根据目标硬件的特性,对神经网络模型的静态计算图进行映射,以得到能够在目标硬件上高效执行的运行时计算图;上述映射可以减少运行时指令,进而得到提速的目的。
在实际应用中,运行时计算图与静态计算图之间往往存在一定的差异,这种差异对神经网络模型的调试提出了一定的挑战。
发明内容
本申请实施例提供了一种神经网络计算图的处理方法,可以提高神经网络模型的调试速度。
相应的,本申请实施例还提供了一种神经网络计算图的处理装置、一种电子设备和一种机器可读介质,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种神经网络计算图的处理方法,所述方法包括:
从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;所述兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;所述模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;所述算子包括:神经网络模型的静态计算图所包括的第一算子;所述运行时索引信息和模式信息是根据所述第一算子对应的运行时信息确定的;
根据所述静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;所述静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,所述运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段;
在前一算子和后一算子之间绘制连接线;其中,所述连接线的类型根据所述后一算子对应的模式信息确定;在所述后一算子的模式信息为仅静态存在模式的情况下,所述连接线的类型为第一类型,或者,在所述后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,所述连接线的类型为第二类型。
为了解决上述问题,本申请实施例公开了一种神经网络计算图的处理装置,所述装置包括:
兼容数据结构获取模块,用于从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;所述兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;所述模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;所述算子包括:神经网络模型的静态计算图所包括的第一算子;所述运行时索引信息和模式信息是根据所述第一算子对应的运行时信息确定的;
连接关系确定模块,用于根据所述静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;所述静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,所述运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段;
绘制模块,用于在前一算子和后一算子之间绘制连接线;其中,所述连接线的类型根据所述后一算子对应的模式信息确定;在所述后一算子的模式信息为仅静态存在模式的情况下,所述连接线的类型为第一类型,或者,在所述后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,所述连接线的类型为第二类型。
可选地,所述装置还包括:第二模型文件确定模块;
所述第二模型文件确定模块包括:
原始数据结构获取模块,用于从神经网络模型的第一模型文件中获取第一算子对应的原始数据结构;
映射模块,用于根据所述原始数据结构,对所述第一算子进行映射,以得到所述第一算子对应的运行时信息;
记录模块,用于在所述运行时信息涉及所述第一算子的变化的情况下,记录变化信息;所述变化信息包括:第一算子对应的静态类型和运行时类型、以及第一算子的输入输出对应的静态索引信息和运行时索引信息;
第二模型文件生成模块,用于根据所述变化信息,生成包含兼容数据结构的第二模型文件。
可选地,所述第一算子对应的静态类型和运行时类型包括:
第一非空类型和第二非空类型;或者
第一非空类型和空类型。
可选地,所述第二模型文件生成模块包括:
第一模式设置模块,用于在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;或者
第二模式设置模块,用于在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和第二非空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;创建第二算子对应的兼容数据结构,根据第一算子对应的运行时索引信息,确定第二算子对应的运行时索引信息,并将所述第二算子对应的模式信息置为仅运行时存在模式。
可选地,所述第二模型文件确定模块还包括:
第三模式设置模块,用于在所述运行时信息未涉及所述第一算子的变化的情况下,将所述第一算子对应的模式信息置为静态和运行时均存在模式。
可选地,所述连接关系确定模块包括:
第一连接关系确定模块,用于在后一算子对应的模式信息为仅静态存在模式的情况下,根据所述后一算子的输入输出对应的静态索引信息,确定前一算子到后一算子的连接关系;或者
第二连接关系确定模块,用于在后一算子对应的模式信息为仅运行时存在模式、或者静态和运行时均存在模式的情况下,根据所述后一算子对应的运行时索引信息,确定前一算子到后一算子的连接关系。
可选地,所述算子还包括:对所述第一算子进行映射后得到的第二算子。
可选地,所述兼容数据结构还包括:算子名称和算子类型;
其中,所述第一算子对应的算子类型为第一算子对应的静态类型,所述第二算子对应的算子类型为第一算子对应的运行时类型。
本申请实施例还公开了一种电子设备,包括:处理器;和存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如本申请实施例所述的方法。
本申请实施例还公开了一种机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如本申请实施例所述的方法。
本申请实施例包括以下优点:
在本申请实施例的技术方案中,提供了算子对应的兼容数据结构,该兼容数据结构可以作为第二模型文件的组成部分,该第二模型文件可以在被保存或传输后被加载。该兼容数据结构具体可以包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息。静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段可以是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段;这样,本申请实施例根据上述连接关系,在前一算子和后一算子之间绘制连接线,不仅可以实现运行时计算图的绘制,而且可以实现静态计算图中目标片段的绘制。
由于目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段,且本申请实施例针对目标片段的算子与针对非目标片段的算子(也即运行时计算图中的算子)的绘制采用了不同连接线的类型;因此,本申请实施例可以呈现静态计算图在映射前后的差异,以使用户获知运行时计算图中的算子源自目标片段中的算子,进而能够帮助用户进行神经网络模型的调试,提高神经网络模型的调试速度。
附图说明
图1是本申请一个实施例的神经网络模型的结构示意图;
图2是本申请一个实施例的轻量级网络包括的静态计算图的结构示意图;
图3是本申请一个实施例的运行时计算图的结构示意图;
图4是本申请一个实施例的在前一算子和后一算子之间绘制连接线的示意图;
图5是本申请一个实施例的神经网络计算图的处理方法的流程示意图;
图6是本申请一个实施例的神经网络计算图的处理方法的流程示意图;
图7是本申请一个实施例的神经网络计算图的处理装置的结构示意图;
图8是本申请一个实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
首先对本申请实施例涉及的技术术语进行说明。
神经网络:神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术,是深度学习的基础。
神经网络模型:神经网络模型是以神经网络为基础的数学模型。神经网络模型可以应用于计算机视觉、语音识别等人工智能领域,且用于对图像进行处理,以完成人工智能领域中的任务。人工智能领域中的任务可以包括:计算机视觉任务、语音识别任务等,计算机视觉任务可以进一步包括:图像分类任务、目标检测任务等。其中,图像分类任务可以把图像或图像中的像素点或区域划归为若干个类别中的一种;目标检测任务可以检测待检测图像中是否包含行人、交通工具等目标,若是,则可以给出目标的位置信息。
计算图:计算图用于将神经网络模型的计算过程用有向无环图表答出来。
算子:算子指神经网络模型中完成特定数学或逻辑计算的抽象表达。
边:边可以指计算图中连接两个算子的有向线段。
神经网络推理引擎:神经网络推理引擎可以是一套软件栈,用来加载神经网络模型,并根据目标硬件的特性对计算图进行优化,然后对输入数据按照优化后的运行时计算图进行计算,得出输出结果。
静态计算图:静态计算图可以指按照神经网络模型记录下来的第一算子及其相互连接关系而形成的计算流程图。
运行时计算图:是指神经网络模型经推理引擎加载并对静态计算图进行优化后、实际运行时的计算流程图。
神经网络可视化工具:神经网络可视化工具可以指用于神经网络、深度学习和机器学习模型的可视化工具,它可以为神经网络模型的架构生成具有描述性的可视化。
目标硬件:目标硬件可以指进行神经网络模型相关计算的硬件芯片,如CPU、GPU(图形处理器,Graphics Processing Unit)、NPU(神经网络处理单元,Neural NetworksProcess Units)等。
张量:神经网络的数据表示为张量,张量是一个数据容器,其包括几个关键属性:轴的个数(阶)、形状以及数据类型。其中,0阶张量仅包含一个数字,有0个轴,也叫标量;1阶张量是数字组成的数组,有1个轴,也叫向量;2阶张量是向量组成的数组,有2个轴(通常叫做行和列)也叫矩阵,以此类推到3阶张量甚至更高阶张量。形状为张量沿每个轴的维度大小,数据类型为张量中包含数据的类型。
相关技术中,神经网络推理引擎可以根据目标硬件的特性,对神经网络模型的静态计算图进行映射,以得到能够在目标硬件上高效执行的运行时计算图;上述映射可以减少运行时指令,进而得到提速的目的。然而,在实际应用中,运行时计算图与静态计算图之间往往存在一定的差异,这种差异对神经网络模型的调试提出了一定的挑战。例如,在调试期间,这种差异会影响神经网络模型的调试速度。
针对运行时计算图与静态计算图之间的差异影响神经网络模型的调试速度的技术问题,本申请实施例提供了一种神经网络计算图的处理方法,该方法具体可以包括:从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;该兼容数据结构具体可以包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;该模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;该算子具体包括:神经网络模型的静态计算图所包括的第一算子;该运行时索引信息和该模式信息可以是根据所述第一算子对应的运行时信息确定的;根据该静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;在前一算子和后一算子之间绘制连接线;其中,该连接线的类型根据该后一算子对应的模式信息确定;在该后一算子的模式信息为仅静态存在模式的情况下,该连接线的类型为第一类型,或者,在该后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,该连接线的类型为第二类型。
本申请实施例提供了算子对应的兼容数据结构,该兼容数据结构可以作为第二模型文件的组成部分,该第二模型文件可以在被保存或传输后被加载。
该兼容数据结构具体可以包括:算子的输入以及输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息。该模式信息具体包括:仅静态存在(static_only)模式、或者仅运行存在(rt_only)模式、或者静态和运行均存在(both)模式。仅静态存在模式表示仅在静态计算图中存在。仅运行时存在模式表示仅在运行时计算图中存在。静态和运行时均存在模式表示既在静态计算图中存在,又在运行时计算图中存在。
静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系。静态索引信息或运行时索引信息均可以指对应算子的输入以及输出对应的全局索引。其中,目标片段可以是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段;这样,本申请实施例根据上述连接关系,在前一算子和后一算子之间绘制连接线,不仅可以实现运行时计算图的绘制,而且可以实现静态计算图中目标片段的绘制。
由于目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段,且本申请实施例针对目标片段的算子与针对非目标片段的算子(也即运行时计算图中的算子)的绘制采用了不同连接线的类型;因此,本申请实施例可以呈现静态计算图在映射前后的差异,以使用户获知运行时计算图中的算子源自目标片段中的算子,进而能够帮助用户进行神经网络模型的调试,提高神经网络模型的调试速度。
本申请实施例的神经网络模型可以是用于实现计算机视觉任务、语音识别任务等人工智能任务的神经网络模型,可以理解,本申请实施例对于具体的神经网络模型不加以限制。
参照图1,示出了本申请一个实施例的神经网络模型的结构示意图,该神经网络模型可用于处理目标检测任务。该目标检测模型具体可以包括:特征提取单元101、特征融合单元102和检测单元103。
其中,特征提取单元101可用于对待检测图像进行特征提取。特征提取单元101可用于接收待检测图像,并从待检测图像中提取该图像的图像特征,图像特征可以指深层次的图像特征。
特征融合单元102是目标检测模型中承上启下的单元,其可以对特征提取单元101提取的图像特征进行融合,得到融合图像特征,其能够提高特征的多样性和目标检测模型的性能。
检测单元103用于根据特征融合单元102输出的融合图像特征进行目标检测,以得到对应的检测结果。
特征提取单元101可以是主干(backbone)网络,可以包括:VGG(视觉几何群网络,Visual Geometry Group Network)、ResNet(残差网络,Residual Network)、轻量级网络等。可以理解,本申请实施例对于特征提取单元101对应的具体网络不加以限制。
其中,轻量级网络可以采用倒置残差和深度可分离卷积。倒置残差可以首先使用卷积将输入的特征图维度变大,然后进行深度卷积运算,接着使用卷积将深度卷积运算结果的维度缩小。
参照图2,示出了本申请一个实施例的轻量级网络包括的静态计算图的结构示意图,该静态计算图可以对应轻量级网络的局部算子。图2所示的静态计算图具体可以包括如下算子:Conv-1(卷积1)201、Relu-1(激活函数1)202、Pooling-1(池化1)203、Shape-1(读取张量的形状)204、Gather-1(对输入进行切片)205、Unsqueeze-1(增加维度)206、Concat-1(数据合并)207、Reshape-1(改变数据的形状)208和Gemm-1(对矩阵进行乘积)209。
在本申请的一种应用示例中,可以对图2所示的静态计算图进行如下映射:Relu-1(激活函数1)202被融合到Conv-1(卷积1)201中,Reshape-1(改变数据的形状)208被替换为Raster(形变算子,用于实现张量平面的映射),Shape-1(读取矩阵的长度)204、Gather-1(对输入进行切片)205、Unsqueeze-1(增加维度)206和Concat-1(数据合并)207被离线优化掉,不参与神经网络模型的运行时运算。
参照图3,示出了本申请一个实施例的运行时计算图的结构示意图,其可以对图2所示静态计算图进行编译映射得到。在图3的运行时计算图中,图2的静态计算图中Conv-1(卷积1)201、Pooling-1(池化1)203和Gemm-1(对矩阵进行乘积)209仍然参与运行时运算,并且增加了Raster(形变算子)210。
本申请实施例在前一算子和后一算子之间绘制连接线;其中,该连接线的类型根据该后一算子对应的模式信息确定;在该后一算子的模式信息为仅静态存在模式的情况下,该连接线的类型为第一类型,或者,在该后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,该连接线的类型为第二类型。第一类型和第二类型,可以为不同的任意线段类型。例如,第一类型为虚线类型,第二类型为实线类型;或者,第一类型为第一粗度的线,第二类型为第二粗度的线;或者,第一类型为第一颜色的线,第二类型为第二颜色的线,等等。
参照图4,示出了本申请一个实施例的在前一算子和后一算子之间绘制连接线的示意图,图4所示的算子可以源自图2所示的静态计算图。
在图4中, Shape-1(获取输入张量的形状信息)204、Gather-1(对输入张量进行切片)205、Unsqueeze-1(增加维度)206、Concat-1(数据合并)207和Reshape-1(改变数据的形状)208不参与神经网络模型的运行时运算,故其模式信息为仅静态存在模式,而本申请实施例在后一算子的模式信息为仅静态存在模式的情况下,该连接线的类型为虚线类型,故本申请实施例将不参与神经网络模型的运行时运算的算子对应的连接线设置为虚线类型。
在图4中,Conv-1(卷积1)201、Pooling-1(池化1)203、Gemm-1(对矩阵进行乘积)209和Raster(形变算子)210参与神经网络模型的运行时运算,故其模式信息为仅运行时存在模式或者静态和运行时均存在模式,而本申请实施例在后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,该连接线的类型为实线类型,故本申请实施例将参与神经网络模型的运行时运算的算子对应的连接线设置为实线类型。
图4所示的可视化图形可以呈现静态计算图在映射前后的差异,以使用户获知运行时计算图中的算子源自目标片段中的算子:例如,Relu-1(激活函数1)202被融合到Conv-1(卷积1)201中,Reshape-1(改变数据的形状)208被替换为Raster(形变算子,用于实现张量平面的映射),Shape-1(读取矩阵的长度)204、Gather-1(对输入进行切片)205、Unsqueeze-1(增加维度)206和Concat-1(数据合并)207被离线优化掉等。在此基础上,本申请实施例能够帮助用户进行神经网络模型的调试,进而能够提高神经网络模型的调试速度。
本申请实施例的神经网络模型可以为训练完成的神经网络模型。在实际应用中,可以在一种或多种硬件上,利用训练完成的神经网络模型对输入数据(如图像)进行处理,以得到对应的输出数据,并判断输出数据是否符合要求。例如,在神经网络模型用于目标检测的情况下,输出数据可以是目标检测结果,输出数据是否符合要求可以是:目标检测结果是否与图像中实际包含的目标相匹配。
多种硬件可以包括:第一硬件和第二硬件、或者非目标硬件和目标硬件等。在非目标硬件对应的输出数据符合要求、且目标硬件对应的输出数据不符合要求的情况下,可以利用本申请实施例的方法,快速确定目标硬件对应的运行时计算图相对于静态计算图发生的变化。在此基础上,可以对目标硬件对应的映射规则进行更新,并根据更新后的映射规则,在目标硬件上,利用训练完成的神经网络模型对输入数据(如图像)进行处理,以得到对应的输出数据,并判断输出数据是否符合要求。上述映射规则的更新可以是迭代的,在目标硬件对应的输出数据符合要求的情况下,可以结束迭代。
方法实施例一
参考图5,示出了本申请一个实施例的神经网络计算图的处理方法的步骤流程图,该方法具体可以包括如下步骤:
步骤501、从神经网络模型的第一模型文件中获取第一算子对应的原始数据结构;
步骤502、根据该原始数据结构,对该第一算子进行映射,以得到该第一算子对应的运行时信息;
步骤503、在该运行时信息涉及该第一算子的变化的情况下,记录变化信息;该变化信息具体包括:第一算子对应的静态类型和运行时类型、以及第一算子的输入输出对应的静态索引信息和运行时索引信息;
步骤504、根据该变化信息,生成包含兼容数据结构的第二模型文件。
图5所示方法可用于根据神经网络模型的第一模型文件,生成包含兼容数据结构的第二模型文件。
在步骤501中,第一模型文件可以是训练完成的神经网络模型所对应的模型文件,其可以包括静态计算图的结构数据。
在实际应用中,第一模型文件可以为序列化文件。神经网络推理引擎可以根据序列化协议,对第一模型文件进行解析,以得到静态计算图的结构数据。
静态计算图的结构数据中可以包括:第一算子对应的原始数据结构。该原始数据结构可以包括:第一算子对应的算子名称、算子类型、算子参数、输入索引和输出索引等信息。其中,算子类型可以是算子对应的函数类型。输入索引可以是输入的张量数据对应的全局索引,输出索引可以是输出的张量数据对应的全局索引。输入索引和输出索引可用于确定神经网络模型中算子之间的连接关系。相邻的两个算子,前一算子的输出索引与后一算子的输入索引相同。
在具体实现中,静态计算图的结构数据中可以包括:第一算子列表,第一算子列表中的每个第一算子均可以对应有上述的原始数据结构。
静态计算图的结构数据中还可以包括:张量数据结构。张量数据结构可以包括:每一个张量数据对应的张量名称、维度信息、数据类型和全局索引等信息。
在此利用表1和结构体,提供图2所示静态计算图对应的张量数据结构(tensor_list)的示例。张量数据结构可以包括:每一个张量数据对应的张量名称(name)、数据类型(dataType)和全局索引(index)等信息。
tensor_list: [
{
index: 0,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 1,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 2,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 3,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 4,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
……,
{
index: 11,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
……
];
在步骤502中,神经网络推理引擎可以根据目标硬件的特性,对神经网络模型的静态计算图进行映射,以得到能够在目标硬件上高效执行的运行时计算图。
在具体实现中,神经网络推理引擎可以对第一算子列表中的第一算子进行遍历,并对当前的第一算子进行映射,以得到该第一算子对应的运行时信息。
第一算子的映射所对应的映射规则信息可由神经网络推理引擎或本领域技术人员确定。映射规则信息的示例可以包括:
映射规则信息1、在卷积算子后面连接一个激活函数算子的情况下,将这个激活函数算子融合到卷子算子中;
映射规则信息2、将reshape算子替换为Raster算子;
映射规则3、保持算子不变。
可以理解,本领域技术人员可以根据实际应用需求,确定所需的映射规则信息,本申请实施例对于具体的映射规则信息不加以限制。
以图2所示的静态计算图为例,本申请实施例可以根据映射规则信息1,将Relu-1(激活函数1)202融合到Conv-1(卷积1)201中;可以根据映射规则信息2,将Reshape-1(改变数据的形状)208替换为Raster(形变算子,用于实现张量平面的映射);可以根据映射规则3,保持Conv-1(卷积1)201不变。还可以根据其他映射规则信息,将Shape-1(读取张量形状信息)204、Gather-1(对输入进行切片)205、Unsqueeze-1(增加维度)206和Concat-1(数据合并)207优化掉,使其不参与神经网络模型的运行时运算。
本申请实施例的运行时信息可以包括:第一算子对应的映射规则信息、或者第一算子对应的映射结果信息等。例如,Relu-1(激活函数1)202对应的映射结果信息可以为空,Reshape-1(改变数据的形状)208对应的映射结果信息可以为Raster,Conv-1(卷积1)201对应的映射结果信息可以为Conv-1(卷积1)201等。
在步骤503中,在该运行时信息涉及该第一算子的变化的情况下,可以记录变化信息;该变化信息具体可以包括:第一算子对应的静态类型和运行时类型、以及第一算子的输入输出对应的静态索引信息和运行时索引信息。
在实际应用中,变化信息可以与推理引擎的第一规则以及目标硬件的第二规则有关。例如,目标硬件为了提高神经网络模型的运行效率,会设置第二规则,第二规则可以是静态计算图中第一算子对应的映射规则。映射规则可以是:算子的删除规则、或者多个算子的合并规则等。上述映射规则可以使运行时计算图与静态计算图之间产生一些差异。
第一算子对应的静态类型可以指第一算子在静态计算图中的算子类型。第一算子对应的运行时类型可以指第一算子的映射结果信息在运行时计算图中的算子类型。
第一算子的输入输出对应的静态索引信息可以指第一算子在静态计算图中的全局索引,其具体可以包括:静态输入索引和静态输出索引。第一算子对应的运行时索引信息可以指第一算子在运行时计算图中的全局索引,其具体可以包括:运行时输入索引和运行时输出索引。
本申请实施例可以经由算子变化数据结构(changed_op_list),来表征至少一个第一算子的变化信息。算子变化数据结构具体可以包括:静态算子名称(origin_name)、静态类型(origin_op_type)、静态输入索引(origin_input_indices)、静态输出索引(origin_output_indices)、运行时算子名称(rt_name)、运行时类型(rt_type)、运行时输入索引(rt_input_indices)、运行时输出索引(rt_output_indices)。
在此利用表2和结构体,提供图2所示静态计算图中Relu-1(激活函数1)202、Shape-1(读取张量的形状信息)204、Reshape-1(改变数据的形状)208、Gather-1(对输入进行切片)205、Unsqueeze-1(增加维度)206、Concat-1(数据合并)20等算子的算子变化数据结构的示例。
changed_op_list:{
{
origin_name: Relu-1,
origin_op_type: Relu,
origin_input_indices:[1],
origin_output_indices:[2],
rt_name: Relu-1,
rt_type: None,
rt_input_indices:[1],
rt_output_indices:[2]
},
{
origin_name: Reshape-1,
origin_op_type: Reshape,
origin_input_indices:[],
origin_output_indices:[],
rt_name: Reshape-1,
rt_type: Raster,
rt_input_indices:[],
rt_output_indices:[]
},
{
origin_name: Shape-1,
origin_op_type: Shape,
origin_input_indices:[2],
origin_output_indices:[4],
rt_name: Shape-1,
rt_type: None,
rt_input_indices:[],
rt_output_indices:[]
},
{
origin_name: Gather-1,
origin_op_type: Gather,
origin_input_indices:[4],
origin_output_indices:[5],
rt_name: Gather-1,
rt_type: None,
rt_input_indices:[],
rt_output_indices:[]
},
{
origin_name: Unsqueeze-1,
origin_op_type: Unsqueeze,
origin_input_indices:[5],
origin_output_indices:[6],
rt_name: Unsqueeze-1,
rt_type: None,
rt_input_indices:[],
rt_output_indices:[]
},
{
origin_name: Concat-1,
origin_op_type: Concat,
origin_input_indices:[6],
origin_output_indices:[7],
rt_name: Concat-1,
rt_type: None,
rt_input_indices:[],
rt_output_indices:[]
},
}
该运行时信息涉及该第一算子的变化具体可以包括:第一算子对应的静态类型和运行时类型不同。所述第一算子对应的静态类型和运行时类型具体可以包括:
第一算子对应的静态类型为第一非空类型,第一算子对应的运行时类型为第二非空类型;或者
第一算子对应的静态类型为第一非空类型,第一算子对应的运行时类型为:空类型None。
例如,图2中Relu-1(激活函数1)202的静态类型为“Relu(第一非空类型)”,Relu-1(激活函数1)202的运行时类型为“None”。又如,图2中Reshape-1(改变数据的形状)208的静态类型为“Reshape(第一非空类型)”,Reshape-1(改变数据的形状)208的运行时类型为“Raster”。
在步骤504中,可以根据该变化信息,生成包含兼容数据结构的第二模型文件。
该兼容数据结构具体可以包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息。该模式信息具体包括:静态存在(static_only)模式、或者运行存在(rt_only)模式、或者静态和运行均存在(both)模式。仅静态存在模式表示仅在静态计算图中存在。仅运行时存在模式表示仅在运行时计算图中存在。静态和运行时均存在模式表示既在静态计算图中存在,又在运行时计算图中存在。
静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段可以是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段;这样,本申请实施例根据上述连接关系,在前一算子和后一算子之间绘制连接线,不仅可以实现运行时计算图的绘制,而且可以实现静态计算图中目标片段的绘制。
兼容数据结构可以包括:涉及第一算子的变化的算子对应的兼容数据结构。例如,根据映射规则信息1,涉及第一算子的变化的算子可以包括:第一算子。又如,根据映射规则信息2,涉及第一算子的变化的算子可以包括:对所述第一算子进行映射后得到的第二算子。
在具体实现中,上述根据所述变化信息,生成包含兼容数据结构的第二模型文件的过程,具体可以包括:
在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;或者
在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和第二非空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;创建第二算子对应的兼容数据结构,根据第一算子对应的运行时索引信息,确定第二算子对应的运行时索引信息,并将所述第二算子对应的模式信息置为仅运行时存在模式。
除了涉及第一算子的变化的算子对应的兼容数据结构之外,本申请实施例的兼容数据结构还可以包括:未涉及第一算子的变化的第一算子对应的兼容数据结构,如图2中Conv-1(卷积1)201、Pooling-1(池化1)203和Gemm-1(对矩阵进行乘积)209等算子分别对应的兼容数据结构。
相应地,第二模型文件的确定过程还可以包括:在所述运行时信息未涉及所述第一算子的变化的情况下,将所述第一算子对应的模式信息置为静态和运行时均存在模式。
在本申请的一种实现方式中,兼容数据结构具体可以包括如下字段:算子名称、算子类型、运行时输入索引、运行时输出索引、静态输入索引、静态输出索引、模式信息和参数字段等。
第二模型文件中除了包括兼容数据结构之外,还可以包括:张量数据结构。张量数据结构可以包括:每一个张量数据对应的张量名称(name)、形状信息(dims),数据类型(dataType)和全局索引(index)等信息。
参照表3,示出了第二模型文件中包括的兼容数据结构的示例。
如下的结构体NetT为第二模型文件中包括的张量数据结构和兼容数据结构的示例。其中,兼容数据结构中不仅可以包括:静态计算图中第一算子对应的兼容数据结构,还可以包括:对所述第一算子进行映射后得到的第二算子对应的兼容数据结构。第二算子的例子可以包括:图4中的Raster(形变算子)210等。由于第二算子是对第一算子进行映射后得到的,故可以根据第一算子的输入输出对应的静态索引信息,确定第二算子的输入输出对应的静态索引信息;以及,可以根据第一算子对应的运行时索引信息,确定第二算子对应的运行时索引信息。对于互为映射的第一算子和第二算子来说,二者的静态索引信息可以相同,二者的运行时索引信息可以相同。
另外,对于Pooling-1(池化1)203而言,Relu-1(激活函数1)202到Conv-1(卷积1)201的融合,可以使得Pooling-1(池化1)203静态输入索引发生了变化(从Relu-1(激活函数1)202的输出索引变化为Conv-1(卷积1)201的输出索引),运行时信息可以捕捉到静态输入索引的变化,并在变化信息中记录变化后的运行时输入索引。
NetT {
tensor_list: [
{
index: 0,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 1,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 2,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 3,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
{
index: 4,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
……,
{
index: 11,//全局索引
name: xxx,
dataType:int8,
dim:{}
},
……
];
oplist:[
{
name: Conv-1, //算子名称
type: Conv, //算子类型
input_indices:{0}, //表示运行时输入索引
output_indices:{1}, //表示运行时输出索引
origin_input_indices:{0}, //表示静态输入索引
origin_output_indices:{1}, //表示静态输出索引
mode: BOTH, //模式信息:静态和运行时均存在
extraParams:{} //算子参数
},
{
name: Relu-1,
type: ReLU,
input_indices:{1},
output_indices:{2},
origin_input_indices:{1},
origin_output_indices:{2},
mode: STATIC-ONLY, //仅静态存在模式
extraParams:{}
},
{
name: Pooling-1,
type: Pooling,
input_indices:{1},
output_indices:{3},
origin_input_indices:{2},
origin_output_indices:{3},
mode: BOTH, //模式信息:静态和运行时均存在
extraParams:{}
},
{
name: Shape-1,
type: Shape,
input_indices:{2},
output_indices:{4},
origin_input_indices:{2},
origin_output_indices:{4},
mode: STATIC-ONLY, //仅静态存在模式
extraParams:{}
},
{
name: Gather-1,
type: Gather,
input_indices:{4},
output_indices:{5},
origin_input_indices:{4},
origin_output_indices:{5},
mode: STATIC-ONLY, //仅静态存在模式
extraParams:{}
},
{
name: Unsqueeze-1,
type: Unsqueeze,
input_indices:{5},
output_indices:{6},
origin_input_indices:{5},
origin_output_indices:{6},
mode: STATIC-ONLY, ////仅静态存在模式
extraParams:{}
},
{
name: Concat-1,
type: Concat,
input_indices:{6},
output_indices:{7},
origin_input_indices:{6},
origin_output_indices:{7},
mode: STATIC-ONLY, ////仅静态存在模式
extraParams:{}
},
{
name: Reshape-1,
type: Reshape,
input_indices:{3,7},
output_indices:{8},
origin_input_indices:{3},
origin_output_indices:{8},
mode: STATIC-ONLY, //仅静态存在模式
extraParams:{}
},
{
name:Gemm-1,
type: Gemm,
input_indices:{8}, //表示其输入索引
output_indices:{9}, //表示其输出索引
origin_input_indices:{8}, //表示在静态图中其输入索引
origin_output_indices:{9}, //表示在静态图中其输出索引
mode: BOTH, //静态和运行时均存在模式
extraParams:{}
},
{
name: Raster,
type: Raster,
input_indices:{3,7},
output_indices:{8},
origin_input_indices:{3},
origin_output_indices:{8},
mode: RT-ONLY, //仅运行时存在模式
extraParams:{}
},
],
origin_tensor_count: 6,
}
在实际应用中,可以对兼容数据结构和张量数据结构等数据结构进行序列化,以得到二进制形式的第二模型文件。
综上,本申请实施例的神经网络计算图的处理方法,得到了包含兼容数据结构的第二模型文件。该第二模型文件可以被保存或传输,还可以被加载。例如,第二模型文件可以是一种序列化文件,其可被存储到磁盘或内存。在需要使用第二模型文件的情况下,可以从磁盘或内存中加载第二模型文件,以实现运行时计算图与静态计算图之间的差异信息的可视化。
方法实施例二
参考图6,示出了本申请一个实施例的神经网络计算图的处理方法的步骤流程图,该方法具体可以包括如下步骤:
步骤601、从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;该兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;该模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;该算子包括:神经网络模型的静态计算图所包括的第一算子;该运行时索引信息和模式信息是根据该第一算子对应的运行时信息确定的;
步骤602、根据该静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;该静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,该运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段;
步骤603、在前一算子和后一算子之间绘制连接线;其中,该连接线的类型根据该后一算子对应的模式信息确定;在该后一算子的模式信息为仅静态存在模式的情况下,该连接线的类型可以为第一类型,或者,在该后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,该连接线的类型可以为第二类型。
图6所示方法可用于加载神经网络模型的第二模型文件,以得到运行时计算图与静态计算图之间的差异信息的可视化图形。图6所示方法的执行主体可以是具有可视化功能的应用程序,可以理解,本申请实施例对于图6所示方法的具体执行主体不加以限制。
在步骤601中,可以从通信对端接收神经网络模型的第二模型文件,并从第二模型文件中获取算子对应的兼容数据结构。例如,第二模型文件可以为序列化文件。神经网络推理引擎或其他应用程序可以根据序列化协议,对第二模型文件进行解析,以得到第二模型文件包括的兼容数据结构、张量数据结构等结构数据。例如,可以对第二模型文件进行反序列化,将第二模型文件对应的二进制数据恢复为兼容数据结构、张量数据结构等结构数据。
在步骤602中,可以根据该静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;该静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,该运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系。
在具体实现中,上述确定前一算子到后一算子的连接关系的过程,具体可以包括:
在后一算子对应的模式信息为仅静态存在模式的情况下,根据所述后一算子的输入输出对应的静态索引信息,确定前一算子到后一算子的连接关系;或者
在后一算子对应的模式信息为仅运行时存在模式、或者静态和运行时均存在模式的情况下,根据所述后一算子对应的运行时索引信息,确定前一算子到后一算子的连接关系。
以图2至图4所示的计算图为例,假设后一算子为Relu-1(激活函数1)202,由于Relu-1(激活函数1)202对应的模式信息为仅静态存在模式,故可以根据Relu-1(激活函数1)202对应的静态索引信息中的静态输入索引,确定Relu-1(激活函数1)202与前一算子之间的连接关系。由于Relu-1(激活函数1)202对应的静态输入索引与Conv-1(卷积1)201对应的运行时输出索引相同,故可以确定Conv-1(卷积1)201到Relu-1(激活函数1)202的连接关系。
以图2至图4所示的计算图为例,假设后一算子为Pooling-1(池化1)203,由于Pooling-1(池化1)203对应的模式信息为静态和运行时均存在模式,故可以根据Pooling-1(池化1)203对应的运行时索引信息中的运行时输入索引,确定Pooling-1(池化1)203与前一算子之间的连接关系。由于Pooling-1(池化1)203对应的静态输入索引与Conv-1(卷积1)201对应的运行时输出索引相同,故可以确定Conv-1(卷积1)201到 Pooling-1(池化1)203的连接关系。
以图2至图4所示的计算图为例,假设后一算子为Raster(形变算子)210,由于Raster(形变算子)210对应的模式信息为仅运行时存在模式,故可以根据Raster(形变算子)210对应的运行时索引信息中的运行时输入索引,确定Raster(形变算子)210与前一算子之间的连接关系。由于Raster(形变算子)210对应的静态输入索引与Pooling-1(池化1)203对应的运行时输出索引相同,故可以确定Pooling-1(池化1)203到 Raster(形变算子)210的连接关系。
在步骤603中,可以在前一算子和后一算子之间绘制连接线;其中,该连接线的类型根据该后一算子对应的模式信息确定。
具体而言,在该后一算子的模式信息为仅静态存在模式的情况下,该连接线的类型可以为第一类型。以图4中后一算子为Relu-1(激活函数1)202为例,由于其模式信息为仅静态存在模式,故Conv-1(卷积1)201到Relu-1(激活函数1)202的连接线可以为虚线类型。
或者,在该后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,该连接线的类型可以为第二类型。以图4中后一算子为Pooling-1(池化1)203为例,由于其模式信息为静态和运行时均存在模式,故Conv-1(卷积1)201到Pooling-1(池化1)203的连接线可以为实线类型。以图4中后一算子为Raster(形变算子)210为例,由于其模式信息为仅运行时存在模式,故Pooling-1(池化1)203到 Raster(形变算子)210的连接线可以为实线类型。
由于本申请实施例的可视化图形中不仅包括:静态计算图的目标片段中前一算子到后一算子的连接关系,还可以包括:运行时计算图中前一算子到后一算子的连接关系;这样,本申请实施例可以直观展示神经网络模型的静态计算图与运行时计算图之间关系,进而帮助加快神经网络模型的调试进度。
本申请实施例可以实现打开第二模型文件即可以看到神经网络模型的运行时计算图中的算子是源于静态计算图中的哪些位置,可以有效帮助神经网络模型的调试开发。
综上,本申请实施例的神经网络计算图的处理方法,提供了算子对应的兼容数据结构,该兼容数据结构可以作为第二模型文件的组成部分,该第二模型文件可以在被保存或传输后被加载。该兼容数据结构具体可以包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息。静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段可以是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段;这样,本申请实施例根据上述连接关系,在前一算子和后一算子之间绘制连接线,不仅可以实现运行时计算图的绘制,而且可以实现静态计算图中目标片段的绘制。
由于目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段,且本申请实施例针对目标片段的算子与针对非目标片段的算子(也即运行时计算图中的算子)的绘制采用了不同连接线的类型;因此,本申请实施例可以呈现静态计算图在映射前后的差异,以使用户获知运行时计算图中的算子源自目标片段中的算子,进而能够帮助用户进行神经网络模型的调试,提高神经网络模型的调试速度。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
在上述实施例的基础上,本实施例还提供了一种神经网络计算图的处理装置,参照图7,该装置具体可以包括:兼容数据结构获取模块701、连接关系确定模块702和绘制模块703。
其中,兼容数据结构获取模块701,用于从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;所述兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;所述模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;所述算子包括:神经网络模型的静态计算图所包括的第一算子;所述运行时索引信息和模式信息是根据所述第一算子对应的运行时信息确定的;
连接关系确定模块702,用于根据所述静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;所述静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,所述运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段;
绘制模块703,用于在前一算子和后一算子之间绘制连接线;其中,所述连接线的类型根据所述后一算子对应的模式信息确定;在所述后一算子的模式信息为仅静态存在模式的情况下,所述连接线的类型为第一类型,或者,在所述后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,所述连接线的类型为第二类型。
可选地,所述装置还可以包括:第二模型文件确定模块;
所述第二模型文件确定模块可以包括:
原始数据结构获取模块,用于从神经网络模型的第一模型文件中获取第一算子对应的原始数据结构;
映射模块,用于根据所述原始数据结构,对所述第一算子进行映射,以得到所述第一算子对应的运行时信息;
记录模块,用于在所述运行时信息涉及所述第一算子的变化的情况下,记录变化信息;所述变化信息可以包括:第一算子对应的静态类型和运行时类型、以及第一算子的输入输出对应的静态索引信息和运行时索引信息;
第二模型文件生成模块,用于根据所述变化信息,生成包含兼容数据结构的第二模型文件。
可选地,所述第一算子对应的静态类型和运行时类型可以包括:
第一非空类型和第二非空类型;或者
第一非空类型和空类型。
可选地,所述第二模型文件生成模块可以包括:
第一模式设置模块,用于在所述第一算子对应的静态类型和运行时类型可以包括:第一非空类型和空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;或者
第二模式设置模块,用于在所述第一算子对应的静态类型和运行时类型可以包括:第一非空类型和第二非空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;创建第二算子对应的兼容数据结构,根据第一算子对应的运行时索引信息,确定第二算子对应的运行时索引信息,并将所述第二算子对应的模式信息置为仅运行时存在模式。
可选地,所述第二模型文件确定模块还可以包括:
第三模式设置模块,用于在所述运行时信息未涉及所述第一算子的变化的情况下,将所述第一算子对应的模式信息置为静态和运行时均存在模式。
可选地,所述连接关系确定模块可以包括:
第一连接关系确定模块,用于在后一算子对应的模式信息为仅静态存在模式的情况下,根据所述后一算子的输入输出对应的静态索引信息,确定前一算子到后一算子的连接关系;或者
第二连接关系确定模块,用于在后一算子对应的模式信息为仅运行时存在模式、或者静态和运行时均存在模式的情况下,根据所述后一算子对应的运行时索引信息,确定前一算子到后一算子的连接关系。
可选地,所述算子还可以包括:对所述第一算子进行映射后得到的第二算子。
可选地,所述兼容数据结构还可以包括:算子名称和算子类型;
其中,所述第一算子对应的算子类型为第一算子对应的静态类型,所述第二算子对应的算子类型为第一算子对应的运行时类型。
综上,本申请实施例的神经网络计算图的处理装置,提供了算子对应的兼容数据结构,该兼容数据结构可以作为第二模型文件的组成部分,该第二模型文件可以在被保存或传输后被加载。该兼容数据结构具体可以包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息。静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段可以是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段;这样,本申请实施例根据上述连接关系,在前一算子和后一算子之间绘制连接线,不仅可以实现运行时计算图的绘制,而且可以实现静态计算图中目标片段的绘制。
由于目标片段可以是静态计算图中在映射过程中发生变化的算子所在的片段,且本申请实施例针对目标片段的算子与针对非目标片段的算子(也即运行时计算图中的算子)的绘制采用了不同连接线的类型;因此,本申请实施例可以呈现静态计算图在映射前后的差异,以使用户获知运行时计算图中的算子源自目标片段中的算子,进而能够帮助用户进行神经网络模型的调试,提高神经网络模型的调试速度。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括终端设备、服务器(集群)等各类型的设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括:终端设备、服务器(集群)等电子设备。图8示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置1100 。
对于一个实施例,图8示出了示例性装置1100,该装置具有一个或多个处理器1102、被耦合到(一个或多个)处理器1102中的至少一个的控制模块(芯片组)1104、被耦合到控制模块1104的存储器1106、被耦合到控制模块1104的非易失性存储器(NVM)/存储设备1108、被耦合到控制模块1104的一个或多个输入/输出设备1110,以及被耦合到控制模块1104的网络接口1112。
处理器1102可包括一个或多个单核或多核处理器,处理器1102可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1100 能够作为本申请实施例中所述终端设备、服务器(集群)等设备。
在一些实施例中,装置1100 可包括具有指令1114的一个或多个计算机可读介质(例如,存储器1106或NVM/存储设备1108) 以及与该一个或多个计算机可读介质相合并被配置为执行指令1114以实现模块从而执行本公开中所述的动作的一个或多个处理器1102。
对于一个实施例,控制模块1104可包括任意适当的接口控制器,以向(一个或多个)处理器1102中的至少一个和/或与控制模块1104通信的任意适当的设备或组件提供任意适当的接口。
控制模块1104可包括存储器控制器模块,以向存储器1106提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1106可被用于例如为装置1100加载和存储数据和/或指令1114。对于一个实施例,存储器1106可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1106可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM) 。
对于一个实施例,控制模块1104可包括一个或多个输入/输出控制器,以向NVM/存储设备1108及(一个或多个)输入/输出设备1110 提供接口。
例如,NVM/存储设备1108可被用于存储数据和/或指令1114。NVM/存储设备1108可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD) 、一个或多个光盘(CD) 驱动器和/或一个或多个数字通用光盘(DVD) 驱动器)。
NVM/存储设备1108可包括在物理上作为装置1100 被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1108可通过网络经由(一个或多个)输入/输出设备1110 进行访问。
(一个或多个)输入/输出设备1110 可为装置1100 提供接口以与任意其他适当的设备通信,输入/输出设备1110可以包括通信组件、音频组件、传感器组件等。网络接口1112可为装置1100 提供接口以通过一个或多个网络通信,装置1100 可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1102中的至少一个可与控制模块1104的一个或多个控制器(例如,存储器控制器模块) 的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1102中的至少一个可与控制模块1104的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP) 。对于一个实施例, (一个或多个)处理器1102中的至少一个可与控制模块1104的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例, (一个或多个)处理器1102中的至少一个可与控制模块1104的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC) 。
在各个实施例中,装置1100可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1100 可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1100包括一个或多个摄像机、键盘、液晶显示器(LCD) 屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC) 和扬声器。
其中,检测装置中可采用主控芯片作为处理器或控制模块,传感器数据、位置信息等存储到存储器或NVM/存储设备中,传感器组可作为输入/输出设备,通信接口可包括网络接口。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种神经网络计算图的处理方法和装置,一种电子设备和一种机器可读介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种神经网络计算图的处理方法,其特征在于,所述方法包括:
从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;所述兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;所述模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;所述算子包括:神经网络模型的静态计算图所包括的第一算子;所述运行时索引信息和模式信息是根据所述第一算子对应的运行时信息确定的;
根据所述静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;所述静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,所述运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段是静态计算图中在映射过程中发生变化的算子所在的片段;
在前一算子和后一算子之间绘制连接线;其中,所述连接线的类型根据所述后一算子对应的模式信息确定;在所述后一算子的模式信息为仅静态存在模式的情况下,所述连接线的类型为第一类型,或者,在所述后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,所述连接线的类型为第二类型;所述目标片段的算子对应第一类型的连接线,非目标片段的算子对应第二类型的连接线,所述非目标片段的算子包括:运行时计算图中的算子。
2.根据权利要求1所述的方法,其特征在于,所述第二模型文件的确定过程包括:
从神经网络模型的第一模型文件中获取第一算子对应的原始数据结构;
根据所述原始数据结构,对所述第一算子进行映射,以得到所述第一算子对应的运行时信息;
在所述运行时信息涉及所述第一算子的变化的情况下,记录变化信息;所述变化信息包括:第一算子对应的静态类型和运行时类型、以及第一算子的输入输出对应的静态索引信息和运行时索引信息;
根据所述变化信息,生成包含兼容数据结构的第二模型文件。
3.根据权利要求2所述的方法,其特征在于,所述第一算子对应的静态类型和运行时类型包括:
第一非空类型和第二非空类型;或者
第一非空类型和空类型。
4.根据权利要求2所述的方法,其特征在于,所述根据所述变化信息,生成包含兼容数据结构的第二模型文件,包括:
在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;或者
在所述第一算子对应的静态类型和运行时类型包括:第一非空类型和第二非空类型的情况下,将所述第一算子对应的模式信息置为仅静态存在模式;创建第二算子对应的兼容数据结构,根据第一算子对应的运行时索引信息,确定第二算子对应的运行时索引信息,并将所述第二算子对应的模式信息置为仅运行时存在模式。
5.根据权利要求2所述的方法,其特征在于,所述第二模型文件的确定过程还包括:
在所述运行时信息未涉及所述第一算子的变化的情况下,将所述第一算子对应的模式信息置为静态和运行时均存在模式。
6.根据权利要求1至5中任一所述的方法,其特征在于,所述确定前一算子到后一算子的连接关系,包括:
在后一算子对应的模式信息为仅静态存在模式的情况下,根据所述后一算子的输入输出对应的静态索引信息,确定前一算子到后一算子的连接关系;或者
在后一算子对应的模式信息为仅运行时存在模式、或者静态和运行时均存在模式的情况下,根据所述后一算子对应的运行时索引信息,确定前一算子到后一算子的连接关系。
7.根据权利要求1至5中任一所述的方法,其特征在于,所述算子还包括:对所述第一算子进行映射后得到的第二算子。
8.根据权利要求7所述的方法,其特征在于,所述兼容数据结构还包括:算子名称和算子类型;
其中,所述第一算子对应的算子类型为第一算子对应的静态类型,所述第二算子对应的算子类型为第一算子对应的运行时类型。
9.一种神经网络计算图的处理装置,其特征在于,所述装置包括:
兼容数据结构获取模块,用于从神经网络模型的第二模型文件中获取算子对应的兼容数据结构;所述兼容数据结构包括:算子的输入输出对应的静态索引信息和运行时索引信息、以及算子对应的模式信息;所述模式信息包括:仅静态存在模式、或者仅运行时存在模式、或者静态和运行时均存在模式;所述算子包括:神经网络模型的静态计算图所包括的第一算子;所述运行时索引信息和模式信息是根据所述第一算子对应的运行时信息确定的;
连接关系确定模块,用于根据所述静态索引信息或运行时索引信息,确定前一算子到后一算子的连接关系;所述静态索引信息可用于确定静态计算图的目标片段中前一算子到后一算子的连接关系,所述运行时索引信息可用于确定运行时计算图中前一算子到后一算子的连接关系,其中,目标片段是模式信息为仅静态存在模式的算子在静态计算图中所在的片段,目标片段是静态计算图中在映射过程中发生变化的算子所在的片段;
绘制模块,用于在前一算子和后一算子之间绘制连接线;其中,所述连接线的类型根据所述后一算子对应的模式信息确定;在所述后一算子的模式信息为仅静态存在模式的情况下,所述连接线的类型为第一类型,或者,在所述后一算子的模式信息为仅运行时存在模式或者静态和运行时均存在模式的情况下,所述连接线的类型为第二类型;所述目标片段的算子对应第一类型的连接线,非目标片段的算子对应第二类型的连接线,所述非目标片段的算子包括:运行时计算图中的算子。
10.一种电子设备,其特征在于,包括:处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1-8中任一项所述的方法。
CN202310683193.4A 2023-06-09 2023-06-09 神经网络计算图的处理方法、装置和设备 Active CN116402090B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310683193.4A CN116402090B (zh) 2023-06-09 2023-06-09 神经网络计算图的处理方法、装置和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310683193.4A CN116402090B (zh) 2023-06-09 2023-06-09 神经网络计算图的处理方法、装置和设备

Publications (2)

Publication Number Publication Date
CN116402090A CN116402090A (zh) 2023-07-07
CN116402090B true CN116402090B (zh) 2023-09-12

Family

ID=87010955

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310683193.4A Active CN116402090B (zh) 2023-06-09 2023-06-09 神经网络计算图的处理方法、装置和设备

Country Status (1)

Country Link
CN (1) CN116402090B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113298263A (zh) * 2020-05-13 2021-08-24 阿里巴巴集团控股有限公司 计算图处理、模型运行方法及装置、电子设备、服务器及边缘终端
CN114186687A (zh) * 2022-02-17 2022-03-15 之江实验室 一种面向神经网络模型计算的中间表示方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160078531A1 (en) * 2014-09-11 2016-03-17 International Business Machines Corporation Aggregation engine for real-time counterparty credit risk scoring
CN113835695B (zh) * 2021-11-25 2022-02-18 之江实验室 基于统一后端引擎的深度学习框架与硬件设备适配方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113298263A (zh) * 2020-05-13 2021-08-24 阿里巴巴集团控股有限公司 计算图处理、模型运行方法及装置、电子设备、服务器及边缘终端
CN114186687A (zh) * 2022-02-17 2022-03-15 之江实验室 一种面向神经网络模型计算的中间表示方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SAF-CNN:面向嵌入式FPGA的卷积神经网络稀疏化加速框架;谢坤鹏;《计算机研究与发展》;第60卷(第5期);1053-1072 *

Also Published As

Publication number Publication date
CN116402090A (zh) 2023-07-07

Similar Documents

Publication Publication Date Title
CN109740534B (zh) 图像处理方法、装置及处理设备
US20220076123A1 (en) Neural network optimization method, electronic device and processor
KR20200068050A (ko) 인공지능 수행을 위한 학습 데이터 생성장치 및 방법
CN112001399B (zh) 基于局部特征显著化的图像场景分类方法和装置
US11385878B2 (en) Model deployment method, model deployment device and terminal equipment
CN112070202B (zh) 一种融合图的生成方法、生成装置和计算机可读存储介质
JP2023526899A (ja) 画像修復モデルを生成するための方法、デバイス、媒体及びプログラム製品
CN114429208A (zh) 基于残差结构剪枝的模型压缩方法、装置、设备及介质
CN117033039A (zh) 故障检测方法、装置、计算机设备和存储介质
CN110163095B (zh) 回环检测方法、回环检测装置及终端设备
CN112200310B (zh) 智能处理器、数据处理方法及存储介质
CN116402090B (zh) 神经网络计算图的处理方法、装置和设备
US11688175B2 (en) Methods and systems for the automated quality assurance of annotated images
US20230021551A1 (en) Using training images and scaled training images to train an image segmentation model
CN113610856B (zh) 训练图像分割模型和图像分割的方法和装置
CN113627416B (zh) 图片分类和对象检测的同步处理方法、系统、存储介质及终端
CN115471703A (zh) 二维码检测方法、模型训练方法、装置、设备及存储介质
CN117112446B (zh) 编辑器调试方法、装置、电子设备及介质
CN116755714B (zh) 深度神经网络模型的运行方法、装置、设备和存储介质
WO2023164858A1 (en) Decimal-bit network quantization of convolutional neural network models
CN116612474B (zh) 对象检测方法、装置、计算机设备及计算机可读存储介质
EP4343715A1 (en) Determining 3d models corresponding to an image
CN113111804B (zh) 一种人脸检测的方法、装置、电子设备及存储介质
Sidiropoulos Application of deep neural networks for bicycle detection and classification
CN117218467A (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
GR01 Patent grant
GR01 Patent grant