CN117170685B - 一种数据处理方法、装置、设备及介质 - Google Patents
一种数据处理方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117170685B CN117170685B CN202311448270.4A CN202311448270A CN117170685B CN 117170685 B CN117170685 B CN 117170685B CN 202311448270 A CN202311448270 A CN 202311448270A CN 117170685 B CN117170685 B CN 117170685B
- Authority
- CN
- China
- Prior art keywords
- operator
- optimization
- model
- scheduling
- dimensional convolution
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 14
- 238000005457 optimization Methods 0.000 claims abstract description 635
- 238000013135 deep learning Methods 0.000 claims abstract description 214
- 238000004458 analytical method Methods 0.000 claims abstract description 200
- 238000004364 calculation method Methods 0.000 claims abstract description 155
- 238000000034 method Methods 0.000 claims abstract description 110
- 238000012545 processing Methods 0.000 claims abstract description 106
- 230000004927 fusion Effects 0.000 claims description 60
- 238000013507 mapping Methods 0.000 claims description 59
- 230000008569 process Effects 0.000 claims description 45
- 238000006731 degradation reaction Methods 0.000 claims description 37
- 230000015556 catabolic process Effects 0.000 claims description 36
- 238000012549 training Methods 0.000 claims description 27
- 238000003860 storage Methods 0.000 claims description 24
- 238000004590 computer program Methods 0.000 claims description 17
- 238000006243 chemical reaction Methods 0.000 claims description 15
- 230000000903 blocking effect Effects 0.000 claims description 12
- 238000004422 calculation algorithm Methods 0.000 claims description 8
- 241001522296 Erithacus rubecula Species 0.000 claims description 6
- 238000007499 fusion processing Methods 0.000 claims description 5
- 238000000638 solvent extraction Methods 0.000 claims description 5
- 230000008707 rearrangement Effects 0.000 claims description 3
- 239000011159 matrix material Substances 0.000 description 37
- 238000013136 deep learning model Methods 0.000 description 26
- 238000005516 engineering process Methods 0.000 description 23
- 125000004122 cyclic group Chemical group 0.000 description 20
- 238000004891 communication Methods 0.000 description 18
- 239000000872 buffer Substances 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 14
- 238000010801 machine learning Methods 0.000 description 13
- 238000013473 artificial intelligence Methods 0.000 description 11
- 230000000694 effects Effects 0.000 description 8
- 238000005259 measurement Methods 0.000 description 8
- 238000007619 statistical method Methods 0.000 description 8
- 206010012335 Dependence Diseases 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 7
- 230000014509 gene expression Effects 0.000 description 7
- 238000000605 extraction Methods 0.000 description 6
- 230000009467 reduction Effects 0.000 description 6
- 230000009466 transformation Effects 0.000 description 6
- 238000013528 artificial neural network Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 238000011176 pooling Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000000354 decomposition reaction Methods 0.000 description 4
- 230000000593 degrading effect Effects 0.000 description 4
- 238000013210 evaluation model Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000008676 import Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003997 social interaction Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000001815 facial effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 150000004820 halides Chemical class 0.000 description 1
- 230000006698 induction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013526 transfer learning Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种数据处理方法、装置、设备及介质,方法包括:将初始网络模型输入至深度学习编译器,在通过深度学习编译器对初始网络模型进行模型分析时,获取优化计算图;对优化计算图进行划分,得到N个计算子图;对N个计算子图中的算子进行性能统计分析,若得到的性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到优化算子,将优化算子所在的计算子图作为优化子图;基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,基于模型调度参数,将优化计算图转换为模型优化代码。采用本申请,可以提升模型在推理时的性能和效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法、装置、设备及介质。
背景技术
随着深度学习的研究深入,人们越来越重视深度学习模型(即用于进行深度学习的网络模型,可简称模型)在推理时的性能。模型的优化是一个非常复杂的过程,需要考虑多个因素,例如模型结构、数据排布、硬件平台等。传统的手工优化方案往往只能优化特定的算子或场景,而不能做到全局优化,因此容易导致过拟合,即优化后的模型在特定场景下表现良好,但在其他场景下表现不佳。为了克服这个问题,深度学习编译器引入了自动化优化技术(例如自动调度和自动代码生成),可以考虑更大的解空间(例如数据排布和调度选择),从而找到全局最优解。虽然自动化优化的方案克服了人工优化的过拟合问题,但这种方案通常会对模型中的所有算子进行无差别地优化,导致算子优化时的灵活性很低,从而难以进一步提升模型在推理时的性能和效率。
发明内容
本申请实施例提供了一种数据处理方法、装置、设备及介质,可以提升模型在推理时的性能和效率。
本申请实施例一方面提供了一种数据处理方法,包括:
获取用于进行深度学习的初始网络模型,将初始网络模型输入至深度学习编译器,在通过深度学习编译器对初始网络模型进行模型分析时,获取用于表征初始网络模型的优化计算图;
对优化计算图进行划分,得到优化计算图的N个计算子图;N为正整数;
对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;
若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图;
基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;模型优化代码用于在业务平台上运行目标网络模型。
本申请实施例一方面提供了一种数据处理装置,包括:
模型分析模块,用于获取用于进行深度学习的初始网络模型,将初始网络模型输入至深度学习编译器,在通过深度学习编译器对初始网络模型进行模型分析时,获取用于表征初始网络模型的优化计算图;
子图划分模块,用于对优化计算图进行划分,得到优化计算图的N个计算子图;N为正整数;
算子分析模块,用于对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;
算子优化模块,用于若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图;
代码转换模块,用于基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;模型优化代码用于在业务平台上运行目标网络模型。
其中,模型分析模块包括:
模型提取单元,用于从深度学习框架中提取用于进行深度学习的初始网络模型;初始网络模型是通过深度学习框架训练得到的;
模型转换单元,用于将初始网络模型输入至深度学习编译器,通过深度学习编译器将初始网络模型转换为用于表征初始网络模型的初始计算图;初始计算图通过深度学习编译器中的模型描述语言进行表示;
模型分析单元,用于通过深度学习编译器对初始网络模型进行模型分析,得到初始网络模型的模型分析结果,基于模型分析结果对初始计算图进行图优化处理,得到初始计算图对应的优化计算图。
其中,子图划分模块包括:
子图划分单元,用于通过深度学习编译器对优化计算图进行计算图分析,得到优化计算图的计算图分析结果,基于计算图分析结果对优化计算图进行划分,得到优化计算图的N个初始子图;N个初始子图中的每个初始子图均通过深度学习编译器中的模型描述语言进行表示;
第一降级单元,用于在深度学习编译器配置的张量算子模板库中,获取与N个初始子图相关联的张量算子模板,基于张量算子模板对N个初始子图中的每个初始子图进行降级处理,得到优化计算图的N个计算子图;N个计算子图中的每个计算子图均通过深度学习编译器中的第一张量描述语言进行表示;第一张量描述语言的语言描述等级低于模型描述语言的语言描述等级。
其中,N个计算子图中的算子包含待优化算子;
算子分析模块包括:
调用分析单元,用于通过与深度学习编译器相关联的模型分析工具,获取待优化算子在N个计算子图中的调用次数;在调用次数满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括算子调用阈值;算子分析模块还包括:
第一确定单元,用于在调用次数大于或等于算子调用阈值时,确定调用次数满足深度学习编译器配置的算子优化条件。
其中,N个计算子图中的算子包含待优化算子;
算子分析模块包括:
时长分析单元,用于在通过深度学习编译器运行初始网络模型时,通过与深度学习编译器相关联的性能分析工具,获取待优化算子的算子运行时长;在算子运行时长满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括时长占用阈值;算子分析模块还包括:
第二确定单元,用于在通过性能分析工具获取到初始网络模型的总运行时长时,获取待优化算子的算子运行时长在总运行时长中的时长占用比例;在时长占用比例大于或等于时长占用阈值时,确定算子运行时长满足深度学习编译器配置的算子优化条件。
其中,N个计算子图中的算子包含待优化算子;
算子分析模块包括:
内存分析单元,用于在通过深度学习编译器运行初始网络模型时,通过与深度学习编译器相关联的性能分析工具,获取待优化算子的内存占用量;在内存占用量满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括内存占用阈值;算子分析模块还包括:
第三确定单元,用于在内存占用量大于或等于内存占用阈值时,确定内存占用量满足深度学习编译器配置的算子优化条件。
其中,调度优化策略包括循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种;循环优化策略包括循环分块策略和循环融合策略。
其中,N个计算子图中包含满足算子融合条件的第一算子和第二算子;
算子优化模块包括:
第一获取单元,用于若性能统计分析结果指示第一算子和第二算子均为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为第一算子和第二算子配置的第一调度优化策略;
算子融合单元,用于通过第一调度优化策略,对作为第一类型算子的第一算子和第二算子进行算子融合处理,得到融合第一算子和第二算子后的融合算子;基于融合算子确定第一类型算子对应的优化算子,且将优化算子所在的计算子图作为优化子图。
其中,当第一类型算子为一维算子时,第一调度优化策略用于指示针对一维算子的循环融合操作和内存访问优化操作。
其中,N个计算子图中包含二维卷积算子;
算子优化模块包括:
第二获取单元,用于若性能统计分析结果指示二维卷积算子为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为二维卷积算子配置的第二调度优化策略;
一维映射单元,用于通过第二调度优化策略,对作为第一类型算子的二维卷积算子进行一维映射处理,得到二维卷积算子对应的一维卷积映射算子;基于一维卷积映射算子确定第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图。
其中,一维映射单元包括:
卷积核分解子单元,用于通过第二调度优化策略,将作为第一类型算子的二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;第一方向垂直于第二方向;
一维映射子单元,用于通过第一方向上的一维卷积核,将二维卷积算子映射为第一方向上的一维卷积算子,且通过第二方向上的一维卷积核,将二维卷积算子映射为第二方向上的一维卷积算子,将第一方向上的一维卷积算子以及第二方向上的一维卷积算子作为二维卷积算子对应的一维卷积映射算子。
其中,第二调度优化策略用于指示针对一维卷积映射算子的循环分块操作、循环重排操作、循环融合操作以及内存访问优化操作。
其中,代码转换模块包括:
空间生成单元,用于从调度优化策略中获取优化子图中的优化算子对应的计算定义,基于获取到的计算定义生成与优化子图相关联的调度搜索空间;
参数获取单元,用于通过深度学习编译器中的调度搜索工具,在调度搜索空间中获取优化子图的优化调度参数,基于优化调度参数确定初始网络模型的模型调度参数;
第二降级单元,用于基于模型调度参数,对优化计算图进行降级处理,得到适用于不同业务平台的目标网络模型的模型优化代码。
其中,第二降级单元包括:
第一降级子单元,用于基于模型调度参数,对优化计算图进行降级处理,得到优化计算图的第一优化代码;第一优化代码通过深度学习编译器中的第二张量描述语言进行表示;第二张量描述语言的语言描述等级低于深度学习编译器中的第一张量描述语言的语言描述等级;
第二降级子单元,用于对第一优化代码进行底层优化处理,得到优化后的第一优化代码,对优化后的第一优化代码进行降级处理,得到第二优化代码;第二优化代码对应的语言描述等级低于第二张量描述语言的语言描述等级;
第三降级子单元,用于将第二优化代码编译为适用于不同业务平台的目标网络模型的模型优化代码;模型优化代码对应的语言描述等级低于第二优化代码对应的语言描述等级。
其中,业务平台包括虚拟游戏对应的游戏平台,且目标网络模型包括部署在游戏平台上的目标语音识别模型;目标语音识别模型是通过对初始网络模型中包含的初始语音识别模型进行优化后得到的;装置还包括:
语音识别模块,用于在获取到与游戏平台相关联的业务对象的语音数据时,将语音数据输入目标语音识别模型;通过目标语音识别模型对语音数据进行特征提取,得到业务对象的声纹特征,基于声纹特征识别业务对象的对象属性;根据业务对象的对象属性,对业务对象进行游戏业务处理。
本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;
处理器与存储器相连,其中,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例提供的方法。
在本申请实施例中,可以获取用于进行深度学习的初始网络模型,进而将初始网络模型输入至深度学习编译器,且在通过深度学习编译器对初始网络模型进行模型分析时,获取用于表征初始网络模型的优化计算图;进一步,可以对优化计算图进行划分,得到优化计算图的N个计算子图;其中,N为正整数;进而可以对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则可以通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,且可将优化算子所在的计算子图作为优化子图;进一步的,可以基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,进而可以基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;这里的模型优化代码用于在业务平台上运行目标网络模型。由此可见,本申请实施例提出了一种基于深度学习编译器的模型优化方案,通过对划分得到的计算子图中的算子进行性能统计分析,可以确定模型中的高频算子(即前述第一类型算子,其在模型中被高频率地调用),进而可以通过为高频算子专门定制的调度优化策略,对高频算子进行算子优化处理,实现了对高频算子的定向优化和区别于非高频算子的差异优化,从而可以提升算子优化时的灵活性。由于调度优化策略是针对高频算子进行定制的,因此可以最大程度地优化高频算子的性能,也就是说,对于高频算子而言,其优化效果优于普通调度策略的优化效果,从而可以提升模型在推理时的性能和效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种系统架构示意图;
图2是本申请实施例提供的一种数据处理场景示意图;
图3是本申请实施例提供的一种数据处理方法的流程示意图一;
图4是本申请实施例提供的一种通过自动调度器实现对模型的性能优化的架构示意图;
图5是本申请实施例提供的一种游戏语音处理的场景示意图一;
图6是本申请实施例提供的一种游戏语音处理的场景示意图二;
图7是本申请实施例提供的一种游戏语音处理的场景示意图三;
图8是本申请实施例提供的一种数据处理方法的流程示意图二;
图9是本申请实施例提供的一种数据处理方法的流程示意图三;
图10是本申请实施例提供的一种数据处理装置的结构示意图;
图11是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习、自动驾驶、智慧交通等几大方向。
本申请实施例提供的方案涉及人工智能领域下的机器学习技术。可以理解的是,机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。预训练模型是深度学习的最新发展成果,融合了以上技术。在本申请实施例中,初始网络模型和目标网络模型均为基于机器学习技术的AI模型,目标网络模型是通过深度学习编译器对初始网络模型进行模型优化后得到的,且目标网络模型可应用于音频、视频、图像、文本等多种领域。
请参见图1,图1是本申请实施例提供的一种系统架构示意图。如图1所示,该系统架构可以包括服务器100以及终端设备集群,其中,终端设备集群可以包括一个或多个终端设备,这里将不对终端设备集群中的终端设备的数量进行限定。如图1所示,终端设备集群中的多个终端设备具体可以包括:终端设备200a、终端设备200b、终端设备200c、…、终端设备200n,其中,终端设备集群之间可以存在通信连接,例如终端设备200a与终端设备200b之间存在通信连接,终端设备200a与终端设备200c之间存在通信连接。同时,终端设备集群中的任一终端设备可以与服务器100存在通信连接,以便于终端设备集群中的每个终端设备均可以通过该通信连接与服务器100进行数据交互,例如终端设备200a与服务器100之间存在通信连接。其中,上述通信连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其它方式,本申请在此不做限制。
其中,服务器100可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。其中,服务器的数量可以为一个或多个,一个终端设备可以与一个服务器相连接,每个服务器均可以和与之相连接的终端设备进行数据交互。
其中,上述终端设备集群中的终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能头盔、智能眼镜等)、智能电脑、智能家电、智能车载等智能终端。其中,终端设备和服务器可以通过有线或无线方式进行直接或间接地连接,本申请实施例在此不做限制。
应当理解,如图1所示的终端集群中的每个终端设备均可以安装有客户端,当该客户端运行于各终端设备中时,可以分别与上述图1所示的服务器100之间进行数据交互。其中,该客户端可以为娱乐客户端(例如,游戏客户端、直播客户端、小说客户端)、社交客户端、即时通信客户端、多媒体客户端(例如,视频客户端、音乐客户端)、购物客户端、支付客户端、工具类客户端(例如,图像编辑客户端、视频制作客户端)、车载客户端、智能家居客户端、浏览器等具有显示文字、图像、视频以及音频等数据信息功能的应用程序。其中,该客户端可以为独立的客户端,也可以为集成在某客户端(例如即时通信客户端、社交客户端等)中的嵌入式子客户端,在此不做限定。以游戏客户端为例,服务器100可以为游戏客户端对应的后台服务器、数据处理服务器等多个服务器的集合,因此,每个终端设备均可以通过各自安装的游戏客户端与服务器100进行数据传输,比如每个终端设备均可以通过服务器100与其他终端设备参与到同一个虚拟游戏(例如,多人在线角色扮演游戏)中,在游戏过程中,游戏用户(即游戏玩家)可以操控相应的游戏角色,并可以在游戏虚拟空间中与其他游戏用户控制的游戏角色进行实时互动,从而获得沉浸式的游戏体验。
可以理解的是,在本申请实施例中,用于进行深度学习的网络模型可统称为深度学习模型,可由深度神经网络构建得到,此处将不对模型的具体网络结构进行限定。深度学习模型可被应用在众多场景中解决问题,如图像分类、目标检测、语音识别、机器翻译、故障识别等,比如,在语音识别场景下,深度学习模型具体可以为语音识别模型。在任意深度学习的应用场景落地一个模型时,都需要经历两个基本步骤:(1)根据训练样本数据生产一个模型的训练步骤;(2)将生产的模型部署到指定硬件平台(或目标设备Target)上执行服务的推理步骤。其中,可以根据业务需求选择合适的训练框架(比如TensorFlow、Pytorch、OneFlow等)来进行模型训练,以生产出需要的模型。但无论选择何种训练框架训练模型,最终目的都是要将训练好的模型部署到实际场景,而在模型部署的时候会发现要部署的平台可能是五花八门的,例如CPU(Central Processing Unit,中央处理器)、GPU(GraphicsProcessing Unit,图形处理器)、FPGA(Field Programmable Gate Array,现场可编程门阵列)、NPU(Neural network Processing Uni,神经网络处理器)、DSP(Digital SignalProcessor,数字信号处理器)等,这样,当模型开发人员需要训练一个模型并在多个不同平台上进行部署时,将难以保证该模型在每个平台上都可以高效推理。
基于此,为了推进模型快速落地,深度学习编译器(也可称为AI编译器)应运而生。对于深度学习编译器,其输入是深度学习模型,输出是硬件可执行代码(即硬件能识别的机器码),即通过深度学习编译器对输入的模型进行优化,并针对特定的硬件平台生成高性能的底层代码,从而能够适配特定的硬件。可以理解,设计深度学习编译器主要是为了提高模型推理时的速度,即深度学习编译器主要解决的问题是要优化模型的推理性能。另外,为了同时实现前端便捷地使用编程语言(比如Python)代码和后端对算子进行高效优化,深度学习编译器通常采用多层IR(Intermediate Representation,中间表示)的形式。在本申请实施例中,深度学习编译器可以是TVM(全称为Tensor Virtual Machine)或其他编译器(比如Halide),这里不做限制,为便于理解,后续将以深度学习编译器为TVM为例进行阐述。其中,TVM是一个通用的深度学习编译器,可以将深度学习模型编译成高效的机器码,以便在不同的硬件平台上进行部署和优化。TVM具有以下优点:
(1)面向深度学习:TVM专为深度学习而生,提供了预定义的张量表达式库,覆盖了所有深度学习算子,以及完备的深度学习图优化支持,可以进行计算图和算子的协同优化,从而提高深度学习模型的性能和效率;
(2)友好的编程体验:TVM可以使用Python编程,引入了Python/C++反射机制,所有数据结构均可互操作,使得编程更加简单易用;
(3)跨平台/架构:TVM支持多种操作系统和硬件平台,包括但不限于Linux/Windows/macOS/Android/iOS,以及X86/AMD/ARM/GPU/FPGA/NPU等,可以在不同的平台上进行部署和优化。
由此可见,TVM具有强大的面向深度学习的支持,友好的编程体验,以及广泛的跨平台/架构支持,可以很好地满足深度学习的需求。
其中,上述计算图是指深度学习框架中的一个基本组件,它的主要作用是描述一个深度学习模型应用是如何处理信息的,以便于之后能够逐步向前推导计算梯度。计算图由基本数据结构张量(Tensor)和基本计算单元算子构成。其中,在数学中定义张量是基于标量与向量的推广,在机器学习领域内可将多维数据称为张量,使用秩来表示张量的轴数或维度。算子是深度学习模型中的基本计算单元,如卷积、池化等,用于对张量数据进行加工处理,实现了多种机器学习中常用的计算逻辑,包括数据转换、条件控制、数学运算等。需要说明的是,计算图优化关注整个模型的计算过程,可通过改变计算图的结构和算子的顺序来提高性能;而算子优化关注单个算子的计算效率,通过优化算子的实现方式和相关参数来提高性能。
为了获得更好的优化效果,本申请实施例提供了一种基于深度学习编译器的模型优化方案,利用编译器技术,实现对深度学习模型的自动调优,从而提高模型性能和效率。为便于理解和说明,可以将在训练阶段用于训练深度学习模型的计算机设备称为模型训练设备,模型训练设备可以是终端设备或服务器,本申请实施例对模型训练设备的具体形式不做限定;类似的,可以将在优化阶段用于优化深度学习模型的计算机设备称为模型优化设备,模型优化设备可以是终端设备或服务器,本申请实施例对模型优化设备的具体形式不做限定;类似的,可以将在应用(或推理)阶段用于运行深度学习模型的计算机设备称为模型应用设备,模型应用设备可以是终端设备或服务器,本申请实施例对模型应用设备的具体形式不做限定。此外,模型应用设备可以是支持任意操作系统(比如Linux、Windows、macOS、Android、iOS等)和硬件平台(比如X86、AMD、ARM、GPU、FPGA、NPU等)的设备,本申请实施例对此不做限制。例如,模型应用设备可以同时支持Linux和Windows。
需要说明的是,模型训练设备、模型优化设备以及模型应用设备中的任意两个可以为同一设备,也可以是不同的设备,本申请实施例对此不做限定。比如,当模型训练设备、模型优化设备以及模型应用设备为互不相同的设备时,模型训练设备具体可以为前述终端设备200a,模型优化设备具体可以为前述终端设备200b,模型应用设备具体可以为前述服务器100,终端设备200a可以将训练好的模型发送给终端设备200b进行优化,终端设备200b可进一步将优化后的模型发送给服务器100进行应用部署,则服务器100可以通过调用优化后的模型来处理相关业务,比如在游戏场景下,可以通过优化后的模型控制虚拟游戏中的BOT(robot的简称,即机器人,在虚拟游戏中通常指代替玩家真人控制的游戏角色)的行为,与玩家进行互动,从而提升玩家的游戏体验。
可以理解的是,本申请实施例重点关注模型的优化过程,因此,为便于区分,可以将优化阶段的深度学习模型称为初始网络模型,将应用阶段的深度学习模型称为目标网络模型,也就是说,在训练得到初始网络模型后,可以进一步对初始网络模型进行模型优化,从而得到可部署在不同的硬件平台上的目标网络模型。
可以理解的是,当使用TVM作为本申请实施例中的深度学习编译器时,一个特色是采用算子的计算和调度过程定义分离的设计思路,将深度学习模型的算子计算方法定义和具体计算调度方式做了解耦。其中,计算(Compute)定义了算子中每个子函数的具体计算过程,调度(Schedule)则细化了计算过程每个具体步骤的实际计算细节。可以理解,虽然描述了某个计算规则,但可以用许多不同的方式进行计算,以适应不同的设备或平台。比如,对于有多个轴的张量,可以选择先迭代哪个轴,或者计算可以分成不同的线程。TVM要求开发人员提供调度,这是关于计算应该如何进行的描述。TE(Tensor Expression,张量表达式)中的调度可以改变循环顺序、在不同的线程中分割计算、并将数据块分组,以及其他操作。调度背后的重要概念是,它们只描述计算是如何进行的,所以同一个TE的不同调度会产生相同的计算结果。以卷积算子为例,计算定义的是卷积算子应如何根据卷积核、卷积步长等参数操作输入张量(Tensor),并输出卷积后的张量的过程;调度则定义了更具体的计算细节,例如卷积的6层计算循环的顺序、每层循环是否需要并行计算、并行数设定为多少等。之所以做这样的分离式设计,是因为一般情况下,特定算子的计算方式是不变的,而算子的调度却有几乎无限种配置方案,显然对于不同的Target(如CPU、GPU),其最佳调度方案必然大相径庭;即使对于同一种Target(如LLVM,全称为Low Level Virtual Machine,即底层虚拟机),不同型号的CPU也会导致最佳调度方案相差甚远。采用计算-调度分离的设计方式,给二次开发人员提供了足够便利的API(Application Programming Interface,应用程序编程接口),方便其自定义性能更佳的调度方案。TVM支持自动调度,TE可以自动推导出最佳的调度方案,包括循环展开、向量化、内存访问模式等,以最大程度地利用硬件资源并提高性能。其中,TE是一种简单而强大的语言,可以用于描述各种张量操作,例如卷积、矩阵乘法、池化等,也就是说,TVM可以使用TE定义张量计算(computation)。
在本申请实施例中,调度方案又可称为调度策略,可以使用深度学习编译器中的调度语言来表示,该调度语言是一种DSL语言(Domain-Specific Language,领域特定语言),它提供了一种描述计算操作和调度策略的方式。调度策略可以指定循环展开、向量化、内存访问模式等优化技术,并为每个计算操作指定具体的调度参数。其中,这里的调度参数是指与调度相关联的参数的统称,可用于控制深度学习编译器或相关优化工具,以影响算子的性能。
结合前文,本申请实施例可以将在模型优化过程中考虑的所有可能的调度策略的集合作为调度搜索空间,此处对调度搜索空间中的调度策略的数量和内容均不做限定。深度学习编译器可以高效地探索庞大的调度搜索空间,以找到针对特定负载和硬件平台的最佳调度策略,这意味着找到了调度参数的最佳配置,可以获得最佳的性能或效果,从而可以提高模型的性能和效率。因此,本申请实施例还可以将在调度搜索空间中搜索到的与初始网络模型中的算子相关的所有调度参数的最佳配置统称为模型调度参数,利用该模型调度参数可以得到高性能的目标网络模型。
本申请实施例在算子层面对模型优化技术进行了改进,实现了特定算子的高频调度和定向优化。通过对初始网络模型中的算子进行分析,可以确定哪些特定算子在模型中具有高频率的调用(即分析高频算子);进而可以针对高频调用的特定算子,编写定制的调度策略,以最大程度地优化它们的性能(即定向优化),这可能包括特定的循环拆分、融合、内存访问优化和并行性提升策略。为便于区分和说明,可以将高频算子称为第一类型算子,将非高频算子(即在模型中调用频率较低的算子)称为第二类型算子,相应的,可以将为高频算子专门配置的调度策略称为调度优化策略。
基于此,在本申请实施例中,可以获取用于进行深度学习的初始网络模型,进而将初始网络模型输入至深度学习编译器,且在通过深度学习编译器对初始网络模型进行模型分析时,可以获取用于表征初始网络模型的优化计算图;进一步,可以对优化计算图进行划分,得到优化计算图的N个计算子图;其中,N为正整数;进而可以对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则可以通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,且可将优化算子所在的计算子图作为优化子图;进一步的,可以基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,进而可以基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;这里的模型优化代码用于在业务平台上运行目标网络模型。
由此可见,通过对划分得到的计算子图中的算子进行性能统计分析,可以确定模型中的高频算子,进而可以通过为高频算子专门定制的调度优化策略,对高频算子进行算子优化处理,实现了对高频算子的定向优化和区别于非高频算子的差异优化,从而可以最大程度地优化高频算子的性能,以提升模型在推理时的性能和效率。
为便于理解,进一步地,请参见图2,图2是本申请实施例提供的一种数据处理场景示意图。该场景可以由模型优化设备和模型应用设备共同实现。本申请实施例以模型优化设备20A和模型应用设备20B为例进行阐述,其中,这里的模型优化设备20A可以为终端设备或服务器,此处不做限制,本申请实施例以模型优化设备20A为终端设备为例进行阐述;这里的模型应用设备20B可以为终端设备或服务器,此处不做限制,本申请实施例以模型应用设备20B为终端设备为例进行阐述。需要说明的是,模型优化设备20A和模型应用设备20B可以是相同的设备(比如前述图1所示的终端设备200a),也可以是不相同的设备(比如前述图1所示的终端设备200a和终端设备200b),此处不做限制。
可以理解,模型优化设备20A上可集成有深度学习编译器201,该深度学习编译器201可用于将初始网络模型编译成高效的模型优化代码,以便在不同的业务平台上进行部署和优化。如图2所示的模型202可作为前述初始网络模型,此处对模型202的具体功能和网络结构均不做限定。其中,模型202可以通过深度学习框架训练得到,这里的深度学习框架包括但不限于TensorFlow、PyTorch、OneFlow、ONNX(Open Neural Network Exchange,开放神经网络交换)。模型优化设备20A在从深度学习框架中提取到模型202后,可以将模型202输入至深度学习编译器201,进而可以通过深度学习编译器201对模型202进行模型分析(即关注模型202的计算过程,例如分析相关计算图的结构和算子的顺序),以获取用于表征模型202的计算图203,此时该计算图203可以作为前述优化计算图。其中,计算图203中可以包含多个张量和算子,这里对张量和算子的具体内容和数量均不做限定。例如,如图2所示,计算图203中具体可以包含算子A1、算子A2、算子A3、算子A4以及算子A5,此处将不对算子A1~算子A5的类型进行限定,例如可以是MatMul算子(即矩阵相乘)、Add算子(即求和)、ReLU(Rectified Linear Unit)算子(即使用ReLU激活函数)等。
进一步地,模型优化设备20A可以通过深度学习编译器201对计算图203进行划分,以得到计算图203的N个计算子图(N为正整数),此处对计算子图的具体数量不做限制。例如,如图2所示,对计算图203进行划分后可以得到3个计算子图,具体包括计算子图204a、计算子图204b以及计算子图204c,此时前述N=3。进一步,模型优化设备20A可以对这3个计算子图中的算子进行性能统计分析,从而得到这3个计算子图中的算子的性能统计分析结果205。通过该性能统计分析结果205,可以知道这3个计算子图中是否存在第一类型算子(即高频算子)。
本申请实施例可以支持多种维度的性能统计分析,例如,可以统计算子的调用次数、分析算子的运行时长或分析算子的内存占用,并判断其是否满足深度学习编译器201配置的算子优化条件,从而得到性能统计分析结果。例如,以统计算子的调用次数为例,如图2所示,模型优化设备20A可以统计到算子A1在上述3个计算子图中被调用了2次,算子A2、算子A3、算子A4以及算子A5在上述3个计算子图中则各自被调用了1次,也就是说,算子A1在模型202中的调用次数是最多的,因此可以确定算子A1为第一类型算子,此时可以将算子A1为第一类型算子时的结果作为性能统计分析结果205。相应的,算子A2、算子A3、算子A4以及算子A5均为第二类型算子(即非高频算子)。
进一步地,由于性能统计分析结果205指示算子A1为第一类型算子,因此可以对算子A1进行定向优化,以最大程度地优化其性能。如图2所示,假设调度策略B1为专门针对算子A1定制的调度优化策略,则模型优化设备20A可以通过调度策略B1对作为第一类型算子的算子A1进行算子优化处理,得到算子C1,此时该算子C1即可作为被高频调用的算子A1所对应的优化算子。可以理解的是,对于不同的第一类型算子,模型开发人员可以编写不同的调度优化策略,进行不同的算子优化处理,此处对调度优化策略的具体内容不做限定。
此外,对于包含算子A2、算子A3、算子A4以及算子A5在内的第二类型算子,模型优化设备20A可以采用常规的优化方案对其进行优化。其中,在深度学习编译器201为TVM时,配置有张量算子清单(Tensor Operator Inventory,简称TOPI),其中有预先定义的常见张量算子(如二维卷积算子conv2d、转置算子transpose)的模板(可称为张量算子模板),也就是说,张量算子清单是TVM中的张量表达式库,提供了预定义模板来描述张量操作,这些预定义模板可以帮助将Relay表示的计算图转换为TE表示的计算子图。其中,Relay是一个功能齐全的可微语言和中间表示(IR),用于表示深度学习模型,在Relay中,可以应用图级优化来优化模型。可以理解的是,TE是一种用于描述张量计算的领域特定语言,其中包含了一些用于底层循环优化的原语,其中,原语指的是TE中的基本操作或函数,用于描述张量计算的基本操作。这些原语提供了一些底层循环优化的功能,例如循环展开、向量化等。基于此,模型优化设备20A可以通过张量算子清单中与第二类型算子相关联的张量算子模板,获取第二类型算子所配置的调度策略,为便于区分,这里的调度策略可称为通用调度策略,进而可以通过该通用调度策略,对第二类型算子进行算子优化处理,得到第二类型算子对应的目标算子,从而可以提升第二类型算子的性能。其中,通用调度策略是指模型优化设备自带的预先定义的调度策略,可用于优化任意算子;不同的通用调度策略可进行不同的算子优化处理,此处对通用调度策略的具体内容不做限定;而前述调度优化策略是指模型开发人员针对高频算子所自定义的调度策略,主要用于优化高频算子,因此,通用调度策略更具有普适性,而调度优化策略更具有针对性,这样设计的好处是可以提高算子优化时的灵活性,从而在整体上提升模型的性能。
如图2所示,假设调度策略B2、调度策略B3、调度策略B4以及调度策略B5均为第二类型算子所配置的通用调度策略,则模型优化设备20A可以通过调度策略B2对作为第二类型算子的算子A2进行算子优化处理,得到算子C2,此时该算子C2即可作为未被高频调用的算子A2所对应的目标算子;类似的,模型优化设备20A可以通过调度策略B3对作为第二类型算子的算子A3进行算子优化处理,得到算子C3,此时该算子C3即可作为未被高频调用的算子A3所对应的目标算子;类似的,模型优化设备20A可以通过调度策略B4对作为第二类型算子的算子A4进行算子优化处理,得到算子C4,此时该算子C4即可作为未被高频调用的算子A4所对应的目标算子;同理,模型优化设备20A可以通过调度策略B5对作为第二类型算子的算子A5进行算子优化处理,得到算子C5,此时该算子C5即可作为未被高频调用的算子A5所对应的目标算子。
在算子优化结束后,可以相应地得到计算子图204a、计算子图204b以及计算子图204c在算子优化后的计算子图,分别为图2所示的计算子图206a、计算子图206b、计算子图206c。可以理解的是,模型优化设备20A可以将优化算子所在的计算子图作为优化子图,如图2所示,可以将计算子图206a和计算子图206b均作为前述优化子图。
进一步地,模型优化设备20A可以基于与优化子图(即计算子图206a和计算子图206b)相关联的调度搜索空间207,确定模型202的模型调度参数208,其中,该模型调度参数208中可以包含所有计算子图的调度参数,如图2所示,具体可以包括计算子图206a的调度参数208a、计算子图206b的调度参数208b、计算子图206c的调度参数208c;进而可以基于模型调度参数208,将前述计算图203转换为模型209的模型优化代码210,此时该模型209可作为前述适用于不同业务平台的目标网络模型。进一步地,模型优化设备20A可以将模型209部署在模型应用设备20B所运行的业务平台211上,则后续模型优化代码210可用于在该业务平台211上运行模型209。可以理解,本申请实施例中的业务平台是指模型应用设备对外提供相关业务服务(包括但不限于娱乐、社交、通信、购物、教育等服务)的平台,一个业务平台通常运行在模型应用设备所支持的一种操作系统上,由硬件平台提供底层支持。在实际应用中,业务平台可以包括但不限于游戏平台、音视频平台、社交平台、通信平台、购物平台、教育平台等,本申请实施例对业务平台的类型不做限定。
上述可知,本申请实施例提出了一种基于深度学习编译器的模型优化方案,通过对划分得到的计算子图中的算子进行性能统计分析,可以确定模型中的高频算子,进而可以通过为高频算子专门定制的调度优化策略,对高频算子进行算子优化处理,实现了对高频算子的定向优化和区别于非高频算子的差异优化,从而可以提升算子优化时的灵活性。由于调度优化策略是针对高频算子进行定制的,因此可以最大程度地优化高频算子的性能,也就是说,对于高频算子而言,其优化效果优于普通调度策略的优化效果,从而可以提升模型在推理时的性能和效率。
需要说明的是,本申请实施例提供的方法适用于各类存在深度学习模型的业务场景中,比如在购物、社交、娱乐、教育等领域,针对相关业务资源(包括但不限于文本资源、图片资源、视频资源、网页资源、音频资源)的推荐、生成、识别等场景,这里将不对具体的业务场景进行一一列举。
进一步的,请参见图3,图3是本申请实施例提供的一种数据处理方法的流程示意图一。需要说明的是,本申请实施例提供的方法可以由硬件(比如模型优化设备)执行,也可以由软件(比如模型优化客户端,可运行在模型优化设备上)执行,为便于理解,本申请实施例以模型优化设备执行为例进行阐述,该模型优化设备可以为终端设备或服务器,此处不做限制,比如,该模型优化设备可以为上述图2所示的模型优化设备20A。如图3所示,该方法具体可以包括以下步骤S101-步骤S105。
步骤S101,获取用于进行深度学习的初始网络模型,将初始网络模型输入至深度学习编译器,在通过深度学习编译器对初始网络模型进行模型分析时,获取用于表征初始网络模型的优化计算图;
可以理解的是,为了能够让模型在任何硬件后端优化和高效运行计算,本申请实施例可以利用编译器技术,实现对深度学习模型的优化,以使模型达到更高的性能水平。模型优化设备可以先获取用于进行深度学习的初始网络模型(比如上述图2所示的模型202),进而可以将初始网络模型输入至深度学习编译器(比如上述图2所示的深度学习编译器201),且在通过深度学习编译器对初始网络模型进行模型分析时,可以获取用于表征初始网络模型的优化计算图(比如上述图2所示的计算图203)。其中,为便于理解,这里的深度学习编译器具体可以是TVM,本申请后续实施例将以TVM为例对模型优化过程进行阐述。
具体的,模型优化设备可以从深度学习框架中提取用于进行深度学习的初始网络模型;其中,初始网络模型是通过深度学习框架训练得到的,这里的深度学习框架可以为任意一种用于进行模型训练的训练框架,比如TensorFlow、PyTorch、OneFlow、ONNX等,此处不做限定。为便于区分,本申请实施例可以将训练阶段的深度学习模型称为原始网络模型。在训练阶段,模型训练设备可以将原始网络模型导入至深度学习框架,通过深度学习框架对原始网络模型进行模型训练,以得到训练好的初始网络模型,本申请实施例将不对具体的训练过程进行展开描述。其中,模型训练设备与模型优化设备可以是相同的设备,也可以是不同的设备,此处不做限制。通过深度学习框架进行模型训练,可以加速训练过程,提升训练效率和训练效果。
进一步地,模型优化设备可以将初始网络模型输入至深度学习编译器,通过深度学习编译器将初始网络模型转换为用于表征初始网络模型的初始计算图;这里的初始计算图可以通过深度学习编译器中的模型描述语言进行表示。可以理解,在优化阶段,模型优化设备可以通过深度学习编译器的导入层(如TVM前端的importer层)将初始网络模型从深度学习框架中导入到深度学习编译器,深度学习编译器可用于将外部深度学习框架生成的初始网络模型转换为初始计算图,这里的初始计算图可以理解为TVM的图级别模型,且可用模型描述语言进行表示。其中,该模型描述语言具体是指Relay(TVM的高级模型语言),也就是说,导入到TVM的初始网络模型是用Relay表示的,初始网络模型中的算子和张量都被转换为Relay中的对应概念,例如,矩阵乘法算子将被转换为Relay中的MatMul算子,张量将被转换为Relay中的Tensor对象。在模型描述语言(即Relay)中,可应用图级(graph-level)优化来优化初始网络模型,以提升模型性能。
进一步地,可以通过深度学习编译器对初始网络模型进行模型分析,得到初始网络模型的模型分析结果,进而可以基于模型分析结果对初始计算图进行图优化处理,以得到初始计算图对应的优化计算图。其中,模型分析主要可以包括对前述初始计算图的结构进行分析以及对该初始计算图中的算子进行分析,相应的,得到的模型分析结果主要包括初始计算图整体的第一结构分析结果以及第一算子分析结果,可用于对初始计算图进行图优化处理,包括但不限于常量折叠、死代码消除、推理简化、内存布局转化、Op融合等优化操作,从而可以得到初始计算图对应的优化计算图。由此可见,图优化关注整个模型的计算过程,可通过改变相关计算图的结构和算子的顺序来提高性能。
步骤S102,对优化计算图进行划分,得到优化计算图的N个计算子图;
可以理解的是,模型优化设备可以将用Relay表示的优化计算图划分为N个小的子图,并将其从高层表示降级(lower)为低层表示。其中,N为正整数,此处对N的取值不做限制。
具体的,模型优化设备可以通过深度学习编译器对优化计算图进行计算图分析,得到优化计算图的计算图分析结果,进而可以基于计算图分析结果对优化计算图进行划分,以得到优化计算图的N个初始子图。其中,计算图分析主要可以包括对优化计算图的整体结构进行分析以及对该优化计算图中的算子之间的依赖关系进行分析,相应的,得到的计算图分析结果主要包括优化计算图的第二结构分析结果以及第二算子分析结果,可用于对优化计算图进行划分。TVM提供了一些划分工具和算法,如图剪枝、图融合和子图划分等,可用于将大的计算图划分为小的子图,这些子图可以是独立的计算单元,从而可以进行更细粒度的优化和调度。其中,N个初始子图中的每个初始子图均可通过深度学习编译器中的模型描述语言(即Relay)进行表示。可以理解,可选的,在对优化计算图进行划分后,原本同一个算子也可能会被划分到不同的子图中,本申请实施例对比不做限制。
进一步地,可以在深度学习编译器配置的张量算子模板库中,获取与N个初始子图相关联的张量算子模板,进而可以基于获取到的张量算子模板对N个初始子图中的每个初始子图进行降级处理,从而得到优化计算图的N个计算子图;其中,N个计算子图中的每个计算子图均可通过深度学习编译器中的第一张量描述语言进行表示;第一张量描述语言的语言描述等级低于模型描述语言的语言描述等级。这里的第一张量描述语言具体是指张量表达式(TE),与Relay相比,TE是一种更底层的表示。可以理解,为了将Relay表示转换为TE表示,TVM包含了一个张量算子清单(TOPI),该张量算子清单可作为前述张量算子模板库,它有预先定义的常见张量算子(如二维卷积算子conv2d、转置算子transpose)的模板,用以描述张量操作。基于此,模型优化设备可以在张量算子模板库中获取与N个初始子图中的张量算子相关联的预定义模板作为张量算子模板,利用获取到的张量算子模板对每个初始子图进行降级处理,即可实现将初始子图降级到用TE表示的计算子图。可以理解,TE可以提供一些原语来指定低级的循环优化,例如切片(tiling)、矢量化(vectorization)、并行化(parallelization)、融合(fusion)、循环展开(unroll)、循环交换顺序(reorder)等,因此,将优化计算图划分为多个计算子图后,可以通过TE实现更细粒度的优化和调度,以便提升模型性能。
步骤S103,对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;
可以理解的是,本申请实施例可支持特定算子的高频调度和定向优化,通过对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果,可以确定哪些特定算子在模型中具有高频率的调用(即检测计算子图中是否存在高频算子)。其中,N个计算子图中可包含多个算子,此处对N个计算子图中的算子的数量不做限定。性能统计分析主要可以包括对N个计算子图中的所有算子的统计分析和性能分析,为便于理解,本申请后续实施例将以N个计算子图中的待优化算子为例进行阐述,这里的待优化算子可以为N个计算子图中的任意一个算子,例如,结合上述图2所对应的实施例,待优化算子具体可以为算子A1、算子A2、算子A3、算子A4、算子A5中的任意一个。
在一种实施方式中,模型优化设备可以通过与深度学习编译器相关联的模型分析工具,获取待优化算子在N个计算子图中的调用次数;其中,这里的模型分析工具是指用于对待优化算子进行统计分析的工具,该模型分析工具可以是集成在深度学习编译器中的分析工具,也可以是独立于深度学习编译器的分析工具,此处不做限制。可选的,在调用次数满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第一类型算子,此时可以基于待优化算子为第一类型算子时的结果确定性能统计分析结果。反之,可选的,在调用次数不满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第二类型算子,此时可以基于待优化算子为第二类型算子时的结果确定性能统计分析结果。
其中,算子优化条件可以根据实际业务需要进行配置,本申请实施例对算子优化条件的具体内容不做限制。
比如,算子优化条件可以包括算子调用阈值,用于指定一个算子可被判定为第一类型算子的最小调用次数,此处对算子调用阈值的具体取值不做限定,例如可以设置一个适用于所有模型的通用固定阈值,也可以支持针对不同模型设置个性化的阈值。可选的,在待优化算子的调用次数大于或等于算子调用阈值时,可以确定该调用次数满足深度学习编译器配置的算子优化条件;反之,可选的,在待优化算子的调用次数小于算子调用阈值时,可以确定该调用次数不满足深度学习编译器配置的算子优化条件。例如,结合上述图2所对应的实施例,假设在该场景下算子优化条件中的算子调用阈值设置为D1(比如2),而算子A1的调用次数为2,则可以确定算子A1的调用次数满足该算子优化条件,此时可以认为算子A1为第一类型算子;类似的,算子A2~算子A5的调用次数均为1,则可以确定算子A2~算子A5的调用次数均不满足该算子优化条件,此时可以认为算子A2~算子A5均为第二类型算子。
又比如,算子优化条件可以包括算子调用频率区间,用于指定一个算子可被判定为第一类型算子的调用频率范围,其中,待优化算子在N个计算子图中的调用频率可以基于其调用次数确定,可以理解,调用次数越多的算子,其对应的调用频率就越高。基于此,可以通过检测待优化算子在N个计算子图中的调用频率是否位于算子调用频率区间内,来判断待优化算子是第一类型算子还是第二类型算子。其中,可选的,在待优化算子的调用频率位于算子调用频率区间内时,可以确定该调用频率满足深度学习编译器配置的算子优化条件;反之,可选的,在待优化算子的调用频率位于算子调用频率区间外时,可以确定该调用频率不满足深度学习编译器配置的算子优化条件。例如,仍结合上述图2所对应的实施例,假设在该场景下算子优化条件中的算子调用频率区间设置为仅限最高调用频率,而算子A1的调用频率在所有算子中排名第一,则可以确定算子A1的调用频率满足该算子优化条件,此时可以认为算子A1为第一类型算子。
在一种实施方式中,在通过深度学习编译器运行初始网络模型时,模型优化设备可以通过与深度学习编译器相关联的性能分析工具,获取待优化算子的算子运行时长;其中,该算子运行时长是指待优化算子的执行时长;这里的性能分析工具是指用于对待优化算子进行性能分析的工具,该性能分析工具可以是集成在深度学习编译器中的分析工具,也可以是独立于深度学习编译器的分析工具,此处不做限制。可选的,在算子运行时长满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第一类型算子,此时可以基于待优化算子为第一类型算子时的结果确定性能统计分析结果。反之,可选的,在算子运行时长不满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第二类型算子,此时可以基于待优化算子为第二类型算子时的结果确定性能统计分析结果。
其中,算子优化条件可以根据实际业务需要进行配置,本申请实施例对算子优化条件的具体内容不做限制。
比如,算子优化条件可以包括时长占用阈值,用于指定一个算子可被判定为第一类型算子的最小时长占用比例,此处对时长占用阈值的具体取值不做限定,例如可以设置一个适用于所有模型的通用固定阈值,也可以支持针对不同模型设置个性化的阈值。在通过性能分析工具获取到初始网络模型的总运行时长时,可以获取待优化算子的算子运行时长在总运行时长中的时长占用比例;可选的,在该时长占用比例大于或等于时长占用阈值时,可以确定算子运行时长满足深度学习编译器配置的算子优化条件;反之,可选的,在该时长占用比例小于时长占用阈值时,可以确定算子运行时长不满足深度学习编译器配置的算子优化条件。例如,仍结合上述图2所对应的实施例,假设在该场景下算子优化条件中的时长占用阈值设置为D2(比如40%),而算子A1的算子运行时长为T1(比如600ms),算子A2的算子运行时长为T2(比如100ms),算子A3的算子运行时长为T3(比如200ms),算子A4的算子运行时长为T4(比如800ms),算子A5的算子运行时长为T5(比如100ms),模型202的总运行时长为T(比如2000ms),可以计算出算子A1~算子A5各自的算子运行时长在总运行时长T中的时长占用比例依次为30%、5%、10%、40%、5%,则可以确定算子A4的算子运行时长T4满足该算子优化条件,此时可以认为算子A4为第一类型算子;而算子A1的算子运行时长T1、算子A2的算子运行时长T2、算子A3的算子运行时长T3以及算子A5的算子运行时长T5均不满足该算子优化条件,此时可以认为算子A1、算子A2、算子A3和算子A5均为第二类型算子。
又比如,算子优化条件可以包括算子时长阈值,用于指定一个算子可被判定为第一类型算子的最小运行时长,此处对算子时长阈值的具体取值不做限定。可选的,在待优化算子的算子运行时长大于或等于算子时长阈值时,可以确定该算子运行时长满足深度学习编译器配置的算子优化条件;反之,可选的,在待优化算子的算子运行时长小于算子时长阈值时,可以确定该算子运行时长不满足深度学习编译器配置的算子优化条件。例如,结合上述例子,假设在该场景下算子优化条件中的算子时长阈值设置为D3(比如500ms),则可以确定算子A1的算子运行时长T1以及算子A4的算子运行时长T4均满足该算子优化条件,此时可以认为算子A1和算子A4均为第一类型算子;而算子A2的算子运行时长T2、算子A3的算子运行时长T3以及算子A5的算子运行时长T5均不满足该算子优化条件,此时可以认为算子A2、算子A3和算子A5均为第二类型算子。
又比如,算子优化条件可以包括时长占用等级区间,用于指定一个算子可被判定为第一类型算子的时长占用等级范围,其中,待优化算子在N个计算子图中的时长占用等级可以基于其算子运行时长确定,可以理解,算子运行时长越长的算子,其对应的时长占用等级就越高。基于此,可以通过检测待优化算子在N个计算子图中的时长占用等级是否位于时长占用等级区间内,来判断待优化算子是第一类型算子还是第二类型算子。其中,可选的,在待优化算子的时长占用等级位于时长占用等级区间内时,可以确定该时长占用等级满足深度学习编译器配置的算子优化条件;反之,可选的,在待优化算子的时长占用等级位于时长占用等级区间外时,可以确定该时长占用等级不满足深度学习编译器配置的算子优化条件。例如,结合上述例子,假设在该场景下算子优化条件中的时长占用等级区间设置为仅限最高时长占用等级,而算子A4的时长占用等级已经达到最高时长占用等级,则可以确定算子A4的时长占用等级满足该算子优化条件,此时可以认为算子A4为第一类型算子。
在一种实施方式中,在通过深度学习编译器运行初始网络模型时,模型优化设备可以通过与深度学习编译器相关联的性能分析工具,获取待优化算子的内存占用量;其中,该内存占用量是指执行待优化算子时在模型优化设备的内存中所占据的空间大小。可选的,在内存占用量满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第一类型算子,此时可以基于待优化算子为第一类型算子时的结果确定性能统计分析结果。反之,可选的,在内存占用量不满足深度学习编译器配置的算子优化条件时,可以确定待优化算子为第二类型算子,此时可以基于待优化算子为第二类型算子时的结果确定性能统计分析结果。也就是说,通过监测每个算子的内存占用情况,可以确定哪些算子在内存使用方面占据重要位置,而高频算子通常具有较高的内存占用。
其中,算子优化条件可以根据实际业务需要进行配置,本申请实施例对算子优化条件的具体内容不做限制。
比如,算子优化条件可以包括内存占用阈值,用于指定一个算子可被判定为第一类型算子的最小内存占用量,此处对内存占用阈值的具体取值不做限定,例如可以设置一个适用于所有模型的通用固定阈值,也可以支持针对不同模型设置个性化的阈值。可选的,在内存占用量大于或等于内存占用阈值时,可以确定内存占用量满足深度学习编译器配置的算子优化条件;反之,可选的,在内存占用量小于内存占用阈值时,可以确定内存占用量不满足深度学习编译器配置的算子优化条件。例如,仍结合上述图2所对应的实施例,假设在该场景下算子优化条件中的内存占用阈值设置为D4(比如600MB),而算子A1的内存占用量为K1(比如500MB),算子A2的内存占用量为K2(比如100MB),算子A3的内存占用量为K3(比如120MB),算子A4的内存占用量为K4(比如800MB),算子A5的内存占用量为K5(比如80MB),则可以确定算子A4的内存占用量K4满足该算子优化条件,此时可以认为算子A4为第一类型算子;而算子A1的内存占用量K1、算子A2的内存占用量K2、算子A3的内存占用量K3以及算子A5的内存占用量K5均不满足该算子优化条件,此时可以认为算子A1、算子A2、算子A3和算子A5均为第二类型算子。
又比如,算子优化条件可以包括内存占用等级区间,用于指定一个算子可被判定为第一类型算子的内存占用等级范围,其中,待优化算子在N个计算子图中的内存占用等级可以基于其内存占用量确定,可以理解,内存占用量越大的算子,其对应的内存占用等级就越高。基于此,可以通过检测待优化算子在N个计算子图中的内存占用等级是否位于内存占用等级区间内,来判断待优化算子是第一类型算子还是第二类型算子。其中,可选的,在待优化算子的内存占用等级位于内存占用等级区间内时,可以确定该内存占用等级满足深度学习编译器配置的算子优化条件;反之,可选的,在待优化算子的内存占用等级位于内存占用等级区间外时,可以确定该内存占用等级不满足深度学习编译器配置的算子优化条件。例如,结合上述例子,假设在该场景下算子优化条件中的内存占用等级区间设置为仅限最高内存占用等级,而算子A4的内存占用等级已经达到最高内存占用等级,则可以确定算子A4的内存占用等级满足该算子优化条件,此时可以认为算子A4为第一类型算子。
上述可知,本申请实施例可以支持从调用次数、算子运行时长以及内存占用量这三个维度来对算子进行性能统计分析,从而判断一个算子是否为高频算子。此外,本申请实施例还可以支持同时从这三个维度中的任意两个或两个以上的维度来对算子进行性能统计分析,还可以为不同的维度配置不同的权重。例如,模型优化设备可以通过性能分析工具获取待优化算子的算子运行时长以及内存占用量,且可以在算子运行时长和内存占用量均满足算子优化条件时,确定待优化算子为第一类型算子,在这种情况下,需要同时考虑算子运行时长和内存占用量,比如算子A1的算子运行时长为600ms,内存占用量为200MB,算子A2的算子运行时长为100ms,内存占用量为300MB,即表示算子A1可能在600ms内一直占据200MB的内存,而算子A2可能只在100ms内占据300MB的内存,若此时设置算子运行时长的权重要大于内存占用量的权重,则可以判断出算子A1为高频算子。这样做的好处是可以丰富性能统计分析的维度,从而提升分析方式的灵活性和分析结果的可靠性,以便能够在模型优化过程中快速、准确地定位高频算子,并对其进行后续的优化操作,从而可以在一定程度上提升模型优化的效率。
步骤S104,若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图;
可以理解的是,本申请实施例可以针对高频调用的特定算子编写定制的调度优化策略,以最大程度地优化它们的性能。其中,在上述性能统计分析结果指示N个计算子图中的算子包含第一类型算子(比如前述图2所示的算子A1)时,模型优化设备可以通过为第一类型算子所配置的调度优化策略(比如前述图2所示的调度策略B1),对第一类型算子进行算子优化处理,从而可以得到第一类型算子对应的优化算子(比如前述图2所示的算子C1),且可以将优化算子所在的计算子图作为优化子图(比如前述图2所示的计算子图206a和计算子图206b)。
可以理解的是,若N个计算子图中存在第一类型算子,则在完成N个计算子图中的所有算子的优化后,N个计算子图中会包含一个或多个优化子图(即优化子图的数量为小于或等于N的正整数),此处对优化子图的具体数量不做限制。
在本申请实施例中,一个调度优化策略可以包括特定的循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种;这里的循环优化策略可以包括循环分块策略和循环融合策略。其中,循环分块策略用于指示将循环拆分为多个更小的循环;循环融合策略用于指示将多个循环融合为一个更大的循环;通过合理地拆分和融合这些循环可以提高并行性和数据局部性。这里的数据局部性是将计算转移到数据所在节点(而不是将数据转移到计算节点),以减少网络拥塞并提高计算吞吐量的过程。可以理解,处理大量数据会对降低网络和系统的性能。在节点和系统之间移动庞大的数据集会消耗大量带宽,使其他操作变慢,并且移动过程中会耗费大量时间。数据局部性通过向数据位置转移明显较轻的处理代码来克服这一挑战。内存访问优化策略用于指示通过指定的内存访问模式来优化内存访问,从而确保数据的读取和写入操作能够高效地利用缓存。并行性提升策略用于指示通过指定的优化操作来提高计算的并行性。此处对调度优化策略中每个策略的具体内容不做限定。可以理解,一个模型中可能同时存在多种不同类型的高频算子,对于不同类型的高频算子,可以定制不同的调度优化策略,以实现性能的最优化。
在一种实施方式中,可以对高频算子进行算子融合,以将多个高频算子合并为一个更大的算子,这有助于减少计算和内存开销,且提高计算的并行性。可以理解的是,对于需要合并的算子,需要满足一定的限制和要求才能进行算子融合,本申请实施例可将这些限制和要求统称为算子融合条件。具体来说,算子融合条件主要包含两点:(1)相容的数据维度:要合并的算子通常需要在数据维度上相互兼容,这意味着它们的输入维度和输出维度应该匹配。例如,对于一维算子来说,它们的输入维度和输出数据维度都应该是一维。(2)操作的兼容性:算子融合要求要合并的算子在操作上也是兼容的,即它们的操作可以合理地组合在一起。例如,加法和乘法是兼容的,但可能不容易将完全不同类型的操作合并在一起。
为便于理解和说明,假设前述N个计算子图中包含有满足算子融合条件的第一算子和第二算子,这里将以第一算子和第二算子为例进行阐述,三个或三个以上的算子的合并过程与此类似。具体的,若性能统计分析结果指示第一算子和第二算子均为第一类型算子(即高频算子),则可以从为第一类型算子所配置的调度优化策略中,获取为第一算子和第二算子配置的第一调度优化策略;其中,该第一调度优化策略是指针对满足算子融合条件的高频算子进行定制的调度策略,结合前文,第一调度优化策略具体可以包括为满足算子融合条件的高频算子(比如第一算子和第二算子)配置的循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种,此处对第一调度优化策略的具体内容不做限制。进一步地,可以通过第一调度优化策略,对作为第一类型算子的第一算子和第二算子进行算子融合处理,从而得到融合第一算子和第二算子后的融合算子;进一步,可以基于该融合算子确定第一类型算子对应的优化算子,且可以将优化算子所在的计算子图作为优化子图。可以理解,算子融合目的是将计算图中的多个算子合并成一个节点,从而减少了计算图中的节点个数,以及节点产生的中间数据在内存上的读写,因此能够有效提升深度学习推理性能。
其中,满足算子融合条件的第一算子和第二算子可能有各种各样的类型和形式。例如,可选的,当第一算子和第二算子均为第一类型算子,且该第一类型算子为一维算子时,前述第一调度优化策略具体可以包括循环优化策略和内存访问优化策略,以用于指示针对一维算子的循环融合操作和内存访问优化操作,其中,内存访问优化操作可用于对一维算子的内存访问模式进行优化。在一些实施例中,可以通过TVM的算子融合功能实现两个一维算子的融合,具体来说:
(1)选定目标一维算子:选择两个具有高频调用的一维算子(比如前述第一算子和第二算子),准备将它们融合在一起以减少计算复杂性。
(2)一维算子融合:通过TVM的融合操作(即fuse操作),将这两个一维算子合并成一个更大的一维算子。这通常涉及到对循环的融合和内存访问模式的优化。
(3)调度策略:为新融合的一维算子编写定制的调度策略(比如前述第一调度优化策略),以确保它在性能和并行性方面得到优化。
又例如,可选的,当第一算子和第二算子均为子算子时,可以将第一算子和第二算子合并为一个更大的算子。其中,这里的子算子也可称为小算子,一个子算子可以包含有完整算子中的部分操作,比如一些简单的矩阵操作(比如对矩阵中的元素进行相加)、元素级操作(即对张量中的元素进行操作)等,也就是,本申请实施例除了可以对完整的算子进行优化外,还支持对算子的子块(即子算子)进行更细致的优化。在一些实施例中,可以通过TVM的算子融合功能实现高频小算子的融合,具体来说:
(1)统计高频小算子:首先,确定哪些小算子在模型中高频调用。这可以通过对算子的统计分析和性能分析得出。
(2)高频小算子融合:对于高频小算子,可以使用TVM的算子融合功能将它们合并为一个更大的算子。这可以通过fuse操作来实现。
在一种实施方式中,可以使用一维卷积模拟二维卷积,并通过合理的循环拆分、融合和内存访问优化来提高性能。为便于理解和说明,假设前述N个计算子图中包含二维卷积算子,具体的,若性能统计分析结果指示二维卷积算子为第一类型算子,则可以从为第一类型算子所配置的调度优化策略中,获取为二维卷积算子配置的第二调度优化策略;其中,该第二调度优化策略是指针对具有高频调用的二维卷积算子进行定制的调度策略,结合前文,第二调度优化策略具体可以包括为二维卷积算子配置的循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种,此处对第二调度优化策略的具体内容不做限制。进一步地,可以通过第二调度优化策略,对作为第一类型算子的二维卷积算子进行一维映射处理,从而得到二维卷积算子对应的一维卷积映射算子;其中,一维卷积映射算子是指通过二维卷积算子所映射得到的一维卷积算子,区别于N个计算子图中可能原本就存在的一维卷积算子。进一步,可以基于该一维卷积映射算子确定第一类型算子对应的优化算子,且可以将优化算子所在的计算子图作为优化子图。
可以理解的是,在很多深度学习模型(比如语音模型、图像模型)中会高频率地用到二维卷积,然而二维卷积的运算比较复杂,目前的编译器技术对二维卷积的优化表现不太理想。基于此,本申请实施例提出了使用一维卷积模拟二维卷积(即在模型推理时将二维卷积操作映射到一维卷积操作)的方案,利用DSL语言(比如TE),可描述通过一维卷积模拟二维卷积的计算定义和定制最优的调度方案,从而可以减少计算复杂性和加速卷积运算。
其中,对二维卷积算子进行一维映射处理的具体过程可以为:通过第二调度优化策略,将作为第一类型算子的二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;进一步地,可以通过第一方向上的一维卷积核,将二维卷积算子映射为第一方向上的一维卷积算子,同理,可以通过第二方向上的一维卷积核,将二维卷积算子映射为第二方向上的一维卷积算子,从而可以将第一方向上的一维卷积算子以及第二方向上的一维卷积算子作为二维卷积算子对应的一维卷积映射算子;其中,第一方向和第二方向可以理解为卷积过程中涉及到的两种不同方向,第一方向具体可以指列所在的方向(即垂直方向),第二方向具体可以指行所在的方向(即水平方向),且第一方向垂直于第二方向。也就是说,一维卷积中,卷积核和输入数据都是一维的,因此在计算一维卷积时,只有一个方向上的元素相乘和相加,在一个方向上滑动卷积核并计算输出值。与二维卷积不同,二维卷积涉及到行列两个方向上的元素相乘和相加。
其中,可选的,前述第二调度优化策略用于指示针对一维卷积映射算子的循环分块操作、循环重排操作、循环融合操作以及内存访问优化操作,这里的循环重排操作(reorder)可用于按照指定顺序将计算轴重新排序,根据局部性原理,这样可以最大化利用缓存中的现有数据,减少数据频繁载入载出的情况,进而提高算子的性能。循环融合操作不要求融合的循环具有相同的分块大小,只要它们在逻辑上可以合并并且提高了性能,就可以进行融合;分块大小通常与循环分块操作相关。内存访问优化操作可用于对一维卷积映射算子的内存访问模式进行优化。
在一些实施例中,使用一维卷积模拟二维卷积主要涉及以下几个方面的内容:
(1)二维卷积参数配置:配置conv2d(即二维卷积)操作以匹配模型的卷积核大小和输入数据(比如图像)尺寸。确保kernel_size(即卷积核大小)、strides(卷积步长)和padding(特征图填充宽度)等参数正确设置。
(2)循环拆分和融合:使用TVM的调度语言,可以通过TVM的split(拆分)和fuse等操作来控制循环的拆分和融合。对于一维卷积映射算子,通常存在一维循环(用于逐个处理数组中的元素)和一维归约循环(用于将数组中的元素合并为一个单一的结果)。通过合理地拆分和融合这些循环以提高并行性。比如:
yo, xo, yi, xi = s[C].tile(y, x, 8, 8)# 一维循环拆分
s[C].reorder(yo, xo, k, yi, xi, ko)# 重新排列循环以提高数据局部性
s[C].fuse(yo, xo, ko)# 融合循环以提高并行性
其中,tile(切片)是一种将计算图中的算子切分为多个小块的技术,它将一个算子的计算任务划分为多个子任务,并在每个子任务上执行。s[C]表示针对矩阵C创建的调度对象,tile(y, x, 8, 8)是循环分块的一种调度转换,将算子y(比如前述一维卷积映射算子)的计算任务切分为以8×8为大小的小块(即每个小块的大小分别为8个元素),且并行地在每个小块上进行计算。其中,x表示将x轴(水平方向)的计算任务划分为小块。可以理解,在实际应用中,具体的划分大小应根据模型的需求和硬件特性来确定,而不是固定为8×8。这种切分可以实现并行计算和局部性优化。其中,yo和xo是循环分块的索引变量,用于划分输出矩阵C的计算任务为小块。yi和xi是内部循环的索引变量,用于访问小块中的元素。
(3)内存访问优化:使用compute_at和compute_inline等操作来优化内存访问,确保数据的读取和写入操作能够高效地利用缓存。比如:
s[A].compute_at(s[C], yo)# 优化内存访问
s[B].compute_at(s[C], xo)
其中,compute_at操作(也可称为第一类计算指示操作)用于指定一个计算操作应该在哪个循环层级进行计算。通过将compute_at应用于某个计算操作,可以将该操作的计算放置在指定的循环层级内,以便更好地控制内存访问模式。这样,可以帮助优化数据局部性,减少内存访问延迟。
其中,compute_inline操作(也可称为第二类计算指示操作)用于将计算操作内联到其消费者中,从而避免生成中间缓冲区。通过应用compute_inline,TVM会尝试将计算操作的结果直接插入到使用该结果的计算操作中,而不是生成一个中间缓冲区。这样,可以减少内存占用和计算延迟。
(4)tile操作:使用tile操作来自定义循环分块,以匹配模型的卷积核和输入数据的大小。这可以帮助提高数据局部性和并行性。比如:
yo, xo, yi, xi = s[C].tile(y, x, 8, 8)# 自定义循环分块
(5)与传统的一维卷积/二维卷积的调度策略的比较:一维卷积模拟二维卷积的性能可能会受到一些限制,例如内存访问模式可能不如传统的二维卷积高效。然而,本申请实施例通过精心调整调度策略,可以在一维卷积中实现高性能。
上述可知,传统的二维卷积的调度策略通常包括更复杂的循环拆分、融合和内存布局优化,且通常具有更好的数据局部性,在高频调用二维卷积的场景下可能出现实际性能没有达到预期的问题。针对这个问题,本申请实施例实现了一维卷积模拟二维卷积的调度策略(即前述第二调度优化策略),可以通过合理的循环拆分、融合和内存访问优化来提高性能。
为便于理解,本申请实施例将以一个具体的矩阵为例,对一维卷积模拟二维卷积的过程进行阐述。例如,假设有一个3×3矩阵A以及一个2×2的卷积核B(即前述二维卷积核)分别如下:
使用传统的二维卷积,可以将卷积核B与矩阵A的每个子矩阵相乘并求和,得到一个新的2×2矩阵C如下:
使用一维卷积模拟这个二维卷积操作,可以先将卷积核B分解为两个一维卷积核,即卷积核B1(即前述第一方向上的一维卷积核)和卷积核B2(即前述第二方向上的一维卷积核):
进一步,可以对矩阵A进行垂直方向上的一维卷积操作(即通过第一方向上的一维卷积核,将二维卷积算子映射为第一方向上的一维卷积算子),得到一个2×3的矩阵D如下:
进一步,可以对矩阵D进行水平方向上的一维卷积操作(通过第二方向上的一维卷积核,将二维卷积算子映射为第二方向上的一维卷积算子),得到一个2×2的矩阵E如下:
可以看到,通过这种方式计算出的结果(矩阵E)与通过传统二维卷积计算出的结果(矩阵C)是近似的。
此外,需要说明的是,前述N个计算子图中还存在第二类型算子(即非高频算子,比如一些调用频率很低的池化算子),模型优化设备同样会对第二类型算子进行优化,但用到的调度策略不是本申请实施例自研的调度优化策略,而是深度学习编译器的张量算子模板库(即TOPI)中已经预定义的通用调度策略,模型优化设备可以通过为第二类型算子(比如前述图2所示的算子A2)所配置的通用调度策略(比如前述图2所示的调度策略B2),对第二类型算子进行算子优化处理,得到第二类型算子对应的目标算子(比如前述图2所示的算子C2),从而可以提升第二类型算子的性能。对第二类型算子优化的具体过程不是本申请的重点,因此这里不做详细阐述。
上述可知,本申请实施例同时实现了对高频算子的定向优化以及对非高频算子的通用优化,提升了算子优化时的灵活性,进而可以在整体上提升模型在推理时的性能。
步骤S105,基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;
可以理解的是,在得到优化子图后,模型优化设备可以基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,进而可以基于该模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码。其中,模型优化代码用于在业务平台上运行目标网络模型。需要说明的是,这里的调度搜索空间是指在对初始网络模型进行优化的过程中考虑的所有可能的调度策略的集合,因此该调度搜索空间中既包含了调度优化策略,又包含了通用调度策略。
可以理解的是,本申请实施例中的深度学习编译器上集成有调度搜索工具,可用于自动搜索最佳的调度方案。以深度学习编译器为TVM为例,调度搜索工具可以是TVM引入的自动调度器AutoTVM,AutoTVM是基于机器学习的TVM的自动优化工具,通过自动调整每个特定算子尺寸的优化来超越手工优化。AutoTVM可以利用机器学习自动搜索最佳的调度方案,从而提高内核性能。AutoTVM可以高效地探索庞大的调度搜索空间,以找到针对特定负载和硬件平台的最佳调度方案(即辅助调度选择调度参数的最佳配置)。AutoTVM能够考虑更大的解空间,例如数据排布和调度选择,从而找到全局最优解。这种方法可以克服人工优化的过拟合问题,提高模型的性能和效率。
为便于理解,请一并参见图4,图4是本申请实施例提供的一种通过自动调度器实现对模型的性能优化的架构示意图。如图4所示,自动调度器AutoTVM主要从三个方面对模型的性能进行优化:
(1)领域特定语言(DSL):TVM引入了一种用于张量表达式的领域特定语言,称为Tensor Expression(TE)。TE可以用于描述各种张量操作,例如卷积、矩阵乘法、池化等。TE允许开发人员自定义高性能的张量操作,并自动允许TVM为不同平台优化它们。TE还提供了一些高级特性,例如自动融合、自动调度和自动内存管理,以便更轻松地实现高性能的张量操作。
其中,自动融合是指TE可以自动将多个张量操作融合为一个更大的操作,以减少内存访问和计算开销。这样可以提高数据局部性和计算效率。自动调度是指TE可以自动推导出最佳的调度方案,包括循环展开、向量化、内存访问模式等,以最大程度地利用硬件资源并提高性能。自动内存管理是指TE可以自动管理张量操作的内存分配和释放,以减少内存占用并提高内存访问效率。
(2)自动调度:TVM的自动调度器AutoTVM采用了一种基于机器学习的代价模型,可以快速预测不同调度方案的性能,并选择最优的调度方案。AutoTVM还支持多目标优化,可以同时优化多个性能指标,例如运行时间、内存占用和能耗等,AutoTVM会在这些指标之间进行权衡和平衡,以找到一个平衡的解集(即Pareto前沿),这个解集中的每个解在不同性能指标下都是最优的,没有更好的解可以替代。通过利用基于机器学习的自动搜索技术,TVM高效地探索庞大的调度搜索空间,以找到针对特定负载和硬件平台的最佳调度方案,从而有效地提高内核性能。
(3)代码生成:TVM的代码生成过程包括将高级张量操作转换为低级代码的过程,以便在不同的硬件平台上执行。TVM支持多种编译器后端,例如LLVM和CUDA(ComputeUnified Device Architecture),可以为不同的硬件平台生成高性能的底层代码。TVM还提供了一些优化技术,例如内存优化、向量化和并行化,以提高生成的代码的性能。TVM还支持多种硬件平台,例如CPU、GPU、DSP和FPGA,可以为不同的硬件平台生成优化的代码。
如图4所示,可选的,当AutoTVM为AutoTVM1.0(即自动调度器1.0版本)时,可使用基于模板的auto-tuning模块(即自动调优模块)搜索最佳的调度方案,它运行搜索算法以在用户定义的算子库的模板(即TOPI所提供的常用算子的调度模板,定义了调度方案的结构和参数范围)中找到可调knob(即调度参数)的最佳值,即意味着找到了这些参数的最佳设置,以获得最佳的性能或效果。其中,针对一个算子,可以通过性能评估模型对每个调度方案的性能进行评估,并与模型应用设备上的测量值进行比较,以选择最佳的调度配置。其中,AutoTVM可以将模板实例化,并传输到模型应用设备所支持的硬件平台上执行,从而可以基于硬件平台反馈的执行结果或性能(比如执行时间、执行速度、吞吐量、延迟或其他性能指标)获取最佳的调度参数组合。可选的,当AutoTVM为AutoTVM2.0(即自动调度器2.0版本)时,可使用基于无模板的auto-tuning模块,它不需要预定义的调度模板,而是通过分析计算定义自动生成调度搜索空间,然后在生成的调度搜索空间中搜索最佳的调度方案。
基于此,本申请实施例可以采用AutoTVM2.0作为调度搜索工具,从而可以实现更灵活地搜索调度方案,并且可以适应更广泛的计算图结构和操作。则前述基于调度搜索空间确定初始网络模型的模型调度参数,并基于模型调度参数将优化计算图转换为模型优化代码的具体过程可以为:从调度优化策略中获取优化子图中的优化算子对应的计算定义(Compute),基于获取到的计算定义生成与优化子图相关联的调度搜索空间;其中,可以通过深度学习编译器中的调度搜索工具(比如自动调度器AutoTVM2.0)对优化算子对应的计算定义以及目标算子对应的计算定义进行定义分析,从而自动生成对应的调度搜索空间。进一步地,可以通过调度搜索工具,在调度搜索空间中获取优化子图的优化调度参数(即与优化子图中的算子相关联的所有调度参数的最佳配置),且可以基于优化调度参数确定初始网络模型的模型调度参数,从而实现自动调优;可以理解,模型调度参数还可以包括除优化子图外其他计算子图(可称为剩余子图)的目标调度参数(即与剩余子图中的算子相关联的所有调度参数的最佳配置)。需要说明的是,同一种算子在模型中的不同位置可能会搜索到不同的或相同的调度参数的最佳配置,本申请实施例对此不做限制。此外,基于AutoTVM2.0,本申请实施例既可以支持针对完整算子的调度搜索,又可以支持针对算子的子块(即子算子)的调度搜索。进一步地,可以基于该模型调度参数,对优化计算图进行降级处理,以得到适用于不同业务平台的目标网络模型的模型优化代码。其中,对优化计算图进行降级处理是指对优化计算图中的每个计算子图均进行降级处理,具体可以包括对优化子图的降级处理以及对剩余子图的降级处理。这里的模型优化代码是指用于在业务平台上运行目标网络模型的硬件可执行代码(即业务平台所支持的硬件能识别的机器码)。
其中,调度搜索空间中包含了不同调度策略所指示的海量的调度参数组合,深度学习编译器可以通过性能评估模型评估和比较不同调度参数组合的性能,这里的性能评估模型也可称为成本模型或代价模型(即Cost Model),具体可以是XGBoost模型或其他回归预测模型。以前述优化子图为例(获取剩余子图的目标调度参数的过程与此类似),在通过调度搜索工具在调度搜索空间中搜索到某个调度参数组合F(包含了与优化子图中的算子相关联的多个调度参数)时,可以通过性能评估模型对该调度参数组合F进行性能评估,以得到该调度参数组合F的预测性能;同时,可以在模型应用设备(或称目标设备)上运行与优化子图相关联的测试程序,并获取实际的测量性能;进而可以将调度参数组合F的预测性能与模型应用设备上的测量性能进行比较,若该调度参数组合F的测量性能优于测量性能,则可以将该调度参数组合F作为候选调度参数组合;进而可以从所有候选调度参数组合中获取预测性能最好的调度参数组合,且将获取到的调度参数组合中的调度参数作为优化子图的优化调度参数。
其中,上述测量性能(比如执行时间)可以通过在模型应用设备上运行一些样本输入(也可称为测量样本)来获得。具体过程如下:
(1)选择样本输入:首先,选择一组样本输入,这些输入代表了初始网络模型的不同工作负载。这些输入可能包括不同大小的样本数据或不同类型的操作。
(2)构建测试程序:根据所选输入,构建一个测试程序,这个测试程序包括了需要进行性能测量的计算。例如对于乘法操作ab,测试程序可能只包括这个乘法操作。
(3)在模型应用设备上运行测试程序:将测试程序部署到模型应用设备上,确保在真实硬件环境中运行。这可能需要一些设备特定的配置,以确保测试的准确性。
(4)测量执行时间:运行测试程序,并记录执行时间或其他性能指标,如执行速度、吞吐量或延迟。通常,多次运行以获得稳定的性能数据,并计算平均值或其他统计信息,从而得到实际的执行时间或其他性能数据作为测量性能。
可以理解,本申请实施例可以根据自动调优的结果,为每个子图选择最佳调度方案,并生成对应的调优记录。其中,每个子图可对应一条调优记录,用于记录每个子图的最佳的调度参数组合和其他相关的优化信息。可选的,可以将这些调优记录保存在相关的调优记录文件中。
其中,在得到模型调度参数后,对优化计算图进行降级处理以得到模型优化代码的具体过程可以为:基于模型调度参数,对优化计算图进行降级处理,从而得到优化计算图的第一优化代码;其中,第一优化代码可通过深度学习编译器中的第二张量描述语言进行表示;第二张量描述语言的语言描述等级低于深度学习编译器中的第一张量描述语言的语言描述等级。这里的第二张量描述语言具体是指张量中间表示(Tensor IntermediateRepresentation,TIR),是TVM中的一种中间表示,用于描述张量计算的低级别操作和优化。也就是说,在根据自动调优的结果为优化计算图中的每个计算子图选择最佳调度方案后,模型优化设备可以将所有使用TE(即第一张量描述语言)表示的计算子图全部降级为TIR表示。与TE相比,TIR提供了更底层的表示和操作,可以进行底层的优化和转换。所以,TIR是用于表示TE子图经过降级后的中间表示,即TIR是一种更底层的表示,而TE是一种更高级的表示。进一步地,可以对第一优化代码进行底层优化处理,得到优化后的第一优化代码,进而可以对优化后的第一优化代码进行降级处理,从而得到第二优化代码;其中,底层优化处理(即底层优化pass)是指应用于TIR阶段的一系列底层优化技术和转换操作,比如访问索引简化(access index simplification);这里的第二优化代码具体可以为目标编译器(即用于部署在模型应用设备的硬件平台上的编译器,也可称为编译器后端,例如LLVM、CUDA、NVCC)所需的中间表示,且第二优化代码对应的语言描述等级低于第二张量描述语言的语言描述等级。最终,可以将第二优化代码编译为适用于不同业务平台的目标网络模型的模型优化代码;其中,可以通过目标编译器对第二优化代码进行进一步的代码生成和优化,以生成可部署到生产环境(即前述业务平台)的优化模型的最终代码(例如LLVM编译器生成的机器码);其中,模型优化代码对应的语言描述等级低于第二优化代码对应的语言描述等级。
为便于理解,以在专用加速器上调度矩阵乘法的过程为例进行阐述。在专用加速器上优化矩阵乘法的时间表转换示例的部分代码如下:
A = t.placeholder((1024, 1024))
B = t.placeholder((1024, 1024))
k = t.reduce_axis((0, 1024))# reduce轴
C = t.compute((1024, 1024), lambda y, x:
t.sum(A[k, y]B[k, x], axis=k))
s = t.create_schedule(C.op)# 创建调度对象
for y in range(1024):
for x in range(1024):
C[y][x]= 0
for k in range(1024):
C[y][x]+= A[k][y]B[k][x]
+ Loop Tiling 循环分块
yo, xo, ko, yi, xi, ki = s[C].tile(y, x, k, 8, 8, 8)
for yo in range(128):
for xo in range(128):
C[yo8:yo/>8+8][xo/>8:x0/>8+8] = 0 # 初始化分块
for ko in range(128):
for yi in range(8):
for xi in range(8):
for ki in range(8):
C[yo8+yi][xo/>8+xi] += # 计算局部块的结果
A[ko8+ki][yo/>8+yi]/>B[ko/>8+ki][xo/>8+xi]
+ Cache Data on Accelerator Special Buffer在加速器专用缓存区上缓存数据
CL = s.cache_write(C, vdla.acc_buffer)# 缓存结果C到专用加速器缓存区
AL = s.cache_read(A, vdla.inp_buffer)# 缓存输入矩阵A到专用加速器输入缓存区
# additional schedule steps omitted ...
+ Map to Accelerator Tensor Instructions映射到加速器张量指令
s[CL].tensorize(yi, vdla.gemm8x8)
inp_buffer AL[8][8], BL[8][8]# 输入缓冲区形状
acc_buffer CL[8][8]# 结果缓冲区
for yo in range(128):
for xo in range(128):
vdla.fill zero(CL)# 清空结果缓冲区
for ko in range(128):
vdla.dma_copy2d(AL, A[ko8:ko/>8+8][yo/>8:yo/>8+8]) # 读取数据
vdla.dma_copy2d(BL, B[ko8:ko/>8+8][xo/>8:x0/>8+8])
vdla.fused_gemm8x8_add(CL, AL, BL) # 执行加速器的张量指令
vdla.dma_copy2d(C[yo8:yo/>8+8, xo/>8:x0/>8+8], CL) # 复制结果到C
其中,上述代码展示了矩阵乘法的一种“调度——>调度转换——>生成对应低级代码”的过程。该示例主要包含三个步骤:
(1)第一步中,循环分块和重组计算有助于提高并行性和局部性,从而加速矩阵乘法。
(2)第二步中,数据缓存到专用加速器缓冲区,以减少数据传输延迟。
(3)第三步中,映射计算到加速器的张量指令,并使用循环和数据传输操作执行计算,最后将结果复制回主内存。这有助于利用专用加速器的性能优势。
在这个示例中,使用了一些优化技术,包括自动化优化、可部署模块、操作员级优化和代码生成、循环分块等,可以提高矩阵乘法的性能。其中,可部署模块指的是针对特定硬件的优化模块或组件,使得深度学习模型可以有效地部署在特定的硬件上;这些模块通常包括针对硬件的优化内核、库、驱动程序等;通过使用可部署模块,可以确保深度学习模型在特定硬件上获得最佳性能,并充分利用硬件的特性。其中,操作员级优化是一种优化策略,针对深度学习模型中的每个操作(例如卷积、池化、矩阵乘法等)进行微调,以最大程度地提高计算效率和性能;操作员级优化可以包括重排操作顺序、使用特定硬件指令集、优化内存布局等技术,以减少计算的复杂度和提高并行性。
其中,A和B分别表示两个输入矩阵;C为输出矩阵,表示矩阵乘法的结果;k是一个reduce轴(reduction axis),用于定义计算中的归约操作,在矩阵乘法中,通常用于对相应元素进行相乘和求和;yo和xo是循环分块的索引变量,用于划分输出矩阵C的计算任务为小块;ko是reduce轴k的索引变量,用于归约操作;yi和xi是内部循环的索引变量,用于访问小块中的元素;AL和BL是缓存读取操作,用于缓存输入矩阵A和B;CL是缓存写入操作,用于缓存输出矩阵C;vdla是一个虚拟的加速器对象,用于填充零、进行DMA数据传输以及执行GEMM(General Matrix Multiply)操作等。
具体来说,上述示例使用了s[CL].tensorize(yi, vdla.gemm8x8)和s[C].tile(y, x, k, 8, 8, 8)等调度转换来优化矩阵乘法的计算过程,这些调度转换可以提高计算的并行性和数据局部性,从而提高性能。其中,tensorize(张量化)是一种将计算图中的算子转换为张量操作的技术;它将一个算子的计算逻辑转化为对张量的逐元素操作,从而利用底层硬件的向量化指令来提高计算效率。tensorize(yi, vdla.gemm8x8)将算子yi转换为使用TVM中的vdla.gemm8x8张量操作的形式,这意味着算子yi的计算逻辑将被转化为vdla.gemm8x8张量的逐元素操作。vdla.gemm8x8张量是TVM中用于实现8×8矩阵乘法的一个张量操作,该操作采用8个输入和8个输出,可将输入矩阵相乘并输出结果矩阵。逐元素操作则是指对张量中的每个元素进行操作,比如,在vdla.gemm8x8张量中,逐元素操作是指对输入矩阵中的每个元素进行相乘,并将结果写入输出矩阵中的相应位置。其中,tile(切片)是一种将计算图中的算子切分为多个小块的技术,它将一个算子的计算任务划分为多个子任务,并在每个子任务上执行。tile(y, x, k, 8, 8, 8)是一种调度转换,将算子y的计算任务切分为以8×8×8为大小的小块,并在每个小块上并行执行,这种切分可以实现并行计算和局部性优化。其中,x表示将x轴(水平方向)的计算任务划分为小块;k表示将k轴(深度方向)的计算任务划分为小块。“8, 8, 8”表示每个小块的划分大小分别为8个元素。在内部,TVM使用一个数据结构(即关键数据结构IRModule,也可称为中间表示模块),监测循环结构和其它信息,因为应用了调度转换。然后,这些信息(指调度转换过程中收集到的关于计算图的结构和状态的信息)可以为给定的最终调度生成低级代码(即机器码)。
此外,可以理解的是,优化得到的目标网络模型可应用于购物、社交、娱乐、教育等多个领域中,基于此,本申请实施例中的业务平台包括但不限于游戏平台、音视频平台、社交平台、通信平台、购物平台、教育平台等,用以提供相关服务,此处对业务平台的具体类型不做限定。其中,用于运行目标网络模型的模型应用设备与前述模型优化设备可以是相同的设备,也可以是不相同的设备,此处不做限制。
为便于理解,这里以游戏平台为例进行说明。其中,业务平台包括虚拟游戏对应的游戏平台,且目标网络模型包括部署在游戏平台上的目标语音识别模型;目标语音识别模型是通过对初始网络模型中包含的初始语音识别模型进行优化后得到的,此处对目标语音识别模型的具体网络结构不做限制。该目标语音识别模型主要应用在虚拟游戏相关的语音产品中,可为游戏用户在游戏过程中提供语音通话服务,比如具有实时语音、语音消息、语音同传、文明语音等功能。
例如,针对文明语音功能,目标语音识别模型可应用在虚拟游戏的语音系统内,用于通过游戏用户的说话声音来鉴别其声纹特征,从而判断该游戏用户是成年用户或是未成年用户,比如可用于游戏中未成年人防沉迷保护及伪装未成年人恶意退费等场景。具体的,在获取到与游戏平台相关联的业务对象的语音数据时,可以将该语音数据输入目标语音识别模型;其中,这里的业务对象是指在游戏平台上游玩虚拟游戏的任意游戏用户。进一步,可以通过目标语音识别模型对该语音数据进行特征提取,以得到业务对象的声纹特征,进而可以基于该声纹特征识别业务对象的对象属性,这里的对象属性可用于指示业务对象的对象类型,具体可以包括未成年属性(也可称为第一类型对象属性)和成年属性(也可称为第二类型对象属性)。进一步地,可以根据业务对象的对象属性,对业务对象进行游戏业务处理,其中,该游戏业务处理的具体内容可以由游戏开发人员根据游戏安全策略进行设计,本申请实施例对此不做限制。
例如,在未成年人防沉迷保护场景下,如果检测到某个业务对象U1的对象属性为未成年属性,则可以在特定情况下对该业务对象U1进行提醒(比如向未成年用户发送防沉迷提示信息,用以提示未成年用户玩游戏要适度,不可沉迷)或处罚(比如缩短未成年用户的游戏时长)。为便于理解,请一并参见图5,图5是本申请实施例提供的一种游戏语音处理的场景示意图一。如图5所示,假设游戏平台搭建在游戏服务器上,界面501展示了一种示例性的游戏界面,用户X1可以与该界面501进行交互,游戏服务器可以从游戏语音频道中获取用户X1的语音数据,进而可以通过加载训练好的目标语音识别模型对用户X1的语音数据进行特征提取,从而可以根据提取到的用户X1的声纹特征,判断用户X1是未成年用户还是成年用户。假设判断出用户X1是未成年用户,则在用户X1今天的实际游戏时长达到为未成年用户设置的游戏时长阈值时,游戏服务器可以向用户X1发送防沉迷提示信息,例如,如界面502所示,可以在界面502上显示提示信息502a,比如具体可以为“由于您今日的游戏时长已经用尽,游戏即将退出,可以出去放松一下哦~”,并且在今天的后续时间段内,禁止用户X1再登录游戏,从而可以有效防范未成年人沉迷游戏。
其中,可以理解的是,防沉迷提示信息可以浮窗形式或蒙层形式或半透明形式展现在游戏界面(例如图5所示的界面502)的任一区域中,例如,防沉迷提示信息可显示在游戏界面的中间区域;可选的,也可以是用能通过触发操作(例如拖拽操作)改变显示尺寸且可收缩的界面进行显示,该界面的尺寸小于游戏界面;可选的,还可以是用独立于游戏界面显示的界面进行显示,本申请实施例对此不做限定。其中,图5所示的界面501和界面502为不同时刻的游戏界面。
又例如,在伪装未成年人恶意退费的场景下,如果检测到某个业务对象U2的对象属性为成年属性,与其绑定的未成年人账户并不匹配,且该业务对象U2伪装为未成年用户进行恶意退费,则可以对该业务对象U2进行伪装标记,拒绝其退费申请。其中,可选的,在识别业务对象的对象属性后,为了提升识别准确性,游戏平台还可以通过对业务对象进行面部识别来进行身份验证,以判断业务对象是否为本人,从而可以根据面部识别结果以及业务对象的对象属性,对业务对象进行游戏业务处理。由此可见,本申请实施例提供了一种基于AI编译器在语音模型里的优化方案,结合AutoTVM的优点,可以实现对语音领域深度学习模型的自动调优,从而可以提高模型在鉴别声纹特征领域的性能和效率,且节省模型参数调优人力资源。
此外,还可以通过目标语音识别模型对输入的语音数据进行关键词检测,从而可以在检测到设定的关键词(比如一些敏感词或不文明词汇)时,对业务对象进行游戏业务处理,比如可以向业务对象发送发言警告提示信息或者对业务对象进行禁言等处罚。
为便于理解,请一并参见图6,图6是本申请实施例提供的一种游戏语音处理的场景示意图二。如图6所示,假设游戏平台搭建在游戏服务器上,界面601展示了一种示例性的游戏界面,用户X2可以与该界面601进行交互,在界面601上可以显示界面601a(可称为战绩显示界面),该界面601a可用于展示不同游戏阵营当前的战绩,且界面601a上还可以包含控件601b(可称为语音举报控件),当用户X2发现自己所在的游戏阵营或者其他游戏阵营中有某个用户(比如用户X3)在使用不文明词汇发言时,可以通过控件601b进行举报。比如,用户X2持有的终端设备可以响应于针对控件601b的触发操作(比如,点击操作),向游戏服务器发送关键词检测请求;游戏服务器在接收到该关键词检测请求后,可以尝试从游戏语音频道中获取当前时刻起往后一个采集时间段(比如60秒)内所的语音数据进行关键词检测。可选的,若在最近一个采集时间段内未采集到相应的语音数据(比如没有人说话或者都开了静音),则游戏服务器可以向用户X2发送语音获取失败提示信息,例如,如界面602所示,可以在界面602上显示提示信息602a,比如具体可以为“未发现近60秒有来自全队频道的语音消息,系统无法进行判定”,则用户X2可以选择在下一次听到不文明发言时再次进行举报。
其中,可以理解的是,语音获取失败提示信息可以浮窗形式或蒙层形式或半透明形式展现在游戏界面(例如图6所示的界面602)的任一区域中,例如,语音获取失败提示信息可显示在游戏界面的中间区域;可选的,也可以是用能通过触发操作(例如拖拽操作)改变显示尺寸且可收缩的界面进行显示,该界面的尺寸小于游戏界面;可选的,还可以是用独立于游戏界面显示的界面进行显示,本申请实施例对此不做限定。其中,图6所示的界面601和界面602为不同时刻的游戏界面。
进一步地,请一并参见图7,图7是本申请实施例提供的一种游戏语音处理的场景示意图三。与上述图6所对应的实施例类似,如图7所示,假设游戏平台搭建在游戏服务器上,界面701展示了一种示例性的游戏界面,用户X4可以与该界面701进行交互,在界面701上可以包含控件701a(可称为语音举报控件),当用户X4发现自己所在的游戏阵营或者其他游戏阵营中有某个用户(比如用户X5)在使用不文明词汇发言时,可以通过控件701a进行举报。比如,用户X4持有的终端设备可以响应于针对控件701a的触发操作(比如,点击操作),向游戏服务器发送关键词检测请求;游戏服务器在接收到该关键词检测请求后,可以尝试从游戏语音频道中获取当前时刻起往后一个采集时间段(比如30秒)内所的语音数据进行关键词检测。可选的,若在最近一个采集时间段内采集到了相应的语音数据(比如前述用户X5的语音数据),则游戏服务器可以通过加载训练好的目标语音识别模型对获取到的语音数据进行关键词检测,若在该语音数据中检测到用户X5确实使用了不文明词汇,则可以向用户X5发送发言警告提示信息或者对用户X5进行禁言等处罚,同时可以向用户X4返回举报成功通知消息,例如,如界面702所示,可以在界面702上显示通知消息702a,比如具体可以为“举报成功,已对相关用户进行提醒”,从而可以维护文明的发言环境,提升用户游戏体验。
其中,可以理解的是,举报成功通知消息(或发言警告提示信息)可以浮窗形式或蒙层形式或半透明形式展现在游戏界面(例如图7所示的界面702)的任一区域中,例如,举报成功通知消息可显示在游戏界面的中间区域;可选的,也可以是用能通过触发操作(例如拖拽操作)改变显示尺寸且可收缩的界面进行显示,该界面的尺寸小于游戏界面;可选的,还可以是用独立于游戏界面显示的界面进行显示,本申请实施例对此不做限定。其中,图7所示的界面701和界面702为不同时刻的游戏界面。
又或者,还可以通过目标语音识别模型对输入的语音数据进行变声处理,从而可以输出变声后的语音数据(比如从男声变为女声)。此处将不对所有的业务场景进行一一列举。
需要说明的是,在实际产品中,可以对获取到的语音数据进行相关处理,但并不会对获取到的语音数据进行缓存。
需要说明的是,本申请全部实施例涉及的界面并不仅限于提及的几种示例性的界面;在实际应用中,这些界面还可以有其他表现形式,对此不作限定。
可以理解,本申请所有实施例中涉及的交互操作(如前述触发操作)可以包括但不限于手势操作、语音信号输入操作等;其中,手势操作可以包括但不限于:单击操作、双击操作(如在短时间(如3秒)内连续两次点击界面中的相同位置的操作)、长按操作(如对界面中的任一位置执行持续的按压操作)、滑动操作(如向不同方向的快速滑动操作、预设形状(如滑动轨迹为“S”形或“L行”等)的滑动操作等)、拖拽操作等;语音信号输入操作可以指通过终端设备的麦克风采集物理环境(即游戏用户所在的周围环境)中用于指示显示某个界面的语音信号的操作。这里对交互操作的具体形式不做限定。
需要说明的是,本申请所有实施例中的“显示”、“输出”既可以表示为界面进行跳转切换,也可以表示在当前界面中开辟新的区域,例如创建弹窗,或在当前界面中显示隐藏的区域等,这里不做限制。
需要说明的是,本申请所有实施例中所展示的界面以及控件仅仅是一些可供参考的表现形式,在实际应用中,开发人员可以根据产品需求来进行相关设计,本申请对涉及到的界面和控件的具体形式不做限制。
可以理解的是,在本申请的具体实施方式中,涉及到的业务对象的语音数据、声纹特征、面部信息等数据,当本申请中的实施例运用到具体产品或技术中时,需要获得业务对象的许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。例如,可以显示提示界面或者弹窗,该提示界面或者弹窗用于提示业务对象当前正在搜集语音数据、声纹特征、面部信息等数据,仅仅在获取到业务对象对该提示界面或者弹窗发出确认操作后,开始执行数据获取的相关的步骤,否则结束。
上述可知,本申请实施例通过对计算子图中的算子进行性能统计分析,可以确定模型中的高频算子,进而可以通过为高频算子专门定制的调度优化策略,对高频算子进行算子优化处理,实现了对高频算子的定向优化和区别于非高频算子的差异优化,从而可以提升算子优化时的灵活性。由于调度优化策略是针对高频算子进行定制的,因此可以最大程度地优化高频算子的性能,也就是说,对于高频算子而言,其优化效果优于普通调度策略的优化效果,从而可以提升模型在推理时的性能和效率。比如,利用编译器技术,可以实现对深度学习语音模型的优化,从而达到更高的性能水平。本申请实施例提供的模型优化方案解决了将编译优化技术应用到实际业务场景中所面临的困难,通过自动调优业务模型,能够在早期阶段就介入新业务的优化过程,从而提高模型的性能和效率。此外,该方案还支持各个业务中心的新算法、模型和算子的应用,可以减少人力消耗,提高工作效率,为业务发展提供了更大的灵活性。
进一步的,请参见图8,图8是本申请实施例提供的一种数据处理方法的流程示意图二。需要说明的是,本申请实施例提供的方法可以由硬件(比如模型优化设备)执行,也可以由软件(比如模型优化客户端,可运行在模型优化设备上)执行,为便于理解,本申请实施例以模型优化设备执行为例进行阐述,该模型优化设备可以为终端设备或服务器,此处不做限制,比如,该模型优化设备可以为上述图2所示的模型优化设备20A。如图8所示,该方法具体可以包括以下步骤:
步骤S201,从深度学习框架中提取用于进行深度学习的初始网络模型;
步骤S202,将初始网络模型输入至深度学习编译器,通过深度学习编译器将初始网络模型转换为用于表征初始网络模型的初始计算图;
步骤S203,通过深度学习编译器对初始网络模型进行模型分析,得到初始网络模型的模型分析结果,基于模型分析结果对初始计算图进行图优化处理,得到初始计算图对应的优化计算图;
其中,步骤S201-步骤S203的具体实现方式可参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
步骤S204,通过深度学习编译器对优化计算图进行计算图分析,得到优化计算图的计算图分析结果,基于计算图分析结果对优化计算图进行划分,得到优化计算图的N个初始子图;
步骤S205,在深度学习编译器配置的张量算子模板库中,获取与N个初始子图相关联的张量算子模板,基于张量算子模板对N个初始子图中的每个初始子图进行降级处理,得到优化计算图的N个计算子图;
其中,步骤S204-步骤S205的具体实现方式可参见上述图3所对应实施例中的步骤S102,这里不再进行赘述。
步骤S206,对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;
其中,步骤S206的具体实现方式可参见上述图3所对应实施例中的步骤S103,这里不再进行赘述。
步骤S207,若性能统计分析结果指示第一算子和第二算子均为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为第一算子和第二算子配置的第一调度优化策略;
步骤S208,通过第一调度优化策略,对作为第一类型算子的第一算子和第二算子进行算子融合处理,得到融合第一算子和第二算子后的融合算子;
步骤S209,基于融合算子确定第一类型算子对应的优化算子,且将优化算子所在的计算子图作为优化子图;
步骤S210,若性能统计分析结果指示二维卷积算子为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为二维卷积算子配置的第二调度优化策略;
步骤S211,通过第二调度优化策略,对作为第一类型算子的二维卷积算子进行一维映射处理,得到二维卷积算子对应的一维卷积映射算子;
步骤S212,基于一维卷积映射算子确定第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图;
其中,步骤S207-步骤S212的具体实现方式可参见上述图3所对应实施例中的步骤S104,这里不再进行赘述。
此外,步骤S207-步骤S209与步骤S210-步骤S212之间是并列关系。
步骤S213,从调度优化策略中获取优化子图中的优化算子对应的计算定义,基于获取到的计算定义生成与优化子图相关联的调度搜索空间;
步骤S214,通过深度学习编译器中的调度搜索工具,在调度搜索空间中获取优化子图的优化调度参数,基于优化调度参数确定初始网络模型的模型调度参数;
步骤S215,基于模型调度参数,对优化计算图进行降级处理,得到适用于不同业务平台的目标网络模型的模型优化代码。
其中,步骤S213-步骤S215的具体实现方式可参见上述图3所对应实施例中的步骤S105,这里不再进行赘述。
上述可知,本申请实施例通过对计算子图中的算子进行性能统计分析,可以确定模型中的高频算子,进而可以通过为高频算子专门定制的调度优化策略,对高频算子进行算子优化处理,实现了对高频算子的定向优化和区别于非高频算子的差异优化,从而可以提升算子优化时的灵活性。由于调度优化策略是针对高频算子进行定制的,因此可以最大程度地优化高频算子的性能,也就是说,对于高频算子而言,其优化效果优于普通调度策略的优化效果,从而可以提升模型在推理时的性能和效率。
进一步的,请参见图9,图9是本申请实施例提供的一种数据处理方法的流程示意图三。需要说明的是,本申请实施例提供的方法可以由模型优化设备执行,该模型优化设备可通过深度学习编译器(如TVM)对模型进行优化;该模型优化设备可以为终端设备或服务器,此处不做限制。如图9所示,该方法具体可以包括以下步骤:
步骤S301,导入模型:从TensorFlow、PyTorch或ONNX等深度学习框架中导入初始网络模型(比如前述初始语音识别模型)。TVM可以从这些框架中提取模型,并提供相应的支持。
步骤S302,转换为Relay:将导入的模型转换为TVM的高级模型语言Relay(即前述模型描述语言)。Relay是一个功能齐全的可微语言和中间表示(IR),用于表示神经网络模型。在Relay中,可以应用图级优化来优化模型。
步骤S303,降级为TE表示:通过将Relay表示划分为小的子图(即前述初始子图),并将其降级为张量表达式TE(表示即前述通过第一张量描述语言表示的计算子图)。为将Relay表示转换为TE表示,TVM包含了一个张量算子清单(TOPI),其中包含常用张量算子的预定义模板(例如,conv2d、transpose)。
可以理解,在TE中,可以对计算子图中的算子(比如前述第一类型算子或第二类型算子)进行算子优化处理,具体实现方式可以参见上述图3所对应实施例中的步骤S104,这里不再进行赘述。
步骤S304,自动调优:自动调度器AutoTVM可以使用自动调优模块(即auto-tuning模块)搜索最佳的调度方案。这些模块会搜索最佳的调度,并将成本模型的预测值(即前述预测性能)和设备上的测量值(即前述测量性能)进行比较,以选择最佳的配置。其中,AutoTVM1.0基于模板的auto-tuning模块,它运行搜索算法以在用户定义的模板中找到可调knob的最佳值。TOPI中已经提供了常用算子的模板。AutoTVM2.0则基于无模板的auto-tuning模块,它不需要预定义的Schedule模板,而是通过分析计算定义自动生成调度搜索空间,然后在生成的调度搜索空间中搜索最佳Schedule(即前述模型调度参数)。
步骤S305,编译配置选择:根据自动调优的结果,为每个计算子图选择最佳调度方案,并生成调优记录。
步骤S306,降级为TIR:将所有TE子图降级为张量中间表示TIR(即前述第二张量描述语言),并通过底层优化pass(比如内存访问优化)进行优化。优化后的TIR可以进一步降级为目标编译器(例如LLVM)的代码(即前述第二优化代码)。这是生成可部署到生产的优化模型(即前述目标网络模型,比如目标语音识别模型)的最终代码生成阶段。
步骤S307,生成机器码:将优化后的代码编译为机器码(即前述模型优化代码)。
上述可知,本申请实施例利用编译器技术,可以实现对深度学习模型的优化,从而达到更高的性能水平。本申请实施例提供的模型优化方案解决了将编译优化技术应用到实际业务场景中所面临的困难,通过自动调优业务模型,能够在早期阶段就介入新业务的优化过程,从而提高模型的性能和效率。此外,该方案还支持各个业务中心的新算法、模型和算子的应用,可以减少人力消耗,提高工作效率,为业务发展提供了更大的灵活性。
进一步的,请参见图10,图10是本申请实施例提供的一种数据处理装置的结构示意图。如图10所示,数据处理装置1可以是运行于计算机设备(比如,前述模型优化设备)的一个计算机程序(包括程序代码),例如该数据处理装置1可以为一个应用软件;可以理解的是,该数据处理装置1可以用于执行本申请实施例提供的方法中的相应步骤。如图10所示,数据处理装置1可以包括:模型分析模块11、子图划分模块12、算子分析模块13、算子优化模块14、代码转换模块15、语音识别模块16;
模型分析模块11,用于获取用于进行深度学习的初始网络模型,将初始网络模型输入至深度学习编译器,在通过深度学习编译器对初始网络模型进行模型分析时,获取用于表征初始网络模型的优化计算图;
其中,模型分析模块11可以包括:模型提取单元111、模型转换单元112、模型分析单元113;
模型提取单元111,用于从深度学习框架中提取用于进行深度学习的初始网络模型;初始网络模型是通过深度学习框架训练得到的;
模型转换单元112,用于将初始网络模型输入至深度学习编译器,通过深度学习编译器将初始网络模型转换为用于表征初始网络模型的初始计算图;初始计算图通过深度学习编译器中的模型描述语言进行表示;
模型分析单元113,用于通过深度学习编译器对初始网络模型进行模型分析,得到初始网络模型的模型分析结果,基于模型分析结果对初始计算图进行图优化处理,得到初始计算图对应的优化计算图。
其中,模型提取单元111、模型转换单元112、模型分析单元113的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S101的描述,这里将不再继续进行赘述。
子图划分模块12,用于对优化计算图进行划分,得到优化计算图的N个计算子图;N为正整数;
其中,子图划分模块12可以包括:子图划分单元121、第一降级单元122;
子图划分单元121,用于通过深度学习编译器对优化计算图进行计算图分析,得到优化计算图的计算图分析结果,基于计算图分析结果对优化计算图进行划分,得到优化计算图的N个初始子图;N个初始子图中的每个初始子图均通过深度学习编译器中的模型描述语言进行表示;
第一降级单元122,用于在深度学习编译器配置的张量算子模板库中,获取与N个初始子图相关联的张量算子模板,基于张量算子模板对N个初始子图中的每个初始子图进行降级处理,得到优化计算图的N个计算子图;N个计算子图中的每个计算子图均通过深度学习编译器中的第一张量描述语言进行表示;第一张量描述语言的语言描述等级低于模型描述语言的语言描述等级。
其中,子图划分单元121、第一降级单元122的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再继续进行赘述。
算子分析模块13,用于对N个计算子图中的算子进行性能统计分析,得到N个计算子图中的算子的性能统计分析结果;
其中,N个计算子图中的算子包含待优化算子;
算子分析模块13可以包括:调用分析单元131;
调用分析单元131,用于通过与深度学习编译器相关联的模型分析工具,获取待优化算子在N个计算子图中的调用次数;在调用次数满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括算子调用阈值;算子分析模块13还可以包括:第一确定单元132;
第一确定单元132,用于在调用次数大于或等于算子调用阈值时,确定调用次数满足深度学习编译器配置的算子优化条件。
其中,N个计算子图中的算子包含待优化算子;
算子分析模块13可以包括:时长分析单元133;
时长分析单元133,用于在通过深度学习编译器运行初始网络模型时,通过与深度学习编译器相关联的性能分析工具,获取待优化算子的算子运行时长;在算子运行时长满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括时长占用阈值;算子分析模块13还可以包括:第二确定单元134;
第二确定单元134,用于在通过性能分析工具获取到初始网络模型的总运行时长时,获取待优化算子的算子运行时长在总运行时长中的时长占用比例;在时长占用比例大于或等于时长占用阈值时,确定算子运行时长满足深度学习编译器配置的算子优化条件。
其中,N个计算子图中的算子包含待优化算子;
算子分析模块13可以包括:内存分析单元135;
内存分析单元135,用于在通过深度学习编译器运行初始网络模型时,通过与深度学习编译器相关联的性能分析工具,获取待优化算子的内存占用量;在内存占用量满足深度学习编译器配置的算子优化条件时,确定待优化算子为第一类型算子,且基于待优化算子为第一类型算子时的结果确定性能统计分析结果。
其中,算子优化条件包括内存占用阈值;算子分析模块13还包括:第三确定单元136;
第三确定单元136,用于在内存占用量大于或等于内存占用阈值时,确定内存占用量满足深度学习编译器配置的算子优化条件。
其中,调用分析单元131、第一确定单元132、时长分析单元133、第二确定单元134、内存分析单元135、第三确定单元136的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S103的描述,这里将不再继续进行赘述。
算子优化模块14,用于若性能统计分析结果指示N个计算子图中的算子包含第一类型算子,则通过为第一类型算子所配置的调度优化策略,对第一类型算子进行算子优化处理,得到第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图;
其中,调度优化策略包括循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种;循环优化策略包括循环分块策略和循环融合策略。
其中,N个计算子图中包含满足算子融合条件的第一算子和第二算子;
算子优化模块14可以包括:第一获取单元141、算子融合单元142;
第一获取单元141,用于若性能统计分析结果指示第一算子和第二算子均为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为第一算子和第二算子配置的第一调度优化策略;
算子融合单元142,用于通过第一调度优化策略,对作为第一类型算子的第一算子和第二算子进行算子融合处理,得到融合第一算子和第二算子后的融合算子;基于融合算子确定第一类型算子对应的优化算子,且将优化算子所在的计算子图作为优化子图。
其中,当第一类型算子为一维算子时,第一调度优化策略用于指示针对一维算子的循环融合操作和内存访问优化操作。
其中,N个计算子图中包含二维卷积算子;
算子优化模块14可以包括:第二获取单元143、一维映射单元144;
第二获取单元143,用于若性能统计分析结果指示二维卷积算子为第一类型算子,则从为第一类型算子所配置的调度优化策略中,获取为二维卷积算子配置的第二调度优化策略;
一维映射单元144,用于通过第二调度优化策略,对作为第一类型算子的二维卷积算子进行一维映射处理,得到二维卷积算子对应的一维卷积映射算子;基于一维卷积映射算子确定第一类型算子对应的优化算子,将优化算子所在的计算子图作为优化子图。
其中,一维映射单元144可以包括:卷积核分解子单元1441、一维映射子单元1442;
卷积核分解子单元1441,用于通过第二调度优化策略,将作为第一类型算子的二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;第一方向垂直于第二方向;
一维映射子单元1442,用于通过第一方向上的一维卷积核,将二维卷积算子映射为第一方向上的一维卷积算子,且通过第二方向上的一维卷积核,将二维卷积算子映射为第二方向上的一维卷积算子,将第一方向上的一维卷积算子以及第二方向上的一维卷积算子作为二维卷积算子对应的一维卷积映射算子。
其中,卷积核分解子单元1441、一维映射子单元1442的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再继续进行赘述。
其中,第二调度优化策略用于指示针对一维卷积映射算子的循环分块操作、循环重排操作、循环融合操作以及内存访问优化操作。
其中,第一获取单元141、算子融合单元142、第二获取单元143、一维映射单元144的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再继续进行赘述。
代码转换模块15,用于基于与优化子图相关联的调度搜索空间,确定初始网络模型的模型调度参数,基于模型调度参数,将优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;模型优化代码用于在业务平台上运行目标网络模型。
其中,代码转换模块15可以包括:空间生成单元151、参数获取单元152、第二降级单元153;
空间生成单元151,用于从调度优化策略中获取优化子图中的优化算子对应的计算定义,基于获取到的计算定义生成与优化子图相关联的调度搜索空间;
参数获取单元152,用于通过深度学习编译器中的调度搜索工具,在调度搜索空间中获取优化子图的优化调度参数,基于优化调度参数确定初始网络模型的模型调度参数;
第二降级单元153,用于基于模型调度参数,对优化计算图进行降级处理,得到适用于不同业务平台的目标网络模型的模型优化代码。
其中,第二降级单元153可以包括:第一降级子单元1531、第二降级子单元1532、第三降级子单元1533;
第一降级子单元1531,用于基于模型调度参数,对优化计算图进行降级处理,得到优化计算图的第一优化代码;第一优化代码通过深度学习编译器中的第二张量描述语言进行表示;第二张量描述语言的语言描述等级低于深度学习编译器中的第一张量描述语言的语言描述等级;
第二降级子单元1532,用于对第一优化代码进行底层优化处理,得到优化后的第一优化代码,对优化后的第一优化代码进行降级处理,得到第二优化代码;第二优化代码对应的语言描述等级低于第二张量描述语言的语言描述等级;
第三降级子单元1533,用于将第二优化代码编译为适用于不同业务平台的目标网络模型的模型优化代码;模型优化代码对应的语言描述等级低于第二优化代码对应的语言描述等级。
其中,第一降级子单元1531、第二降级子单元1532、第三降级子单元1533的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S105的描述,这里将不再继续进行赘述。
其中,空间生成单元151、参数获取单元152、第二降级单元153的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S105的描述,这里将不再继续进行赘述。
其中,业务平台包括虚拟游戏对应的游戏平台,且目标网络模型包括部署在游戏平台上的目标语音识别模型;目标语音识别模型是通过对初始网络模型中包含的初始语音识别模型进行优化后得到的;装置还包括:语音识别模块16;
语音识别模块16,用于在获取到与游戏平台相关联的业务对象的语音数据时,将语音数据输入目标语音识别模型;通过目标语音识别模型对语音数据进行特征提取,得到业务对象的声纹特征,基于声纹特征识别业务对象的对象属性;根据业务对象的对象属性,对业务对象进行游戏业务处理。
其中,模型分析模块11、子图划分模块12、算子分析模块13、算子优化模块14、代码转换模块15、语音识别模块16的具体功能实现方式,可以参见上述图3所对应实施例中对步骤S101-步骤S105的描述,这里将不再继续进行赘述。应当理解,对采用相同方法所得到的有益效果描述,也不再进行赘述。
请参见图11,图11是本申请实施例提供的一种计算机设备的结构示意图。如图11所示,计算机设备1000可以为终端设备,还可以为服务器,这里将不对其进行限制。为便于理解,本申请以计算机设备为服务器为例,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图11所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图11所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以执行前文图3、图8任一个所对应实施例中对数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,且计算机程序包括计算机指令,当处理器执行计算机指令时,能够执行前文图3、图8任一个所对应实施例中对数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3、图8任一个所对应实施例提供的方法。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储器(Read-Only Memory,ROM)或随机存储器(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (20)
1.一种数据处理方法,其特征在于,包括:
获取用于进行深度学习的初始网络模型,将所述初始网络模型输入至深度学习编译器,在通过所述深度学习编译器对所述初始网络模型进行模型分析时,获取用于表征所述初始网络模型的优化计算图;
对所述优化计算图进行划分,得到所述优化计算图的N个初始子图,对用模型描述语言表示的所述N个初始子图进行降级处理,得到用第一张量描述语言表示的N个计算子图;N为正整数;所述第一张量描述语言的语言描述等级低于所述模型描述语言的语言描述等级;一个计算子图是基于一个张量算子模板对一个初始子图进行降级处理后所得到的;一个张量算子模板是指在所述深度学习编译器的张量算子模板库中所获取到的与一个初始子图中的张量算子相关联的预定义模板;
对所述N个计算子图中的算子进行性能统计分析,得到所述N个计算子图中的算子的性能统计分析结果;所述N个计算子图中包含二维卷积算子;
若所述性能统计分析结果指示所述N个计算子图中的算子包含第一类型算子,则通过为所述第一类型算子所配置的调度优化策略,对所述第一类型算子进行算子优化处理,得到所述第一类型算子对应的优化算子,将所述优化算子所在的计算子图作为优化子图;所述第一类型算子是指在所述N个计算子图中的调用次数满足所述深度学习编译器所配置的算子优化条件的高频算子;在所述高频算子属于所述N个计算子图中的所述二维卷积算子时,所述调度优化策略包含使用一维卷积模拟二维卷积的第二调度优化策略,所述第二调度优化策略用于指示对所述二维卷积算子进行一维映射处理,得到所述二维卷积算子对应的一维卷积映射算子;所述一维映射处理是指将所述二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;所述第一方向上的一维卷积核用于将所述二维卷积算子映射为所述第一方向上的一维卷积算子;所述第二方向上的一维卷积核用于将所述二维卷积算子映射为所述第二方向上的一维卷积算子;作为所述优化算子的所述一维卷积映射算子包含所述第一方向上的一维卷积算子和所述第二方向上的一维卷积算子;
基于与所述优化子图相关联的调度搜索空间,确定所述初始网络模型的模型调度参数,基于所述模型调度参数,将所述优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;所述模型优化代码用于在所述业务平台上运行所述目标网络模型;所述模型优化代码是对第二优化代码进行编译后所得到的;所述第二优化代码是对第一优化代码进行底层优化处理以及降级处理后所得到的;所述第一优化代码是对以所述第一张量描述语言表示的计算子图进行降级处理所后得到的;所述第一优化代码所对应的第二张量描述语言的语言描述等级低于所述第一张量描述语言的语言描述等级,且所述第二优化代码对应的语言描述等级低于所述第二张量描述语言的语言描述等级。
2.根据权利要求1所述的方法,其特征在于,所述获取用于进行深度学习的初始网络模型,将所述初始网络模型输入至深度学习编译器,在通过所述深度学习编译器对所述初始网络模型进行模型分析时,获取用于表征所述初始网络模型的优化计算图,包括:
从深度学习框架中提取用于进行深度学习的初始网络模型;所述初始网络模型是通过所述深度学习框架训练得到的;
将所述初始网络模型输入至深度学习编译器,通过所述深度学习编译器将所述初始网络模型转换为用于表征所述初始网络模型的初始计算图;所述初始计算图通过所述深度学习编译器中的模型描述语言进行表示;
通过所述深度学习编译器对所述初始网络模型进行模型分析,得到所述初始网络模型的模型分析结果,基于所述模型分析结果对所述初始计算图进行图优化处理,得到所述初始计算图对应的优化计算图。
3.根据权利要求1所述的方法,其特征在于,所述对所述优化计算图进行划分,得到所述优化计算图的N个初始子图,对用所述模型描述语言表示的所述N个初始子图进行降级处理,得到用第一张量描述语言表示的N个计算子图,包括:
通过所述深度学习编译器对所述优化计算图进行计算图分析,得到所述优化计算图的计算图分析结果,基于所述计算图分析结果对所述优化计算图进行划分,得到所述优化计算图的N个初始子图;所述N个初始子图中的每个初始子图均通过所述深度学习编译器中的模型描述语言进行表示;
在所述深度学习编译器配置的张量算子模板库中,获取与所述N个初始子图相关联的张量算子模板,基于所述张量算子模板对所述N个初始子图中的每个初始子图进行降级处理,得到所述优化计算图的N个计算子图;所述N个计算子图中的每个计算子图均通过所述深度学习编译器中的第一张量描述语言进行表示;所述第一张量描述语言的语言描述等级低于所述模型描述语言的语言描述等级。
4.根据权利要求1所述的方法,其特征在于,所述N个计算子图中的算子包含待优化算子;
所述对所述N个计算子图中的算子进行性能统计分析,得到所述N个计算子图中的算子的性能统计分析结果,包括:
通过与所述深度学习编译器相关联的模型分析工具,获取所述待优化算子在所述N个计算子图中的调用次数;
在所述调用次数满足所述深度学习编译器配置的算子优化条件时,确定所述待优化算子为第一类型算子,且基于所述待优化算子为所述第一类型算子时的结果确定性能统计分析结果。
5.根据权利要求4所述的方法,其特征在于,所述算子优化条件包括算子调用阈值;所述方法还包括:
在所述调用次数大于或等于所述算子调用阈值时,确定所述调用次数满足所述深度学习编译器配置的所述算子优化条件。
6.根据权利要求1所述的方法,其特征在于,所述N个计算子图中的算子包含待优化算子;
所述对所述N个计算子图中的算子进行性能统计分析,得到所述N个计算子图中的算子的性能统计分析结果,包括:
在通过所述深度学习编译器运行所述初始网络模型时,通过与所述深度学习编译器相关联的性能分析工具,获取所述待优化算子的算子运行时长;
在所述算子运行时长满足所述深度学习编译器配置的算子优化条件时,确定所述待优化算子为第一类型算子,且基于所述待优化算子为所述第一类型算子时的结果确定性能统计分析结果。
7.根据权利要求6所述的方法,其特征在于,所述算子优化条件包括时长占用阈值;所述方法还包括:
在通过所述性能分析工具获取到所述初始网络模型的总运行时长时,获取所述待优化算子的算子运行时长在所述总运行时长中的时长占用比例;
在所述时长占用比例大于或等于所述时长占用阈值时,确定所述算子运行时长满足所述深度学习编译器配置的所述算子优化条件。
8.根据权利要求1所述的方法,其特征在于,所述N个计算子图中的算子包含待优化算子;
所述对所述N个计算子图中的算子进行性能统计分析,得到所述N个计算子图中的算子的性能统计分析结果,包括:
在通过所述深度学习编译器运行所述初始网络模型时,通过与所述深度学习编译器相关联的性能分析工具,获取所述待优化算子的内存占用量;
在所述内存占用量满足所述深度学习编译器配置的算子优化条件时,确定所述待优化算子为第一类型算子,且基于所述待优化算子为所述第一类型算子时的结果确定性能统计分析结果。
9.根据权利要求8所述的方法,其特征在于,所述算子优化条件包括内存占用阈值;所述方法还包括:
在所述内存占用量大于或等于所述内存占用阈值时,确定所述内存占用量满足所述深度学习编译器配置的所述算子优化条件。
10.根据权利要求1所述的方法,其特征在于,所述调度优化策略包括循环优化策略、内存访问优化策略、并行性提升策略中的一种或多种;所述循环优化策略包括循环分块策略和循环融合策略。
11.根据权利要求1所述的方法,其特征在于,所述N个计算子图中包含满足算子融合条件的第一算子和第二算子;
所述若所述性能统计分析结果指示所述N个计算子图中的算子包含第一类型算子,则通过为所述第一类型算子所配置的调度优化策略,对所述第一类型算子进行算子优化处理,得到所述第一类型算子对应的优化算子,将所述优化算子所在的计算子图作为优化子图,包括:
若所述性能统计分析结果指示所述第一算子和所述第二算子均为第一类型算子,则从为所述第一类型算子所配置的调度优化策略中,获取为所述第一算子和所述第二算子配置的第一调度优化策略;
通过所述第一调度优化策略,对作为所述第一类型算子的所述第一算子和所述第二算子进行算子融合处理,得到融合所述第一算子和所述第二算子后的融合算子;
基于所述融合算子确定所述第一类型算子对应的优化算子,且将所述优化算子所在的计算子图作为优化子图。
12.根据权利要求11所述的方法,其特征在于,当所述第一类型算子为一维算子时,所述第一调度优化策略用于指示针对所述一维算子的循环融合操作和内存访问优化操作。
13.根据权利要求1所述的方法,其特征在于,所述若所述性能统计分析结果指示所述N个计算子图中的算子包含第一类型算子,则通过为所述第一类型算子所配置的调度优化策略,对所述第一类型算子进行算子优化处理,得到所述第一类型算子对应的优化算子,将所述优化算子所在的计算子图作为优化子图,包括:
若所述性能统计分析结果指示所述二维卷积算子为第一类型算子,则从为所述第一类型算子所配置的调度优化策略中,获取为所述二维卷积算子配置的第二调度优化策略;
通过所述第二调度优化策略,对作为所述第一类型算子的所述二维卷积算子进行一维映射处理,得到所述二维卷积算子对应的一维卷积映射算子;
基于所述一维卷积映射算子确定所述第一类型算子对应的优化算子,将所述优化算子所在的计算子图作为优化子图。
14.根据权利要求13所述的方法,其特征在于,所述通过所述第二调度优化策略,对作为所述第一类型算子的所述二维卷积算子进行一维映射处理,得到所述二维卷积算子对应的一维卷积映射算子,包括:
通过所述第二调度优化策略,将作为所述第一类型算子的所述二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;所述第一方向垂直于所述第二方向;
通过所述第一方向上的一维卷积核,将所述二维卷积算子映射为所述第一方向上的一维卷积算子,且通过所述第二方向上的一维卷积核,将所述二维卷积算子映射为所述第二方向上的一维卷积算子,将所述第一方向上的一维卷积算子以及所述第二方向上的一维卷积算子作为所述二维卷积算子对应的一维卷积映射算子。
15.根据权利要求13所述的方法,其特征在于,所述第二调度优化策略用于指示针对所述一维卷积映射算子的循环分块操作、循环重排操作、循环融合操作以及内存访问优化操作。
16.根据权利要求1所述的方法,其特征在于,所述基于与所述优化子图相关联的调度搜索空间,确定所述初始网络模型的模型调度参数,基于所述模型调度参数,将所述优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码,包括:
从所述调度优化策略中获取所述优化子图中的所述优化算子对应的计算定义,基于获取到的计算定义生成与所述优化子图相关联的调度搜索空间;
通过所述深度学习编译器中的调度搜索工具,在所述调度搜索空间中获取所述优化子图的优化调度参数,基于所述优化调度参数确定所述初始网络模型的模型调度参数;
基于所述模型调度参数,对所述优化计算图进行降级处理,得到适用于不同业务平台的目标网络模型的模型优化代码。
17.根据权利要求1所述的方法,其特征在于,所述业务平台包括虚拟游戏对应的游戏平台,且所述目标网络模型包括部署在所述游戏平台上的目标语音识别模型;所述目标语音识别模型是通过对所述初始网络模型中包含的初始语音识别模型进行优化后得到的;所述方法还包括:
在获取到与所述游戏平台相关联的业务对象的语音数据时,将所述语音数据输入所述目标语音识别模型;
通过所述目标语音识别模型对所述语音数据进行特征提取,得到所述业务对象的声纹特征,基于所述声纹特征识别所述业务对象的对象属性;
根据所述业务对象的对象属性,对所述业务对象进行游戏业务处理。
18.一种数据处理装置,其特征在于,包括:
模型分析模块,用于获取用于进行深度学习的初始网络模型,将所述初始网络模型输入至深度学习编译器,在通过所述深度学习编译器对所述初始网络模型进行模型分析时,获取用于表征所述初始网络模型的优化计算图;
子图划分模块,用于对所述优化计算图进行划分,得到所述优化计算图的N个初始子图,对用模型描述语言表示的所述N个初始子图进行降级处理,得到用第一张量描述语言表示的N个计算子图;N为正整数;所述第一张量描述语言的语言描述等级低于所述模型描述语言的语言描述等级;一个计算子图是基于一个张量算子模板对一个初始子图进行降级处理后所得到的;一个张量算子模板是指在所述深度学习编译器的张量算子模板库中所获取到的与一个初始子图中的张量算子相关联的预定义模板;
算子分析模块,用于对所述N个计算子图中的算子进行性能统计分析,得到所述N个计算子图中的算子的性能统计分析结果;所述N个计算子图中包含二维卷积算子;
算子优化模块,用于若所述性能统计分析结果指示所述N个计算子图中的算子包含第一类型算子,则通过为所述第一类型算子所配置的调度优化策略,对所述第一类型算子进行算子优化处理,得到所述第一类型算子对应的优化算子,将所述优化算子所在的计算子图作为优化子图;所述第一类型算子是指在所述N个计算子图中的调用次数满足所述深度学习编译器所配置的算子优化条件的高频算子;在所述高频算子属于所述N个计算子图中的所述二维卷积算子时,所述调度优化策略包含使用一维卷积模拟二维卷积的第二调度优化策略,所述第二调度优化策略用于指示对所述二维卷积算子进行一维映射处理,得到所述二维卷积算子对应的一维卷积映射算子;所述一维映射处理是指将所述二维卷积算子的二维卷积核分解为第一方向上的一维卷积核以及第二方向上的一维卷积核;所述第一方向上的一维卷积核用于将所述二维卷积算子映射为所述第一方向上的一维卷积算子;所述第二方向上的一维卷积核用于将所述二维卷积算子映射为所述第二方向上的一维卷积算子;作为所述优化算子的所述一维卷积映射算子包含所述第一方向上的一维卷积算子和所述第二方向上的一维卷积算子;
代码转换模块,用于基于与所述优化子图相关联的调度搜索空间,确定所述初始网络模型的模型调度参数,基于所述模型调度参数,将所述优化计算图转换为适用于不同业务平台的目标网络模型的模型优化代码;所述模型优化代码用于在所述业务平台上运行所述目标网络模型;所述模型优化代码是对第二优化代码进行编译后所得到的;所述第二优化代码是对第一优化代码进行底层优化处理以及降级处理后所得到的;所述第一优化代码是对以所述第一张量描述语言表示的计算子图进行降级处理所后得到的;所述第一优化代码所对应的第二张量描述语言的语言描述等级低于所述第一张量描述语言的语言描述等级,且所述第二优化代码对应的语言描述等级低于所述第二张量描述语言的语言描述等级。
19.一种计算机设备,其特征在于,包括:处理器和存储器;
所述处理器与所述存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使所述计算机设备执行权利要求1-17任一项所述的方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,该计算机程序适于由处理器加载并执行,以使具有所述处理器的计算机设备执行权利要求1-17任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311448270.4A CN117170685B (zh) | 2023-11-02 | 2023-11-02 | 一种数据处理方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311448270.4A CN117170685B (zh) | 2023-11-02 | 2023-11-02 | 一种数据处理方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117170685A CN117170685A (zh) | 2023-12-05 |
CN117170685B true CN117170685B (zh) | 2024-02-23 |
Family
ID=88930221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311448270.4A Active CN117170685B (zh) | 2023-11-02 | 2023-11-02 | 一种数据处理方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117170685B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117648091A (zh) * | 2023-12-12 | 2024-03-05 | 上海寒武纪信息科技有限公司 | 计算图的编译方法及相关产品 |
CN117455015B (zh) * | 2023-12-20 | 2024-04-02 | 摩尔线程智能科技(成都)有限责任公司 | 一种模型优化的方法、装置、存储介质及电子设备 |
CN117574983B (zh) * | 2024-01-16 | 2024-04-30 | 腾讯科技(深圳)有限公司 | 一种算子处理模型的训练方法和相关装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385181A (zh) * | 2021-12-17 | 2022-04-22 | 飞腾信息技术有限公司 | 一种数据处理方法、装置、设备及计算机存储介质 |
CN114580653A (zh) * | 2022-01-12 | 2022-06-03 | 阿里云计算有限公司 | 机器学习计算优化方法和编译器 |
CN115034402A (zh) * | 2022-06-20 | 2022-09-09 | 寒武纪行歌(南京)科技有限公司 | 模型推理性能的优化方法、装置及相关产品 |
CN116126341A (zh) * | 2022-12-30 | 2023-05-16 | 深圳思谋信息科技有限公司 | 模型编译方法、装置、计算机设备及计算机可读存储介质 |
CN116188942A (zh) * | 2023-02-14 | 2023-05-30 | 合肥工业大学 | 一种图像卷积方法、装置、设备及存储介质 |
CN116306812A (zh) * | 2023-03-06 | 2023-06-23 | 南京大学 | 用于深度学习模型解析、优化和部署的后端可扩展框架及方法 |
CN116861359A (zh) * | 2023-06-01 | 2023-10-10 | 中国科学院计算技术研究所 | 面向深度学习推理任务编译器的算子融合方法和系统 |
-
2023
- 2023-11-02 CN CN202311448270.4A patent/CN117170685B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385181A (zh) * | 2021-12-17 | 2022-04-22 | 飞腾信息技术有限公司 | 一种数据处理方法、装置、设备及计算机存储介质 |
CN114580653A (zh) * | 2022-01-12 | 2022-06-03 | 阿里云计算有限公司 | 机器学习计算优化方法和编译器 |
CN115034402A (zh) * | 2022-06-20 | 2022-09-09 | 寒武纪行歌(南京)科技有限公司 | 模型推理性能的优化方法、装置及相关产品 |
CN116126341A (zh) * | 2022-12-30 | 2023-05-16 | 深圳思谋信息科技有限公司 | 模型编译方法、装置、计算机设备及计算机可读存储介质 |
CN116188942A (zh) * | 2023-02-14 | 2023-05-30 | 合肥工业大学 | 一种图像卷积方法、装置、设备及存储介质 |
CN116306812A (zh) * | 2023-03-06 | 2023-06-23 | 南京大学 | 用于深度学习模型解析、优化和部署的后端可扩展框架及方法 |
CN116861359A (zh) * | 2023-06-01 | 2023-10-10 | 中国科学院计算技术研究所 | 面向深度学习推理任务编译器的算子融合方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN117170685A (zh) | 2023-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117170685B (zh) | 一种数据处理方法、装置、设备及介质 | |
Manaswi et al. | Deep learning with applications using python | |
CN111242321B (zh) | 一种数据处理方法及相关产品 | |
CN110366734B (zh) | 优化神经网络架构 | |
CN109992710A (zh) | 点击率预估方法、系统、介质和计算设备 | |
CN115659281B (zh) | 一种自适应加速算子融合的方法及装置 | |
CN110990631A (zh) | 视频筛选方法、装置、电子设备和存储介质 | |
CN111666416B (zh) | 用于生成语义匹配模型的方法和装置 | |
CN112989085B (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
CN111310918B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN114492765A (zh) | 一种模型优化方法、装置、设备及存储介质、程序产品 | |
US20240161474A1 (en) | Neural Network Inference Acceleration Method, Target Detection Method, Device, and Storage Medium | |
CN110532448B (zh) | 基于神经网络的文档分类方法、装置、设备及存储介质 | |
Pop et al. | Distributed platforms and cloud services: Enabling machine learning for big data | |
CN113762324A (zh) | 虚拟对象检测方法、装置、设备及计算机可读存储介质 | |
CN116991984B (zh) | 广域协同与体系知识增强的电子卷宗材料处理方法及系统 | |
CN117786416B (zh) | 一种模型训练方法、装置、设备、存储介质及产品 | |
US11809849B1 (en) | Global modulo allocation in neural network compilation | |
US20230169408A1 (en) | Annotation of a Machine Learning Pipeline with Operational Semantics | |
CN117216537A (zh) | 集成模型的训练方法、装置、设备、存储介质及程序产品 | |
CN116976491A (zh) | 一种信息预测方法、装置、设备、存储介质及程序产品 | |
Sarang et al. | Estimators | |
CN116999812A (zh) | 数据处理方法、设备、存储介质及计算机程序产品 | |
CN116975341A (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 |