You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindspore.boost.rst 7.9 kB

4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. mindspore.boost
  2. ==============================
  3. Boost能够自动加速网络,如减少BN/梯度冻结/累积梯度等。
  4. 注:此特性为测试版本,我们仍在改进其功能。
  5. .. py:class:: mindspore.boost.AdaSum(rank, device_number, group_number, parameter_tuple)
  6. Adaptive Summation(AdaSum)是一种优化深度学习模型并行训练的算法,它可以提升不同规模集群训练的精度,减小不同规模集群调参难度。
  7. **参数:**
  8. - **network** (Cell) – 训练网络,当前网络只支持单个输出。
  9. - **optimizer** (Union[Cell]) – 用于更新权重的优化器。
  10. - **sens** (numbers.Number) – 作为反向传播输入要填充的缩放数,默认值为1.0。
  11. **输入:**
  12. - **delta_weights** (Tuple(Tensor)) – 梯度tuple。
  13. - **parameters** (Tuple(Parameter)) – 当前权重组成的元组。
  14. - **old_parameters** (Tuple(Parameter)) – 旧的权重组成的元组。
  15. **输出:**
  16. Tuple(Tensor), adasum处理后更新的权重。
  17. .. py:class:: mindspore.boost.AutoBoost(level="O0", boost_config_dict="")
  18. MindSpore自动优化算法库。
  19. **参数:**
  20. - **level** (str) – Boost的配置级别。
  21. - **boost_config_dict** (dict) – 用户可配置的超参字典,建议的格式如下:
  22. .. code-block::
  23. {
  24. "boost": {
  25. "mode": "auto",
  26. "less_bn": False,
  27. "grad_freeze": False,
  28. "adasum": False,
  29. "grad_accumulation": False,
  30. "dim_reduce": False},
  31. "common": {
  32. "gradient_split_groups": [50, 100],
  33. "device_number": 8},
  34. "less_bn": {
  35. "fn_flag": True,
  36. "gc_flag": True},
  37. "grad_freeze": {
  38. "param_groups": 10,
  39. "freeze_type": 1,
  40. "freeze_p": 0.7,
  41. "total_steps": 65536},
  42. "grad_accumulation": {
  43. "grad_accumulation_step": 1},
  44. "dim_reduce": {
  45. "rho": 0.55,
  46. "gamma": 0.9,
  47. "alpha": 0.001,
  48. "sigma": 0.4,
  49. "n_components": 32,
  50. "pca_mat_path": None,
  51. "weight_load_dir": None,
  52. "timeout": 1800}
  53. }
  54. **异常:**
  55. - **Valuerror** – Boost的模式不在["auto", "manual", "enable_all", "disable_all"]这个列表中。
  56. .. py:method:: network_auto_process_train()
  57. 使用Boost算法训练。
  58. **返回:**
  59. - network (Cell),训练网络。
  60. - optimizer (Union[Cell]),用于更新权重的优化器。
  61. .. py:method:: network_auto_process_eval()
  62. 使用Boost算法推理。
  63. **返回:**
  64. network(Cell),推理网络。
  65. .. py:class:: mindspore.boost.BoostTrainOneStepCell(network, optimizer, sens=1.0)
  66. Boost网络训练封装类,.
  67. 用优化器封装网络,使用输入训练网络来获取结果。反向图在*construct*函数中自动创建,并且支持多种不同的并行模式。
  68. **参数:**
  69. - **network** (Cell) – 训练网络,当前网络只支持单个输出。
  70. - **optimizer** (Union[Cell]) – 用于更新权重的优化器。
  71. - **sens** (numbers.Number) – 作为反向传播输入要填充的缩放数,默认值为1.0。
  72. **输入:**
  73. - **inputs** (Tuple(Tensor)) – 网络的所有输入组成的元组。
  74. **输出:**
  75. - loss (Tensor),标量Tensor。
  76. - overflow (Tensor),标量Tensor,类型为bool。
  77. - loss scaling value (Tensor),标量Tensor。
  78. **异常:**
  79. - **Typerror** – 如果*sens*不是一个数字。
  80. .. py:method:: gradient_freeze_process(*inputs)
  81. 使用梯度冻结算法训练。
  82. **返回:**
  83. number,网络训练过程中得到的loss值。
  84. .. py:method:: gradient_accumulation_process(loss, grads, sens, *inputs)
  85. 使用梯度累积算法训练。
  86. **返回:**
  87. number,网络训练过程中得到的loss值。
  88. .. py:method:: adasum_process(loss, grads)
  89. 使用Adasum算法训练。
  90. **返回:**
  91. number,网络训练过程中得到的loss值。
  92. .. py:method:: check_adasum_enable()
  93. Adasum算法仅在多卡或者多机场景生效,并且要求卡数符合2的n次方,该函数用来判断adasum算法能否生效。
  94. **返回:**
  95. enable_adasum (bool),Adasum算法是否生效。
  96. .. py:method:: check_dim_reduce_enable()
  97. 使用降维二阶训练算法训练。
  98. **返回:**
  99. enable_dim_reduce (bool),降维二阶训练算法是否生效。
  100. .. py:class:: mindspore.boost.GradientFreeze(param_groups, freeze_type, freeze_p, total_steps)
  101. 梯度冻结算法,根据指定策略随机冻结某些层的梯度,来提升网络训练性能。
  102. 冻结的层数和冻结的概率均可由用户配置。
  103. **参数:**
  104. - **param_groups** (Union[tuple, list]) – 梯度冻结训练的权重。
  105. - **freeze_type** (int) – 梯度冻结训练的策略。
  106. - **freeze_p** (float) – 梯度冻结训练的概率。
  107. - **total_steps** (numbers.Number) – 整个训练过程的总的步数。
  108. .. py:method:: freeze_generate(network, optimizer)
  109. 生成梯度冻结的网络与优化器。
  110. **参数:**
  111. - **network** (Cell) – 训练网络。
  112. - **optimizer** (Union[Cell]) – 用于更新权重的优化器。
  113. .. py:method:: generate_freeze_index_sequence(parameter_groups_number, freeze_strategy, freeze_p, total_steps)
  114. 生成梯度冻结每一步需要冻结的层数。
  115. **参数:**
  116. - **parameter_groups_number** (numbers.Number) – 梯度冻结训练的权重个数。
  117. - **freeze_strategy** (int) – 梯度冻结训练的策略。
  118. - **freeze_p** (float) – 梯度冻结训练的概率。
  119. - **total_steps** (numbers.Number) – 整个训练过程的总的步数。
  120. .. py:method:: split_parameters_groups(net, freeze_para_groups_number)
  121. 拆分用于梯度冻结训练的权重。
  122. **参数:**
  123. - **net** (Cell) – 训练网络。
  124. - **freeze_para_groups_number** (numbers.Number) – 梯度冻结训练的权重个数。
  125. .. py:class:: mindspore.boost.FreezeOpt(opt, train_parameter_groups=None, train_strategy=None)
  126. 支持梯度冻结训练的优化器。
  127. **参数:**
  128. - **opt** (Cell) – 非冻结优化器实例,如*Momentum*,*SGD*。
  129. - **train_parameter_groups** (Union[tuple, list]) – 梯度冻结训练的权重。
  130. - **train_strategy** (Union[tuple(int), list(int), Tensor]) – 梯度冻结训练的策略。
  131. .. py:class:: mindspore.boost.GradientAccumulation(max_accumulation_step, optimizer)
  132. 梯度累积算法,在累积多个step的梯度之后,再用来更新网络权重,可以提高训练效率。
  133. **参数:**
  134. - **max_accumulation_step** (int) – 累积梯度的步数。
  135. - **optimizer** (Cell) – 网络训练使用的优化器。
  136. .. py:class:: mindspore.boost.LessBN(network, fn_flag=False)
  137. LessBN算法,可以在不损失网络精度的前提下,自动减少网络中批归一化(Batch Normalization)的数量,来提升网络性能。
  138. **参数:**
  139. - **network** (Cell) – 待训练的网络模型。
  140. - **fn_flag** (bool) – 是否将网络中最后一个全连接层替换为全归一化层。默认值:False。
  141. .. automodule:: mindspore.boost
  142. :members: