Lowering ============ Lowering将Top层OP下沉到Tpu层OP,它支持的类型有F32/F16/BF16/INT8对称/INT8非对称。 当转换INT8时,它涉及到量化算法;针对不同的芯片,量化算法是不一样的,比如有的支持perchannel,有的不支持; 有的支持32位Multiplier,有的只支持8位,等等。 所以Lowering将算子从芯片无关层(TOP),转换到了芯片相关层(TPU)。 基本过程 ------------ .. _lowering: .. figure:: ../assets/lowering.png :height: 5cm :align: center Lowering过程 Lowering的过程,如图所示(:ref:`lowering`) * Top算子可以分f32和int8两种,前者是大多数网络的情况;后者是如tflite等量化过的网络的情况 * f32算子可以直接转换成f32/f16/bf16的tpu层算子,如果要转int8,则需要类型是calibrated_type * int8算子只能直接转换成tpu层int8算子 混合精度 ------------ .. _mix_prec: .. figure:: ../assets/mix_prec.png :height: 8cm :align: center 混合精度 当OP之间的类型不一致时,则插入CastOp,如图所示(:ref:`mix_prec`)。 这里假定输出的类型与输入的类型相同,如果不同则需要特殊处理,比如embedding无论输出是什么类型,输入都是uint类型。