CN116089895A - 一种算子融合方法及装置 - Google Patents

一种算子融合方法及装置 Download PDF

Info

Publication number
CN116089895A
CN116089895A CN202111277803.8A CN202111277803A CN116089895A CN 116089895 A CN116089895 A CN 116089895A CN 202111277803 A CN202111277803 A CN 202111277803A CN 116089895 A CN116089895 A CN 116089895A
Authority
CN
China
Prior art keywords
target
operator
fusion
operators
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111277803.8A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202111277803.8A priority Critical patent/CN116089895A/zh
Publication of CN116089895A publication Critical patent/CN116089895A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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
    • 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)
  • 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)
  • Computational Linguistics (AREA)
  • Biomedical Technology (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种算子融合方法及装置,所述方法包括:确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。在该方法中,通过多模板的算子融合方案可以提高算子融合处理的灵活性和通用性,进而更显著的提升算子融合的效率,进一步提升AI模型的性能。

Description

一种算子融合方法及装置
技术领域
本申请涉及人工智能领域,尤其涉及一种算子融合方法及装置。
背景技术
在人工智能(artificial intelligence,AI)、机器学习(machine learning,ML)等领域中,可以通过设计或训练不同的AI模型(如深度学习模型、神经网络模型、机器学习模型等)来实现不同的功能。AI模型中一般包括多个算子,算子可以代表AI模型中对数据进行的计算操作。不同算子之间具有连接关系,表示算子之间的数据传输关系,每个算子可以对输入该算子的数据进行相应的计算操作,并输出对应的计算结果。
AI模型经过编译后可以被部署到硬件装置例如AI芯片上实现落地应用。其中,AI芯片也称为AI加速器或计算卡,是专门用于处理人工智能应用中的大量计算任务的模块,可以用于执行AI模型的计算任务。
AI芯片的内存空间一般较小,因此在运行AI模型的过程中,各算子的输入数据和输出数据均是存储在空间较大的片外内存的。在执行AI模型中的算子对应的计算操作时,AI芯片需先将该算子对应的输入数据从片外内存搬移到缓存中,再对缓存中的数据执行计算操作。这就造成了片外内存和缓存之间频繁的数据搬移,因此,AI芯片执行AI模型过程中的访存开销较大。针对该问题,当前可以在编译AI模型的过程中,通过对AI模型中的算子进行算子融合处理,将部分算子融合为一个新的算子,从而减少数据在片外内存和缓存之间的数据搬移,进而减少访存开销。
当前可以通过张量虚拟机(Tensor Virtual Machine,TVM)编译器对AI模型中的算子进行融合处理。TVM编译器主要通过人工配置方式对特定场景的算子进行融合处理。该方案要求待融合的算子的输入数据与输出数据之间满足一一映射的关系,因此该方案仅能实现对少数复杂度低的算子的融合,且需要较多的人工干预,自动性和通用性都较差,处理效率较低。
除了上述对于特定场景的算子的融合处理之外,TVM编译器还可以基于自动生成技术实现自动的算子融合。该方式中,TVM编译器可以基于不同算子之间的关系,自动识别上述特定场景,并进行对应的算子融合处理。该方案虽然可以一定程度上提高算子融合的自动性和处理效率,但也仅能实现特定场景下的算子融合,因此也仅适用于简单的算子场景。
综上,当前的算子融合方法的融合策略较为单一固定,场景适用性较差,导致算子融合效率相对较低,对AI模型的性能提升较低。
发明内容
本申请提供一种算子融合方法及装置,用以提高进行算子融合的灵活性和通用性。
第一方面,本申请提供一种算子融合方法及装置,所述方法包括:确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
在该方法中,在对AI模型中的算子进行融合处理时,针对待融合的多个目标算子,可以从采用多种不同融合策略的算子融合模板中选择算子融合模板来进行多个目标算子的融合处理。其中,不同算子融合模板的算子融合方式不同,可以实现不同的融合效果,因此可以适应更多场景的需求。因此,本申请通过多模板的算子融合方案可以提高算子融合处理的灵活性和通用性,进而更显著的提升算子融合的效率,进一步提升AI模型的性能。
在一种可能的设计中,所述多个算子融合模板包含第一算子融合模板和第二算子融合模板;其中,所述第一算子融合模板用于将多个算子融合为一个融合算子;所述第二算子融合模板用于将多个算子融合为多个融合算子;根据所述多个目标算子,在多个算子融合模板中选择目标算子融合模板,包括:当所述多个目标算子中存在第一目标算子和多个第二目标算子时,若存储所述第一目标算子的输出数据所需的存储空间小于设定的空间阈值,则在所述多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择所述第二算子融合模板为所述目标算子融合模板;当所述多个目标算子中不存在第一目标算子和多个第二目标算子时,在所述多个算子融合模板中选择第一算子融合模板为所述目标算子融合模板;其中,所述多个第二目标算子分别与所述第一目标算子相连,所述多个第二目标算子的输入数据为所述第一目标算子的输出数据。
在该方法中,第一算子融合模板可以实现多个目标算子的整体融合,从而可以最大程度的减小多个目标算子执行过程中的访存开销。而第二目标算子可以实现多个目标算子的局部融合,因此可以通过将不同目标算子融合到不同融合算子中,来解耦部分目标算子之间的数据依赖关系,使得一些目标算子的计算操作的执行不会受到一些其它目标算子的影响,也不会影响其它目标算子的执行。在对多个目标算子进行算子融合处理时,可以根据多个目标算子的实际算子场景,灵活选择第一算子融合模板或第二算子融合模板对多个目标算子进行算子融合处理,从而得到相对较优的算子融合效果。
在一种可能的设计中,在所述多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。
在该方法中,第一目标算子的输出数据会输入到多个第二目标算子,而多个第二目标算子中存在输入数据和输出数据维度不同的算子,该种算子场景下,算子执行过程较为复杂,且算子执行过程中的中间结果的数据量可能会很大,存在超出缓存容量的风险。因此,在该种算子场景下,根据算子输出数据的数据量选择算子融合模板,可以针对较为复杂的算子场景灵活选择合适的算子融合模板,进而得到更好的算子融合效果,提高算子融合后AI模型的性能。
在一种可能的设计中,根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理,包括:当所述目标算子融合模板为所述第二算子融合模板时,使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子;其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子;所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
在该方法中,第一目标算子是多输出类型的算子,与第一目标算子连接的多个第二目标算子的执行都依赖于第一目标算子的输出数据,因此,多个第二目标算子之间及多个第二目标算子与第一目标算子之间都存在数据依赖关系。因此,以第一目标算子为分割点,通过第二算子融合模板对多个目标算子进行算子融合处理,将第一目标算子和多个第二目标算子融合到不同的融合算子中,一方面可以实现一定的算子融合效果,减少访存开销,另一方面可以在一定程度上解耦多个目标算子间的数据依赖关系,从而更便于实现运行AI模型过程中对算子对应的计算操作的灵活执行。
在一种可能的设计中,所述方法还包括:运行所述AI模型,包括:在执行所述第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据;其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同;根据所述多份复制数据执行所述第二融合算子。
在该方法中,第一融合算子的输出数据为算子融合前的第一目标算子的输出数据,而第一目标算子的输出数据会输入到多个第二目标算子,因此,第二融合算子需要对第一融合算子的输出数据分别进行多种计算操作。因此,在生成所述第一融合算子的输出数据的多份复制数据后,第二融合算子可以分别对多份复制数据独立执行多种计算操作,从而解耦多个第二目标算子对同一份数据的依赖关系,实现多个第二目标算子对应的计算操作的独立执行,同时能够提高执行计算操作的并行性。
在一种可能的设计中,所述第二融合算子用于表示所述第二组目标算子所表示的计算操作;根据所述多份复制数据执行所述第二融合算子,包括:在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作;其中,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
在该方法中,对于任一个第二目标算子,通过对多份复制数据中的一份复制数据执行该第二目标算子所表示的计算操作,使得该第二目标算子的执行与其它第二目标算子的执行不再依赖同一份数据。则该第二目标算子的执行不会受到其它第二目标算子的影响,并可以和其它第二目标算子并行执行。因此可以提高算子执行效率,并提高AI模型的运行性能。
在一种可能的设计中,在根据所述多份复制数据执行所述第二融合算子之前,所述方法还包括:将所述多份复制数据分别存储到目标内存;在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作,包括:执行多次数据处理过程;其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作;其中,所述目标子数据为所述一份复制数据中的部分数据,存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;其中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
在该方法中,第二融合算子的执行过程中,可以分多次(分块)搬移目标内存中的数据至目标缓存中,并分别对每次搬移的数据执行第二融合算子对应的计算操作,其中,每次搬移到目标缓存的数据的数据量不会超过目标缓存的可用存储空间,因此,对于第二融合算子的输入数据整体的数据量超过目标缓存的容量的情况,也可以实现第二融合算子的顺利执行。因此,该方案可以避免出现算子执行过程中数据量超出缓存限制的风险。
在一种可能的设计中,在多个算子融合模板中选择目标算子融合模板之前,所述方法还包括:针对所述多个目标算子,生成所述多个算子融合模板。
第二方面,本申请提供一种计算装置,该装置包括:算子选择单元,用于确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;模板选择单元,用于在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;算子处理单元,用于根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
在一种可能的设计中,所述多个算子融合模板包含第一算子融合模板和第二算子融合模板;其中,所述第一算子融合模板用于将多个算子融合为一个融合算子;所述第二算子融合模板用于将多个算子融合为多个融合算子;所述模板选择单元在根据所述多个目标算子,在多个算子融合模板中选择目标算子融合模板时,具体用于:当所述多个目标算子中存在第一目标算子和多个第二目标算子时,若存储所述第一目标算子的输出数据所需的存储空间小于设定的空间阈值,则在所述多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择所述第二算子融合模板为所述目标算子融合模板;当所述多个目标算子中不存在第一目标算子和多个第二目标算子时,在所述多个算子融合模板中选择第一算子融合模板为所述目标算子融合模板;其中,所述多个第二目标算子分别与所述第一目标算子相连,所述多个第二目标算子的输入数据为所述第一目标算子的输出数据。
在一种可能的设计中,在所述多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。
在一种可能的设计中,所述算子处理单元在根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理时,具体用于:当所述目标算子融合模板为所述第二算子融合模板时,使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子;其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子;所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
在一种可能的设计中,所述装置还包括模型运行单元,所述模型运行单元用于:运行所述AI模型,具体包括:在执行所述第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据;其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同;根据所述多份复制数据执行所述第二融合算子。
在一种可能的设计中,所述第二融合算子用于表示所述第二组目标算子所表示的计算操作;所述模型运行单元在根据所述多份复制数据执行所述第二融合算子时,具体用于:在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作;其中,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
在一种可能的设计中,所述模型运行单元在根据所述多份复制数据执行所述第二融合算子之前,还用于:将所述多份复制数据分别存储到目标内存;所述模型运行单元在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作时,具体用于:执行多次数据处理过程;其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作;其中,所述目标子数据为所述一份复制数据中的部分数据,存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;其中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
在一种可能的设计中,所述模板选择单元在多个算子融合模板中选择目标算子融合模板之前,还用于:针对所述多个目标算子,生成所述多个算子融合模板。
第三方面,本申请提供一种计算装置,该装置包括存储器和至少一个处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器中存储的计算程序,实现上述第一方面或第一方面的任一可能的设计所描述的方法。
第四方面,本申请提供一种计算装置,该装置包括编译器和执行器;所述编译器和所述执行器协作,用于实现上述第一方面或第一方面的任一可能的设计所描述的方法。
第五方面,本申请提供一种计算装置,包括至少一个处理器和接口;所述接口,用于为所述至少一个处理器提供程序指令或者数据;所述至少一个处理器用于执行所述程序指令,实现上述第一方面或第一方面的任一可能的设计所描述的方法。
第六方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在计算装置上运行时,使得所述计算装置执行上述第一方面或第一方面的任一可能的设计所描述的方法。
第七方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机程序或指令,当所述计算机程序或指令被计算装置执行时,实现上述第一方面或第一方面的任一可能的设计所描述的方法。
第八方面,本申请提供一种芯片系统,该芯片系统包括至少一个处理器和接口,所述接口用于为所述至少一个处理器提供程序指令或者数据,所述至少一个处理器用于执行所述程序指令,实现上述第一方面或第一方面的任一可能的设计所描述的方法。
在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于存储程序指令和数据。
在一种可能的设计中,所述芯片系统由芯片构成,或者包括芯片和其他分立器件。
上述第二方面到第八方面的有益效果,请参见上述第一方面的有益效果的描述,这里不再重复赘述。
附图说明
图1为一种AI芯片的架构示意图;
图2为一种算子融合处理方法的示意图;
图3为一种算子融合场景和方法的示意图;
图4为本申请实施例提供的一种复杂数据流场景的示意图;
图5为本申请实施例提供的一种算子融合方法适用的场景的示意图;
图6为本申请实施例提供的一种AI芯片的结构示意图;
图7为本申请实施例提供的一种算子融合方法的示意图;
图8为本申请实施例提供的一种算子融合方法的流程示意图;
图9为本申请实施例提供的一种局部算子的数据流示意图;
图10为本申请实施例提供的一种访存密集型算子中的计算模式的示意图;
图11为本申请实施例提供的一种算子融合方法的示意图;
图12为本申请实施例提供的一种算子融合模板的示意图;
图13为本申请实施例提供的一种生成算子融合模板的合法空间参数的方法示意图;
图14为本申请实施例提供的一种生成合法空间参数的方法示意图;
图15为本申请实施例提供的一种计算装置的示意图;
图16为本申请实施例提供的一种计算装置的结构示意图。
具体实施方式
为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例作进一步地详细描述。其中,在本申请实施例的描述中,以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
为了便于理解,示例性的给出了与本申请相关概念的说明以供参考。
1)、编译(compilation/compile):编译就是将利用一种编程语言(源语言)编写的程序转换到采用另一种语言(目标语言)的程序的过程。其中,源语言可以是用户编写目标程序时使用的语言,目标语言可以是用户希望选择运行该目标程序的装置所使用的语言。例如,编译可以将编写源程序时使用的高级语言变成机器(如计算机、执行器等)能够识别的二进制语言,以便机器识别并执行。
2)、计算图(computational graphs):通过对AI模型的定义以及模型的参数求解(可以称为是模型训练),可以确定一个唯一的计算逻辑,该计算逻辑经转换处理后可以应用于推理计算中(也可以称为是模型推理或使用),该计算逻辑可以用图表示,该图即为计算图。
计算图表现为有向图,定义了数据的流转方式,数据的计算方式,以及各种计算之间的相互依赖关系等。AI模型的计算图由算子(nodes)和边edges)组成。其中,算子用于表示施加的数学操作(运算),或数据输入(feed in)的起点/输出(push out)的终点,或读取/写入持久变量(persistent variable)的终点,算子是AI模型的基本计算单元。边用于表示算子之间的输入/输出关系,边可以传输尺寸(size)能够动态调整的多维数据数组,其中,尺寸能够动态调整的多维数据数组即张量(tensor)。张量这种数据结构可以用来表示模型中的数据,即,一个张量可以对应一个n维的数组或列表,其中,n为大于或等于零的整数。张量具有维度(shape)和秩(rank)两个属性。此外,张量可以在计算图的算子之间流通。
3)、算子融合:是通过分析和优化AI模型的计算图的计算逻辑,对AI模型原有的计算逻辑进行拆分、重组、融合等操作,来减少算子执行间隙的开销并且提升计算资源的利用率,从而实现AI模型整体执行时间和性能的优化。简单来说,算子融合就是多个算子的计算操作(compute)的级联,通过直接连接多个算子,来将前一个算子的计算与后一个算子的计算直接联系起来,能够减少不同算子间数据传输带来的额外时间,进而提高AI模型运行的速度。
4)、双倍速率(double data rate,DDR)存储器:是内存的一种,内存又可以叫做主存,是CPU能直接寻址的存储空间。DDR在一个时钟周期内传输两次数据,分别是在时钟的上升期和下降期各传输一次数据,因此称为双倍速率存储器或双倍速率同步动态随机存储器。DDR是包括DDR1、DDR2、DDR3、DDR4等各代存储器的统称,本申请实施例中用来泛指AI芯片的外部存储器(也可称为片外内存)。
需要说明的是,在本申请实施例中,算子也可以称为节点、计算任务、操作(operator,OP)、运算层等,数据维度也可以称为维度、形状等。此外,本申请实施例中所述的AI模型可以为深度学习模型、神经网络模型等。
应理解,本申请实施例中“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,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可以是单个,也可以是多个。
当前,随着AI技术的迅猛发展,AI模型也在越来越广泛的场景得到了应用。例如,AI模型可以应用于图像分类、目标对象检测、语音识别及推荐系统等多种场景中,因此对更高效地实现AI模型的部署的需求也越来越大。
在硬件方面,由于AI模型中张量运算存在庞大的计算量,基于领域专用架构(domain specific architecture,DSA)的AI芯片也顺势兴起。例如,如图1中所示,当前存在为深度学习场景设计的、专用于运行AI模型的张量处理单元(tensor processing unit,TPU)芯片,以加速AI模型的计算。根据AI模型的计算特点,当前用于执行AI模型的AI芯片普遍采用多级缓存(buffer)的架构,来减少对AI芯片的片外主存或内存(例如DDR)的访问,从而充分利用片上计算资源如一级缓存L1、二级缓存L2和通用缓存(unified buffer,UB)等。
在软件方面,随着AI模型中日趋增多的访存密集型算子及复杂的数据流依赖关系,利用上述硬件设计上的多级缓存架构,通过进行算子融合来从算子调度层面减少访存开销则是AI模型性能收益的另一个关键点。例如,如图2中所示,对于单算子1和单算子2这两个单算子的计算流,当计算数据在片上内存UB中可以复用(例如将单算子1的输出结果再输入到单算子2,由单算子2继续进行计算)时,单算子1和单算子2便可融合为一个算子,融合后就避免了单算子1的输出结果在片外内存DDR进行存储的过程,因此能够减少数据在片外内存的搬入搬出,进而可以减少访存开销,提升性能。
当前,TVM编译器作为AI模型端到端的编译器,可以实现AI模型在各种硬件平台的部署。TVM通过统一的中间表达(Intermediate Representation,IR)堆栈来连接前端深度学习框架和后端硬件平台,实现AI模型在硬件平台的部署,并为相应的硬件平台提供算子优化。
TVM主要通过人工配置的调度(schedule)来实现对特定算子场景的融合优化。调度指AI模型中的算子从深度学习上层框架映射到AI芯片上的指令执行的过程,包括显式指定数据的搬运、数据流向及指令替换的整个流程。TVM基于人工配置实现的算子融合优化是围绕单射(injective)算子展开的,其中,单射是指算子对输入数据的每个元素做相同的计算操作(例如对输入数据的矩阵中的每个元素都加1的操作),即元素方式(elementwise)的操作。单射算子即对输入数据进行单射计算操作的算子。具体的。如图3中所示,TVM基于人工配置的方式提供的算子融合场景和方法可分为如下三类:
1)(输出可融合的)复杂(complex-out-fusable)算子与单射算子的融合。
其中,复杂算子指计算逻辑复杂、计算量大的算子,例如执行需要大量计算操作的卷积运算、矩阵乘法等算法的算子。
例如图3中所示,两个卷积核的卷积(conv2d)算子、批归一化(batchnormalization,bn)算子以及线性整流(rectified linear unit,relu)算子可以融合为一个算子,融合后的卷积-批归一化-线性整流-融合算子(fused-conv2d-bn-relu)可以完成这三个算子的计算操作。
2)单射算子与单射算子的融合。
例如图3中所示,加值(add)算子与平方根(sqrt)算子可以融合为一个算子,融合后的加值-平方根-融合算子(fused-add-sqrt)可以完成这两个算子的计算操作。
3)单射算子与消轴(reduction)算子(也可称为降维算子)的融合。
其中,消轴算子指进行的计算操作能够使输出数据的维度小于输入数据的维度的算子。
例如图3中所示,指数函数(exp)算子与求和(sum)算子可以融合为一个算子,融合后的指数-求和-融合算子(fused-exp-sum)可以完成这两个算子的计算操作。
在上述三种类型的融合场景和方法中,核心思想都是要求算子的输入输出数据之间满足一一映射的依赖关系,因此仅适用于简单的向量算子场景下的算子融合优化。
除了上述的通过人工配置方式实现特定场景下的算子融合调度优化之外,TVM还提供了调度自动生成技术(ansor)来实现自动的算子融合优化。TVM自动优化依赖于启发式规则,以算子是否具有可融合的消费者(HasFusibleConsumer)作为判据来进行向后的算子融合,即判断算子是否符合上述人工配置的算子融合场景。具体实施时可通过算子类型标签(optype)来识别AI模型中的算子是否满足上述三类算子融合的场景,并在满足时按照上述方法进行算子融合优化。
上述两种方法都仅提供了保守的算子融合策略,即对输入输出数据满足一一映射的算子进行算子融合,因此仅能实现对少数复杂度低的算子的融合,通用性较差,处理效率较低。此外,TVM通过算子类型标签作为算子融合判据的方法无法追踪AI模型中一些复杂算子间的数据流依赖关系,并进行针对性的算子融合处理。
例如,如图4中所示,AI模型中存在多输出类型的算子,这类算子的输出数据会输入到多个后继算子(例如图4中所示的消轴算子和其它算子)中。进一步的,再结合图4中所示的访存密集型算子(如归一化指数函数(softmax)、层归一化(layernorm)等算子)中常见的消轴运算及广播(broadcast)运算,则算子中间结果的数据量大小难以评估,可能会超出AI芯片的片上缓存的容量,因此存在内存溢出的风险,导致TVM难以执行更深度更复杂的算子融合优化。
总的来说,当前的算子融合方法的融合策略较为单一固定,规则简单,无法提供更深高效的性能优化,因此场景适用性较差,算子融合效率相对较低,对AI模型的性能提升也较低。
鉴于此,本申请实施例提供一种算子融合方法及装置,用以提高对AI模型中的算子进行算子融合的灵活性和通用性。
下面结合附图对本申请实施例提供的方案进行详细介绍。
图5为本申请实施例提供的一种算子融合方法适用的场景的示意图。AI模型的应用主要包括设计、编译和执行三个阶段。其中,设计阶段可以由深度学习框架完成,编译阶段由编译器完成,执行阶段由硬件装置(如AI芯片)完成。如图5中所示,利用深度学习框架可以进行AI模型的设计,得到表示AI模型初始的计算逻辑的计算图。编译器由深度学习框架调用,并可以在主机处理器(host CPU)完成对AI模型的编译,再将编译后的AI模型对应的可执行文件(即可执行指令)部署到硬件装置上,则硬件装置可以运行AI模型,实现AI模型的功能。其中,深度学习框架可以采用张量流(TensorFlow)框架、PyTorch框架、Mxnet框架等。编译器可以采用nGraph编译器、加速线性代数(accelerated linear algebra,XLA)编译器、GLOW编译器、TVM编译器等。运行AI模型的硬件装置可以是中央处理器(centralprocessing unit,CPU)、图形处理器(graphics processing unit,GPU)、张量处理器(tensor processing unit,TPU)、AI芯片等。
下面以AI芯片为例进行介绍。图6为本申请实施例提供的一种AI芯片的结构示意图。如图6中所示,AI芯片中可以包括:独立的AI处理器或芯片内部集成的AI计算模块、UB、多级缓存(例如图6中所示的两个L0缓存和一个L1缓存)以及片外缓存(例如图6中所示的DDR)。
其中,AI处理器或AI计算模块用于执行AI模型中的算子对应的计算操作。按照逻辑功能划分,AI处理器或AI计算模块中可以包含至少一个计算单元,不同计算单元可以用于执行不同的算子,每个计算单元可以执行一个或多个算子。AI处理器或AI计算模块执行算子时,算子的输入数据需先从片外内存(如DDR)搬移到片内缓存(如UB),再从片内缓存中读取;算子的输出数据需先写入片内缓存,再从片内缓存搬移到片外内存进行存储;执行算子过程中的中间数据则可以直接存储在片内缓存中。
本申请实施例提供的方案可应用于上述图5所示场景下的编译过程中,在采用本申请实施例提供的方法对AI模型进行算子融合处理并完成编译后,可以将编译后的AI模型部署到上述图6所示的AI芯片中,由AI芯片运行编译后的AI模型。
本申请实施例提供的算子融合方法可以应用于集成编译功能和模型运行功能的同一计算装置,也可以分别应用于具有编译功能和模型运行功能的不同计算装置。在该方法应用于不同计算装置中时,可以是一个计算装置完成该方法中的模型编译过程,并将编译后的AI模型部署在另一个计算装置上,由另一个计算装置完成该方法中的模型运行过程。
其中,计算装置可以是智能手机、个人计算机等终端设备或其它装置,本申请不做特别限定,只要能够读取本申请实施例的方法的程序代码,并运行该程序代码,以根据本申请实施例提供的方案对AI模型进行处理即可。
为了便于说明,以下以同一计算装置执行算子融合方法为例,对本申请实施例提供的算子融合方法进行介绍。
在本申请一些实施例中,计算装置中可以进一步包括编译器和执行器。其中,编译器可以用于执行对AI模型进行算子融合处理及编译处理的方法,执行器可以用于执行运行编译后的AI模型的方法,下文中以此为例进行说明。
参照图7,本申请实施例提供的算子融合方法包括:
S701:计算装置确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连。
本申请实施例中,计算装置在获取到初始的AI模型后,可以采用本申请实施例提供的方案对所述AI模型中的算子进行算子融合处理,再对进行算子融合后的AI模型进行编译。在一些场景中,计算装置还可以对已经进行算子融合处理后的AI模型,再次采用本申请实施例提供的方案进行一次算子融合处理。
在本申请一些实施例中,计算装置在对AI模型进行算子融合处理时,可以分别从AI模型包含的多个算子中选择部分算子组成进行算子融合的局部算子链,并针对该局部算子链进行算子融合。即计算装置可以在AI模型包含的多个算子中先选择出一部分算子,对这一部分算子进行算子融合处理,将其融合为至少一个融合算子,然后在AI模型包含的算子中再选择一部分算子,并对这部分算子进行算子融合处理,将其融合为至少一个融合算子,以此类推,可以通过多次算子融合处理实现对AI模型整体的算子融合处理。
其中,计算装置在AI模型包含的多个算子中选择部分算子进行算子融合处理时,可以采用如下任一方式:
1)在所述AI模型包含的多个算子中,随机选择具有连通性的多个算子为多个目标算子。其中,在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连,任意两个未直接相连的目标算子之间连接有至少一个其它的目标算子。
2)在所述AI模型包含的多个算子中,选择包含指定类型的算子在内的多个算子为多个目标算子。其中,在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连,任意两个未直接相连的目标算子之间连接有至少一个其它的目标算子,所述指定类型的算子至少包括多输出算子。
其中,多输出算子的输出数据可以作为与其相连的多个算子的输入数据。
在本申请一些实施例中,所述指定类型的算子还包括能使输入数据的维度发生变化的算子(例如消轴算子、广播算子等),且该算子与多输出类型的算子直接相连,或者该算子与多输出类型的算子之间连接有至少一个其它算子。其中,广播算子为将输入数据的维度变为与前一个算子的输入数据的维度相同的算子。
S702:计算装置在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理。
计算装置在通过上述方式确定多个目标算子后,可以针对所述多个目标算子进行算子融合处理。具体的,计算装置可以先针对所述多个目标算子,生成多个算子融合模板,再从所述多个算子融合模板中选择一个算子融合模板作为目标算子融合模板。
在本申请一些实施例中,所述多个算子融合模板包括第一算子融合模板和第二算子融合模板。其中,所述第一算子融合模板用于将多个算子融合为一个融合算子,该模板是数据局部性优先的调度模板,可以对多个算子进行整体融合。所述第二算子融合模板用于将多个算子融合为多个融合算子,该模板是数据并行性优先的调度模板,可以对所述多个目标算子进行局部融合。
计算装置在多个算子融合模板中选择目标算子融合模板时,可以采用如下方式:
当所述多个目标算子中存在多输出算子,且多输出算子的输出数据的数据量较大时,选择第二算子融合模板。具体的,计算装置在确定所述多个目标算子中存在上述的第一目标算子和多个第二目标算子时,进一步判断存储所述第一目标算子的输出数据所需的存储空间是否小于设定的空间阈值,若是,则在多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择第二算子融合模板为所述目标算子融合模板。其中,若AI模型编译后部署到AI芯片上运行,则所述设定的空间阈值小于所述AI芯片的片上缓存的空间大小。
当所述多个目标算子中不存在所述第一目标算子和多个第二目标算子,即所述多个目标算子中不存在多输出算子时,可以选择第一算子融合模板为所述目标算子融合模板。其中,所述第一目标算子为多输出算子。
可选的,在上述方式,在多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。例如,所述多个第二目标算子中可以存在消轴算子,消轴算子的输入数据的维度大于其输出数据的维度。
在上述方法中,计算装置可以根据多个目标算子之间的连接关系、每个目标算子的输入数据和输出数据的特征信息(例如数据维度、数据量等信息),确定所述多个目标算子中是否存在所述第一目标算子和多个第二目标算子。
S703:计算装置根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
计算装置根据上述步骤选择目标算子融合模板后,可以采用所述目标算子融合模板对所述多个目标算子进行算子融合处理。
具体的,当计算装置选择的目标算子融合模板为所述第一算子融合模板时,计算装置使用所述第一算子融合模板将所述多个目标算子融合为一个融合算子。
当计算装置选择的目标算子融合模板为所述第二算子融合模板时,计算装置使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子。其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子,所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
在上述实施例中,计算装置在对AI模型中的算子进行融合处理时,针对待融合的多个目标算子,可以从采用多种不同融合策略的算子融合模板中选择一个算子融合模板来进行多个目标算子的融合处理。其中,不同算子融合模板的算子融合方式不同,可以实现不同的融合效果,因此可以适应更多场景的需求。因此,本申请通过多模板的算子融合方案可以提高算子融合处理的灵活性和通用性,进而更显著的提升算子融合的效率,进一步提升AI模型的性能。
下面对计算装置运行算子融合处理后的AI模型的方法进行介绍。
本申请实施例中,计算装置在运行AI模型的过程中,针对输入所述AI模型的数据,按照所述AI模型中算子的执行顺序,依次执行各算子即可。
其中,对于上述初始的AI模型中的多个目标算子融合后得到的第一融合算子和第二融合算子,计算装置可按如下步骤执行所述第一融合算子和第二融合算子:
步骤1:计算装置执行第一融合算子。
其中,第一融合算子的输入数据存储在目标内存中,计算装置执行第一融合算子时,先从目标内存中搬移第一融合算子的输入数据至目标缓存中,再从目标缓存中读取第一融合算子的输入数据,并对该输入数据执行第一融合算子对应的计算操作。
在本申请一些实施例中,所述目标内存为计算装置中除所述执行器中的内存以外的其它内存,目标缓存为所述计算装置的执行器中的内存。
在本申请一些实施例中,计算装置可以分多次(或分块)搬移目标内存中的数据至目标缓存中,并分别对每次搬移的数据执行第一融合算子对应的计算操作,这样,即使第一融合算子的输入数据的数据量超过目标缓存的容量,计算装置也可以完成第一融合算子的执行过程。
步骤2:计算装置在执行第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据,并将所述多份复制数据分别存储到目标内存。其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同。
示例性的,在计算装置的执行器为AI芯片时,所述目标内存为所述AI芯片的片外内存,所述目标缓存为AI芯片的片上缓存。
步骤3:计算装置按照与所述第二融合算子对应的融合前的目标算子的执行顺序,分别执行所述第二融合算子的计算操作。
其中,与所述第二融合算子对应的融合前的目标算子至少包含上述的多个第二目标算子,还可以包含连接在所述多个第二目标算子之后的其它目标算子。计算装置执行第二融合算子时,分别按序执行所述第二融合算子中每个第二目标算子所表示的计算操作,以及其它目标算子所表示的计算操作。
计算装置执行所述第二融合算子中每个第二目标算子所表示的计算操作时,可以分别对所述多份复制数据执行所述多个第二目标算子中每个第二目标算子所表示的计算操作。其中,计算装置在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
计算装置在对所述多份复制数据中的一份复制数据执行所述目标计算操作时,可以将所述一份复制数据再分为多份数据,并分别对每份数据执行所述目标计算操作。具体的,计算装置可以针对所述一份复制数据执行多次数据处理过程,其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作。
其中,所述目标子数据为所述一份复制数据中的部分数据(即从所述一份复制数据中分出的一份数据),存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;其中,在所述多次数据处理过程中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
在上述实施例中,在进行算子融合处理之前,所述多个第二目标算子是依赖同一份数据执行计算操作的。在进行算子融合处理之后,计算装置在执行第一融合算子结束后,通过复制多份第一融合算子的输出数据(即算子融合前第一目标算子的输出数据),使得计算装置在执行第二融合算子时,分别针对一份复制数据执行一个第二目标算子所表示的计算操作,避免了多个第二目标算子依赖同一份数据执行计算操作的情况,从而解耦了多个第二目标算子之间的数据依赖关系。因此,在进行算子融合处理之后执行某个第二目标算子所表示的计算操作时,可以避免受到其它第二目标算子的影响,进而提高算子执行的准确度,提升AI模型的性能。
下面结合具体实例,以计算装置对AI模型进行算子融合处理、AI芯片运行AI模型为例,对本申请实施例提供的算子融合方法进行介绍。
图8为本申请实施例提供的一种算子融合方法的流程示意图。如图8中所示,本申请实施例提供的方案中,计算装置可以根据初始的AI模型的计算描述(计算图),通过对AI模型中的算子间的依赖关系进行识别,确定相对复杂的数据场景,并针对该场景生成多种算子融合模板。基于不同的算子融合模板,可以进一步生成不同算子融合模板的调度参数的合法空间,最后还可以通过强化学习调优得到较优的算子融合模板和调度参数的合法空间。
其中,算子融合模板的调度参数的合法空间即为上述实施例中所述的目标缓存中的可用存储空间,该合法空间限制了计算装置从目标内存搬移一次数据到目标缓存时最大能够搬移的数据量。
如图8中所示,在依赖关系分析阶段,计算装置可以分析AI模型中算子之间的数据依赖关系。具体可以根据AI模型的计算图对各算子的输入数据输出数据、参与计算操作的轴(即张量的某个维度,可以类比为矩阵的行、列)的信息,识别并记录算子间的数据流的依赖关系。
示例性的,图9为本申请实施例提供的一种局部算子的数据流示意图。如图9中所示,箭头代表AI模型中某一算子的输入数据(fmp)从片外内存DDR搬移到UB的轴依赖关系。其中,M和K分别为输入数据的维度中两个轴(可分别类别为矩阵的行和列)的标识,35904和16分别表示两个轴的维度(可分别类比为矩阵的行数和列数)。根据图9可知,输入数据从DDR搬移到UB时,其数据维度并未发生变化。
示例性的,图10为主要的访存密集型算子中的计算模式的示意图。该计算模式通常在算子中出现多次,常用于归一化时对张量减去均值的计算。这种计算模式为典型的复杂数据场景。如图10中所示,该计算模式的计算流程可以概括为输入数据(图10以3×3矩阵为例进行示意)的所有元素加上一个常数(例如图10中所示的一个全1的3×3矩阵中每个元素加1,得到一个全2的3×3矩阵),再进行消轴运算(例如图10中所示的全2的3×3矩阵中行方向的元素求和,得到一个全6的三阶向量)和广播运算(例如图10中所示的全6的三阶向量广播回原始维度(shape),得到一个全6的3×3矩阵),最后与第一次加值运算得到的输出数据相加(例如图10中所示的权6的3×3矩阵与全2的3×3矩阵相加得到全8的3×3矩阵)。
对于上述计算流程的描述,计算模型在依赖关系分析阶段通过记录各算子的输入数据和输出数据的关系,可以识别到第一个add算子具有多个消费者(consumer),即多个将add算子的输出数据作为自身输入数据的算子,也就是图10中所示的reduction算子和第二个add算子,且第一个add算子之后的数据流支路中存在ruduction算子,则计算装置可以判断该计算流程满足“多输出+消轴算子”的复杂数据流场景(图10中的虚线框)。因此,可以对该计算流程进行算子融合处理,并可以将第一个add算子作为复杂数据流的场景识别点。其中,图10中所示的四个算子可以作为上述实施例中所述的多个目标算子,图10中第一个add算子可以作为上述实施例中所述的第一目标算子,同时还是所述多个目标算子中执行顺序最早的算子,图10中的reduction算子和第二个add算子作为多个第二目标算子。
在多模板生成阶段,计算装置分别按照数据局部性优先和数据并行性优先的策略生成两个不同的调度模板。参照图11,以“多输出+消轴算子”的复杂数据流场景为例,针对该场景下的多个算子生成的两个算子融合模板对应的融合策略分别为图11中所示的融合策略1和融合策略2。
其中,融合策略1为数据局部性优先的融合策略(对应上述实施例中所述的第一融合模板)。在该策略中,在AI芯片的片上缓存允许的条件下,计算装置可以将复杂数据流场景下的所有算子进行整体融合,融合后在算子执行过程中不会将中间结果搬出片外。如图11中所示,在融合策略1中,虚线框中是融合后算子执行过程跳过的片外缓存节点(即DDR),这样可以直接在片上缓存进行数据复用,即前一个算子的输出数据保存在片上缓存,后一个算子直接从片上缓存中读取前一个算子的输出数据),从而将数据局部性最大化,减少复杂数据流场景下AI芯片的访存开销。
该策略的缺点在于存在多输出算子的情况下,该多输出算子之后连接的各算子执行时依赖同一份数据(即该多输出算子的输出数据),则在进行消轴运算时(例如图11中所示的消轴算子),必须满足消轴计算完毕即该算子对多输出算子的输出数据进行计算完毕才能执行后续算子,否则会违背计算逻辑,因此消轴计算的数据必须一次性全部加载,也就是说,多输出算子的输出数据需要一次性加载到消轴算子,而不能分批传送,因此无法做到并行处理。
图11中所示的融合策略2为数据并行性优先的融合策略(对应上述实施例中所述的第二融合模板)。在该策略中,针对多输出算子可以通过数据复制来解耦依赖。如图11中所示,在融合策略2中,多输出算子之后的每个算子都会搬运一份数据,例如虚线框中的两个节点就是两份搬运的数据,从而解耦多输出算子之后的多个分支上的算子之间的数据依赖关系。基于该融合策略,消轴算子可以分批加载多输出算子的输出数据,因此可以实现消轴运算的并行执行,后继算子的计算操作如果依赖消轴运算的结果,则可以等待消轴运算完成后再进行。
该策略的并行性要优于数据局部性优先的融合策略,但在访存优化上更保守,适用于消轴运算中对应轴的数据量较大的情况(即消轴算子的输入数据的数据量较大,可能无法全部搬移到AI芯片的片上缓存)。这种情况下,基于数据局部性优先的融合策略进行算子整体融合会存在超出AI芯片的片上缓存限制的风险,但在数据并行性优先的融合策略中,可以分多次加载输入数据,且每次加载的数据量可根据AI芯片的片上缓存的容量进行灵活设置,可以保证进行算子融合后不会存在超出AI芯片的片上缓存限制的风险。因此,上述两个不同的融合策略在理论上能够保证自动融合功能的完备性。
示例性的,采用上述两种策略对图10中所示的多个算子进行算子融合处理时,对应生成的算子融合模板如图12中所示。其中,模板1是数据局部性优先的融合策略,对应上述实施例中所述的第一算子融合模板,模板2是数据并行性优先的融合策略,对应上述实施例中所述的第二算子融合模板。
如图12中所示,模板1会对所有多输出分支的算子进行整体融合,其中,箭头表示数据流向。当采用模板1进行算子融合处理后,AI芯片执行图10中的多个算子对应的计算操作时,数据流访问的内存依次为DDR-UB-UB-UB-UB-UB-DDR,这样AI芯片在运行AI模型的过程中,对于整个数据流只需访问一次片外内存(将数据从片外内存搬移到片内缓存),因此大大减少了访存的开销。但是模板1由于多输出数据流的依赖关系,若在消轴运算所对应的轴上实现并行,消轴计算未完成则会进行后续的相加操作,会导致计算逻辑被改变。因此模板1牺牲了消轴算子进行消轴运算的并行性,即存在不可切分轴(图12模板1中张量的第二个维度)。
如图12中所示,模板2会通过复制数据来解耦依赖。在完成第一个add运算(add_0)后,其计算结果会搬出到片外内存,在该计算结果进入多输出分支数据流时AI芯片会分别搬运两份数据以解耦对一份数据的依赖。该模板可以在消轴算子的运算轴上实现并行运算,并会在运行完所有消轴运算后再进行第二个add运算(add_1)。该模板的并行性要优于模板1,但在访存优化上较模板1保守,适用消轴运算中数据量较大的情况。
在多模板合法空间生成阶段,计算装置生成算子融合模板后,会为每个算子融合模板实例化相应的参数合法空间生成器,其中,参数特指数据切块的大小,即上述实施例中所述的从一份复制数据中读取的部分数据的数据量。由于AI芯片的片上缓存的容量有限,一般无法将完整的数据从片外缓存全部搬移进来,而是需要分成多块数据分多次搬移,而数据张量的每个维度都会有不同的切块大小,不同的切块大小对运算性能的影响是不同的,因此需要进行参数调优。
示例性的,如图13中所示,在为图12中所示的算子融合模板生成合法空间参数时,可以先选择其中一个算子融合模板例如模板1,然后为该模板实例化相应的参数合法空间生成器,并生成该模板下每个算子对应的合法空间参数。其中,每个算子对应的合法空间参数包括该算子的各维度的数据切块大小。
具体的,在初始化阶段,合法空间生成器可以依次为每个算子独立计算在AI芯片的片上缓存的存储空间限制下可取的参数(即数据切块的大小),即不考虑算子之间的相互影响。例如,如图14中所示,第一行的每个长方形代表每个算子初始的合法空间。在生成参数阶段,计算装置先随机选择一个算子融合模板,利用该算子融合模板对应的合法空间生成器,按照每个算子融合模板下的数据流拓扑顺序,生成每个维度的切块参数,然后裁剪掉在数据依赖和存储限制因素下带来的非法参数,从而保证每一步参数采样都是合法的。例如,如图14中所示,第二行的阴影部分代表被裁剪掉的非法参数所在的空间。其中,前置位算子的分块参数对后面算子可选的分块参数会存在限制。
在模板选择和调优阶段,计算装置可按照上述实施例提供的方法,选择进行算子融合处理时采用的算子融合模板。进一步的,计算装置可以通过训练调优确定算子融合模板的较优的合法空间参数。
示例性的,计算模板可以分别采用不同合法空间参数下的同一算子融合模板对AI模型进行算子融合处理,并利用训练数据在AI芯片上运行和测试进行算子融合处理后的AI模型,并获得实际性能反馈,来调优选择较好的模板及数据切块参数。例如,可以选择使得AI模型测试性能最好的合法空间参数作为采用的算子融合模板的最终参数。
计算模型完成算子融合模板的选择并对AI模型进行算子融合处理后,可以对处理后的AI模型进行编译,生成代码并部署到AI芯片,则AI芯片可以运行AI模型,以对实际业务数据进行相应处理。
上述实例中,计算模型可以对访存密集型算子中常出现的复杂数据流场景进行识别,进而实施多模板的融合策略。在为不同算子融合模板生成了相应合法空间参数后,计算模型也可在AI芯片上实测获得性能反馈来对算子融合模板的合法空间参数进行调优。从而可以进一步提升算子融合的效率和性能。得益于在复杂数据流场景中进行的自动融合优化,本申请实施例提供的方案对于访存密集型算子的性能提升相对人工手写的调度为:softmax单算子性能提升10.0%,layernorm单算子性能提升50.7%。
基于以上实施例及相同构思,本申请实施例还提供了一种计算装置,如图15所示,计算装置1500可以包括:
算子选择单元1501,用于确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;模板选择单元1502,用于在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;算子处理单元1503,用于根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
在一种可能的设计中,所述多个算子融合模板包含第一算子融合模板和第二算子融合模板;其中,所述第一算子融合模板用于将多个算子融合为一个融合算子;所述第二算子融合模板用于将多个算子融合为多个融合算子;所述模板选择单元1502在根据所述多个目标算子,在多个算子融合模板中选择目标算子融合模板时,具体用于:当所述多个目标算子中存在第一目标算子和多个第二目标算子时,若存储所述第一目标算子的输出数据所需的存储空间小于设定的空间阈值,则在所述多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择所述第二算子融合模板为所述目标算子融合模板;当所述多个目标算子中不存在第一目标算子和多个第二目标算子时,在所述多个算子融合模板中选择第一算子融合模板为所述目标算子融合模板;其中,所述多个第二目标算子分别与所述第一目标算子相连,所述多个第二目标算子的输入数据为所述第一目标算子的输出数据。
在一种可能的设计中,在所述多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。
在一种可能的设计中,所述算子处理单元1503在根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理时,具体用于:当所述目标算子融合模板为所述第二算子融合模板时,使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子;其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子;所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
在一种可能的设计中,所述装置还包括模型运行单元1504,所述模型运行单元1504用于:运行所述AI模型,具体包括:在执行所述第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据;其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同;根据所述多份复制数据执行所述第二融合算子。
在一种可能的设计中,所述第二融合算子用于表示所述第二组目标算子所表示的计算操作;所述模型运行单元1504在根据所述多份复制数据执行所述第二融合算子时,具体用于:在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作;其中,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
在一种可能的设计中,所述模型运行单元1504在根据所述多份复制数据执行所述第二融合算子之前,还用于:将所述多份复制数据分别存储到目标内存;所述模型运行单元1504在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作时,具体用于:执行多次数据处理过程;其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作;其中,所述目标子数据为所述一份复制数据中的部分数据,存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;其中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
在一种可能的设计中,所述模板选择单元1502在多个算子融合模板中选择目标算子融合模板之前,还用于:针对所述多个目标算子,生成所述多个算子融合模板。
本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能单元可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
图15中的各个单元的只一个或多个可以软件、硬件、固件或其结合实现。所述软件或固件包括但不限于计算机程序指令或代码,并可以被硬件处理器所执行。所述硬件包括但不限于各类集成电路,如中央处理单元(CPU)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)或专用集成电路(ASIC)。
基于以上实施例及相同构思,本申请实施例还提供了一种计算装置,用于实现本申请实施例提供的计算模型的处理方法。如图16所示,计算装置1600可以包括:一个或多个处理器1601,存储器1602,以及一个或多个计算机程序(图中未示出)。作为一种实现方式,上述各器件可以通过一个或多个通信线路1603耦合。其中,存储器1602中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令;处理器1601调用存储器1602中存储的所述指令,使得计算装置1600执行本申请实施例提供的软件程序处理方法。
在本申请实施例中,处理器可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
在本申请实施例中,存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。本申请实施例中的存储器还可以是电路或者其它任意能够实现存储功能的装置。
作为一种实现方式,所述计算装置1600还可以包括通信接口1604,用于通过传输介质和其它装置进行通信,例如,所述计算装置1600可以通过所述通信接口1604,与第一服务器、第二服务器或数据库等进行信息或数据交互。在本申请实施例中,通信接口可以是收发器、电路、总线、模块或其它类型的通信接口。在本申请实施例中,通信接口为收发器时,收发器可以包括独立的接收器、独立的发射器;也可以集成收发功能的收发器、或者是接口电路。
在本申请一些实施例中,所述处理器1601、存储器1602以及通信接口1604可以通过通信线路1603相互连接;通信线路1603可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。所述通信线路1603可以分为地址总线、数据总线、控制总线等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本申请实施例提供的方法中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,简称DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,简称DVD)、或者半导体介质(例如,SSD)等。
基于以上实施例及相同构思,本申请实施例还提供一种计算装置,该装置包括存储器和至少一个处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器中存储的计算程序,实现本申请上述实施例提供的算子融合方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算装置,该装置包括编译器和执行器;所述编译器和所述执行器协作,用于实现本申请上述实施例提供的算子融合方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算装置,该装置包括至少一个处理器和接口;所述接口,用于为所述至少一个处理器提供程序指令或者数据;所述至少一个处理器用于执行所述程序指令,实现本申请上述实施例提供的算子融合方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在计算装置上运行时,使得所述计算装置执行本申请上述实施例提供的算子融合方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序或指令,当所述计算机程序或指令被计算装置执行时,实现本申请上述实施例提供的算子融合方法。
基于以上实施例及相同构思,本申请实施例还提供一种芯片系统,该芯片系统包括至少一个处理器和接口,所述接口用于为所述至少一个处理器提供程序指令或者数据,所述至少一个处理器用于执行所述程序指令,实现本申请上述实施例提供的算子融合方法。
在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于存储程序指令和数据。
在一种可能的设计中,所述芯片系统由芯片构成,或者包括芯片和其他分立器件。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (18)

