netrans/quantize_types.py

159 lines
5.7 KiB
Python
Executable File

class QuantizerType(object):
ASYMI4 = 'asymi4'
SYMI4 = 'symi4'
PCQI4 = 'pcqi4'
ASYMU4 = 'asymu4'
ASYMI8 = 'asymi8'
SYMI8 = 'symi8'
PCQI8 = 'pcqi8'
ASYMU8 = 'asymu8'
E5M2PCQF8 = 'e5m2pcqf8'
E4M3PCQF8 = 'e4m3pcqf8'
E5M2FP8 = 'e5m2fp8'
E4M3FP8 = 'e4m3fp8'
SYMI16 = 'symi16'
DFPI16 = 'dfpi16'
FP16 = 'fp16'
QBFP16 = 'qbfp16'
AFP16WI4 = 'Afp16Wi4' # Activation: float16 Weight: symi4
AFP16WPGQI4 = 'Afp16Wpgqi4' # Activation: float16 Weight: pgqi4
AI8WPCQI4 = "Ai8Wpcqi4" # Activation: symi8 Weight: pcqi4
AI16WI8 = 'Ai16Wi8' # Activation: symi16 Weight: symi8
AI16WI4 = 'Ai16Wi4' # Activation: symi16 Weight: symi4
AI16WPCQI8 = 'Ai16Wpcqi8' # Activation: symi16 Weight: pcqi8
AI16WPCQI4 = 'Ai16Wpcqi4' # Activation: symi16 Weight: pcqi4
ADFPI16WPCQI8 = 'Adfpi16Wpcqi8' # Activation: dfpi16 Weight: pcqi8
ADFPI16WPCQI4 = 'Adfpi16Wpcqi4' # Activation: dfpi16 Weight: pcqi4
AU10WPCQI8 = 'Au10Wpcqi8' # Activation: asymu16 Weight: pcqi8
AU16WI8 = 'Au16Wi8' # Activation: asymu16 Weight: symi8
AU16WPCQI8 = 'Au16Wpcqi8' # Activation: asymu16 Weight: pcqi8
AFP16WPCQI4 = 'Afp16Wpcqi4' # Activation: float16 Weight: pcqi4
AFP16WPCQI8 = 'Afp16Wpcqi8' # Activation: float16 Weight: pcqi8
# The combination of quantizer and type supported by acuity by default
default_support_quantizer_dict = {
ASYMI4: ["asymmetric_affine", "int4"],
SYMI4: ["symmetric_affine", "int4"],
PCQI4: ["perchannel_symmetric_affine", "int4"],
ASYMU4: ["asymmetric_affine", "uint4"],
ASYMI8: ["asymmetric_affine", "int8"],
SYMI8: ["symmetric_affine", "int8"],
PCQI8: ["perchannel_symmetric_affine", "int8"],
ASYMU8: ["asymmetric_affine", "uint8"],
DFPI16: ["dynamic_fixed_point", "int16"],
FP16: ["float16", "float16"],
QBFP16: ["qbfloat16", "qbfloat16"],
E5M2PCQF8: ["perchannel_float8", 'e5m2'],
E4M3PCQF8: ["perchannel_float8", 'e4m3'],
E5M2FP8: ["float8", 'e5m2'],
E4M3FP8: ["float8", 'e4m3'],
AFP16WI4: ["float16,symmetric_affine", 'float16,int4'],
AFP16WPGQI4: ["pergroup_symmetric_affine", 'int4']
}
# The activation and weight use different quantizer and type
# In each quantizaton format, the first is the quantizer and type of activation, the second is the quantizer and type of weight
# Sunch as SYMI16x8, the quantizer and type of activation is 'symi16', the quantizer and type of weight 'symi8'
a_w_diff_quantizer_dict = {
AI8WPCQI4: {
"symi8": ["symmetric_affine", "int8"],
"pcqsymi4": ["perchannel_symmetric_affine", "int4"],
},
AI16WI8: {
"symi16": ["symmetric_affine", "int16"],
"symi8": ["symmetric_affine", "int8"],
},
AI16WI4: {
"symi16": ["symmetric_affine", "int16"],
"symi4": ["symmetric_affine", "int4"],
},
AI16WPCQI8: {
"symi16": ["symmetric_affine", "int16"],
"pcqsymi8": ["perchannel_symmetric_affine", "int8"],
},
AI16WPCQI4: {
"symi16": ["symmetric_affine", "int16"],
"pcqsymi4": ["perchannel_symmetric_affine", "int4"],
},
AU10WPCQI8: {
"asymu10": ["asymmetric_affine", "uint10"],
"pcqi8": ["perchannel_symmetric_affine", "int8"],
},
AU16WI8: {
"asymu16": ["asymmetric_affine", "uint16"],
"symi8": ["symmetric_affine", "int8"],
},
AU16WPCQI8: {
"asymu16": ["asymmetric_affine", "uint16"],
"pcqsymi8": ["perchannel_symmetric_affine", "int8"],
},
AFP16WPCQI4: {
"float16": ["float16", "float16"],
"pcqsymi4": ["perchannel_symmetric_affine", "int4"],
},
AFP16WPCQI8: {
"float16": ["float16", "float16"],
"pcqsymi8": ["perchannel_symmetric_affine", "int8"],
},
ADFPI16WPCQI8: {
"dfp16": ["dynamic_fixed_point", "int16"],
"pcqsymi4": ["perchannel_symmetric_affine", "int8"],
},
ADFPI16WPCQI4: {
"dfp16": ["dynamic_fixed_point", "int16"],
"pcqsymi4": ["perchannel_symmetric_affine", "int4"],
}
}
# The activation and weight use same quantizer and type
a_w_same_quantizer_dict = {
SYMI16: ["symmetric_affine", "int16"]
}
@classmethod
def get_options(cls):
return [cls.ASYMI4,
cls.SYMI4,
cls.PCQI4,
cls.ASYMU4,
cls.ASYMI8,
cls.SYMI8,
cls.PCQI8,
cls.ASYMU8,
cls.E5M2PCQF8,
cls.E4M3PCQF8,
cls.E5M2FP8,
cls.E4M3FP8,
cls.SYMI16,
cls.DFPI16,
cls.FP16,
cls.QBFP16,
cls.AFP16WI4,
cls.AFP16WPGQI4,
cls.AI8WPCQI4,
cls.AI16WI8,
cls.AI16WI4,
cls.AI16WPCQI8,
cls.AI16WPCQI4,
cls.ADFPI16WPCQI8,
cls.ADFPI16WPCQI4,
# cls.AU10WPCQI8
# cls.AU16WI8,
# cls.AU16WPCQI8,
# cls.AFP16WPCQI8,
# cls.AFP16WPCQI4
]
@classmethod
def get_default_support_quantizer_dict(cls):
return cls.default_support_quantizer_dict
@classmethod
def get_a_w_diff_quantizer_dict(cls):
return cls.a_w_diff_quantizer_dict
@classmethod
def get_a_w_same_quantizer_dict(cls):
return cls.a_w_same_quantizer_dict