CN112529206A - 一种模型运行方法和系统 - Google Patents

一种模型运行方法和系统 Download PDF

Info

Publication number
CN112529206A
CN112529206A CN201911208567.7A CN201911208567A CN112529206A CN 112529206 A CN112529206 A CN 112529206A CN 201911208567 A CN201911208567 A CN 201911208567A CN 112529206 A CN112529206 A CN 112529206A
Authority
CN
China
Prior art keywords
graph
operator
code
mode
calculation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911208567.7A
Other languages
English (en)
Other versions
CN112529206B (zh
Inventor
孙贝磊
龚玥
杨康
于璠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to PCT/CN2020/099872 priority Critical patent/WO2021051958A1/zh
Publication of CN112529206A publication Critical patent/CN112529206A/zh
Application granted granted Critical
Publication of CN112529206B publication Critical patent/CN112529206B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种模型运行方法和系统,同时满足用户对模型的易用性和运行效率的双重需求。本申请实施例提供一种模型运行方法,方法包括:获取第一代码,第一代码用于描述一机器学习模型;当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,以及根据算子的计算图执行模型的前向计算;当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式;当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图;以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。

Description

一种模型运行方法和系统
本申请要求于2019年9月18日提交中国专利局、申请号为201910883770.8、发明名称为“一种模型运行方法和系统”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及机器学习技术领域,尤其涉及一种模型运行方法和系统。
背景技术
机器学习技术在人工智能场景中应用广泛,机器学习框架也被越来越多的开发者所使用,机器学习框架是机器学习模型(后续简称为模型)的运行平台,机器学习框架涵盖用于分类、回归、聚类、异常检测和数据准备的各种机器学习方法,机器学习框架可用于开发各种模型。例如,目前的机器学习框架有TensorFlow框架和PyTorch框架。随着机器学习技术的演进与普及,用户对于机器学习框架有更加具有挑战性的需求,首先,用户希望机器学习框架具有良好的易用性;其次,基于机器学习框架开发的模型的大小与复杂性在不断的增加,用户希望机器学习框架能够提供良好的运行效率。
目前的机器学习框架具有前端和后端。其中,机器学习框架的前端主要采用两种不同的编程方式:命令式编程与声明式编程。在命令式编程的过程中,用户可直接获取模型的运行结果,方便用户进行调试。在声明式编程的过程中,需要定义变量及其数学关系,还需要编写一系列指令,才可以得到变量的结果,用户无法直接获取模型的运行结果,用户无法使用该结果进行代码调试。
机器学习框架的后端主要采用静态图运行方式和动态图运行方式。其中,静态图运行方式依赖于声明式编程,静态图运行方式中只生成一次计算图,并对计算图进行优化,所以采用静态图运行方式的机器学习框架具有运行高效的特点。动态图运行方式依赖于命令式编程与记录操作(即tape)机制,动态图运行方式在多个迭代中会重复执行tape机制,所以采用动态图运行方式的机器学习框架的运行效率较低。
举例说明如下,PyTorch框架的前端采用命令式编程,PyTorch框架的后端采用动态图运行方式。由于PyTorch框架的后端采用动态图运行方式时依赖于tape机制来运行代码,而tape机制中无法采用算子融合等手段对模型的运行过程进行优化,降低了模型的训练效率。
又如,TensorFlow框架的前端采用声明式编程,TensorFlow框架的后端采用静态图模式。由于TensorFlow框架的前端采用声明式编程,模型运行的中间结果不可获取,不易于用户对代码进行调试。
目前,机器学习框架采用的是命令式编程与动态图模式的机制,或者采用的是声明式编程与静态图模式的机制,无论哪种机制都不能满足用户对模型的易用性和运行效率的双重需求。
发明内容
本申请实施例提供了一种模型运行方法和系统,同时满足用户对模型的易用性和运行效率的双重需求。
为解决上述技术问题,本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种模型运行方法,所述方法包括:获取第一代码,所述第一代码用于描述一机器学习模型;当处理所述第一代码的模式为动态图模式时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算;当所述模型的前向计算执行完成之后,将处理所述第一代码的模式从所述动态图模式切换至静态图模式;当处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;根据所述模型的计算图执行所述模型的前向计算,或根据所述模型的计算图执行所述模型的前向计算和反向计算;当处理所述第一代码的模式为静态图模式时,根据所述第一代码生成所述模型的计算图;以及根据所述模型的计算图执行所述模型的前向计算,或根据所述模型的计算图执行所述模型的前向计算和反向计算。
在本申请实施例中,处理第一代码的模式可以为动态图模式,或者静态图模式。当处理第一代码的模式为动态图模式时,生成了算子的计算图并执行前计算,由于使用的是算子的计算图,因此模型的前向计算过程的中间结果可以获取,方便用户调试。当模型完成前向计算后,将处理第一代码的模式从动态图模式切换至静态图模式,可以根据模型的计算图进行前向计算,或者根据模型的计算图进行前向计算和反向计算。当处理第一代码的模式为静态图模式时,可以根据模型的计算图进行前向计算,或者根据模型的计算图进行前向计算和反向计算。具体的,所述模型的计算图包括所述算子的计算图。由于静态图模式下生成的是模型的计算图,使用该模型的计算图可以完成模型的训练,所以采用静态图模式的具有运行高效的特点。本申请实施例中可以从动态图模式切换至静态图模式,同时满足用户对模型的易用性和运行效率的双重需求。
在一种可能的实现方式中,所述方法还包括:确定处理所述第一代码的模式。其中,在获取到第一代码之后,还可以确定处理第一代码的模式,当处理第一代码的模式为动态图模式时,生成了算子的计算图并执行前计算,由于使用的是算子的计算图,因此模型的前向计算过程的中间结果可以获取,方便用户调试。当模型完成前向计算后,将处理第一代码的模式从动态图模式切换至静态图模式,可以根据模型的计算图进行前向计算,或者根据模型的计算图进行前向计算和反向计算,由于静态图模式下生成的是模型的计算图,使用该模型的计算图可以完成模型的训练,所以采用静态图模式的具有运行高效的特点。本申请实施例中可以从动态图模式切换至静态图模式,同时满足用户对模型的易用性和运行效率的双重需求。
在一种可能的实现方式中,所述确定处理所述第一代码的模式,包括:在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若检测到用于调试所述第一代码的调试信号,确定处理所述第一代码的模式继续采用所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若检测到所述调试信号,确定处理所述第一代码的模式从所述静态图模式切换至所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式继续采用所述静态图模式。在该方案中,框架在获取到第一代码时,框架处理第一代码的模式可以为动态图模式,或者框架处理第一代码的模式可以为动静态图模式,框架在获取到第一代码时,框架还可以检测是否接收到调试信号。架对于外界的调试信号进行接收,并通过检验是否有调试信号判断用户是否处于调试过程中。若判断用户处于调试过程中,则框架采用动态图模式运行,否则切换至更加高效的静态图模式运行。本申请实施例中,动态图模式中采用命令式编程,对用户定义模型的代码进行逐行解析、计算,所以模型中间结果都可获取到。由于可以获取到模型的中间结果,用户可以迅速定义到缺陷的位置,方便调试。而静态图模式中,对用户定义模型的代码进行解析后生成整个模型的计算图,运行时没有层或单个变量的概念,所以中间结果不可获取,不方便调试。
在一种可能的实现方式中,所述确定处理所述第一代码的模式,包括:从第一代码中获取模式选择指令;根据所述模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。又如,用户需要快速完成模型训练,则用户可以向框架指示执行静态图模式,则框架检测到用户的指示之后,该框架可以选择静态图模式。又如,框架在分析第一代码时,框架没有检测到用户的指示,则框架可以按照该框架的默认配置来执行静态图模式或者执行动态图模式。
在一种可能的实现方式中,所述方法还包括:当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,触发执行如下步骤:根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算。其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行动态图模式。若用户需要执行模型的前向计算,则用户需要在为模型定义的第一代码中携带前向计算所需要的代码内容,则框架可以判断出需要执行模型的前向计算。
在一种可能的实现方式中,所述方法还包括:当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,触发执行如下步骤:根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算;当所述模型的前向计算执行完成之后,将处理所述第一代码的模式从所述动态图模式切换至静态图模式;当处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;根据所述模型的计算图执行所述模型的前向计算,或根据所述模型的计算图执行所述模型的前向计算和反向计算。其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行动态图模式。若用户需要执行模型的前向计算和反向计算,则用户需要在为模型定义的第一代码中携带前向计算和反向计算所需要的代码内容,则框架可以判断出需要执行模型的前向计算和反向计算。
在一种可能的实现方式中,所述根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,包括:对所述第一代码包括的至少一个运算符进行重载,以得到所述至少一个运算符对应的算子。其中,框架可以遍历模型中调用的运算符,对运算符重载以得到对应的算子,例如框架可以分析输入端输入的第一代码,遍历第一代码中调用的“运算符”,对“运算符”进行识别与分析以“得到运算符对应的算子”。本申请实施例中,通过运算符重载,可以从第一代码中确定出算子,再根据该算子的代码内容生成需要调用的算子的计算图,其中,运算符重载机制是指对于暴露给用户的统一的运算符采用函数重载,使其能够执行特定的操作。例如,具体可以由计算图生成模块来生成该算子的计算图。
在一种可能的实现方式中,所述方法,还包括:在所述算子为随机数相关的运算符对应的算子的情况下,根据所述算子的计算图生成随机数,并缓存所述随机数。其中,所述算子是与生成所述随机数相关的算子,框架执行动态图模式时,框架可以判断运算符对应的算子是否为随机数相关的运算符对应的算子,当框架确定算子为随机数相关的运算符对应的算子时,框架根据算子的计算图生成随机数,并缓存随机数。例如,框架识别出算子为随机数相关的算子的情况下,为随机数相关的算子运行结果开辟缓存空间,随机数相关的算子是指该算子中有涉及到生成随机数,从而在动态图模式运行前向计算后、切换至静态图模式运行时,可直接复用此处缓存的随机数进行计算,而不需要重新计算随机数,以保证框架在动态图模式和静态图模式采用相同的随机数,保证正确完成模型的训练,另外框架在动态图模式和静态图模式采用相同的随机数,也不需要重复生成随机数,节省计算资源,节省计算时间,提升模型的训练速度。
在一种可能的实现方式中,所述根据所述第一代码生成所述模型的计算图,包括:遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图。其中,框架遍历第一代码包括的至少一个运算符,框架采用源码分析的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树。当框架生成语法树之后,该框架根据语法树生成前向计算的计算图。其中,前向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图,前向计算的计算图可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算。
在一种可能的实现方式中,所述根据所述第一代码生成所述模型的计算图,包括:遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图。当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,最后由框架根据前向计算的计算图生成反向计算的计算图,例如框架中可以包括自动微分(auto-differentiation,AD)引擎,AD引擎是一种根据用户定义的函数的前向计算进行反向计算得到该函数导数的机制。其中,前向计算的计算图和反向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算和反向计算。
在一种可能的实现方式中,所述方法还包括:当所述模式选择指令指示所述静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图,所述前向计算的计算图包括一个或多个所述算子的计算图;根据所述模型的计算图执行所述模型的前向计算。在该方案中,当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,其中,前向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图,前向计算的计算图可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算。
在一种可能的实现方式中,所述方法还包括:当所述模式选择指令指示所述静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图,所述前向计算的计算图和所述反向计算的计算图分别包括一个或多个所述算子的计算图;根据所述模型的计算图执行所述模型的前向计算和反向计算。在该方案中,当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,最后由框架根据前向计算的计算图生成反向计算的计算图,例如框架中可以包括AD引擎,AD引擎是一种根据用户定义的函数的前向计算进行反向计算得到该函数导数的机制。其中,前向计算的计算图和反向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算和反向计算。
在一种可能的实现方式中,所述遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,包括:对所述第一代码包括的第一运算符进行分析,以确定所述第一运算符为支持的运算符,或者所述第一运算符为随机数相关的运算符,或者所述第一运算符为不支持的运算符,其中,所述第一运算符表示所述第一代码包括的至少一个运算符中的任意一个运算符;当所述第一运算符为支持的运算符时,确定具有所述第一运算符对应的第一算子的计算图;当所述第一运算符为随机数相关的运算符时,确定具有所述第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定所述第一运算符对应的第一算子能够复用所述随机数缓存地址中缓存的随机数;当所述第一运算符为不支持的运算符时,确定所述第一运算符是否对所述模型的前向计算或反向计算产生影响,若所述第一运算符对所述模型的前向计算和反向计算都不产生影响,确定忽略掉所述第一运算符。
在一种可能的实现方式中,模型运行方法可以由模型运行系统来执行,处理第一代码的模式可以是该模型运行系统执行的模式,例如处理第一代码的模式可以是动态图模式,则模型运行系统执行的模式可以是动态图模式。又如,处理第一代码的模式可以是静态图模式,则模型运行系统执行的模式可以是静态图模式。另外,本申请实施例中模型运行系统可以是一种框架,则处理第一代码的模式可以是框架执行的模式。对于处理第一代码的模式的详细说明,可参见后续实施例中对框架执行的模式的举例说明。
第二方面,本申请实施例还提供一种模型运行系统,所述模型运行系统包括:代码获取模块,用于获取第一代码,所述第一代码用于描述一机器学习模型;计算图生成模块,用于当处理所述代码获取模块获取到的所述第一代码的模式为动态图模式时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图;执行计算模块,用于根据所述计算图生成模块生成的所述算子的计算图执行所述模型的前向计算;模式切换模块,用于当所述执行计算模块完成所述模型的前向计算之后,将处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;所述计算图生成模块,还用于当所述模式切换模块将处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;所述执行计算模块,还用于根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算和反向计算;所述计算图生成模块,还用于当处理所述代码获取模块获取到的所述第一代码的模式为静态图模式时,根据所述第一代码生成所述模型的计算图;所述执行计算模块,用于根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算和反向计算。
在一种可能的实现方式中,模式确定模块,用于确定处理所述第一代码的模式。
在一种可能的实现方式中,所述模式确定模块,用于在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若检测到用于调试所述第一代码的调试信号,确定处理所述第一代码的模式继续采用所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若检测到所述调试信号,确定处理所述第一代码的模式从所述静态图模式切换至所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式继续采用所述静态图模式。在该方案中,框架还可以采用细粒度源码分析的方式,静态图模式下,对模型定义代码采用细粒度源码分析的方式,识别模型中调用的算子,分析模型结构,并且针对不同类型的代码片段采取不同的策略进行有效处理,从而可以运行高效,并且支持用户编程出的动态图风格的代码。
在一种可能的实现方式中,所述模式确定模块,用于从所述第一代码中获取模式选择指令;根据所述模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。
在一种可能的实现方式中,所述计算图生成模块,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
在一种可能的实现方式中,所述计算图生成模块,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
在一种可能的实现方式中,所述计算图生成模块,用于对所述第一代码包括的至少一个运算符进行重载,以得到所述至少一个运算符对应的算子;根据所述至少一个运算符对应的算子生成所述算子的计算图。
在一种可能的实现方式中,所述系统还包括:随机数缓存模块,用于在所述算子为随机数相关的运算符对应的算子的情况下,根据所述算子的计算图生成随机数,并缓存所述随机数。
在一种可能的实现方式中,所述计算图生成模块,还用于遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图。
在一种可能的实现方式中,所述计算图生成模块,还用于遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图。
在一种可能的实现方式中,所述计算图生成模块,还用于当所述模式选择指令指示静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图,所述前向计算的计算图包括一个或多个所述算子的计算图。
在一种可能的实现方式中,所述计算图生成模块,还用于当所述模式选择指令指示静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图,所述前向计算的计算图和所述反向计算的计算图分别包括一个或多个所述算子的计算图。
在一种可能的实现方式中,所述计算图生成模块,还用于对所述第一代码包括的第一运算符进行分析,以确定所述第一运算符为支持的运算符,或者所述第一运算符为随机数相关的运算符,或者所述第一运算符为不支持的运算符,其中,所述第一运算符表示所述第一代码包括的至少一个运算符中的任意一个运算符;所述第一运算符为支持的运算符,确定中具有所述第一运算符对应的第一算子的计算图;或者,所述第一运算符为随机数相关的运算符,确定中具有所述第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定所述第一运算符对应的第一算子能够复用所述随机数缓存地址中缓存的随机数;或者,所述第一运算符为不支持的运算符,确定所述第一运算符是否对所述模型的前向计算或反向计算产生影响,若所述第一运算符对所述模型的前向计算和反向计算都不产生影响,确定忽略掉所述第一运算符。
在本申请的第二方面中,模型运行系统的组成模块还可以执行前述第一方面以及各种可能的实现方式中所描述的步骤,详见前述对第一方面以及各种可能的实现方式中的说明。
第三方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。
第四方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。
第五方面,本申请实施例提供一种模型运行系统,该模型运行系统可以包括终端设备、服务器、或者芯片等实体,所述模型运行系统包括:处理器、存储器;所述存储器用于存储指令;所述处理器用于执行所述存储器中的所述指令,使得所述模型运行系统执行如前述第一方面或第二方面中任一项所述的方法。
第六方面,本申请提供了一种芯片系统,该芯片系统包括处理器,用于支持模型运行系统实现上述方面中所涉及的功能,例如,发送或处理上述方法中所涉及的数据和/或信息。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存模型运行系统必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。
附图说明
图1为本申请实施例提供的一种服务器结构示意图;
图2为本申请实施例提供的一种模型运行方法的流程方框示意图;
图3为本申请实施例提供的一种模型运行方法的流程方框示意图;
图4为本申请实施例提供的一种模型运行方法的流程方框示意图;
图5为本申请实施例提供的分布式训练系统的应用结构示意图;
图6a为本申请实施例提供的框架的一种组成结构示意图;
图6b为本申请实施例提供的框架的另一种组成结构示意图;
图7为本申请实施例提供的模型运行方法的实现流程示意图;
图8为本申请实施例提供的细粒度源码分析的流程示意图;
图9a为本申请实施例提供的框架中一种添加调试模式的检测流程示意图;
图9b为本申请实施例提供的框架中另一种添加调试模式的检测流程示意图;
图10a为本申请实施例提供的动态图模式下一种模型推理的运行流程示意图;
图10b为本申请实施例提供的动态图模式下一种模型训练的运行流程示意图;
图10c为本申请实施例提供的静态图模式下一种模型推理的运行流程示意图;
图10d为本申请实施例提供的静态图模式下一种模型训练的运行流程示意图;
图11a为本申请实施例提供的一种模型运行系统的组成结构示意图;
图11b为本申请实施例提供的另一种模型运行系统的组成结构示意图;
图11c为本申请实施例提供的另一种模型运行系统的组成结构示意图;
图12为本申请实施例提供的一种模型运行系统的组成结构示意图。
具体实施方式
本申请实施例提供了一种模型运行方法和系统,同时满足用户对模型的易用性和运行效率的双重需求。
下面结合附图,对本申请的实施例进行描述。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
本申请实施例的技术方案可以应用于模型运行系统,该模型运行系统可以应用于框架,后续实施例中以框架执行模型运行方法进行示例说明。例如该框架可以是机器学习框架。这框架可以是模型的运行平台,例如该框架的硬件结构可以是分布式部署,该框架可以部署在一个或多个服务器上,框架所包括的不同模块可以部署在不同的计算机节点上。例如该框架具体可以是一种服务器,如图1所示,是本申请实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
本申请实施例提供的框架可以是机器学习框架,该机器学习框架可用于开发各种模型,例如该模型可以是神经网络模型,或者深度神经网络模型等。为解决目前的框架不能满足用户对模型的易用性和运行效率的双重需求的问题,本申请实施例提出一种模型运行方法,适用于框架开发模型的场景中,请参阅图2所示,为本申请实施例提供的一种模型运行方法的流程方框示意图,该方法由框架执行,框架为模型的运行平台,本申请实施例提供的方法主要包括如下步骤:
201、获取第一代码,第一代码用于描述一机器学习模型。
在本申请实施例中,用户可以通过框架实现对模型的推理和模型的训练,用户首先将为模型定义的代码输入到框架中,例如框架具有一输入端,该输入端中可以由用户使用终端输入为模型定义的代码,本申请实施例中将用户为模型定义的代码称为“第一代码”,即第一代码特指用户为模型定义的代码。第一代码可用于描述一机器学习模型,该机器学习模型简称为“模型”。
本申请的第一些实施例中,用户模型定义的第一代码可以包括:模型的结构定义的代码和模型的训练逻辑定义的代码。即第一代码中包括有用户针对模型的结构定义的代码,该第一代码还包括有用户针对模型的训练逻辑定义的代码,对于第一代码所包括的代码内容可以根据具体场景来确定,此处不做限定。
在本申请实施例中,第一代码包括至少一个运算符。其中,用户可以将需要调用的运算符写入第一代码中,从而框架可以获取到第一代码中包括的运算符。本申请实施例中第一代码中包括的运算符个数不做限定,例如第一代码可以包括一个运算符,又如该第一代码还可以包括N个运算符,N为N大于或等于2的正整数。
举例说明如下,框架的输入端获取模型定义的第一代码,即框架可以获取到用户编程定义的模型。例如第一代码可以为c=a+b,其中,+用于表示运算符,a、b和c为变量,在第一代码中可以上述的一种或多种的运算符。
202、确定处理第一代码的模式。
在本申请实施例中,框架获取到第一代码之后,框架可以分析该第一代码,该框架选择执行多种模式中的某一种模式用于处理第一代码。例如框架可以从以下两种模式中选择一种模式作为处理第一代码的模式:静态图模式或者执行动态图模式。本申请实施例中框架可以支持静态图、动态图双模式机制,框架的输入端中得到第一代码之后,框架可以确定出应该执行两种模式中的哪一种模式,例如该第一代码中携带用户输入的指示,框架按照用户的指示选择执行静态图模式或者选择执行动态图模式。举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。又如,用户需要快速完成模型训练,则用户可以向框架指示执行静态图模式,则框架检测到用户的指示之后,该框架可以选择静态图模式。又如,框架在分析第一代码时,框架没有检测到用户的指示,则框架可以按照该框架的默认配置来执行静态图模式或者执行动态图模式。
在本申请实施例中,框架可以支持静态图、动态图双模式机制,若处理第一代码的模式为动态图模式,触发执行后续步骤203。
可以理解的是,在步骤201获取到第一代码之后,可以直接触发步骤203执行,也可以在步骤203之前先执行步骤202,此处不做限定。
203、当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后框架根据算子的计算图执行模型的前向计算。
在本申请实施例中,当处理第一代码的模式为动态图模式时,框架可以从第一代码中获取到至少一个运算符,针对每个运算符确定该运算符对应的算子,其中,算子是一个运算操作的单元。框架为每个算子生成该算子的计算图,其中,算子的计算图也可以简称为算子计算图,算子的计算图是一个运算操作单元的计算图,计算图是一种表达数学表达式的方式,计算图中节点对应于数学计算,节点间连边对应于计算节点间的依赖关系,例如两个节点有连边的话,那么两个节点之间存在依赖关系。
需要说明的是,本申请实施例中,计算图可以分为多种类型,例如该计算图具体可以是前述的算子的计算图,又如,计算图具体可以是模型的计算图,由于第一代码描述了机器学习模型,因此通过该第一代码可以生成模型的计算图,本申请实施例中模型的计算图可以简称为“模型计算图”,即针对模型而生成的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算、反向计算由多个运算操作组成,模型的计算图可以包括前向计算的计算图,或者模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。因此模型的计算图可以包括所述算子的计算图。通过后续说明可知,由于静态图模式下生成的是模型的计算图,使用该模型的计算图可以完成模型的训练,所以采用静态图模式的具有运行高效的特点。本申请实施例中可以从动态图模式切换至静态图模式,同时满足用户对模型的易用性和运行效率的双重需求。
在本申请实施例中,框架根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,例如框架针对每个运算符对应的算子生成该算子的计算图,在每生成一个算子的计算图之后,框架根据算子的计算图执行模型的前向计算。其中,前向计算是指将数据输入模型结构,通过该模型计算得到结果的过程。模型的前向计算可以由多个运算操作组成,框架使用算子的计算图可以完成模型的前向计算。本申请实施例中,框架采用动态图模式运行,可获得模型的前向计算的中间结果,方便调试。
举例说明如下,框架中可以包括有图引擎和运行时刻(RunTime),其中,图引擎的输入是计算图,图引擎中对计算图进行优化等操作,并调用底层的运行时刻执行计算。运行时刻在运行时是指为程序执行提供相应的支持环境,包括但不限于各种库函数、操作系统等底层软件或者固件系统。运行时刻执行的计算可以指通过给定的输入,运行优化过的算子的计算图以得到输出的过程。本申请实施例中,框架执行动态图模式时,框架可以遍历模型中调用的算子,为每个算子生成算子的计算图,下发至图引擎,由该图引擎使用算子的计算图进行前向计算。
需要说明的是,本申请实施例中,运算符是指用户代码中代表运算的单元,如加法单元(add),算子是指计算机底层实现该运算的操作单元,如TensorFlow框架、PyTorch框架中对于add的实现方式不同,那么两个框架中分别有对应add的算子,其中,一个运算符可以对应不同的算子,具体取决于应用场景。
在本申请的一些实施例中,步骤203中根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,包括:
A1、对第一代码包括的至少一个运算符进行重载,以得到运算符对应的算子;
A2、根据所述至少一个运算符对应的算子生成所述算子的计算图。
其中,框架可以遍历模型中调用的算子,对运算符重载,例如框架可以分析输入端输入的第一代码,遍历第一代码中调用的算子,对算子进行识别与分析以进行后续操作。例如,根据至少一个运算符对应的算子生成算子的计算图。其中,框架可以遍历模型中调用的运算符,对运算符重载以得到对应的算子,例如框架可以分析输入端输入的第一代码,遍历第一代码中调用的运算符,对运算符进行识别与分析以得到运算符对应的算子。本申请实施例中,通过运算符重载,可以从第一代码中确定出算子,再根据该算子的代码内容生成需要调用的算子的计算图,其中,运算符重载机制是指对于暴露给用户的统一的运算符采用函数重载,使其能够执行特定的操作。例如,具体可以由计算图生成模块来生成该算子的计算图。详见后续实施例中对计算图生成模块的说明。
在本申请的一些实施例中,本申请实施例提供的模型运行方法除了执行前述步骤之外,还可以包括如下步骤:
当确定算子为随机数相关的运算符对应的算子时,根据算子的计算图生成随机数,并缓存随机数。
其中,框架执行动态图模式时,框架可以判断运算符对应的算子是否为随机数相关的运算符对应的算子,当框架确定算子为随机数相关的运算符对应的算子时,框架根据算子的计算图生成随机数,并缓存随机数。例如,框架识别出算子为随机数相关的算子的情况下,为随机数相关的算子运行结果开辟缓存空间,随机数相关的算子是指该算子中有涉及到生成随机数,从而在动态图模式运行前向计算后、切换至静态图模式运行时,可直接复用此处缓存的随机数进行计算,而不需要重新计算随机数,以保证框架在动态图模式和静态图模式采用相同的随机数,保证正确完成模型的训练,另外框架在动态图模式和静态图模式采用相同的随机数,也不需要重复生成随机数,节省计算资源,节省计算时间,提升模型的训练速度
204、当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式。
在本申请实施例中,框架根据算子的计算图执行模型的前向计算,当框架使用完所有的算子的计算图执行模型的前向计算时,模型的前向计算执行完成,然后框架可以从动态图模式切换至静态图模式,本申请实施例中框架的前向计算执行完成是框架从动态图模式切换至静态图模式的触发条件,即当模型的前向计算执行完成之后,框架可以自动从动态图模式切换至静态图模式,此时不需要用户的干预操作。举例说明如下,当用户编程时,调用求解梯度的函数接口时,说明模型的前向计算完成,该需要进行反向计算,因此框架可以通过分析第一代码中的求解梯度的函数接口自动完成从动态图模式切换至静态图模式。
在本申请实施例中,当处理第一代码的模式切换至静态图模式之后,根据第一代码和算子的计算图生成模型的计算图;根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。详见后续步骤205中对面模型的计算图的生成方式以及前向计算、反向计算的举例说明。
在本申请实施例中,框架可以支持静态图、动态图双模式机制,若框架选择执行动态图模式,则可获得模型的前向计算的中间结果,方便调试,若框架选择执行静态图模式,可令模型训练更加高效,本申请实施例中框架在运行动态图模式可以方便提供模型运行的中间结果,框架在运行静态图模式时可以采用模型的计算图进行模型训练,以提高模型的训练效率。本申请实施例中,用户只需维护一套为模型定义的代码,就可以同时支持两种模式的运行,提高了模型的推理和训练的效率。
205、当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图;以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。
在本申请实施例中,当框架从动态图模式切换至静态图模式时,框架可以从第一代码中获取到至少一个运算符,针对第一代码中的所有运算符生成模型的计算图。其中,第一代码是指用户为机器学习模型定义的代码,该第一代码可用于描述一机器学习模型,该机器学习模型简称为模型。在采用静态图模式处理第一代码的情况下,由于第一代码描述了机器学习模型,因此通过该第一代码可以生成模型的计算图,本申请实施例中模型的计算图可以简称为“模型计算图”,即针对模型而生成的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算、反向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图,或者模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算,或者执行模型的前向计算和反向计算,具体取决于应用场景。
在本申请的一些实施例中,步骤205根据第一代码生成模型的计算图,包括:
B1、遍历第一代码包括的至少一个运算符,采用源码分析的方式识别出至少一个运算符对应的算子,以及根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树;
B2、根据语法树生成前向计算的计算图,其中,前向计算的计算图构成模型的计算图。
其中,框架遍历第一代码包括的至少一个运算符,框架采用源码分析(source-code transformation,ST或者SCT)的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树,其中,第一代码中运算符的结构关系可以是第一代码中包括的多个运算符之间的结构关系,或者第一代码中运算符的结构关系还可以是第一代码中单个运算符,框架分析第一代码,遍历第一代码中运算符,采用源码分析的方式识别运算符对应算子,对模型结构进行分析从而生成抽象语法树(abstractsyntax tree,AST),抽象语法树可以简称为语法树。
当框架生成语法树之后,该框架根据语法树生成前向计算的计算图。其中,前向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图,前向计算的计算图可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算。
在本申请的一些实施例中,步骤205根据第一代码生成模型的计算图,包括:
C1、遍历第一代码包括的至少一个运算符,采用源码分析的方式识别出至少一个运算符对应的算子,以及根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树;
C2、根据语法树生成前向计算的计算图;
C3、根据前向计算的计算图生成反向计算的计算图,其中,前向计算的计算图和反向计算的计算图构成模型的计算图。
其中,框架遍历第一代码包括的至少一个运算符,框架采用源码分析的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树,其中,第一代码中运算符的结构关系可以是第一代码中包括的多个运算符之间的结构关系,或者第一代码中运算符的结构关系还可以是第一代码中单个运算符,框架分析第一代码,遍历第一代码中运算符,采用源码分析的方式识别运算符对应算子,对模型结构进行分析从而生成语法树。
当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,最后由框架根据前向计算的计算图生成反向计算的计算图,例如框架中可以包括自动微分(auto-differentiation,AD)引擎,AD引擎是一种根据用户定义的函数的前向计算进行反向计算得到该函数导数的机制,反向计算是以前向计算的结果与预期结果间的误差为输入,根据自动微分机制反向传播误差,从而计算出模型结构中每层的梯度的计算过程。其中,前向计算的计算图和反向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算和反向计算。
举例说明如下,框架中可以包括有图引擎和运行时刻(RunTime),其中,图引擎的输入是模型计算图,图引擎中对计算图进行优化等操作,并调用底层的运行时刻执行计算。运行时刻在运行时是指为程序执行提供相应的支持环境,包括但不限于各种库函数、操作系统等底层软件或者固件系统。运行时刻执行的计算可以指通过给定的输入,运行优化过的算子的计算图,以得到输出的过程。本申请实施例中,处理第一代码的模式为静态图模式时,框架可以生成模型的计算图,下发至图引擎,由该图引擎使用模型的计算图进行前向计算,或者进行前向计算和反向计算。本申请实施例中,框架中可以包括有一个图引擎和一个运行时刻,由于步骤204中框架可以从动态图模式切换至静态图模式,因此在步骤203和步骤205中的针对计算图的前向计算或者反向计算都可以通过同一个图引擎和一个运行时刻来实现,用户只需维护一套代码,使用框架中的同一个图引擎和一个运行时刻实现两种模式下的前向计算和反向计算,降低了框架的开发和维护成本。
通过前述实施例的举例说明可知,在本申请实施例中,首先获取第一代码,该第一代码用于描述一个机器学习模型,然后确定处理第一代码的模式,当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后根据算子的计算图执行模型的前向计算,当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式,当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图。以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。本申请实施例中当处理第一代码的模式为动态图模式时,生成了算子的计算图并执行前计算,由于使用的是算子的计算图,因此模型的前向计算过程的中间结果可以获取,方便用户调试。当模型完成前向计算后,将处理第一代码的模式从动态图模式切换至静态图模式,可以根据模型的计算图进行前向计算,或者根据模型的计算图进行前向计算和反向计算,由于静态图模式下生成的是模型的计算图,使用该模型的计算图可以完成模型的训练,所以采用静态图模式的具有运行高效的特点。本申请实施例中可以从动态图模式切换至静态图模式,同时满足用户对模型的易用性和运行效率的双重需求。
请参阅图3所示,为本申请实施例提供的另一种模型运行方法,主要包括如下步骤:
301、获取第一代码,第一代码用于描述一机器学习模型。
其中,步骤301和前述实施例中的步骤201相类似,详见前述步骤201的说明。
在本申请实施例中,用户可以发送调试(debug)信号给框架,例如用户通过终端向框架的输入端中输入调试信号,又如,用户在为模型定义的第一代码中包括该调试信号。框架判断是否检测到用于调试第一代码的调试信号,框架根据当前正在执行的模式以及是否检测到调试信号确定执行后续步骤303至步骤306中的某一个步骤。
302、在获取到第一代码时,处理第一代码的模式为动态图模式,若检测到用于调试第一代码的调试信号,确定处理第一代码的模式继续采用动态图模式。或者,
303、在获取到第一代码时,处理第一代码的模式为动态图模式,若未检测到调试信号,确定处理第一代码的模式从动态图模式切换至静态图模式,或者,
304、在获取到第一代码时,处理第一代码的模式为静态图模式,若检测到调试信号,确定处理第一代码的模式从静态图模式切换至动态图模式,或者。
305、在获取到第一代码时,处理第一代码的模式为静态图模式,若未检测到调试信号,确定处理第一代码的模式继续采用静态图模式。
其中,框架在获取到第一代码时,框架处理第一代码的模式可以为动态图模式,或者框架处理第一代码的模式可以为动静态图模式,框架在获取到第一代码时,框架还可以检测是否接收到调试信号。在步骤302至步骤305中,框架对于外界的调试信号进行接收,并通过检验是否有调试信号判断用户是否处于调试过程中。若判断用户处于调试过程中,则框架采用动态图模式运行,否则切换至更加高效的静态图模式运行。本申请实施例中,动态图模式中采用命令式编程,对用户定义模型的代码进行逐行解析、计算,所以模型中间结果都可获取到。由于可以获取到模型的中间结果,用户可以迅速定义到缺陷(bug)的位置,方便调试。而静态图模式中,对用户定义模型的代码进行解析后生成整个模型的计算图,运行时没有层或单个变量的概念,所以中间结果不可获取,不方便调试。
当执行步骤302或者执行步骤304时,触发执行如下的步骤306至步骤308。
306、当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后框架根据算子的计算图执行模型的前向计算。
307、当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式。
308、当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图;以及框架根据模型的计算图执行模型的前向计算,或框架根据模型的计算图执行模型的前向计算和反向计算。
其中,步骤306至步骤308和前述实施例中的步骤203至步骤205相类似,详见前述步骤203至步骤205的说明。
请参阅图4所示,为本申请实施例提供的另一种模型运行方法,主要包括如下步骤:
401、获取第一代码,第一代码用于描述一机器学习模型。
其中,步骤401和前述实施例中的步骤201相类似,详见前述步骤201的说明。
402、获取针对第一代码的模式选择指令。
在本申请实施例中,用户可以发送模式选择指令给框架,例如用户通过终端向框架的输入端中输入模式选择指令,又如,用户在为模型定义的第一代码中包括该模式选择指令。框架判断是否检测到模式选择指令。
403、根据模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。
其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。又如,用户需要快速完成模型训练,则用户可以向框架指示执行静态图模式,则框架检测到用户的指示之后,该框架可以选择静态图模式。又如,框架在分析第一代码时,框架没有检测到用户的指示,则框架可以按照该框架的默认配置来执行静态图模式或者执行动态图模式。
当处理第一代码的模式为动态图模式时,触发执行如下的步骤404至步骤406。
404、当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后框架根据算子的计算图执行模型的前向计算。
405、当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式。
406、当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图;以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。
其中,步骤404至步骤406和前述实施例中的步骤203至步骤205相类似,详见前述步骤203至步骤205的说明。
在本申请的一些实施例中,框架除了执行前述的步骤401至步骤403之外,本申请实施例提供的模型执行方法还可以包括如下步骤:
D1、当模式选择指令指示动态图模式、且根据第一代码确定需要执行模型的前向计算时,触发执行前述步骤404:根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后根据算子的计算图执行模型的前向计算。
其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行动态图模式。若用户需要执行模型的前向计算,则用户需要在为模型定义的第一代码中携带前向计算所需要的代码内容,则框架可以判断出需要执行模型的前向计算。
在本申请的一些实施例中,框架除了执行前述的步骤401至步骤403之外,本申请实施例提供的模型执行方法还可以包括如下步骤:
E1、当模式选择指令指示动态图模式、且根据第一代码确定需要执行模型的前向计算和反向计算时,触发执行前述步骤404至步骤406:根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后根据算子的计算图执行模型的前向计算;当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式;当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图;以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。
其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要获取模型训练过程的中间结果,则用户可以向框架指示执行动态图模式,则框架检测到用户的指示之后,该框架可以选择执行动态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行动态图模式。若用户需要执行模型的前向计算和反向计算,则用户需要在为模型定义的第一代码中携带前向计算和反向计算所需要的代码内容,则框架可以判断出需要执行模型的前向计算和反向计算。
在本申请的一些实施例中,框架除了执行前述的步骤401至步骤403之外,本申请实施例提供的模型执行方法还可以包括如下步骤:
F1、当模式选择指令指示静态图模式、且根据第一代码确定需要执行模型的前向计算时,遍历第一代码包括的至少一个运算符,采用源码分析的方式识别出至少一个运算符对应的算子,以及根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树。
其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要快速完成模型训练,则用户可以向框架指示执行静态图模式,则框架检测到用户的指示之后,该框架可以选择静态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行静态图模式。
框架遍历第一代码包括的至少一个运算符,框架采用源码分析的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树,其中,第一代码中运算符的结构关系可以是第一代码中包括的多个运算符之间的结构关系,或者第一代码中运算符的结构关系还可以是第一代码中单个运算符,框架分析第一代码,遍历第一代码中运算符,采用源码分析的方式识别运算符对应算子,对模型结构进行分析从而生成语法树。
F2、根据语法树生成前向计算的计算图,其中,前向计算的计算图构成模型的计算图。
F3、根据模型的计算图执行模型的前向计算。
具体的,当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,其中,前向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图,前向计算的计算图可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算。
在本申请的一些实施例中,框架除了执行前述的步骤401至步骤403之外,本申请实施例提供的模型执行方法还可以包括如下步骤:
G1、当模式选择指令指示静态图模式、且根据第一代码确定需要执行模型的前向计算和反向计算时,遍历第一代码包括的至少一个运算符,采用源码分析的方式识别出至少一个运算符对应的算子,以及根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树。
其中,框架可以按照模式选择指令的指示来选择执行静态图模式或者执行动态图模式,举例说明如下,用户需要快速完成模型训练,则用户可以向框架指示执行静态图模式,则框架检测到用户的指示之后,该框架可以选择静态图模式。例如用户可以输入一句模式选择指令,该模式选择指令中指示了需要执行静态图模式。
框架遍历第一代码包括的至少一个运算符,框架采用源码分析的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树,其中,第一代码中运算符的结构关系可以是第一代码中包括的多个运算符之间的结构关系,或者第一代码中运算符的结构关系还可以是第一代码中单个运算符,框架分析第一代码,遍历第一代码中运算符,采用源码分析的方式识别运算符对应算子,对模型结构进行分析从而生成语法树。
G2、根据语法树生成前向计算的计算图。
G3、根据前向计算的计算图生成反向计算的计算图,其中,前向计算的计算图和反向计算的计算图构成模型的计算图,
G4、根据模型的计算图执行模型的前向计算和反向计算。
其中,框架遍历第一代码包括的至少一个运算符,框架采用源码分析的方式分析该运算符,源码分析是指根据用户编写模型的代码,通过分析语法树的方式,将模型代码转换为可以被框架识别和执行的代码。框架采用源码分析的方式识别出至少一个运算符对应的算子,然后框架根据第一代码中运算符的结构关系和至少一个运算符对应的算子生成语法树,其中,第一代码中运算符的结构关系可以是第一代码中包括的多个运算符之间的结构关系,或者第一代码中运算符的结构关系还可以是第一代码中单个运算符,框架分析第一代码,遍历第一代码中运算符,采用源码分析的方式识别运算符对应算子,对模型结构进行分析从而生成语法树。
当框架生成语法树之后,该框架根据语法树生成前向计算的计算图,最后由框架根据前向计算的计算图生成反向计算的计算图,例如框架中可以包括AD引擎,AD引擎是一种根据用户定义的函数的前向计算进行反向计算得到该函数导数的机制。其中,前向计算的计算图和反向计算的计算图构成模型的计算图。由前述对算子的计算图的说明可知,算子的计算图是一个运算操作单元的计算图,模型的前向计算由多个运算操作组成,因此模型的计算图可以包括前向计算的计算图和反向计算的计算图,前向计算的计算图和反向计算的计算图分别可以包括一个或多个算子的计算图。处理第一代码的模式为静态图模式时,框架只需要生成一次的模型的计算图,然后使用该模型的计算图进行模型训练,以提高模型的训练效率,可令模型训练更加高效。其中,模型的训练可以包括执行模型的前向计算和反向计算。
在本申请的一些实施例中,前述步骤B1、C1、F1和G1中的框架遍历第一代码包括的至少一个运算符,采用源码分析的方式识别出至少一个运算符对应的算子,包括:
H1、对第一代码包括的第一运算符进行分析,以确定第一运算符为支持的运算符,或者第一运算符为随机数相关的运算符,或者第一运算符为不支持的运算符,其中,第一运算符表示第一代码包括的至少一个运算符中的任意一个运算符。
在本申请实施例中,框架对第一代码包括的第一运算符进行源码分析,该源码分析可以是粒度更细的分析方式,例如框架执行的是细粒度源码分析,首先框架从第一代码中获取到任意一个运算符,称为“第一运算符”,则该第一运算符为如下三种的某一种类型的运算符:第一运算符为支持的运算符,或者第一运算符为随机数相关的运算符,或者第一运算符为不支持的运算符。例如第一运算符为框架支持的运算符,第一运算符为框架不支持的运算符。对三种类别的运算符采取不同的策略进行处理,分别执行步骤H2至H4。
H2、当第一运算符为支持的运算符时,确定具有第一运算符对应的第一算子的计算图。
例如,第一运算符为框架支持的运算符,对该第一运算符进行识别,框架确定框架中具有第一运算符对应的第一算子的计算图,另外,框架还可以根据第一代码将第一运算符对应的第一算子加入模型的语法树中。
H3、当第一运算符为随机数相关的运算符时,确定具有第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定第一运算符对应的第一算子能够复用随机数缓存地址中缓存的随机数。
其中,对于随机数相关运算符,对第一运算符进行识别,根据第一代码将第一运算符对应的第一算子加入模型的语法树中。并且查询随机数缓存地址是否为空,若不为空,则说明该迭代中已生成随机数并缓存,如在动态图模式中已缓存有随机数,则该第一算子会复用缓存的随机数。提高运算效率。
在本申请实施例中,框架执行动态图模式时,模型的前向计算过程中调用随机数相关的算子生成随机数后,将随机数缓存,从而切换至静态图模式运行时不会生成新的随机数,直接复用缓存的随机数进行计算。采用随机数复用机制可以提升效率,并且防止静态图模式下重复生成不同的随机数。
H4、当第一运算符为不支持的运算符时,确定第一运算符是否对模型的前向计算或反向计算产生影响,若第一运算符对模型的前向计算和反向计算都不产生影响,确定忽略掉第一运算符。
其中,对于框架不支持的运算符,例如针对用户用于调试的代码片段(如打印(print)、pdb代码片段),动态图模式中print、调试工具(如pdb)代码等片段为可执行代码,而静态图模式下,print、pdb代码等片段中运算符在框架中没有对应计算图、无法添加在模型计算图中。针对这样的运算符,分析该运算操作是否对模型的训练过程以及推理过程(如损失函数,可训练变量等)产生影响,若有影响,框架则报错,以提示用户第一运算符会影响模型的运行,若无影响,则框架会忽略掉该第一运算符,即框架不执行该第一运算符,框架会直接跳过该第一运算符,框架不会报错,也不会进行语法分析等操作。
为便于更好的理解和实施本申请实施例的上述方案,下面举例相应的应用场景来进行具体说明。
本申请实施例中,框架可以采用静态图、动态图双模式机制,在动态图模式下对模型定义代码中运算符进行重载,为每个算子生成一个算子计算图并执行前向计算,由于执行模型中每个算子计算图,模型的推理(前向计算)过程的中间结果可以获取,方便用户调试。模型完成前向计算后,框架自动切换至静态图模式运行进行训练。在静态图模式下对模型定义代码通过细粒度源码分析的方式对模型中调用的算子及模型结构进行分析,生成模型的前向计算图及反向计算图并执行计算,由于静态图模式中针对模型计算图进行优化后执行,模型的训练(前向与反向计算)运算高效。
另外,框架可以采用随机数复用机制,动态图模式下模型的前向计算过程中调用随机数相关的算子生成随机数后,将随机数缓存,从而切换至静态图模式运行时不会生成新的随机数,直接复用缓存的随机数进行计算。采用随机数复用机制可以提升效率,并且防止静态图模式下重复生成不同的随机数。
框架还可以采用细粒度源码分析的方式,静态图模式下,对模型定义代码采用细粒度源码分析的方式,识别模型中调用的算子,分析模型结构,并且针对不同类型的代码片段采取不同的策略进行有效处理,从而可以运行高效,并且支持用户编程出的动态图风格的代码。
请参阅如图5所示,为本申请实施例提供的分布式训练系统的应用结构示意图,分布式训练系统可包括N个节点(node)。一个节点表示用于进行训练的一个计算节点,可以包含多个进行训练的计算单元,如中央处理器(central processing units,CPU)、图形处理器(英语:Graphics Processing Unit,缩写:GPU)。本申请实施例也适用于只有一个节点的场景。每个节点上,框架运行在CPU上,用户通过框架提供的前端表达来定义自己的网络模型,框架会根据用户定义的模型通过动态图或者静态图的方式完成为用户提供自动微分的能力。多个计算节点之间可以通过交换机进行数据传输。
本申请实施例框架可以包括:前端表达、动态图、静态图和自动微分三个模块。如果涉及到分布式,则会将分布式相关的策略反映到动态图或者静态图中。其中,分布式是指将训练任务散布到多个节点上,节点之间通过网络进行连接,按照一定的协调策略对各个节点的计算结果进行综合,从而达完成训练任务。
框架对通过图引擎对计算图进行优化,最终框架根据计算图调用算子库中的算子,并将相应的算子加载到硬件中执行。在分布式场景中,如果是数据并行,则通过网络进行梯度聚合。其中,网络是各个节点进行通信的媒介,例如网络可以是以太网。如果是模型并行,则通过网络进行层与层之间数据传输。例如,一个神经网络会包含多层,每一层一般包含一个或者多个算子(如卷积算子)。
如图6a所示,为本申请实施例提供的框架的组成结构示意图。本申请实施例,该框架中可以包括:模型定义、计算图生成模块、自动微分引擎、图引擎和运行时刻(Runtime)等主要部分。用户在前端定义模型与模型训练逻辑,本申请实施例承接前端模型,进行自动微分等操作并调用底层Runtime进行模型的前向、反向计算。
具体的,静态图模式中,框架遍历模型中调用的算子,分析语法,通过计算图生成模块生成模型的前向计算图,调用自动微分(AD)引擎在前向计算图的基础上生成反向计算图,将模型的前向以及反向计算图下发至图引擎。
动态图模式中,框架遍历模型中调用的算子,为每个算子生成算子计算图,下发至图引擎以进行前向计算,当模型的前向计算完成后,框架自动切换至静态图模式,为模型生成前向以及反向计算图,并下发至图引擎。
图引擎的输入是算子计算图和模型计算图,图引擎中对计算图进行优化等操作,例如采用算子融合、并行计算等优化手段,并调用底层RunTime执行计算。
如图6b所示,为本申请实施例提供的另一种框架的组成结构示意图。本申请实施例,该框架中可以包括:运算符重载模块、细粒度源码分析模块、计算图生成模块、图引擎和自动微分引擎。
其中,框架首先获取到用户代码,然后根据该用户代码确定处理该用户代码的模式。并根据处理该用户代码的模式为动态图模式或者静态图模式,确定如下不同的实现方式:
若该模式为动态图模式,则使用运算符重载模块根据该用户代码生成运算符对应的算子,然后由计算图生成模块根据该运算符对应的算子生成算子的计算图,该算子的计算图输入图引擎,由图引擎对算子的计算图进行优化等操作,例如采用算子融合、并行计算等优化手段,并调用底层RunTime执行计算。
若该模式为静态图模式,则使用细粒度源码分析模块生成运算的对应的算子和抽象语法树,抽象语法树可以理解为表示运算符语法的语法树,然后由计算图生成模块根据该运算符对应的算子生成用于前向计算的模型的计算图,然后由自动微分引擎根据用于前向计算的模型计算图生成用于反向计算的模型计算图,用于前向计算的模型计算图和用于反向计算的模型计算图输入图引擎,由图引擎对前向计算的模型的计算图和反向计算的模型的计算图进行优化等操作,例如采用算子融合、并行计算等优化手段,并调用底层RunTime执行计算。
基于图6b的举例说明可知,本申请实施例中,框架可以根据处理用户代码的模式为动态图模式调用计算图生成模块生成算子的计算图,还可以根据处理用户代码的模式从动态图模式切换至静态图模式,或者根据处理用户代码的模式为静态图模式调用计算图生成模块和自动微分引擎生成模型的计算图。框架针对计算图的前向计算或者反向计算都可以通过同一个图引擎和一个运行时刻来实现,用户只需维护一套代码,使用框架中的同一个图引擎和一个运行时刻实现两种模式下的前向计算和反向计算,降低了框架的开发和维护成本。
请参阅图7所示,为本申请实施例提供的模型运行方法的实现流程示意图,主要包括如下步骤:
用户选择动态图模式时,执行如下S01至步骤S05:
S01、输入端获取模型定义代码:本步骤是模型定义代码输入步骤,本步骤获取用户编程定义的模型。
S02、遍历模型中调用的算子,对运算符重载。本步骤分析输入端输入的代码,遍历代码中调用的算子,对算子进行识别与分析以进行后续操作。
S03、缓存随机数。本步骤在S02中识别的算子为随机数相关的算子的情况下运行。本步骤为随机数相关的算子运行结果开辟缓存空间,从而在动态图模式运行前向计算后、切换至静态图模式运行时,可直接复用本步骤生成的随机数进行计算。
S04、为算子生成算子计算图:本步骤根据步骤S02中算子的识别结果,调用框架对应算子的实现,以得到算子计算图。
S05、执行算子计算图。本步骤中将算子计算图下发至图引擎进行优化、调度等操作,并调用RunTime执行运算。由于本步骤中对算子计算图执行计算,所以用户可获取模型中每个算子的运行结果。当模型中每个算子完成步骤S02至完成步骤S05,以得到运行结果后,模型的前向计算完成,框架自动切换至静态图模式,执行静态图模式的步骤S06至步骤S09,完成模型的反向计算。
用户选择静态图模式时,执行如下S01、S07至步骤S09:
S01、输入端获取模型定义代码。本步骤是模型定义代码输入步骤,本步骤获取用户编程定义的模型。
S06、遍历模型定义代码,进行细粒度的源码分析。本步骤分析输入端代码,遍历代码中运算符,采用细粒度源码分析(ST)的方式识别运算符对应的算子,对模型结构进行分析,生成语法树。细粒度源码分析的流程如图8所示,对三种类别的运算符采取不同的策略进行处理:
1、框架支持的运算符:对运算符进行识别,根据用户代码将对应的算子加入模型的语法树中。
2、随机数相关运算符:对运算符进行识别,根据用户代码将对应的算子加入模型的语法树中。并且查询随机数缓存地址是否为空,若不为空,则说明该迭代中已生成随机数并缓存(如在动态图模式中),则该算子会复用缓存的随机数。提高运算效率。
3、框架不支持的运算符:这一步骤针对用户用于调试的代码片段(如print、pdb代码片段)等用途较大,动态图模式中print、调试工具(如pdb)代码等片段为可执行代码,而静态图模式下,print、pdb代码等片段中运算符在框架中没有对应计算图、无法添加在模型计算图中。针对此类运算符,分析该运算符的运算操作是否对模型的训练过程以及推理过程(如损失函数,可训练变量等)产生影响,若有影响框架则报错,若无影响则直接忽略掉该运算符,即框架可以直接跳过该运算符,不会报错,也不会进行语法分析等操作。
S07、生成模型前向计算图,本步骤根据步骤S06中对算子的识别结果以及表示算子间关系的语法树生成模型的前向计算图。
S08、自动微分引擎根据模型前向计算图生成反向计算图:本步骤根据步骤S07中生成的前向计算图生成模型的反向计算图。
S09、执行模型计算图,本步骤中将模型的前向及反向计算图下发至图引擎进行优化、调度等操作,并调用RunTime执行运算。
请参阅图9a和图9b所示,为本申请实施例提供的框架中添加调试模式的检测流程示意图。本申请实施例中,框架接收到调试(debug)信号情况下,需要添加了调试模式检测流程,在图9a和图9b所示的流程中,框架采用动态图模式运行检测到debug信号时,框架采用动态图模式运行。框架采用动态图模式运行,但并未接收到debug信号时框架切换至静态图模式运行。框架采用静态图模式运行但接收到debug信号时,框架切换至动态图模式运行。框架采用静态图模式运行,并未接收到debug信号时框架采用静态图模式运行。
本申请实施例中,框架对用户发送的debug信号进行接收,并通过检验是否有debug信号判断用户是否处于调试过程中。若判断用户处于调试过程中,则采用动态图模式运行,否则切换至更加高效的静态图模式运行,提高模型的训练效率。
在本申请的另一些实施例中,用户可以通过编程指令选择框架的运行模式,如图10a所示,为本申请实施例提供的动态图模式下一种模型推理的运行流程示意图。当用户输入一句模式选择指令,选择动态图模式进行模型推理时,包括如下步骤:
S21、输入端获取模型定义代码。
S22、遍历模型中调用的算子,对运算符重载。
S23、为算子生成算子计算图。
S24、执行算子计算图。
对于步骤S21至步骤S24的描述,详见前述实施例中步骤S02至步骤S05的说明,此处不再赘述。
如图10b所示,为本申请实施例提供的动态图模式下一种模型训练的运行流程示意图。当用户输入一句模式选择指令,选择动态图模式进行模型训练时,包括如下步骤:
S31、输入端获取模型定义代码,本步骤是模型定义代码输入步骤,本步骤获取用户编程定义的模型。
S32、遍历模型中调用的算子,对运算符重载,本步骤分析输入端代码,遍历代码中调用的算子,对算子进行识别与分析以进行后续操作。
S33、缓存随机数,本步骤在S32中识别的算子为随机数相关的算子的情况下运行。本步骤为随机数相关的算子运行结果开辟缓存空间,从而在动态图模式运行前向计算后、切换至静态图模式运行时,可直接复用本步骤生成的随机数进行计算。
S34、为算子生成算子计算图,本步骤根据步骤S32中算子的识别结果,调用框架对应算子的实现,以得到算子计算图。
S35、执行算子计算图,本步骤中将算子计算图下发至图引擎进行优化、调度等操作,并调用RunTime执行运算。由于本步骤中对算子计算图执行计算,所以用户可获取模型中每个算子的运行结果。当模型中每个算子完成步骤S32至完成步骤S35,以得到运行结果后,模型的前向计算完成,框架自动切换至静态图模式,执行静态图模式的步骤S36至步骤S39,完成模型的反向计算。
框架切换至静态图模式时,执行如下步骤S36至步骤S39:
S36、遍历模型定义代码,进行细粒度的源码分析。本步骤分析输入端代码,遍历代码中运算符,采用细粒度源码分析的方式识别运算符对应算子,对模型结构进行分析,生成语法树。细粒度源码分析的方式如图8所示,对三种类别的运算符采取不同的策略进行处理:
1、框架支持的运算符:对运算符进行识别,根据用户代码将对应的算子加入模型的语法树中。
2、随机数相关运算符:对运算符进行识别,根据用户代码将对应的算子加入模型的语法树中。并且查询随机数缓存地址是否为空,若不为空,则说明该迭代中已生成随机数并缓存(如在动态图模式中),则该算子会复用缓存的随机数。提高运算效率。
3、框架不支持的运算符:这一步骤针对用户用于调试的代码片段(如print、pdb代码片段)等用途较大,动态图模式中print、调试工具(如pdb)代码等片段为可执行代码,而静态图模式下,print、pdb代码等片段中运算符在框架中没有对应计算图、无法添加在模型计算图中。针对这样的运算符,分析该运算操作是否对模型的训练过程以及推理过程(如损失函数,可训练变量等)产生影响,若有影响框架则报错,若无影响则直接跳过该运算符,不会报错,也不会进行语法分析等操作。
S37、生成模型前向计算图,本步骤根据步骤S36中对算子的识别结果以及表示算子间关系的语法树生成模型的前向计算图。
S38、自动微分引擎根据模型前向计算图生成反向计算图:本步骤根据步骤S37中生成的前向计算图生成模型的反向计算图。
S39、执行模型计算图:本步骤中将模型的前向及反向计算图下发至图引擎进行优化、调度等操作,并调用RunTime执行运算。
如图10c所示,为本申请实施例提供的静态图模式下一种模型推理的运行流程示意图。当用户输入一句模式选择指令,选择静态图模式进行模型推理时,框架运行步骤如下:
S41、输入端获取模型定义代码。
S42、遍历模型定义代码,进行细粒度的源码分析。
对于步骤细粒度的源码分析的详细说明,详见前述实施例中步骤S36中的说明。
S43、为模型生成前向计算图。
S44、执行前向计算图。
如图10d所示,为本申请实施例提供的静态图模式下一种模型训练的运行流程示意图。当用户输入一句模式选择指令,选择静态图模式进行模型训练时,框架运行步骤如下:
S51、输入端获取模型定义代码。
S52、遍历模型定义代码,进行细粒度的源码分析。
对于步骤细粒度的源码分析的详细说明,详见前述实施例中步骤S36中的说明。
S53、为模型生成前向计算图。
S54、为模型生成反向计算图。
S55、执行模型计算图。
本实施例为用户提供了通过指令切换模式的方式,用户选择动态图模式运行可获得模型前向计算的中间结果,方便调试,用户选择静态图模式运行可令模型训练更加高效,本实施例令用户在获取中间结果的同时可以采用计算图机制进行模型训练,并提供切换运行模式的简易操作。
通过前述的举例说明可知,本申请实施例中提供基于统一的自动微分引擎的动态图和静态图的实现框架,本申请实施例还提供动静态双模式训练流程中随机数复用机制,本申请实施例还提供动静态双模式训练流程中采用的细粒度源码分析的方式。本申请实施例可以实现前端命令式编程、声明式编程模式之间可以方便切换。用户只需维护一套训练逻辑代码,可以采用两种模式运行。用户编程调试时方便简易,模型训练时高效。框架仅维护一套自动微分引擎、一套RunTime,代码开发和维护开销小。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
为便于更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图11a所示,本申请实施例提供的一种模型运行系统100,所述模型运行系统包括:
代码获取模块101,用于获取第一代码,所述第一代码用于描述一机器学习模型;
计算图生成模块102,用于当处理所述代码获取模块101获取到的所述第一代码的模式为动态图模式时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图;
执行计算模块103,用于根据所述计算图生成模块102生成的所述算子的计算图执行所述模型的前向计算;
模式切换模块104,用于当所述执行计算模块103完成所述模型的前向计算之后,将处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;
所述计算图生成模块102,还用于当所述模式切换模块104将处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;
所述执行计算模块103,还用于根据所述计算图生成模块102生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块102生成的所述模型的计算图执行所述模型的前向计算和反向计算;
所述计算图生成模块102,还用于当处理所述代码获取模块101获取到的所述第一代码的模式为静态图模式时,根据所述第一代码生成所述模型的计算图;
所述执行计算模块103,用于根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算和反向计算。
在本申请的一些实施例中,如图11b所示,所述模型运行系统,还包括:模式确定模块105,用于确定处理所述第一代码的模式。
在本申请的一些实施例中,所述模式确定模块105,用于在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若检测到用于调试所述第一代码的调试信号,确定处理所述第一代码的模式继续采用所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若检测到所述调试信号,确定处理所述第一代码的模式从所述静态图模式切换至所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式继续采用所述静态图模式。
在本申请的一些实施例中,所述模式确定模块105,用于从所述第一代码中获取模式选择指令;根据所述模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。
在本申请的一些实施例中,所述计算图生成模块102,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
在本申请的一些实施例中,所述计算图生成模块102,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码需要执行所述模型的前向计算和反向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
在本申请的一些实施例中,所述计算图生成模块102,用于对所述第一代码包括的至少一个运算符进行重载,以得到所述至少一个运算符对应的算子;根据所述至少一个运算符对应的算子生成所述算子的计算图。
在本申请的一些实施例中,如图11c所示,所述系统还包括:
随机数缓存模块106,用于在所述算子为随机数相关的运算符对应的算子的情况下,根据所述算子的计算图生成随机数,并缓存所述随机数。
在本申请的一些实施例中,所述计算图生成模块102,还用于遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图。
在本申请的一些实施例中,所述计算图生成模块102,还用于遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图。
在本申请的一些实施例中,所述计算图生成模块102,还用于当所述模式选择指令指示所述处理第一代码的模式为静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图,所述前向计算的计算图包括一个或多个所述算子的计算图。
在本申请的一些实施例中,所述计算图生成模块102,还用于当所述模式选择指令指示所述处理第一代码的模式为静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图,所述前向计算的计算图和所述反向计算的计算图分别包括一个或多个所述算子的计算图。
在本申请的一些实施例中,所述计算图生成模块102,还用于对所述第一代码包括的第一运算符进行分析,以确定所述第一运算符为支持的运算符,或者所述第一运算符为随机数相关的运算符,或者所述第一运算符为不支持的运算符,其中,所述第一运算符表示所述第一代码包括的至少一个运算符中的任意一个运算符;当所述第一运算符为支持的运算符时,确定中具有所述第一运算符对应的第一算子的计算图;当所述第一运算符为随机数相关的运算符时,确定中具有所述第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定所述第一运算符对应的第一算子能够复用所述随机数缓存地址中缓存的随机数;当所述第一运算符为不支持的运算符时,确定所述第一运算符是否对所述模型的前向计算或反向计算产生影响,若所述第一运算符对所述模型的前向计算和反向计算都不产生影响,确定忽略掉所述第一运算符。
通过前述实施例的举例说明可知,首先获取第一代码,该第一代码用于描述一个机器学习模型,然后确定处理第一代码的模式,当处理第一代码的模式为动态图模式时,根据第一代码包括的至少一个运算符生成至少一个运算符对应的算子的计算图,然后根据算子的计算图执行模型的前向计算,当模型的前向计算执行完成之后,将处理第一代码的模式从动态图模式切换至静态图模式,当处理第一代码的模式为静态图模式时,根据第一代码生成模型的计算图。以及根据模型的计算图执行模型的前向计算,或根据模型的计算图执行模型的前向计算和反向计算。本申请实施例中当处理第一代码的模式为动态图模式时,生成了算子的计算图并执行前计算,由于使用的是算子的计算图,因此模型的前向计算过程的中间结果可以获取,方便用户调试。当模型完成前向计算后,将处理第一代码的模式从动态图模式切换至静态图模式,可以根据模型的计算图进行前向计算,或者根据模型的计算图进行前向计算和反向计算,由于静态图模式下生成的是模型的计算图,使用该模型的计算图可以完成模型的训练,所以采用静态图模式的具有运行高效的特点。本申请实施例中可以从动态图模式切换至静态图模式,同时满足用户对模型的易用性和运行效率的双重需求。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其带来的技术效果与本申请方法实施例相同,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例的技术方案可以应用于模型运行系统,该模型运行系统可以应用于框架,后续实施例中以框架执行模型运行方法进行示例说明。例如该框架可以是机器学习框架。这框架可以是模型的运行平台,例如该框架的硬件结构可以是分布式部署,该框架可以部署在一个或多个服务器上,框架所包括的不同模块可以部署在不同的计算机节点上。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。
接下来介绍本申请实施例提供的另一种模型运行系统,请参阅图12所示,模型运行系统1200包括:
接收器1201、发射器1202、处理器1203和存储器1204(其中模型运行系统1200中的处理器1203的数量可以一个或多个,图12中以一个处理器为例)。在本申请的一些实施例中,接收器1201、发射器1202、处理器1203和存储器1204可通过总线或其它方式连接,其中,图12中以通过总线连接为例。
存储器1204可以包括只读存储器和随机存取存储器,并向处理器1203提供指令和数据。存储器1204的一部分还可以包括非易失性随机存取存储器(non-volatile randomaccess memory,NVRAM)。存储器1204存储有操作系统和操作指令、可执行模块或者数据结构,或者它们的子集,或者它们的扩展集,其中,操作指令可包括各种操作指令,用于实现各种操作。操作系统可包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
处理器1203控制模型运行系统的操作,处理器1203还可以称为中央处理单元(central processing unit,CPU)。具体的应用中,模型运行系统的各个组件通过总线系统耦合在一起,其中总线系统除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都称为总线系统。
上述本申请实施例揭示的方法可以应用于处理器1203中,或者由处理器1203实现。处理器1203可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1203中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1203可以是通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1204,处理器1203读取存储器1204中的信息,结合其硬件完成上述方法的步骤。
接收器1201可用于接收输入的数字或字符信息,以及产生与模型运行系统的相关设置以及功能控制有关的信号输入,发射器1202可包括显示屏等显示设备,发射器1202可用于通过外接接口输出数字或字符信息。
本申请实施例中,处理器1203,用于执行前述由框架执行的模型运行方法。
在另一种可能的设计中,当模型运行系统为芯片时,芯片包括:处理单元和通信单元,所述处理单元例如可以是处理器,所述通信单元例如可以是输入/输出接口、管脚或电路等。该处理单元可执行存储单元存储的计算机执行指令,以使该终端内的芯片执行上述第一方面任意一项的无线通信方法。可选地,所述存储单元为所述芯片内的存储单元,如寄存器、缓存等,所述存储单元还可以是所述终端内的位于所述芯片外部的存储单元,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。
其中,上述任一处提到的处理器,可以是一个通用中央处理器,微处理器,ASIC,或一个或多个用于控制上述模型运行方法的程序执行的集成电路。
另外需说明的是,以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的系统实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。

Claims (23)

1.一种模型运行方法,其特征在于,所述方法包括:
获取第一代码,所述第一代码用于描述一机器学习模型;
当处理所述第一代码的模式为动态图模式时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算;当所述模型的前向计算执行完成之后,将处理所述第一代码的模式从所述动态图模式切换至静态图模式;当处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;根据所述模型的计算图执行所述模型的前向计算,或根据所述模型的计算图执行所述模型的前向计算和反向计算;
当处理所述第一代码的模式为静态图模式时,根据所述第一代码生成所述模型的计算图;以及根据所述模型的计算图执行所述模型的前向计算,或根据所述模型的计算图执行所述模型的前向计算和反向计算。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:确定处理所述第一代码的模式。
3.根据权利要求2所述的方法,其特征在于,所述确定处理所述第一代码的模式,包括:
在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若检测到用于调试所述第一代码的调试信号,确定处理所述第一代码的模式继续采用所述动态图模式;或者,
在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;或者,
在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若检测到所述调试信号,确定处理所述第一代码的模式从所述静态图模式切换至所述动态图模式;或者,
在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式继续采用所述静态图模式。
4.根据权利要求2所述的方法,其特征在于,所述确定处理所述第一代码的模式,包括:
从所述第一代码中获取模式选择指令;
根据所述模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,触发执行如下步骤:根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,触发执行如下步骤:根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图,以及根据所述算子的计算图执行所述模型的前向计算;当所述模型的前向计算执行完成之后,将处理所述第一代码的模式从所述动态图模式切换至静态图模式;当处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;根据所述模型的计算图执行所述模型的前向计算和反向计算。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述模式选择指令指示所述静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;
根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图,所述前向计算的计算图包括一个或多个所述算子的计算图;
根据所述模型的计算图执行所述模型的前向计算。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述模式选择指令指示所述静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;
根据所述语法树生成前向计算的计算图;
根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图,所述前向计算的计算图和所述反向计算的计算图分别包括一个或多个所述算子的计算图;
根据所述模型的计算图执行所述模型的前向计算和反向计算。
9.根据权利要求7或8所述的方法,其特征在于,所述遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,包括:
对所述第一代码包括的第一运算符进行分析,以确定所述第一运算符为支持的运算符,或者所述第一运算符为随机数相关的运算符,或者所述第一运算符为不支持的运算符,其中,所述第一运算符表示所述第一代码包括的至少一个运算符中的任意一个运算符;
所述第一运算符为支持的运算符,确定具有所述第一运算符对应的第一算子的计算图;或者,
所述第一运算符为随机数相关的运算符,确定具有所述第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定所述第一运算符对应的第一算子能够复用所述随机数缓存地址中缓存的随机数;或者,
所述第一运算符为不支持的运算符,确定所述第一运算符是否对所述模型的前向计算或反向计算产生影响,若所述第一运算符对所述模型的前向计算和反向计算都不产生影响,确定忽略掉所述第一运算符。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述方法,还包括:
在所述算子为随机数相关的运算符对应的算子的情况下,根据所述算子的计算图生成随机数,并缓存所述随机数。
11.一种模型运行系统,其特征在于,所述模型运行系统包括:
代码获取模块,用于获取第一代码,所述第一代码用于描述一机器学习模型;
计算图生成模块,用于当处理所述代码获取模块获取到的所述第一代码的模式为动态图模式时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图;
执行计算模块,用于根据所述计算图生成模块生成的所述算子的计算图执行所述模型的前向计算;
模式切换模块,用于当所述执行计算模块完成所述模型的前向计算之后,将处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;
所述计算图生成模块,还用于当所述模式切换模块将处理所述第一代码的模式切换至所述静态图模式之后,根据所述第一代码和所述算子的计算图生成所述模型的计算图;
所述执行计算模块,还用于根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算和反向计算;
所述计算图生成模块,还用于当处理所述代码获取模块获取到的所述第一代码的模式为静态图模式时,根据所述第一代码生成所述模型的计算图;
所述执行计算模块,用于根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算,或根据所述计算图生成模块生成的所述模型的计算图执行所述模型的前向计算和反向计算。
12.根据权利要求11所述的系统,其特征在于,所述模型运行系统,还包括:模式确定模块,用于确定处理所述第一代码的模式。
13.根据权利要求12所述的系统,其特征在于,所述模式确定模块,用于在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若检测到用于调试所述第一代码的调试信号,确定处理所述第一代码的模式继续采用所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为动态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式从所述动态图模式切换至所述静态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若检测到所述调试信号,确定处理所述第一代码的模式从所述静态图模式切换至所述动态图模式;或者,在获取到所述第一代码时,处理所述第一代码的模式为静态图模式,若未检测到所述调试信号,确定处理所述第一代码的模式继续采用所述静态图模式。
14.根据权利要求12所述的系统,其特征在于,所述模式确定模块,用于从所述第一代码中获取模式选择指令;根据所述模式选择指令确定处理所述第一代码的模式为静态图模式或者动态图模式。
15.根据权利要求14所述的系统,其特征在于,所述计算图生成模块,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
16.根据权利要求14所述的系统,其特征在于,所述计算图生成模块,还用于当所述模式选择指令指示所述动态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,根据所述第一代码包括的至少一个运算符生成所述至少一个运算符对应的算子的计算图。
17.根据权利要求14所述的系统,其特征在于,所述计算图生成模块,还用于当所述模式选择指令指示静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图,其中,所述前向计算的计算图构成所述模型的计算图,所述前向计算的计算图包括一个或多个所述算子的计算图。
18.根据权利要求14所述的系统,其特征在于,所述计算图生成模块,还用于当所述模式选择指令指示静态图模式、且根据所述第一代码确定需要执行所述模型的前向计算和反向计算时,遍历所述第一代码包括的至少一个运算符,采用源码分析的方式识别出所述至少一个运算符对应的算子,以及根据所述第一代码中运算符的结构关系和所述至少一个运算符对应的算子生成语法树;根据所述语法树生成前向计算的计算图;根据所述前向计算的计算图生成反向计算的计算图,其中,所述前向计算的计算图和所述反向计算的计算图构成所述模型的计算图,所述前向计算的计算图和所述反向计算的计算图分别包括一个或多个所述算子的计算图。
19.根据权利要求17或18所述的系统,其特征在于,所述计算图生成模块,还用于对所述第一代码包括的第一运算符进行分析,以确定所述第一运算符为支持的运算符,或者所述第一运算符为随机数相关的运算符,或者所述第一运算符为不支持的运算符,其中,所述第一运算符表示所述第一代码包括的至少一个运算符中的任意一个运算符;所述第一运算符为支持的运算符,确定中具有所述第一运算符对应的第一算子的计算图;或者,所述第一运算符为随机数相关的运算符,确定中具有所述第一运算符对应的第一算子的计算图,以及,当随机数缓存地址为非空时,确定所述第一运算符对应的第一算子能够复用所述随机数缓存地址中缓存的随机数;或者,所述第一运算符为不支持的运算符,确定所述第一运算符是否对所述模型的前向计算或反向计算产生影响,若所述第一运算符对所述模型的前向计算和反向计算都不产生影响,确定忽略掉所述第一运算符。
20.根据权利要求11至19中任一项所述的系统,其特征在于,所述模型运行系统,还包括:
随机数缓存模块,用于在所述算子为随机数相关的运算符对应的算子的情况下,根据所述算子的计算图生成随机数,并缓存所述随机数。
21.一种模型运行系统,其特征在于,所述模型运行系统包括:处理器,存储器;所述处理器、所述存储器之间进行相互的通信;
所述存储器用于存储指令;
所述处理器用于执行所述存储器中的所述指令,执行如权利要求1至10中任一项所述的方法。
22.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-10任意一项所述的方法。
23.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-10任意一项所述的方法。
CN201911208567.7A 2019-09-18 2019-11-30 一种模型运行方法和系统 Active CN112529206B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2020/099872 WO2021051958A1 (zh) 2019-09-18 2020-07-02 一种模型运行方法和系统

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201910883770 2019-09-18
CN2019108837708 2019-09-18

Publications (2)

Publication Number Publication Date
CN112529206A true CN112529206A (zh) 2021-03-19
CN112529206B CN112529206B (zh) 2024-05-17

Family

ID=74974606

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911208567.7A Active CN112529206B (zh) 2019-09-18 2019-11-30 一种模型运行方法和系统

Country Status (1)

Country Link
CN (1) CN112529206B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114201242A (zh) * 2021-12-10 2022-03-18 北京百度网讯科技有限公司 用于处理数据的方法、装置、设备以及存储介质
CN114661301A (zh) * 2022-05-24 2022-06-24 深圳思谋信息科技有限公司 图形处理单元编译方法、装置、编译加速库和存储介质
CN114897146A (zh) * 2022-05-18 2022-08-12 北京百度网讯科技有限公司 模型生成方法、装置和电子设备
WO2023125858A1 (zh) * 2021-12-30 2023-07-06 本源量子计算科技(合肥)股份有限公司 一种数据处理方法、机器学习框架系统及相关设备
CN116483482A (zh) * 2023-05-19 2023-07-25 北京百度网讯科技有限公司 深度学习任务处理方法、系统、装置、设备及介质
JP7488322B2 (ja) 2021-12-10 2024-05-21 ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド アクセス方法、装置、電子機器及びコンピュータ記憶媒体

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120174006A1 (en) * 2010-07-02 2012-07-05 Scenemachine, Llc System, method, apparatus and computer program for generating and modeling a scene
WO2018166801A1 (en) * 2017-03-15 2018-09-20 Siemens Aktiengesellschaft A method for deployment and execution of a machine learning model on a field device
WO2018223330A1 (en) * 2017-06-08 2018-12-13 Alibaba Group Holding Limited Method and apparatus for distributed machine learning system
JP2019101740A (ja) * 2017-12-01 2019-06-24 コニカミノルタ株式会社 機械学習方法及び装置
US20190213107A1 (en) * 2018-01-05 2019-07-11 International Business Machines Corporation Automated debugging with combined static and dynamic analysis
CN110135575A (zh) * 2017-12-29 2019-08-16 英特尔公司 用于分布式机器学习的通信优化
CN110192210A (zh) * 2016-11-04 2019-08-30 谷歌有限责任公司 构建和处理用于动态结构化机器学习模型的计算图

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120174006A1 (en) * 2010-07-02 2012-07-05 Scenemachine, Llc System, method, apparatus and computer program for generating and modeling a scene
CN110192210A (zh) * 2016-11-04 2019-08-30 谷歌有限责任公司 构建和处理用于动态结构化机器学习模型的计算图
WO2018166801A1 (en) * 2017-03-15 2018-09-20 Siemens Aktiengesellschaft A method for deployment and execution of a machine learning model on a field device
WO2018223330A1 (en) * 2017-06-08 2018-12-13 Alibaba Group Holding Limited Method and apparatus for distributed machine learning system
JP2019101740A (ja) * 2017-12-01 2019-06-24 コニカミノルタ株式会社 機械学習方法及び装置
CN110135575A (zh) * 2017-12-29 2019-08-16 英特尔公司 用于分布式机器学习的通信优化
US20190213107A1 (en) * 2018-01-05 2019-07-11 International Business Machines Corporation Automated debugging with combined static and dynamic analysis

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114201242A (zh) * 2021-12-10 2022-03-18 北京百度网讯科技有限公司 用于处理数据的方法、装置、设备以及存储介质
CN114201242B (zh) * 2021-12-10 2023-01-31 北京百度网讯科技有限公司 用于处理数据的方法、装置、设备以及存储介质
JP7488322B2 (ja) 2021-12-10 2024-05-21 ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド アクセス方法、装置、電子機器及びコンピュータ記憶媒体
WO2023125858A1 (zh) * 2021-12-30 2023-07-06 本源量子计算科技(合肥)股份有限公司 一种数据处理方法、机器学习框架系统及相关设备
CN114897146A (zh) * 2022-05-18 2022-08-12 北京百度网讯科技有限公司 模型生成方法、装置和电子设备
CN114897146B (zh) * 2022-05-18 2023-11-03 北京百度网讯科技有限公司 模型生成方法、装置和电子设备
CN114661301A (zh) * 2022-05-24 2022-06-24 深圳思谋信息科技有限公司 图形处理单元编译方法、装置、编译加速库和存储介质
CN116483482A (zh) * 2023-05-19 2023-07-25 北京百度网讯科技有限公司 深度学习任务处理方法、系统、装置、设备及介质
CN116483482B (zh) * 2023-05-19 2024-03-01 北京百度网讯科技有限公司 深度学习任务处理方法、系统、装置、设备及介质

Also Published As

Publication number Publication date
CN112529206B (zh) 2024-05-17

Similar Documents

Publication Publication Date Title
CN112529206B (zh) 一种模型运行方法和系统
RU2668973C2 (ru) Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме
CN110569106B (zh) 代码加载方法、装置、电子设备及计算机可读介质
CN109426614A (zh) 缺陷检测方法、设备、系统和计算机可读存储介质
US8458681B1 (en) Method and system for optimizing the object code of a program
US8631395B2 (en) Inter-procedural dead catch handler optimizations
CN110741354B (zh) 呈现代码实体调用之间的差异
WO2011133030A1 (en) Improved embedded system performance
US8429632B1 (en) Method and system for debugging merged functions within a program
US8589896B2 (en) Method and system for loading status control of DLL
US20180246706A1 (en) Using dynamic information to refine control flow graphs
CN107015841B (zh) 一种程序编译的预处理方法及程序编译设备
JP2000517077A (ja) コンピュータシステムソフトウェアのテスト方法とシステム
US20130024675A1 (en) Return address optimisation for a dynamic code translator
US9117020B2 (en) Determining control flow divergence due to variable value difference
US20210263837A1 (en) Real time fault localization using combinatorial test design techniques and test case priority selection
KR102118236B1 (ko) 컨트랙트에 대한 운영 체제 지원 기법
CN109471776A (zh) 一种基于以太网的VxWorks操作系统日志收集方法
US11294682B2 (en) Stack traces using shadow stack
CN109542464B (zh) IoT设备脚本程序的开发部署系统、方法及存储介质
CN109542444A (zh) Java应用的监控方法、装置、服务器和存储介质
CN106560797A (zh) 一种基于调试器的单元测试系统及方法
US10452534B2 (en) Asynchronous operation query
US10659321B2 (en) Electronic apparatus for recording debugging information and control method thereof
WO2021051958A1 (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