APEX

功能说明

APEX混合精度模块是一个集优化性能、精度收敛于一身的综合优化库。APEX功能模式介绍如下:
表1 混合精度模块功能

功能

开启方式举例

描述

O1配置模式

model, optimizer = amp.initialize(model, optimizer, opt_level="O1")
  • 白名单:使用Cube加速的算子,总是使用float16计算,例如Conv2d、Matmul。
  • 黑名单:对精度有要求的算子,总是使用float32计算,例如Softmax、BN。
  • 其他:按照当前输入类型运算,例如Relu,MaxPool。

O2配置模式

model, optimizer = amp.initialize(model, optimizer, opt_level="O2")

针对全网中float32数据类型的算子,按照内置优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升性能并减少内存使用。

O3配置模式

model, optimizer = amp.initialize(model, optimizer, opt_level="O3")

全部算子使用float16计算。

静态Loss Scale功能

model, optimizer = amp.initialize(model, optimizer, opt_level="O2",loss_scale=128.0)

用户可在混合精度训练过程中使用自定义的固定Loss Scale系数。

动态Loss Scale功能

model, optimizer = amp.initialize(model, optimizer, opt_level="O2",loss_scale="dynamic")

用户可使能在混合精度训练过程中,根据浮点计算异常状态动态调整Loss Scale系数。

推荐优先使用opt_level='O2', loss_scale=128.0的配置进行amp.initialize。若无法收敛,推荐使用opt_level='O1', loss_scale=128.0的配置进行amp.initialize。若依然无法收敛,推荐使用opt_level='O1', loss_scale=None的配置进行amp.initialize。

约束与限制

  1. APEX当前版本的实现方式为python实现,不支持APEX中的自定义优化CUDA Kernel。
  2. APEX当前版本只支持适配昇腾AI处理器的混合精度计算和多种融合优化器功能,其他功能暂未支持。融合优化器与原生优化器算法保持一致,但运算速度更快。

安装方法

请用户参考CANN 软件安装指南中“安装PyTorch”章节内的“安装APEX混合精度模块”,安装PyTorch框架对应的APEX即可。

使用说明

更多混合精度模块的使用可参见官方文档

APEX特性支持