深度学习优化器封装方法与流程

文档序号:32306724发布日期:2022-11-23 10:14阅读:81来源:国知局
深度学习优化器封装方法与流程

1.本发明涉及人工智能技术领域,特别涉及一种深度学习优化器封装方法。


背景技术:

2.深度学习任务通常使用优化器(optimizer)来优化神经网络的参数,优化过程一般分为神经网络前向推理、梯度反向传导、参数优化和梯度清零三个步骤。
3.不同深度学习任务可能会采取不同的优化功能,例如使用混合精度训练来降低显存占用、提高训练速度;使用梯度累降低算法对显存的要求。使用者通常需要基于使用的深度学习后端自行实现这些训练功能。
4.不同深度学习后端(pytorch、tensorflow、paddlepaddle等)的优化器接口有所不同,有着不同的调度逻辑;不同硬件平台(gpu、tpu、ipu等)在对接不同深度学习后端时,神经网络的优化流程也存在不同程度的限制;因此当使用者基于特定后端、特定硬件去实现相应的优化功能时具有较大的学习成本。


技术实现要素:

5.本发明的目的在于提供一种深度学习优化器封装方法,以解决现有的深度学习基于特定后端、特定硬件去实现相应的优化功能具有学习成本高的问题。
6.为解决上述技术问题,本发明提供一种深度学习优化器封装方法,包括:
7.进行优化器封装;通过优化器封装将多个深度学习后端、以及多个硬件的优化器类实例封装成自身的属性,提供通用的的接口,以降低使用者的学习成本;以及根据深度学习后端的特性,在统一接口的前提下,设计不同后端优化器封装的继承层级;
8.以及基于统一的接口,实现了不同后端的优化策略,以降低用户使用优化策略的学习成本。
9.根据不同深度学习后端的特性,通过优化器封装选择不同的继承层级,以降低使用特定优化策略功能的学习成本,也就是说,根据不同深度学习后端的特性,将优化器功能封装成统一的参数或者抽象出接口相同的,新的优化器封装实例。降低使用者的学习成本。
10.优化器功能由使用者自己选择,而优化器封装是根据不同深度学习后端的特性设计出不同的继承层级。如图3中的继承层级。
11.可选的,在所述的深度学习优化器封装方法中,还包括:
12.抽象出(提取)优化器封装基类,以提供通用的优化器接口;
13.对不同深度学习后端的优化器进行封装,形成优化器封装子类,以能够进行梯度反向传递功能、参数更新功能、梯度清零功能、以及梯度累加功能;
14.根据深度学习训练后端的特性,派生出对应后端混合精度训练的优化器封装子类;
15.支持的优化器策略包括混合精度训练和梯度累加。
16.可选的,在所述的深度学习优化器封装方法中,还包括:
17.为各个深度学习后端的优化器提供通用的接口;
18.约定基于优化器封装标准的参数更新流程;以及
19.使用优化器封装字典管理多个优化器,以调用通用的接口返回所有优化器的状态信息,所述状态信息包括学习率和动量。
20.可选的,在所述的深度学习优化器封装方法中,所述通用的接口包括:
21.参数更新接口,被配置为能够完成一次标准的梯度反向传递、参数更新、梯度清零流程;调用参数更新接口时,根据优化器封装的配置进行梯度累加;以及
22.优化器封装上下文接口,被配置为开启混合精度训练、加速梯度累加的上下文。
23.可选的,在所述的深度学习优化器封装方法中,基于优化器封装标准的参数更新流程包括:
24.开启优化器封装上下文接口的上下文,在上下文中进行网络的前向推理,实现混合精度训练或加速梯度累加;以及
25.在优化器封装上下文接口的上下文之外调用参数更新接口,通过参数更新接口自带的梯度累加功能、梯度截断功能更新参数。
26.可选的,在所述的深度学习优化器封装方法中,优化器封装基类包括基类接口,基类接口包括:
27.参数更新接口、梯度反向传播接口、步进接口、梯度清零接口、获取状态字典接口、加载状态字典接口、优化器封装上下文接口、迭代次数初始化接口、获取学习率接口、获取动量接口、获取参数组接口。
28.可选的,在所述的深度学习优化器封装方法中,优化器封装子类与基类接口一致,对不同深度学习后端的优化器进行封装,实现和基类优化器封装相同的接口;
29.优化器封装子类功能包括:
30.开启混合精度训练,由于不同深度学习后端开启混合精度训练的流程不同,根据不同后端选择开启混合精度训练的方式;以及
31.支持梯度累加,并优化分布式训练时梯度累加的效率,加速分布式训练下的梯度累加;
32.其中根据不同后端选择开启混合精度训练的方式包括:
33.能够通过初始化参数开启混合精度训练;
34.能够通过上下文的方式开启混合精度训练;
35.可选的,在所述的深度学习优化器封装方法中,还包括:
36.实现和基类优化器封装相同的接口包括:子类基于对应的后端实现参数更新、梯度反向传播、步进、梯度清零、加载状态字典、获取参数组、获取学习率、获取动量;
37.开启混合精度训练包括:如果对应的后端能够通过初始化全局变量开启混合精度训练,则无需派生额外混合精度子类,如果需要重载数量多于阈值的接口,则进一步派生对应后端的子类,实现混合精度训练;同时在网络前向推理之前开启优化器封装上下文接口的上下文,以保证各后端优化器封装开启混合精度训练的方式一致;
38.通过优化器封装基类实现梯度累加功能;
39.在不开启梯度累加的默认情况下,分布式训练时每次参数更新都会进行梯度同步。因此优化器封装子类需要根据后端特性优化梯度同步逻辑,避免梯度累加时发生非必
要的梯度同步,以加速梯度累加的过程;
40.加速梯度累加需要在模型前向推导时开启优化器封装上下文。
41.可选的,在所述的深度学习优化器封装方法中,还包括:
42.在训练多优化器任务时,例如生成对抗网络,提取优化器封装字典以组织多个优化器封装,以实现用优化器封装字典管理多个优化器封装;
43.优化器封装字典包括:梯度清零接口、获取参数组接口、获取状态字典接口、加载状态字典接口、获取学习率接口、获取动量接口。
44.可选的,在所述的深度学习优化器封装方法中,
45.进行优化器封装,以提供通用的梯度反向传递接口、参数更新接口、梯度清零接口,屏蔽不同深度学习后端、不同硬件的差异;提供通用的接口进行混合精度训练和梯度累加;
46.优化器封装基类派生出不同深度学习后端、不同硬件的优化器封装子类,子类接口与父类统一,实现对应后端功能、硬件梯度反向传递功能、参数更新功能、梯度清零功能;
47.优化器封装子类在硬件平台和深度学习后端允许的情况下,提供通用的接口,实现梯度累加的功能;
48.优化器封装根据对应深度学习后端的特性,选择性的派生对应后端混合精度训练的子类,子类接口与父类统一,按照流程调用时,开启混合精度训练;
49.提供组合式的优化器封装,组合式的优化器封装以键值对的形式存储多个优化器封装,能够同时保存、导出多个优化器的状态。
50.本发明提供了一种深度学习优化器封装方法,通过提出优化器封装的概念,降低了使用者实现特定优化策略的学习成本,优化器封装将不同后端、不同硬件的优化器封装成通用的接口,降低使用者的学习成本。优化器封装根据不同深度学习后端的特性,实现常用的、高性能的优化器功能,如混合精度训练和梯度累加,使用者仅仅需要简单的配置和接口调用,就能使用混合精度训练和梯度累加等训练策略。
51.优化器封装为不同后端的深度学习框架优化器提供了统一的接口,并集成了一些通用的优化策略,如梯度累加和混合精度训练。以训练生成对抗网络任务为例,pytorch、tensorflow、jax使用者通常需要了解对应后端优化器语法,在此基础上实现梯度累加、混合精度训练等训练策略,这样的做法学习成本高,且相应训练策略的实现往往不是最佳的,导致训练效率变低。使用优化器封装后,任意深度学习的后端的使用者可以使用同一套接口来优化模型,无需了解对应后端具体的优化器语法。此外优化器封装提供了高效的梯度累加、混合精度训练策略,无需使用者自行实现,不仅提升开发效率,也提升了训练效率。
附图说明
52.图1是本发明一实施例优化器封装更新流程示意图;
53.图2是本发明一实施例优化器封装基类示意图;
54.图3是本发明一实施例优化器封装子类示意图;
55.图4是本发明一实施例优化器封装字典示意图;
56.图5是根据本发明的系统和/或方法的计算机系统。
具体实施方式
57.下面结合具体实施方式参考附图进一步阐述本发明。
58.应当指出,各附图中的各组件可能为了图解说明而被夸大地示出,而不一定是比例正确的。在各附图中,给相同或功能相同的组件配备了相同的附图标记。
59.在本发明中,除非特别指出,“布置在