1.一种算子融合方法,其特征在于,包括:
确定人工智能AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;
在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;
根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
2.根据权利要求1所述的方法,其特征在于,所述多个算子融合模板包含第一算子融合模板和第二算子融合模板;其中,所述第一算子融合模板用于将多个算子融合为一个融合算子;所述第二算子融合模板用于将多个算子融合为多个融合算子;
根据所述多个目标算子,在多个算子融合模板中选择目标算子融合模板,包括:
当所述多个目标算子中存在第一目标算子和多个第二目标算子时,若存储所述第一目标算子的输出数据所需的存储空间小于设定的空间阈值,则在所述多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择所述第二算子融合模板为所述目标算子融合模板;
当所述多个目标算子中不存在第一目标算子和多个第二目标算子时,在所述多个算子融合模板中选择第一算子融合模板为所述目标算子融合模板;
其中,所述多个第二目标算子分别与所述第一目标算子相连,所述多个第二目标算子的输入数据为所述第一目标算子的输出数据。
3.根据权利要求2所述的方法,其特征在于,
在所述多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。
4.根据权利要求2或3的方法,其特征在于,根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理,包括:
当所述目标算子融合模板为所述第二算子融合模板时,使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子;
其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子;所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
运行所述AI模型,包括:
在执行所述第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据;其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同;
根据所述多份复制数据执行所述第二融合算子。
6.根据权利要求5所述的方法,其特征在于,所述第二融合算子用于表示所述第二组目标算子所表示的计算操作;
根据所述多份复制数据执行所述第二融合算子,包括:
在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作;其中,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
7.根据权利要求6所述的方法,其特征在于,在根据所述多份复制数据执行所述第二融合算子之前,所述方法还包括:将所述多份复制数据分别存储到目标内存;
在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作,包括:
执行多次数据处理过程;其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作;其中,所述目标子数据为所述一份复制数据中的部分数据,存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;
其中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
8.根据权利要求1~7任一所述的方法,其特征在于,在多个算子融合模板中选择目标算子融合模板之前,所述方法还包括:
针对所述多个目标算子,生成所述多个算子融合模板。
9.一种计算装置,其特征在于,包括:
算子选择单元,用于确定AI模型中的多个目标算子;其中,所述AI模型包含多个算子,任一算子用于表示所述AI模型中的至少一个计算操作,所述多个目标算子包含在所述多个算子中;在所述多个目标算子中,每个目标算子与至少一个其它的目标算子相连;
模板选择单元,用于在多个算子融合模板中选择目标算子融合模板;其中,任一算子融合模板用于采用所述算子融合模板对应的算子融合方式对多个算子进行算子融合处理;
算子处理单元,用于根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理。
10.根据权利要求9所述的装置,其特征在于,所述多个算子融合模板包含第一算子融合模板和第二算子融合模板;其中,所述第一算子融合模板用于将多个算子融合为一个融合算子;所述第二算子融合模板用于将多个算子融合为多个融合算子;
所述模板选择单元在根据所述多个目标算子,在多个算子融合模板中选择目标算子融合模板时,具体用于:
当所述多个目标算子中存在第一目标算子和多个第二目标算子时,若存储所述第一目标算子的输出数据所需的存储空间小于设定的空间阈值,则在所述多个算子融合模板中随机选择一个算子融合模板为所述目标算子融合模板,否则,在所述多个算子融合模板中选择所述第二算子融合模板为所述目标算子融合模板;
当所述多个目标算子中不存在第一目标算子和多个第二目标算子时,在所述多个算子融合模板中选择第一算子融合模板为所述目标算子融合模板;
其中,所述多个第二目标算子分别与所述第一目标算子相连,所述多个第二目标算子的输入数据为所述第一目标算子的输出数据。
11.根据权利要求10所述的装置,其特征在于,
在所述多个第二目标算子中,至少一个第二目标算子的输入数据与输出数据的维度不同。
12.根据权利要求10或11的装置,其特征在于,所述算子处理单元在根据所述目标算子融合模板,对所述多个目标算子进行算子融合处理时,具体用于:
当所述目标算子融合模板为所述第二算子融合模板时,使用所述第二算子融合模板将所述多个目标算子中的第一组目标算子融合为第一融合算子,以及将所述多个目标算子中的第二组目标算子融合为第二融合算子;
其中,所述第一组目标算子包含所述多个目标算子中执行顺序早于所述第一目标算子的其它目标算子以及所述第一目标算子;所述第二组目标算子包含执行顺序晚于所述第一目标算子的其它目标算子。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括模型运行单元,所述模型运行单元用于:
运行所述AI模型,具体包括:
在执行所述第一融合算子结束后,生成所述第一融合算子的输出数据的多份复制数据;其中,所述多份复制数据的数量与所述多个第二目标算子的数量相同;
根据所述多份复制数据执行所述第二融合算子。
14.根据权利要求13所述的装置,其特征在于,所述第二融合算子用于表示所述第二组目标算子所表示的计算操作;
所述模型运行单元在根据所述多份复制数据执行所述第二融合算子时,具体用于:
在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作;其中,所述目标计算操作为所述第二组目标算子中任一个第二目标算子所表示的计算操作。
15.根据权利要求14所述的装置,其特征在于,所述模型运行单元在根据所述多份复制数据执行所述第二融合算子之前,还用于:将所述多份复制数据分别存储到目标内存;
所述模型运行单元在执行目标计算操作时,对所述多份复制数据中的一份复制数据执行所述目标计算操作时,具体用于:
执行多次数据处理过程;其中,每次数据处理过程包括以下步骤:从所述目标内存读取目标子数据,并将所述目标子数据写入目标缓存;从目标缓存读取所述目标子数据,并对所述目标子数据执行所述目标计算操作;其中,所述目标子数据为所述一份复制数据中的部分数据,存储所述目标子数据所需的存储空间小于目标阈值,所述目标阈值小于所述目标缓存中的可用存储空间;所述目标缓存中的可用存储空间小于存储所述目标数据所需的存储空间,所述目标内存中的可用存储空间大于存储所述目标数据所需的存储空间;
其中,每次数据处理过程中从所述目标内存读取的目标子数据均不同。
16.根据权利要求9~15任一所述的装置,其特征在于,所述模板选择单元在多个算子融合模板中选择目标算子融合模板之前,还用于:
针对所述多个目标算子,生成所述多个算子融合模板。
17.一种计算装置,其特征在于,包括存储器和至少一个处理器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器中存储的计算机程序,实现如权利要求1~8中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在计算装置上运行时,使得所述计算装置执行如权利要求1~8中任一项所述的方法。
CN202111277803.8A 2021-10-30 2021-10-30 一种算子融合方法及装置 Pending CN116089895A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111277803.8A CN116089895A (zh) 2021-10-30 2021-10-30 一种算子融合方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111277803.8A CN116089895A (zh) 2021-10-30 2021-10-30 一种算子融合方法及装置

