def max_output_bit_width(self, input_bit_width, weight_bit_width): max_input_val = max_uint(bit_width=input_bit_width, narrow_range=False) max_fc_val = self.weight_quant.tensor_quant.int_quant.max_uint( weight_bit_width) max_output_val = max_input_val * max_fc_val * self.in_features output_bit_width = ceil_ste(torch.log2(max_output_val)) return output_bit_width
def max_output_bit_width(self, input_bit_width, weight_bit_width): max_uint_input = max_uint(bit_width=input_bit_width, narrow_range=False) max_kernel_val = self.weight_quant.tensor_quant.int_quant.max_uint( weight_bit_width) group_size = self.out_channels // self.groups max_uint_output = max_uint_input * max_kernel_val * self.kernel_size[ 0] * self.kernel_size[1] * group_size max_output_bit_width = ceil_ste(torch.log2(max_uint_output)) return max_output_bit_width
def __add__(self, other): QuantTensor.check_input_type(other) self.check_scaling_factors_same(other) output_tensor = self.tensor + other.tensor output_scale = (self.scale + other.scale) / 2 max_uint_val = max_uint(narrow_range=False, bit_width=self.bit_width) max_uint_val += max_uint(narrow_range=False, bit_width=other.bit_width) output_bit_width = ceil_ste(torch.log2(max_uint_val)) output = pack_quant_tensor(output_tensor, output_scale, output_bit_width) return output
def forward(self, x: torch.Tensor): return ceil_ste(x)
def max_output_bit_width(self, input_bit_width): max_uint_input = max_uint(bit_width=input_bit_width, narrow_range=False) max_uint_output = max_uint_input * self.kernel_size * self.kernel_size max_output_bit_width = ceil_ste(torch.log2(max_uint_output)) return max_output_bit_width
def max_output_bit_width(self, input_bit_width): max_input_val = max_uint(bit_width=input_bit_width, narrow_range=False) max_output_val = max_input_val * self.in_channels output_bit_width = ceil_ste(torch.log2(max_output_val)) return output_bit_width