上”、“布置在

上方”以及“布置在

之上”并未排除二者之间存在中间物的情况。此外,“布置在

上或上方”仅仅表示两个部件之间的相对位置关系,而在一定情况下、如在颠倒产品方向后,也可以转换为“布置在

下或下方”,反之亦然。
60.在本发明中,各实施例仅仅旨在说明本发明的方案,而不应被理解为限制性的。
61.在本发明中,除非特别指出,量词“一个”、“一”并未排除多个元素的场景。
62.在此还应当指出,在本发明的实施例中,为清楚、简单起见,可能示出了仅仅一部分部件或组件,但是本领域的普通技术人员能够理解,在本发明的教导下,可根据具体场景需要添加所需的部件或组件。另外,除非另行说明,本发明的不同实施例中的特征可以相互组合。例如,可以用第二实施例中的某特征替换第一实施例中相对应或功能相同或相似的特征,所得到的实施例同样落入本技术的公开范围或记载范围。
63.在此还应当指出,在本发明的范围内,“相同”、“相等”、“等于”等措辞并不意味着二者数值绝对相等,而是允许一定的合理误差,也就是说,所述措辞也涵盖了“基本上相同”、“基本上相等”、“基本上等于”。以此类推,在本发明中,表方向的术语“垂直于”、“平行于”等等同样涵盖了“基本上垂直于”、“基本上平行于”的含义。
64.另外,本发明的各方法的步骤的编号并未限定所述方法步骤的执行顺序。除非特别指出,各方法步骤可以以不同顺序执行。
65.以下结合附图和具体实施例对本发明提出的深度学习优化器封装方法作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
66.本发明的目的在于提供一种深度学习优化器封装方法,以解决现有的深度学习基于特定后端、特定硬件去实现相应的优化策略具有学习成本高的问题。
67.为实现上述目的,本发明提供了一种深度学习优化器封装方法,包括:进行优化器封装;通过优化器封装将不同深度学习后端、不同硬件的优化器封装成通用的接口,以降低使用者的学习成本;以及根据不同深度学习后端的特性,设计优化器封装的继承层级,为优化器封装实现梯度累加、混合精度训练的基本功能,以降低使用相应优化策略的学习成本。
68.图1~5提供了本发明的第一个实施例,其示出了深度学习优化器封装方法示意图。
69.为了降低使用者实现特定优化策略的学习成本,本发明提出优化器封装的概念。优化器封装会将不同后端、不同硬件的优化器封装成统一(通用)的接口,降低使用者的学习成本。优化器封装会根据不同深度学习后端的特性,实现常用的、高性能的优化器功能,如混合精度训练和梯度累加,使用者仅仅需要简单的配置和接口调用,就能使用混合精度训练和梯度累加等训练策略。
70.本发明通过抽象出优化器封装基类,提供统一的接口,对不同后端的优化器进行封装,实现梯度反传、参数优化、梯度清零、梯度累加等功能。另外根据训练后端的特性,派
生出对应后端混合精度训练的子类。如图1所示,开始后开启优化器封装上下文接口,进行参数更新,参数更新包括:梯度计算、判断是否更新参数,若是则步进、梯度清零,否则直接结束。
71.如图2所示,优化器封装基类包括基类接口,优化器基类接口设计如下:参数更新接口、梯度反向传播接口、步进接口、梯度清零接口、获取状态字典接口、加载状态字典接口、优化器封装上下文接口、迭代次数初始化接口、获取学习率接口、获取动量接口、获取参数组接口。
72.参数更新接口名称为update_params,该接口功能描述为:接受loss参数,用于计算梯度和更新参数。update_params会按序执行梯度计算、参数更新、梯度清零。此外,update_params还会进行内部计数,每调用一次,_inner_count加一,进而实现梯度累加。该接口的参数列表为:用于计算梯度的损失的loss,其余参数随不同训练后端调整。
73.梯度反向传播接口名称为backward,该接口功能描述为:为不同精度、不同平台的优化其提供统一的梯度计算封装,默认每调用一次backward,内部计数加一。该接口的参数列表包括:用于计算梯度的损失的loss,其余参数随不同训练后端调整。
74.步进接口名称为step,该接口功能描述:为不同精度、不同平台的优化器提供统一的参数更新封装。该接口的参数列表包括:随不同训练后端调整。
75.梯度清零接口名称为zero_grad,该接口功能描述包括:清零优化器所有管理参数的梯度,该接口的参数列表包括:随不同训练后端调整。
76.获取状态字典接口名称为state_dict,该接口功能描述包括:为不同精度、不同平台的优化器提供统一的导出优化器状态字典的封装。该接口的参数列表包括:随不同训练后端调整。
77.加载状态字典接口名称为load_state_dict,该接口功能描述包括:为不同精度、不同平台的优化器提供统一的加载优化器状态字典的封装。该接口的参数列表包括:随不同训练后端调整。
78.优化器封装上下文接口名称为optim_context,该接口功能描述包括:为不同精度、不同平台的优化器提供统一的接口,开启混合精度训练、梯度累加加速相关的上下文。基类默认返回一个空的上下文。该接口的参数列表包括:优化的模型model。
79.迭代次数初始化接口名称为initilize_iter_status,接口功能描述为:初始化内部计数,并根据最大调用次数统计计算梯度累加相关的参数,该接口和深度学习后端无关。该接口的参数列表包括:优化的训练model、初始次数init_counts、最大训练次数max_counts。
80.获取学习率接口名称为get_lr,该接口功能描述包括:为获取不同训练后端的优化器学习率提供统一的接口,该接口的参数列表无。
81.获取动量接口名称为get_momentum,该接口功能描述包括:为获取不同训练后端的优化器动量提供统一的接口,该接口的参数列表无。
82.获取参数组接口名称为params,该接口功能描述包括:返回优化器管理的所有参数,该接口的参数列表无。
83.如图3所示,优化器封装子类的接口和基类一致,需要实现以下3个功能:首先,对不同深度学习后端的优化器进行封装,实现和基类优化器封装相同的接口。其次,开启混合
精度训练;不同深度学习后端开启混合精度训练的流程不同,例如pyorch的amp需要开启autocast的上下文管理器,而tensorflow则需要在初始化阶段设置全局优化策略。因此不同后端开启混合精度训练的方式不同,既允许通过初始化参数开启混合精度训练,也允许通过上下文的方式来开启混合精度训练。如有需要,支持混合精度训练的优化器封装可以单独实现。最后,支持梯度累加,并对优化其分布式实现。
84.对于优化器封装子类的接口的第一个功能,子类需要基于对应后端实现update_params,backward,step,zero_grad,load_state_dict,param_groups,get_lr和get_momentum。
85.对于优化器封装子类的接口的第二个功能,如果对应后端可以通过初始化全局变量开启混合精度训练,则无需派生额外混合精度子类,如果需要重载较多接口,可以进一步派生对应后端的子类,实现混合精度训练。为了保证各后端优化器封装开启混合精度训练的方式一致,统一需要在网络前向推理之前开启optim_context上下文。
86.对于优化器封装子类的接口的第三个功能,优化器封装基类实已经实现了梯度累加功能。然而到默认情况下(不开启梯度累加),update_params每次都需要同步模型梯度,因此子类优化器封装需要基于对应后端的特性,避免梯度累加时,非必要的梯度同步。
87.由于该特性属于附加功能,用于加速分布式环境下的梯度累加训练,因此和混合进度训练一样,通过optim_context接口开启。
88.如图4所示,还包括形成优化器封装字典;训练生成对抗网络通时,生成器和判别器通常需要独立的优化器,因此抽象出优化器封装字典的概念来组织多个优化器封装。使用者可以向访问字典一样访问优化器封装字典中存储的优化器封装。
89.由于loss通常针对单个优化器封装,而优化器封装字典是多个优化器封装的结合,因此优化器封装字典仅仅作为优化器封装的容器,不实现update_params,backward等方法。
90.优化器封装字典包括:梯度清零接口、获取参数组接口、获取状态字典接口、加载状态字典接口、获取学习率接口、获取动量接口。
91.梯度清零接口名称:zero_grad;接口功能描述:清空所有优化器封装的梯度。该接口的参数列表包括:随不同训练后端调整。
92.获取参数组接口名称:params_group;接口功能描述:以字典的形式返回所有优化器封装的参数组;该接口的参数列表包括:无。
93.获取状态字典接口名称:state_dict;接口功能描述:以字典的形式返回所有优化器封装的参数组;该接口的参数列表包括:随不同训练后端调整。
94.加载状态字典接口名称:load_state_dict;接口功能描述:以字典的形式加载所有优化器封装的状态字典;该接口的参数列表包括:随不同训练后端调整。
95.获取学习率接口名称:get_lr;接口功能描述:以字典的形式获取所有优化器的学习率;该接口的参数列表包括:无。
96.获取动量接口名称:get_momentum;接口功能描述:以字典的形式获取所有优化器的动量;该接口的参数列表包括:无。
97.本发明为各个深度学习后端的优化器提供统一的接口,其中核心受保护的接口为参数更新接口、优化器封装上下文接口;本发明约定了基于优化器封装标准的参数更新流
程;本发明使用优化器封装字典来管理多个优化器,可以调用统一的接口返回所有优化器的学习率、动量等状态信息。
98.其中参数更新接口update_params完成一次标准的梯度反传、参数更新、梯度清零流程。调用该接口时,会根据优化器封装的配置进行梯度累加;优化器封装上下文接口optim_context开启混合精度训练、加速梯度累加的上下文。
99.基于优化器封装标准的参数更新流程包括:开启optim_context上下文,在上下文中进行网络的前向推理,实现混合精度训练或加速梯度累加。在optim_context上下文之外调用update_params更新参数(自带梯度累加、梯度截断等功能)。
100.本发明的优化器封装旨在为使用者提供统一的梯度反传、参数优化、梯度清零的接口,屏蔽不同深度学习后端、训练硬件的差异;为使用者提供统一的接口使用混合精度训练,梯度累加等常用优化策略,具有以下有益效果:
101.1.优化器封装基类派生出不同深度学习后端、不同硬件的优化器封装子类,子类接口与父类统一,实现对应后端、硬件梯度反传、参数优化、梯度清零的基本功能。
102.2.优化器封装子类在硬件平台和深度学习后端允许的情况下,提供一个统一的接口,实现梯度累加的功能。
103.3.优化器封装根据对应深度学习后端的特性,选择性的派生对应后端混合精度训练的子类,子类接口与父类统一,按照流程调用时会开启混合精度训练。
104.4.提供组合式的优化器封装。组合式的优化器封装以键值对的形式存储多个优化器封装,允许同时保存、导出多个优化器的状态。
105.本发明的技术方案所得出的深度学习优化器封装方法可在神经网络、计算机、通信等领域中用于实现如下技术效果:降低了使用者实现特定优化策略的学习成本,其原理是优化器封装将不同后端、不同硬件的优化器封装成通用的接口,降低使用者的学习成本。优化器封装根据不同深度学习后端的特性,实现常用的、高性能的优化器功能,如混合精度训练和梯度累加,使用者仅仅需要简单的配置和接口调用,就能使用混合精度训练和梯度累加等训练策略。
106.图5示出了实现根据本发明的系统和/或方法的计算机系统100。如非特殊说明,根据本发明的方法和/或系统可以在图5所示的计算机系统100中执行以实现本发明目的,或者本发明可以在多个根据本发明的计算机系统100中通过网络、如局域网或因特网分布式地实现。本发明的计算机系统100可以包括各种类型的计算机系统、例如手持式设备、膝上型计算机、个人数字助理(pda)、多处理器系统、基于微处理器或可编程消费者电子设备、网络pc、小型机、大型机、网络服务器、平板计算机等等。
107.如图5所示,计算机系统100包括处理器111、系统总线101、系统存储器102、视频适配器105、音频适配器107、硬盘驱动器接口109、光驱接口113、网络接口114、通用串行总线(usb)接口112。系统总线101可以是若干种总线结构类型的任一种,例如存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。系统总线101用于各个总线设备之间的通信。除了图5中所示的总线设备或接口以外,其它的总线设备或接口也是可设想的。系统存储器102包括只读存储器(rom)103和随机存取存储器(ram)104,其中rom 103例如可以存储用于在启动时实现信息传输的基本例程的基本输入/输出系统(bios)数据,而ram 104用于为系统提供存取速度较快的运行内存。计算机系统100还包括用于对硬盘110
进行读写的硬盘驱动器109、用于对诸如cd-rom之类的光介质进行读写光驱接口113等等。硬盘110例如可以存储有操作系统和应用程序。驱动器及其相关联的计算机可读介质为计算机系统100提供了计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。计算机系统100还可以包括用于图像处理和/或图像输出的视频适配器105,其用于连接显示器106等输出设备。计算机系统100还可以包括用于音频处理和/或音频输出的音频适配器107,其用于连接扬声器108等输出设备。此外,计算机系统100还可以包括用于网络连接的网络接口114,其中网络接口114可以通过诸如路由器115之类的网络装置连接到因特网116,其中所述连接可以是有线或无线的。另外,此外,计算机系统100还可以包括用于连接外围设备的通用串行总线接口(usb)112,其中所述外围设备例如包括键盘117、鼠标118以及其它外围设备、例如麦克风、摄像头等。
108.当本发明在图5所述的计算机系统100上实现时,可以通过提出优化器封装的概念,降低了使用者实现特定优化策略的学习成本,优化器封装将不同后端、不同硬件的优化器封装成通用的接口,降低使用者的学习成本。优化器封装根据不同深度学习后端的特性,实现常用的、高性能的优化器功能,如混合精度训练和梯度累加,使用者仅仅需要简单的配置和接口调用,就能使用混合精度训练和梯度累加等训练策略。
109.此外,可以把各实施例提供为可包括其上存储有机器可执行指令的一个或多个机器可读介质的计算机程序产品,这些指令在由诸如计算机、计算机网络或其他电子设备等的一个或多个机器执行时,可以引起一个或多个机器执行根据本发明的各实施例的操作。机器可读介质可以包括但不限于软盘、光盘、cd-rom(紧致盘只读存储器)和磁光盘、rom(只读存储器)、ram(随机存取存储器)、eprom(可擦除可编程只读存储器)、eeprom(电可擦除可编程只读存储器)、磁或光卡、闪速存储器或适用于存储机器可执行指令的其他类型的介质/机器可读介质。
110.此外,可以作为计算机程序产品下载各实施例,其中可以经由通信链路(例如,调制解调器和/或网络连接)由载波或其他传播介质实现和/或调制的一种或多种数据信号把程序从远程计算机(例如,服务器)传输给请求计算机(例如,客户机)。因此,在此所使用的机器可读介质可以包括这样的载波,但这不是必需的。
111.综上,上述实施例对深度学习优化器封装方法的不同构型进行了详细说明,当然,本发明包括但不局限于上述实施中所列举的构型,任何在上述实施例提供的构型基础上进行变换的内容,均属于本发明所保护的范围。本领域技术人员可以根据上述实施例的内容举一反三。
112.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
113.上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1