Publications (1)

Publication Number Publication Date
CN116089895A true CN116089895A (zh) 2023-05-09

Family

ID=86185392

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111277803.8A Pending CN116089895A (zh) 2021-10-30 2021-10-30 一种算子融合方法及装置

Country Status (1)

Country Link
CN (1) CN116089895A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954721A (zh) * 2023-09-20 2023-10-27 天津南大通用数据技术股份有限公司 一种执行器多模态算子异步非阻塞分裂方法
CN117271101A (zh) * 2023-11-22 2023-12-22 上海燧原科技有限公司 一种算子融合方法、装置、电子设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954721A (zh) * 2023-09-20 2023-10-27 天津南大通用数据技术股份有限公司 一种执行器多模态算子异步非阻塞分裂方法
CN116954721B (zh) * 2023-09-20 2023-12-15 天津南大通用数据技术股份有限公司 一种执行器多模态算子异步非阻塞分裂方法
CN117271101A (zh) * 2023-11-22 2023-12-22 上海燧原科技有限公司 一种算子融合方法、装置、电子设备及存储介质
CN117271101B (zh) * 2023-11-22 2024-03-01 上海燧原科技股份有限公司 一种算子融合方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
Adams et al. Learning to optimize halide with tree search and random programs
CN111242321B (zh) 一种数据处理方法及相关产品
US11741342B2 (en) Resource-efficient neural architects
CN110764744B (zh) 用于神经网络计算的中间表示生成方法和装置
US11693633B2 (en) Methods and apparatus to detect and annotate backedges in a dataflow graph
CN113703775B (zh) 一种编译方法、装置、设备及存储介质
CN111104120B (zh) 神经网络编译方法、系统及相应异构计算平台
KR20210002676A (ko) 집약성을 개선하기 위한 머신 학습 모델들의 수정
CN116089895A (zh) 一种算子融合方法及装置
CN112711478B (zh) 基于神经网络的任务处理方法、装置、服务器和存储介质
CN110689121A (zh) 一种用多核处理器实现神经网络模型拆分方法及相关产品
US20190317740A1 (en) Methods and apparatus for runtime multi-scheduling of software executing on a heterogeneous system
WO2018054221A1 (en) Pipeline dependent tree query optimizer and scheduler
CN115034402A (zh) 模型推理性能的优化方法、装置及相关产品
US20210073625A1 (en) Partitioning control dependency edge in computation graph
US11556756B2 (en) Computation graph mapping in heterogeneous computer system
CN114416045A (zh) 自动生成算子的方法和装置
US11467811B1 (en) Method and apparatus for generating metadata by a compiler
WO2024131097A1 (zh) 神经网络模型的编译方法、装置、电子设备和存储介质
CN114692860A (zh) 一种计算图的节点融合方法及设备
CN114168154B (zh) 模型数据处理方法、装置、电子设备及存储介质
US20210295158A1 (en) End-to-end optimization
WO2022047423A1 (en) Memory processing unit architecture mapping techniques
CN116368494A (zh) 一种神经网络编译优化方法和相关装置
CN115576699A (zh) 数据处理方法、装置、ai芯片、电子设备及存储介质

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