[Feature] Add torch_npu optimizer (#1079)
parent
f1aca8e307
commit
5b9a1544b0
|
@ -113,3 +113,19 @@ This feature is only available for PyTorch >= 2.0.0.
|
|||
```{warning}
|
||||
`torch.compile` is still under development by PyTorch team. Some models may fail compilation. If you encounter errors during compilation, you can refer to [PyTorch Dynamo FAQ](https://pytorch.org/docs/2.0/dynamo/faq.html) for quick fix, or [TorchDynamo Troubleshooting](https://pytorch.org/docs/2.0/dynamo/troubleshooting.html) to post an issue in PyTorch.
|
||||
```
|
||||
|
||||
## Using faster Optimizers
|
||||
|
||||
If Ascend devices are used, you can use the Ascend optimizers to shorten the training time of the model. The optimizers supported by Ascend devices are as follows:
|
||||
|
||||
- NpuFusedAdadelta
|
||||
- NpuFusedAdam
|
||||
- NpuFusedAdamP
|
||||
- NpuFusedAdamW
|
||||
- NpuFusedBertAdam
|
||||
- NpuFusedLamb
|
||||
- NpuFusedRMSprop
|
||||
- NpuFusedRMSpropTF
|
||||
- NpuFusedSGD
|
||||
|
||||
The usage is the same as native optimizers, and you can refer to [Using Optimizers](../tutorials/optim_wrapper.md#configure-the-optimwapper-in-runner) for more information.
|
||||
|
|
|
@ -114,3 +114,19 @@ runner = Runner(
|
|||
```{warning}
|
||||
`torch.compile` 目前仍然由 PyTorch 团队持续开发中,一些模型可能会编译失败。如果遇到了类似问题,你可以查阅 [PyTorch Dynamo FAQ](https://pytorch.org/docs/2.0/dynamo/faq.html) 解决常见问题,或参考 [TorchDynamo Troubleshooting](https://pytorch.org/docs/2.0/dynamo/troubleshooting.html) 向 PyTorch 提 issue.
|
||||
```
|
||||
|
||||
## 使用更快的优化器
|
||||
|
||||
如果使用了昇腾的设备,可以使用昇腾的优化器从而缩短模型的训练时间。昇腾设备支持的优化器如下
|
||||
|
||||
- NpuFusedAdadelta
|
||||
- NpuFusedAdam
|
||||
- NpuFusedAdamP
|
||||
- NpuFusedAdamW
|
||||
- NpuFusedBertAdam
|
||||
- NpuFusedLamb
|
||||
- NpuFusedRMSprop
|
||||
- NpuFusedRMSpropTF
|
||||
- NpuFusedSGD
|
||||
|
||||
使用方式同原生优化器一样,可参考[优化器的使用](../tutorials/optim_wrapper.md#在执行器中配置优化器封装)。
|
||||
|
|
|
@ -33,6 +33,34 @@ def register_torch_optimizers() -> List[str]:
|
|||
TORCH_OPTIMIZERS = register_torch_optimizers()
|
||||
|
||||
|
||||
def register_torch_npu_optimizers() -> List[str]:
|
||||
"""Register optimizers in ``torch npu`` to the ``OPTIMIZERS`` registry.
|
||||
|
||||
Returns:
|
||||
List[str]: A list of registered optimizers' name.
|
||||
"""
|
||||
if not is_npu_available():
|
||||
return []
|
||||
|
||||
import torch_npu
|
||||
if not hasattr(torch_npu, 'optim'):
|
||||
return []
|
||||
|
||||
torch_npu_optimizers = []
|
||||
for module_name in dir(torch_npu.optim):
|
||||
if module_name.startswith('__') or module_name in OPTIMIZERS:
|
||||
continue
|
||||
_optim = getattr(torch_npu.optim, module_name)
|
||||
if inspect.isclass(_optim) and issubclass(_optim,
|
||||
torch.optim.Optimizer):
|
||||
OPTIMIZERS.register_module(module=_optim)
|
||||
torch_npu_optimizers.append(module_name)
|
||||
return torch_npu_optimizers
|
||||
|
||||
|
||||
NPU_OPTIMIZERS = register_torch_npu_optimizers()
|
||||
|
||||
|
||||
def register_dadaptation_optimizers() -> List[str]:
|
||||
"""Register optimizers in ``dadaptation`` to the ``OPTIMIZERS`` registry.
|
||||
|
||||
|
|
Loading…
Reference in New Issue