CN117273171A - 深度学习框架适配方法、装置、计算机设备和存储介质 - Google Patents
深度学习框架适配方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN117273171A CN117273171A CN202311244999.XA CN202311244999A CN117273171A CN 117273171 A CN117273171 A CN 117273171A CN 202311244999 A CN202311244999 A CN 202311244999A CN 117273171 A CN117273171 A CN 117273171A
- Authority
- CN
- China
- Prior art keywords
- deep learning
- modified
- learning framework
- test
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013135 deep learning Methods 0.000 title claims abstract description 459
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000006978 adaptation Effects 0.000 title claims abstract description 37
- 238000011156 evaluation Methods 0.000 claims abstract description 28
- 238000012795 verification Methods 0.000 claims abstract description 27
- 238000004364 calculation method Methods 0.000 claims abstract description 11
- 238000012360 testing method Methods 0.000 claims description 322
- 238000013136 deep learning model Methods 0.000 claims description 37
- 238000011056 performance test Methods 0.000 claims description 33
- 238000012986 modification Methods 0.000 claims description 28
- 230000004048 modification Effects 0.000 claims description 28
- 238000012549 training Methods 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 20
- 238000012856 packing Methods 0.000 claims description 10
- 230000001419 dependent effect Effects 0.000 claims description 3
- 238000011161 development Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000012545 processing Methods 0.000 description 9
- 238000004806 packaging method and process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 5
- 238000010276 construction Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000002474 experimental method Methods 0.000 description 4
- XSQUKJJJFZCRTK-NJFSPNSNSA-N UREA C 14 Chemical compound N[14C](N)=O XSQUKJJJFZCRTK-NJFSPNSNSA-N 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000002715 modification method Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013112 stability test Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请涉及一种深度学习框架适配方法、装置、计算机设备和存储介质,该方法包括:获取异构加速器的运行信息和运行需求;其中,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改,然后对修改后的深度学习框架进行评估验证;若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。该方法提高了深度学习框架与异构加速器之间的兼容性,从而使得深度学习能够在异构加速器上的稳定运行。
Description
技术领域
本申请涉及计算技术领域,特别是涉及一种深度学习框架适配方法、装置、计算机设备和存储介质。
背景技术
随着深度学习模型的快速发展,对深度学习框架的训练和推理速度等提出了更高的要求。
相关技术中,为了提高深度学习模型的训练和推理速度,可以将深度学习框架与异构加速器进行研发适配,通过异构加速器并行执行深度学习框架中的计算任务。
然而,相关技术中的深度学习框架与异构加速器之间存在兼容性较差的问题,导致深度学习框架无法在异构加速器上稳定运行。
发明内容
基于此,有必要针对上述技术问题,提供一种深度学习框架适配方法、装置、计算机设备和存储介质,能够提高深度学习框架与异构加速器之间的兼容性,使得深度学习框架能够在异构加速器上稳定运行。
第一方面,本申请提供了一种深度学习框架适配方法,包括:
获取异构加速器的运行信息和运行需求,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;
根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改;
对修改后的深度学习框架进行评估验证;
若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。
本申请实施例的技术方案中,首先获取异构加速器的运行信息和运行需求;其中,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改,然后对修改后的深度学习框架进行评估验证;若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。本申请实施例中,由于运行信息和运行需求均是异构加速器执行目标深度学习框架的计算任务时的信息,因此,根据运行信息和运行需求对目标深度学习框架的源代码和三方库进行修改,相当于在将目标深度学习框架与异构加速器适配的过程中,考虑了目标深度学习框架在异构加速器执行时异构加速器与目标深度学习框架之间的运行信息和运行需求,从而提高了目标深度学习框架与异构加速器之间的兼容性,保证了目标深度学习框架在异构加速器上的稳定运行;并且,对修改后的深度学习框架进行评估验证,进一步保证了修改后的深度学习框架的正确性和可靠性。
在其中一个实施例中,运行信息包括运行时接口信息和异构加速器使用数学库时依赖库文件;根据运行信息对目标深度学习框架的源代码进行修改,包括:
根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改;以及根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。
本申请实施例的技术方案中,根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改;以及根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。这样,相当于是提前对目标深度学习框架与异构加速器适配的接口代码和库文件路径进行修改,使得在目标深度学习框架在后续编译、运行时能够找到对应的文件,提高了目标深度学习框架与异构加速器之间的兼容性。
在其中一个实施例中,运行需求包括执行方式;根据运行需求对目标深度学习框架的三方库代码进行修改,包括:
根据三方库代码的存储位置,获取目标深度学习框架的三方库代码;
基于异构加速器的执行方式,获取异构加速器的指令集代码,并根据指令集代码对三方库代码进行修改。
本申请实施例的技术方案中,根据三方库代码的存储位置,获取目标深度学习框架的三方库代码,并基于异构加速器的执行方式,获取异构加速器的指令集代码,并根据指令集代码对三方库代码进行修改。通过对三方库进行修改可以适配异构加速器的指令集,解决代码在异构加速器上的可用性问题;同时,修改目标深度学习框架的三方库代码还可以提高代码在异构加速器上的执行效率。
在其中一个实施例中,对修改后的深度学习框架进行评估验证,包括:
对修改后的深度学习框架进行编译;
若编译通过,则对修改后的深度学习框架的代码进行单元测试;
若单元测试通过,则继续对修改后的深度学习框架的代码进行基准测试;
若基准测试通过,则确定修改后的深度学习框架的评估验证通过。
本申请实施例的技术方案中,对修改后的深度学习框架进行编译,若编译通过,则对修改后的深度学习框架的代码进行单元测试,若单元测试通过,则继续对修改后的深度学习框架的代码进行基准测试,若基准测试通过,则确定修改后的深度学习框架的评估验证通过。由于单元测试能够验证修改后的深度学习框架在各个单元的功能是否正常,基准测试可以评估修改后的深度学习框架在性能方面的可靠性,因此,在修改后的深度学习框架在编译通过的情况下,对修改后的深度学习框架的代码进行单元测试和基准测试,进一步提高了修改后的深度学习框架的准确性和可靠性;并且,只有在编译通过的情况下,进行单元测试,在单元测试通过的情况下,进行基准测试,保证了在正确的代码中进行测试,提高了对修改后的深度学习框架进行评估验证的可靠性。
在其中一个实施例中,对修改后的深度学习框架进行编译,包括:
根据目标深度学习框架的配置版本,确定修改后的深度学习框架的编译环境;
根据编译环境和预设的编译命令,对修改后的深度学习框架进行编译;
若编译失败,则根据编译失败生成的日志报错信息,对修改后的深度学习框架进行调整,直至修改后的深度学习框架编译通过。
本申请实施例的技术方案中,根据目标深度学习框架的配置版本,确定修改后的深度学习框架的编译环境,并根据编译环境和预设的编译命令,对修改后的深度学习框架进行编译;若编译失败,则根据编译失败生成的日志报错信息,对修改后的深度学习框架进行调整,直至修改后的深度学习框架编译通过。通过对修改后的目标深度学习框架进行编译,在编译失败时对修改后的深度学习框架进行调整,能够确保目标深度学习框架的准确性和有效性,从而提高了目标深度学习框架与异构加速器适配的准确性和效率。
在其中一个实施例中,对修改后的深度学习框架的代码进行单元测试,包括:
分别对修改后的深度学习框架进行至少一种类型的单元测试;
若基于各类型的单元测试的测试结果均达到测试标准范围,则确定修改后的深度学习框架的代码单元测试通过;
若基于各类型的单元测试的测试结果中存在未达到测试标准范围的,则根据测试结果获取测试失败用例及对应的报错信息,并基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。
本申请实施例的技术方案中,分别对修改后的深度学习框架进行至少一种类型的单元测试,若基于各类型的的单元测试的测试结果均达到测试标准范围,确定修改后的深度学习框架的代码单元测试通过;若基于各类型的单元测试的测试结果中存在未达到测试标准范围的,则根据测试结果获取测试失败用例及对应的报错信息,并基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。为单元测试的测试结果设置测试标准范围,只有在单元测试的测试结果达到测试标准范围,才会确定对应的单元测试通过,并且,对修改后的深度学习框架进行至少一种类型的单元测试,提高了对修改后的深度学习框架单元测试的全面性,使得修改后的深度学习框架的测试结果更为准确;并在单元测试的测试结果未达到测试标准范围的,根据对应的测试失败用例对修改后的深度学习框架进行调整,从而提高了修改后的深度学习框架调整的准确性和效率。
在其中一个实施例中,对修改后的深度学习框架的代码进行基准测试,包括:
根据预设的二进制打包命令,对修改后的深度学习框架的代码进行打包处理,生成二进制文件;
基于二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型;
对深度学习模型进行多种类型的性能测试;
若深度学习模型的各性能测试均通过,则确定修改后的深度学习框架基准测试通过。
本申请实施例的技术方案中,根据预设的二进制打包命令,对修改后的深度学习框架的代码进行打包处理,生成二进制文件,并基于二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型,然后对深度学习模型进行多种类型性能测试,若深度学习模型的各性能测试均通过,则确定修改后的深度学习框架基准测试通过。通过对修改后的深度学习框架以预置的数据集进行网络模型的训练,并对训练得到的深度学习模型进行性能测试,进一步使得修改后的深度学习框架在适配异构加速器的同时,修改后的深度学习框架也具有较高的准确性。
第二方面,本申请还提供了一种深度学习框架适配装置,包括:
获取模块,用于获取异构加速器的运行信息和运行需求,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;
修改模块,用于根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改;
评估模块,用于对修改后的深度学习框架进行评估验证;
确定模块,用于若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。
第三方面,本申请实施例提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,该处理器执行计算机程序时实现上述第一方面中任一实施例提供的方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面中任一实施例提供的方法的步骤。
第五方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述第一方面中任一实施例提供的方法的步骤。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中计算机设备的内部结构图;
图2为一个实施例中深度学习框架适配方法的流程示意图;
图3为另一个实施例中深度学习框架适配方法的流程示意图;
图4为另一个实施例中深度学习框架适配方法的流程示意图;
图5为另一个实施例中深度学习框架适配方法的流程示意图;
图6为另一个实施例中深度学习框架适配方法的流程示意图;
图7为另一个实施例中深度学习框架适配方法的流程示意图;
图8为另一个实施例中深度学习框架适配方法的流程示意图;
图9为一个实施例中深度学习框架适配装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的深度学习框架适配方法,可以应用于计算机设备中。该计算机设备可以是服务器,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。该计算机设备的内部结构图可以如图1所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过***总线连接,通信接口通过输入/输出接口连接到***总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储深度学习框架适配数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种深度学习框架适配方法。
本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,深度学习框架是一个用于机器学习的开源框架,可以用于快速构建神经网络模型,同时快捷地进行网络的训练、评估与保存。而异构加速器又被称为计算卡,它能够经济有效地实现高性能计算能力,可扩展性强,是专门处理计算任务的硬件。但是,由于异构加速器才刚刚开始发展,目前尚未有深度学习框架在异构加速器上完整的适配方法,导致异构加速器对深度学习框架不兼容或者兼容性差,深度学习框架的模型训练、推理和保存等功能支持的不完善,导致不能很好的建立异构加速器的软件生态,这会降低国内异构加速器生态的发展。
基于此,为了解决异构加速器对深度学习框架不支持或不完备支持的问题,本申请实施例提供了一种深度学习框架适配方法,该方法能够规范化、正确性的协助异构加速器完成在深度学习框架上的适配、测试研发工作,有效支持深度学习框架在异构加速器上的快速、稳定、正确的运行,从而提高了异构加速器的核心竞争力。
在一个示例性的实施例中,如图2所示,提供了一种深度学习框架适配方法,以该方法应用于图1中的计算机设备为例进行说明,包括以下步骤:
S201,获取异构加速器的运行信息和运行需求,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息。
其中,异构加速器是一种能够提高性能计算能力的硬件设备,它可以与主处理器配合工作,加速特定类型的计算任务;例如,异构加速器可以加速深度学习框架中的计算任务。可选地,异构加速器可以是图形处理器(Graphics Processing Unit,GPU)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、张量处理单元(Tensor ProcessingUnit,TPU)和非易失性存储器(Non-Volatile Memory,NVM,NVM)加速器等等;目标深度学习框架可以是需要异构加速器进行计算任务加速的任一深度学习框架;例如,目标深度学习框架可以是TensorFlow、PyTorch和OneFlow等。
获取异构加速器执行目标深度学***台和操作***等等;然后根据目标深度学习框架的属性信息,以及属性信息分别与异构加速器的运行信息和运行需求之间的对应关系,确定异构加速器的运行信息和运行需求。
具体地,对应关系包括:深度学习框架的属性信息与异构加速器的运行信息之间的对应关系,以及深度学习框架的属性信息与异构加速器的运行需求之间的对应关系;对应关系中可能包括多种不同的深度学习框架的属性信息,每个深度学习框架的属性信息对应的异构加速器的运行信息和运行需求可能相同也可能不同,具体可根据实际情况确定。
因此,可以从对应关系中获取目标深度学习框架对应的异构加速器的运行信息和运行需求。
在一种可选的实施例中,也可以将目标深度学习框架在异构加速器上进行测试,确定异构加速器在执行目标深度学习框架的计算任务时产生的运行信息和运行需求。
其中,运行信息可以包括异构加速器的驱动程序、软件开发包版本、硬件规格、计算能力、内存带宽等;运行需求可以包括存储需求、操作***、驱动程序要求等。
S202,根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改。
一种实施例中,可以根据预设的代码修改模型确定需要目标深度学习框架中需要修改的代码;例如,将运行信息输入至代码修改模型中,代码修改模型对异构加速器的运行信息进行分析,得到目标深度学习框架的源代码的修改方式,并基于源代码的修改方式对目标深度学习框架中的源代码进行修改;将运行需求输入至代码修改模型中,代码修改模型对异构加速器的运行需求进行分析,得到目标深度学习的三方库的修改方式,并基于三方库的修改方式对目标深度学习框架的三方库代码进行修改。
可选地,根据运行信息对目标深度学习框架的源代码进行修改的方式也可以是,根据异构加速器的运行信息以及目标深度学习框架的类型,确定目标深度学习框架的源代码的修改方式,并根据目标学习框架的源代码的修改方式对目标深度学习框架的源代码进行修改;相应地,根据运行需求对目标深度学习框架的三方库进行修改的方式也可以是,根据异构加速器的运行需求以及目标深度学习框架的类型,确定目标深度学习框架的三方库的修改方式,并根据三方库的修改方式对目标深度学习的三方库代码进行修改。
源代码的修改方式和三方库的修改方式均可以包括需修改的代码位置和该位置处需替换的正确代码。
S203,对修改后的深度学习框架进行评估验证。
其中,对修改后的深度学习框架进行评估验证可以确保其功能正确性、性能优化、兼容性、鲁棒性和可靠性等。
因此,对修改后的深度学习框架进行评估验证的方式可以包括对修改后的深度学习框架进行性能评估、对修改后的深度学习框架进行功能验证、对修改后的深度学习框架进行兼容性测试、对修改后的深度学习框架进行鲁棒性测试中的至少一种。
对修改后的深度学习框架进行性能测试,可以比较修改后的深度学习框架与原始的目标深度学习框架在相同异构加速器等硬件环境下的性能差异;其中,对修改后的深度学习框架进行性能评估的方式可以是,使用标准的深度学习基准数据库(例如,ImageNet)和常见的评估指标(例如,准确率、训练时间、推理时间等)来进行评估,通过对比不同的评估数据,可以评估修改后的深度学习框架在异构加速器上的性能。
对修改后的深度学习框架进行功能验证,能够确保修改后的深度学习框架在各种深度学习任务(例如,图像分类、目标检测、语音识别等)中能够正常工作;其中,对修改后的深度学习框架进行功能验证的方式可以是,使用预设的标准的测试数据集和测试用例,对修改后的深度学习框架进行测试,验证修改后的深度学习框架是否能够正确地处理输入数据、生成正确地输出结果,并且在各种场景下是否具有稳定的性能。
对修改后的深度学习框架进行兼容性测试,能够确保修改后的深度学习框架能够与常见的深度学习模型进行集成;其中,对修改后的深度学习框架进行兼容性测试的方式可以是,可以使用一些常见的深度学习模型(例如,ResNet、YOLO系列等)对修改后的深度学习框架进行测试,并验证修改后的深度学习框架能够正确地加载和运行这些模型。
对修改后的深度学习框架进行鲁棒性测试,能够确证修改后的深度学习框架在各种异常情况下的表现;其中,对修改后的深度学习框架进行鲁棒性测试的方式可以是,可以模拟一些常见的异常情况,例如,输入数据的缺失、噪声干扰和模型参数的错误等,检测修改后的深度学习框架能够正确处理这些异常情况,是否具有良好的鲁棒性和容错性。
需要说明的是,对修改后的深度学习框架的评估验证的方式可以根据具体的需求和应用场景进行确定,并结合实际的测试数据和测试用例进行。可选地,还可以考虑修改后的深度学习框架测试的可重复性和可扩展性,以便修改后的深度学习框架能够在不同环境和配置下进行重复性测试和扩展验证。
S204,若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。
基于上述对修改后的深度学习框架的评估验证,若修改后的深度学习框架的评估验证通过,则可以确定修改后的深度学习框架的性能验证通过,可以将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。
若上述对修改后的深度学习框架的评估验证包括多种验证方式,则修改后的深度学习框架评估验证通过的条件可以是对修改后的深度学习框架的多种验证方式均验证通过。
本申请实施例中,首先获取异构加速器的运行信息和运行需求;其中,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改,然后对修改后的深度学习框架进行评估验证;若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。本申请实施例中,由于运行信息和运行需求均是异构加速器执行目标深度学习框架的计算任务时的信息,因此,根据运行信息和运行需求对目标深度学习框架的源代码和三方库进行修改,相当于在将目标深度学习框架与异构加速器适配的过程中,考虑了目标深度学习框架在异构加速器执行时异构加速器与目标深度学习框架之间的运行信息和运行需求,从而提高了目标深度学习框架与异构加速器之间的兼容性,保证了目标深度学习框架在异构加速器上的稳定运行;并且,对修改后的深度学习框架进行评估验证,进一步保证了修改后的深度学习框架的正确性和可靠性。
其中,运行信息包括运行时接口信息和异构加速器使用数学库时依赖库文件;则在一个示例性的实施例中,根据运行信息对目标深度学习框架的源代码进行修改,包括:根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改;以及根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。
其中,运行时接口信息可以是异构加速器执行目标深度学习框架的计算任务时所需要调用的接口;因此,在将目标深度学习框架与异构加速器进行适配时,可以根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改。
可选地,根据运行时接口信息中的接口,确定目标深度学习框架的源代码中对应的接口,其中,运行时接口信息中的接口与目标深度学习框架的源代码中对应的接口一致;根据运行时接口信息中的接口的功能和参数,确定接口的修改方式,然后根据修改方式对目标深度学习框架的源代码中对应的接口代码进行修改。其中,接口的修改方式可以包括接口调用方式、数据传输方式、计算逻辑和算法等。
其中,异构加速器使用数学库时依赖库文件可以是目标深度学习框架在异构加速器上执行各种计算任务时所使用到各种数据库的相关依赖;因此,在将目标深度学习框架与异构加速器进行适配时,可以根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。
可选地,首先,先获取库文件之间的依赖关系,即数学库文件依赖的所有库文件;然后获取异构加速器使用数学库时依赖库文件的路径,根据异构加速器使用数学库时依赖库文件的路径,对目标深度学习框架的源代码中对应的库文件的路径进行修改。
其中,对目标深度学习框架的源代码中对应的库文件路径进行修改的方式可以包括:修改库文件的搜索路径:在源代码中找到加载数学库文件的部分,修改对应的库文件搜索路径;通常可以通过修改环境变量、配置文件或代码中的路径字符串来实现。
可选地,也可以根据异构加速器的特性,进行目标深度学习框架的核函数(kernel)等功能的修改。
本申请实施例中,根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改;以及根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。这样,相当于是提前对目标深度学习框架与异构加速器适配的接口代码和库文件路径进行修改,使得在目标深度学习框架在后续编译、运行时能够找到对应的文件,提高了目标深度学习框架与异构加速器之间的兼容性。
运行需求包括执行方式;在一个示例性的实施例中,如图3所示,根据运行需求对目标深度学习框架的三方库代码进行修改,包括以下步骤:
S301,根据三方库代码的存储位置,获取目标深度学习框架的三方库代码。
其中,执行方式可以是异构加速器底层执行的方式,例如,执行方式可以是以统一计算设备架构(Compute Unified Device Architecture,CUDA)开发平台方式执行或开源运算平台(Radeon Open Compute,ROCm)开发平台方式执行。
三方库代码的存储位置可以从目标深度学习框架的源代码中获取,然后直接根据三方库代码的存储位置,获取目标深度学习框架的三方库代码。
可选地,获取部分三方库可能需要外网,这时可以先把一些三库包拉到本地或自己搭建的git服务器,然后可以修改目标深度学习框架的代码中的三方库获取位置,以实现后续三方库的正确下载和编译。
S302,基于异构加速器的执行方式,获取异构加速器的指令集代码,并根据指令集代码对三方库代码进行修改。
可以基于执行方式与指令集代码之间的对应关系,确定异构加速器的指令集代码;具体地,将对应关系中异构加速器执行目标深度学习框架的计算任务时的执行方式对应的指令集代码,确定为异构加速器的指令集代码,然后根据指令集代码对三方库代码进行修改。
其中,对三方库代码进行修改的方式可以是,将指令集代码添加到三方库代码中,或者,将该指令集代码对三方库中原本的异构加速器的指令集代码进行替换。
例如,若三方库文件为llvm库文件,则可以在llvm库文件中添加异构加速器对应的相关指令集代码,使得目标深度学习框架的程序能够正确、稳定的运行在相应的异构加速器上。
本申请实施例中,根据三方库代码的存储位置,获取目标深度学习框架的三方库代码,并基于异构加速器的执行方式,获取异构加速器的指令集代码,并根据指令集代码对三方库代码进行修改。通过对三方库进行修改可以适配异构加速器的指令集,解决代码在异构加速器上的可用性问题;同时,修改目标深度学习框架的三方库代码还可以提高代码在异构加速器上的执行效率。
在一个示例性的实施例中,如图4所示,对修改后的深度学习框架进行评估验证,包括以下步骤:
S401,对修改后的深度学习框架进行编译。
其中,编译能够提高执行效率,并可以检测代码中的语法错误、类型错误和一些常见的逻辑错误等,因此,可以对修改后的深度学习框架进行编译。
在一个示例性的实施例中,如图5所示,对修改后的深度学习框架进行编译,包括以下步骤:
S501,根据目标深度学习框架的配置版本,确定修改后的深度学习框架的编译环境。
在对修改后的深度学习框架进行编译之前,需要先配置相关编译环境。
其中,可以从深度学习框架版本与编译环境的对应关系中,获取目标深度学习框架的配置版本对应的编译环境,然后将目标深度学习框架的配置版本对应的编译环境确定为修改后的深度学习框架的编译环境。
一种实施例中,以目标深度学习框架为TensorFlow为例,可以根据TensorFlow配置版本和python版本确定相应的python包类型,然后进行相应python包的安装。
S502,根据编译环境和预设的编译命令,对修改后的深度学习框架进行编译。
其中,编译命令用于对修改后的深度学习框架进行编译,可选地,在配置好上述编译环境后,根据预设的编译命令对修改后的深度学习框架进行编译。
可以根据预设的编译命令,通过编译工具对修改后的深度学习框架进行编译;例如,编译工具可以是Bazel、CMake等;在编译工具为Bazel的情况下,编译命令可以是bazelbuild编译命令。
可选地,可以在CUDA开发平台、ROCm开发平台或自定义的软件平台对修改后的深度学***台。
可选地,对修改后的深度学习框架进行编译,其实质是对修改后的深度学习框架的源代码进行编译,可以将修改后的源代码编译成可执行文件或库文件。
S503,若编译失败,则根据编译失败生成的日志报错信息,对修改后的深度学习框架进行调整,直至修改后的深度学习框架编译通过。
在对修改后的深度学习框架编译完成后,可以输出编译结果,其中,编译结果可以包括编译成功和编译失败。
若编译失败,则对应可以输出日志报错信息,因此,可以根据编译失败的日志报错信息定位编译失败的原因,然后对修改后的深度学习框架进行调整,然后对修改后的深度学习框架(调整后的深度学习框架)的源代码重新进行编译,直至修改后的深度学习框架编译成功,否则继续根据编译失败生成的日志报错信息重新对修改后的深度学习框架进行调整。
可选地,对修改后的深度学习框架进行调整的方式包括:对修改后的深度学习框架的源代码进行修改、对三方库代码进行修改或对编译环境进行修改。
本申请实施例中,根据目标深度学习框架的配置版本,确定修改后的深度学习框架的编译环境,并根据编译环境和预设的编译命令,对修改后的深度学习框架进行编译;若编译失败,则根据编译失败生成的日志报错信息,对修改后的深度学习框架进行调整,直至修改后的深度学习框架编译通过。通过对修改后的目标深度学习框架进行编译,在编译失败时对修改后的深度学习框架进行调整,能够确保目标深度学习框架的准确性和有效性,从而提高了目标深度学习框架与异构加速器适配的准确性和效率。
S402,若编译通过,则对修改后的深度学习框架的代码进行单元测试。
单元测试是确保代码质量和功能正确的重要步骤,因此,在修改后的深度学习框架编译通过的情况下,可以对修改后的深度学习框架的代码进行单元测试。
对修改后的深度学习框架的代码进行单元测试的方式可以是,将修改后的深度学习框架的代码划分为多个小的测试单元;其中,每个测试单元可以测试一个特定的功能或行为;获取每个测试单元的测试用例,然后根据预设的单元测试框架运行各测试用例对每个测试单元进行测试,确定每个测试用例的测试结果。若某个测试用例测试不通过,则表示该测试用例对应的测试单元不通过,确定修改后的深度学习框架的代码单元测试不通过;若各测试用例均测试通过,则确定修改后的深度学习框架的代码单元测试通过。
其中,获取每个测试单元的测试用例的方式可以是,根据每个测试单元的功能,为每个测试单元编写测试用例;也可以是根据测试用例的功能,直接从数据库中获取每个测试单元的功能对应的测试用例;测试用例可以包括输入数据、期望输出和断言语句等,其中,测试用例可以覆盖尽可能多的代码路径和边界情况。
S403,若单元测试通过,则继续对修改后的深度学习框架的代码进行基准测试。
基准测试可以评估修改后的深度学习框架的性能和效率,因此,在修改后的深度学习框架的代码单元测试通过的情况下,可以对修改后的深度学习框架的代码进行基准测试。
对修改后的深度学习框架进行基准测试的方式可以是,获取修改后的深度学习框架的基准测试任务和基准测试数据集;其中,基准测试任务可以是根据应用领域和使用场景确定的,基准测试数据集中包括多种样本和场景;根据基准测试任务和基准测试数据集,确定多种基准测试实验;其中,基准测试实验包括训练和推理等;根据修改后的深度学习框架和配置环境,运行基准测试实验,得到基准测试实验结果。
可选地,基准测试结果可以包括修改后的深度学习框架的代码基准测试通过和修改后的深度学习框架的代码基准测试未通过。
其中,在基准测试未通过的情况下,可以对修改后的深度学习框架进行调整,重新对修改后的深度学习框架进行编译、单元测试和基准测试,直至修改后的深度学习框架的编译、单元测试和基准测试均通过。对修改后的深度学习框架进行调整的方式包括:对修改后的深度学习框架的源代码进行修改、对三方库代码进行修改或对编译环境进行修改。
S404,若基准测试通过,则确定修改后的深度学习框架的评估验证通过。
在修改后的深度学习框架的代码基准测试通过的情况下,表示修改后的深度学习框架的编译、单元测试和基准测试均通过,则确定修改后的深度学习框架的评估验证通过;其中,修改后的深度学习框架的评估验证包括编译、单元测试和基准测试。
本申请实施例中,对修改后的深度学习框架进行编译,若编译通过,则对修改后的深度学习框架的代码进行单元测试,若单元测试通过,则继续对修改后的深度学习框架的代码进行基准测试,若基准测试通过,则确定修改后的深度学习框架的评估验证通过。由于单元测试能够验证修改后的深度学习框架在各个单元的功能是否正常,基准测试可以评估修改后的深度学习框架在性能方面的可靠性,因此,在修改后的深度学习框架在编译通过的情况下,对修改后的深度学习框架的代码进行单元测试和基准测试,进一步提高了修改后的深度学习框架的准确性和可靠性;并且,只有在编译通过的情况下,进行单元测试,在单元测试通过的情况下,进行基准测试,保证了在正确的代码中进行测试,提高了对修改后的深度学习框架进行评估验证的可靠性。
下面通过一个实施例对如何对修改后的深度学习框架的代码进行单元测试进行详细说明,在一个示例性的实施例中,如图6所示,对修改后的深度学习框架的代码进行单元测试,包括以下步骤:
S601,分别对修改后的深度学习框架进行基于至少一种类型的单元测试。
其中,单元测试是包括大量测试用例的功能验证性测试;单元测试的类型可以包括基于C++编程语言的单元测试(ctest)和基于python编程语言的单元测试(pytest),因此,可以对修改后的深度学习框架进行基于ctest和pytest等两种类型的单元测试。
可以根据预设的单元测试指令分别执行至少一种类型的单元测试,得到各类型的单元测试的单元测试结果;单元测试结果可以包括通过(PASSED)、失败(FAILED、超时(TIMEOUT)和不稳定(FLAKY)等多个状态的测试结果;其中,超时测试结果可以包括超时多长时间,不稳定测试结果可以包括有几个测试失败的测试用例。
可选地,单元测试指令可以在统一计算设备架构(Compute Unified DeviceArchitecture,CUDA)开发平台、开源运算平台(Radeon Open Compute,ROCm)或自定义的软件平台对修改后的深度学***台。
S602,若基于各类型的单元测试的测试结果均达到测试标准范围,则确定修改后的深度学习框架的代码单元测试通过。
其中,测试标准范围可以是预先设定的评估单元测试的测试结果是否通过的标准。
例如,测试结果包括通过、失败、超时和不稳定等,若测试结果为“通过”,测试标准范围包括测试结果为通过;因此,若各类型的单元测试的测试结果均为“通过”,则确定修改后的深度学习框架的代码单元测试通过,否则,则确定修改后的深度学习框架的代码单元测试不通过。
S603,若基于各类型的单元测试的测试结果中存在未达到测试标准范围的,则根据测试结果获取测试失败用例及对应的报错信息,并基于测试失败用例对应的报酬信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。
若单元测试的测试结果不为通过,则确定对应的单元测试的测试结果未达到测试标准范围,则可以获取测试结果不为通过的测试用例(测试失败用例)及对应的报错信息,并基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。
基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整的方式可以是,根据报错信息对测试失败用例代码进行分析,确定该测试失败用例单元测试失败的原因,根据测试失败原因,对修改后的深度学习框架进行调整。
其中,对修改后的深度学习框架进行调整的方式包括:对修改后的深度学习框架的源代码进行修改、对三方库代码进行修改或对编译环境进行修改。
对修改后的深度学习框架进行调整之后,再对修改后的深度学习框架依次进行编译;在编译通过的情况下,对修改后的深度学习框架进行基于ctest和pytest的单元测试,直至单元测试的测试结果均达到测试标准范围;否则,继续根据报错信息对修改后的深度学习框架进行调整。
本申请实施例中,分别对修改后的深度学习框架进行基于至少一种类型的单元测试,若基于各类型的的单元测试的测试结果均达到测试标准范围,确定修改后的深度学习框架的代码单元测试通过;若基于各类型的的单元测试的测试结果中存在未达到测试标准范围的,则根据测试结果获取测试失败用例及对应的报错信息,并基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。为单元测试的测试结果设置测试标准范围,只有在单元测试的测试结果达到测试标准范围,才会确定对应的单元测试通过,并且,对修改后的深度学习框架进行基于至少一种类型的单元测试,提高了对修改后的深度学习框架单元测试的全面性,使得修改后的深度学习框架的测试结果更为准确;并在单元测试的测试结果未达到测试标准范围的,根据对应的测试失败用例对应的报错信息对修改后的深度学习框架进行调整,从而提高了修改后的深度学习框架调整的准确性和效率。
下面通过一个实施例对如何对修改后的深度学习框架的代码进行基准测试进行详细说明。在一个示例性的实施例中,如图7所示,对修改后的深度学习框架的代码进行基准测试,包括以下步骤:
S701,根据预设的二进制打包命令,对修改后的深度学习框架的代码进行打包处理,生成二进制文件。
在修改后的深度学习框架的编译通过,且基于各类型的的单元测试的测试结果均达到测试标准范围的情况下,对修改后的深度学习框架执行二进制打包命令,以对修改后的深度学习框架进行打包处理,得到二进制文件。其中,二进制打包命令可以是build_pip_package,二进制文件即为whl包。
可选地,执行build_pip_package的whl包打包执行命令,进行修改后的深度学习框架的whl包打包。
需要说明的是,如果需要修改二进制文件的名称,可以在二进制文件中修改二进制文件的打包名称。
同时,也可以对修改后的深度学***台、开源运算平台(Radeon Open Compute,ROCm)或自定义的软件平台对修改后的深度学***台。
S702,基于二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型。
其中,预置的数据集可以是ImageNet或者CoCo数据集,网络模型可以是ResNet50、VggNet和InceptionNet等网络模型。
可选地,通过预置的数据集进行网络模型的训练的方式可以是,基于二进制文件,通过数据集进行网络模型的训练的90次迭代周期的长时间挂载运行,得到深度学习模型。
S703,对深度学习模型进行多种类型的性能测试。
对上述训练得到的深度学习模型进行多种类型的性能测试,其中,性能测试可以包括性能基准测试、准确性测试、内存使用测试、稳定性测试、单进程单卡测试、单进程多卡测试和多进程多卡测试等多种类型。
其中,各性能测试的测试结果可以与多种异构加速器公开的数据或自己在相关异构加速器上运行得到的性能测试结果进行对比,然后基于对比结果确定深度学习模型的性能测试是否通过。
可选地,可以将对深度学习模型进行各性能测试的测试结果,分别与各性能测试的标准测试结果进行对比,针对任一种性能测试,若深度学习模型的性能测试的测试结果与对应的标准测试结果相同,则确定深度学习模型的性能测试通过;若深度学习模型的性能测试的测试结果与对应的标准测试结果不一致,则确定深度学习模型的性能测试未通过;基于此,可以确定深度学习模型的各性能测试的测试结果。
S704,若深度学习模型的各性能测试均通过,则确定修改后的深度学习框架基准测试通过。
若深度学习模型的各性能测试均通过,则表示深度学习模型的性能较好,确定修改后的深度学习框架基准测试通过。
若深度学习模型的各性能测试存在未通过的,则可以根据未通过的性能测试以及对应的测试出现的错误,对修改后的深度学习框架进行调整。
具体地,可以通过对修改后的深度学习框架的源代码进行编译和调试,以对修改后的深度学习框架进行调整;其中,对修改后的深度学习框架进行调整的方式包括:对修改后的深度学习框架的源代码进行修改、对三方库代码进行修改或对编译环境进行修改。
对修改后的深度学***台、开源运算平台(Radeon OpenCompute,ROCm)或自定义的软件平台上执行;可以根据实际需求确定对修改后的深度学***台。
通过修改后的深度学习框架的源代码可以进行性能测试的问题的定位、调试与解决,然后再进行多种性能测试,直至各性能测试均通过,否则需要不断的定位报错原因,对修改后的深度学习框架进行调整。
本申请实施例中,根据预设的二进制打包命令,对修改后的深度学习框架的代码进行打包处理,生成二进制文件,并基于二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型,然后对深度学习模型进行多种类型的性能测试,若深度学习模型的各性能测试均通过,则确定修改后的深度学习框架基准测试通过。通过对修改后的深度学习框架以预置的数据集进行网络模型的训练,并对训练得到的深度学习模型进行性能测试,进一步使得修改后的深度学习框架在适配异构加速器的同时,修改后的深度学习框架也具有较高的准确性。
在一个示例性的实施例中,本申请实施例还提供了一种深度学习框架适配方法,以目标深度学习框架为TensorFlow为例,如图8所示,该实施例包括以下步骤:
S801,根据执行TensorFlow中能够用到的异构加速器中的运行时接口和各种数据库相关依赖,修改TensorFlow中的程序之间的API接口和依赖项的路径。
S802,根据异构加速器的需求,对三方库代码进行修改。
其中,对三方库代码进行修改的方式可以是对三方库代码的指令和优化进行修改;例如,三方库为llvm库文件,可以在llvm库文件中添加异构加速器的相关指令集代码。
S803,为修改后的TensorFlow配置编译环境。
其中,配置编译环境可以包括根据TensorFlow的配置版本和python的版本,安装对应版本的python包。
S804,对修改后的TensorFlow的源代码进行编译;若编译失败,执行步骤S805,若编译通过,则执行步骤S806。
其中,根据预设的编译命令,对修改后的TensorFlow的源代码进行编译,得到编译结果,编译结果包括编译通过或编译未通过。
S805,对修改后的TensorFlow的源代码、三方库或编译环境进行调整。
其中,若编译失败,则根据日志报错信息,定位失败原因,然后对源代码、三方库或编译环境进行调整,直至编译成功。
S806,对修改后的TensorFlow进行单元测试;若单元测试失败,则执行步骤S805,若单元测试通过,则执行步骤S807。
其中,若单元测试失败,则可以根据单元测试失败对应的测试失败用例,对修改后的TensorFlow的源代码、三方库或编译环境进行调整,然后再对修改后的TensorFlow进行编译、单元测试。
S807,根据预设的打包命令对源代码进行打包,得到whl包。
S808,对whl包进行基准测试;若基准测试通过,则执行步骤S809,若基准测试未通过,则执行步骤S805。
其中,进行基准测试的过程包括:基于whl包,通过数据集进行深度学习模型的训练,训练通过,则成功;若训练不通过,则可以通过修改后的TensorFlow的源代码进行调试,并对修改后的TensorFlow的源代码进行修改,然后对修改后的TensorFlow进行编译、单元测试和基准测试,直至基准测试通过。
S809,发布whl包。
其中,发布的whl包可以给该异构加速器的相关用户使用。
本申请实施例中,通过对TensorFlow框架在异构加速器上的适配、测试,可以使得TensorFlow框架的相关模型训练、测试和模型保存等功能准确稳定的运行在异构加速器上,也有助于推动人工智能技术的发展,推动异构加速器生态的建设,推动异构加速器的建设发展,有效提升异构加速器的核心竞争力,提高了芯片行业的发展实力。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的深度学习框架适配方法的深度学习框架适配装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个深度学习框架适配装置实施例中的具体限定可以参见上文中对于深度学习框架适配方法的限定,在此不再赘述。
在一个示例性的实施例中,如图9所示,提供了一种深度学习框架适配装置900,包括:获取模块901、修改模块902、评估模块903和确定模块904,其中:
获取模块901,用于获取异构加速器的运行信息和运行需求,运行信息和运行需求均表示异构加速器执行目标深度学习框架的计算任务时的信息;
修改模块902,用于根据运行信息对目标深度学习框架的源代码进行修改,并根据运行需求对目标深度学习框架的三方库代码进行修改;
评估模块903,用于对修改后的深度学习框架进行评估验证;
确定模块904,用于若修改后的深度学习框架评估验证通过,则将修改后的深度学习框架确定为与异构加速器适配的深度学习框架。
在一个实施例中,运行信息包括运行时接口信息和异构加速器使用数学库时依赖库文件;修改模块902包括:
第一修改单元,用于根据运行时接口信息,对目标深度学习框架的源代码中对应的接口代码进行修改;以及根据异构加速器使用数学库时依赖库文件,对目标深度学习框架的源代码中对应的库文件路径进行修改。
在其中一个实施例中,运行需求包括执行方式;修改模块902包括:
获取单元,用于根据三方库代码的存储位置,获取目标深度学习框架的三方库代码;
第二修改单元,用于基于异构加速器的执行方式,获取异构加速器的指令集代码,并根据指令集代码对三方库代码进行修改。
在一个实施例中,评估模块903包括:
编译单元,用于对修改后的深度学习框架进行编译;
第一测试单元,用于若编译通过,则对修改后的深度学习框架的代码进行单元测试;
第二测试单元,用于若单元测试通过,则继续对修改后的深度学习框架的代码进行基准测试;
评估单元,用于若基准测试通过,则确定修改后的深度学习框架的评估验证通过。
在一个实施例中,编译单元包括:
第一确定子单元,用于根据目标深度学习框架的配置版本,确定修改后的深度学习框架的编译环境;
编译子单元,用于根据编译环境和预设的编译命令,对修改后的深度学习框架进行编译;
第一调整子单元,用于若编译失败,则根据编译失败生成的日志报错信息,对修改后的深度学习框架进行调整,直至修改后的深度学习框架编译通过。
在一个实施例中,第一测试单元包括:
第一测试子单元,用于分别对修改后的深度学习框架进行基于至少一种类型的单元测试;
第二确定子单元,用于若基于各类型的单元测试的测试结果均达到测试标准范围,则确定修改后的深度学习框架的代码单元测试通过;
第二调整子单元,用于若基于各类型的单元测试的测试结果中存在未达到测试标准范围的,则根据测试结果获取测试失败用例及对应的报错信息,并基于测试失败用例对应的报错信息对修改后的深度学习框架进行调整,直至各类型的单元测试的测试结果均达到测试标准范围。
在一个实施例中,第二测试单元包括:
生成子单元,用于根据预设的二进制打包命令,对修改后的深度学习框架的代码进行打包处理,生成二进制文件;
训练子单元,用于基于二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型;
第二测试子单元,用于对深度学习模型进行多种类型的性能测试;
第三确定子单元,用于若深度学习模型的各性能测试均通过,则确定修改后的深度学习框架基准测试通过。
上述深度学习框架适配装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
本实施例中处理器实现的各步骤,其实现原理和技术效果与上述深度学习框架适配方法的原理类似,在此不再赘述。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本实施例中计算机程序被处理器执行时实现的各步骤,其实现原理和技术效果与上述深度学习框架适配方法的原理类似,在此不再赘述。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本实施例中计算机程序被处理器执行时实现的各步骤,其实现原理和技术效果与上述深度学习框架适配方法的原理类似,在此不再赘述。
需要说明的是,本申请所涉及的数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种深度学习框架适配方法,其特征在于,所述方法包括:
获取异构加速器的运行信息和运行需求,所述运行信息和所述运行需求均表示所述异构加速器执行目标深度学习框架的计算任务时的信息;
根据所述运行信息对所述目标深度学习框架的源代码进行修改,并根据所述运行需求对所述目标深度学习框架的三方库代码进行修改;
对修改后的深度学习框架进行评估验证;
若所述修改后的深度学习框架评估验证通过,则将所述修改后的深度学习框架确定为与所述异构加速器适配的深度学习框架。
2.根据权利要求1所述的方法,其特征在于,所述运行信息包括运行时接口信息和所述异构加速器使用数学库时依赖库文件;所述根据所述运行信息对所述目标深度学习框架的源代码进行修改,包括:
根据所述运行时接口信息,对所述目标深度学习框架的源代码中对应的接口代码进行修改;以及根据所述异构加速器使用数学库时依赖库文件,对所述目标深度学习框架的源代码中对应的库文件路径进行修改。
3.根据权利要求1或2所述的方法,其特征在于,所述运行需求包括执行方式;所述根据所述运行需求对所述目标深度学习框架的三方库代码进行修改,包括:
根据所述三方库代码的存储位置,获取所述目标深度学习框架的三方库代码;
基于所述异构加速器的执行方式,获取所述异构加速器的指令集代码,并根据所述指令集代码对所述三方库代码进行修改。
4.根据权利要求1或2所述的方法,其特征在于,所述对修改后的深度学习框架进行评估验证,包括:
对所述修改后的深度学习框架进行编译;
若编译通过,则对所述修改后的深度学习框架的代码进行单元测试;
若所述单元测试通过,则继续对所述修改后的深度学习框架的代码进行基准测试;
若所述基准测试通过,则确定所述修改后的深度学习框架的评估验证通过。
5.根据权利要求4所述的方法,其特征在于,所述对所述修改后的深度学习框架进行编译,包括:
根据所述目标深度学习框架的配置版本,确定所述修改后的深度学习框架的编译环境;
根据所述编译环境和预设的编译命令,对所述修改后的深度学习框架进行编译;
若编译失败,则根据编译失败生成的日志报错信息,对所述修改后的深度学习框架进行调整,直至所述修改后的深度学习框架编译通过。
6.根据权利要求4所述的方法,其特征在于,所述对所述修改后的深度学习框架的代码进行单元测试,包括:
分别对所述修改后的深度学习框架进行至少一种类型的单元测试;
若基于各所述类型的单元测试的测试结果均达到测试标准范围,则确定所述修改后的深度学习框架的代码单元测试通过;
若基于各所述类型的单元测试的测试结果中存在未达到所述测试标准范围的,则根据所述测试结果获取测试失败用例及对应的报错信息,并基于所述测试失败用例对应的报错信息对所述修改后的深度学习框架进行调整,直至各所述类型的单元测试的测试结果均达到测试标准范围。
7.根据权利要求4所述的方法,其特征在于,所述对所述修改后的深度学习框架的代码进行基准测试,包括:
根据预设的二进制打包命令,对所述修改后的深度学习框架的代码进行打包处理,生成二进制文件;
基于所述二进制文件,通过预置的数据集进行网络模型的训练,得到深度学习模型;
对所述深度学习模型进行多种类型的性能测试;
若所述深度学习模型的各所述性能测试均通过,则确定所述修改后的深度学习框架基准测试通过。
8.一种深度学习框架适配装置,其特征在于,所述装置包括:
获取模块,用于获取异构加速器的运行信息和运行需求,所述运行信息和所述运行需求均表示所述异构加速器执行目标深度学习框架的计算任务时的信息;
修改模块,用于根据所述运行信息对所述目标深度学习框架的源代码进行修改,并根据所述运行需求对所述目标深度学习框架的三方库代码进行修改;
评估模块,用于对修改后的深度学习框架进行评估验证;
确定模块,用于若所述修改后的深度学习框架评估验证通过,则将所述修改后的深度学习框架确定为与所述异构加速器适配的深度学习框架。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311244999.XA CN117273171A (zh) | 2023-09-25 | 2023-09-25 | 深度学习框架适配方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311244999.XA CN117273171A (zh) | 2023-09-25 | 2023-09-25 | 深度学习框架适配方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117273171A true CN117273171A (zh) | 2023-12-22 |
Family
ID=89215572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311244999.XA Pending CN117273171A (zh) | 2023-09-25 | 2023-09-25 | 深度学习框架适配方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117273171A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827523A (zh) * | 2024-03-05 | 2024-04-05 | 北京壁仞科技开发有限公司 | 一种模型的异常处理方法、装置、电子设备及存储介质 |
-
2023
- 2023-09-25 CN CN202311244999.XA patent/CN117273171A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827523A (zh) * | 2024-03-05 | 2024-04-05 | 北京壁仞科技开发有限公司 | 一种模型的异常处理方法、装置、电子设备及存储介质 |
CN117827523B (zh) * | 2024-03-05 | 2024-05-14 | 北京壁仞科技开发有限公司 | 一种模型的异常处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Li et al. | Tensorfi: A configurable fault injector for tensorflow applications | |
US9208057B2 (en) | Efficient model checking technique for finding software defects | |
US6697961B1 (en) | Method and system for describing predicates in disjuncts in procedures for test coverage estimation | |
US7882495B2 (en) | Bounded program failure analysis and correction | |
US9767005B2 (en) | Metaphor based language fuzzing of computer code | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
CN111581036B (zh) | 一种物联网故障检测方法、检测***、存储介质 | |
Jacob | Implementation of randomized test pattern generation strategy | |
CN117273171A (zh) | 深度学习框架适配方法、装置、计算机设备和存储介质 | |
Chowdhury et al. | CyFuzz: A differential testing framework for cyber-physical systems development environments | |
US7908596B2 (en) | Automatic inspection of compiled code | |
Akpinar et al. | Web application testing with model based testing method: case study | |
US8479169B1 (en) | Code analysis via ranged values | |
US20210141709A1 (en) | Automatic software behavior identification using execution record | |
WO2023207973A1 (zh) | 编译器测试方法、用例生成方法、装置及指令存储结构 | |
US8291383B1 (en) | Code analysis via dual branch exploration | |
Raiyat Aliabadi et al. | FIDL: A fault injection description language for compiler-based SFI tools | |
CN116893960A (zh) | 代码质量检测方法、装置、计算机设备和存储介质 | |
US20140289712A1 (en) | Effective Lifetime Dependency Analysis and Typestate Analysis | |
Ratiu et al. | An integrated environment for Spin-based C code checking: Towards bringing model-driven code checking closer to practitioners | |
de Barros et al. | Learning to program using hierarchical model-based debugging | |
Gräfe et al. | Large-scale application of fault injection into pytorch models-an extension to pytorchfi for validation efficiency | |
Dupriez et al. | Analysis and exploration for new generation debuggers | |
Eriksson | Formal requirement models for automotive embedded systems | |
Ding et al. | Efficient model-level reliability analysis of simulink models |
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 |