8. Lowering

Lowering将Top层OP下沉到Tpu层OP,它支持的类型有F32/F16/BF16/INT8对称/INT8非对称。

当转换INT8时,它涉及到量化算法;针对不同的芯片,量化算法是不一样的,比如有的支持perchannel,有的不支持;

有的支持32位Multiplier,有的只支持8位,等等。

所以Lowering将算子从芯片无关层(TOP),转换到了芯片相关层(TPU)。

8.1. 基本过程

_images/lowering.png

图 8.1 Lowering过程

Lowering的过程,如图所示(Lowering过程)

  • Top算子可以分f32和int8两种,前者是大多数网络的情况;后者是如tflite等量化过的网络的情况

  • f32算子可以直接转换成f32/f16/bf16的tpu层算子,如果要转int8,则需要类型是calibrated_type

  • int8算子只能直接转换成tpu层int8算子

8.2. 混合精度

_images/mix_prec.png

图 8.2 混合精度

当OP之间的类型不一致时,则插入CastOp,如图所示(混合精度)。

这里假定输出的类型与输入的类型相同,如果不同则需要特殊处理,比如embedding无论输出是什么类型,输入都是uint类型。