MCPcopy Create free account
hub / github.com/deepspeedai/DeepSpeed / Quantizer

Class Quantizer

deepspeed/runtime/quantize.py:14–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12
13
14class Quantizer(object):
15
16 def __init__(self,
17 q_groups=1,
18 q_mixed_fp16=False,
19 q_change_ratio=0.01,
20 q_type=0,
21 q_rounding=0,
22 q_verbose=False,
23 q_eigenvalue=False,
24 use_quantizer_kernel=False,
25 layer_num=0):
26
27 self.q_groups = q_groups
28 self.q_mixed_fp16 = q_mixed_fp16
29 self.q_change_ratio = q_change_ratio
30 self.q_type = q_type
31 self.qsteps = 0
32 self.quantize_real_ratio = 1.000
33 self.q_verbose = q_verbose
34 self.q_eigenvalue = q_eigenvalue
35 self.use_quantizer_kernel = use_quantizer_kernel
36 self.q_rounding = q_rounding
37 self.layer_num = layer_num
38
39 def any_precision_switch(self):
40 # Temporary disabled functionality
41 if self.layer_num == 0:
42 return True
43 result = False
44 for index in range(self.layer_num):
45 if self.q_start_bits[index] != self.q_target_bits:
46 next_step = self.qsteps + (TWO_D_PARAMS * (self.layer_num if self.layer_num != 0 else 1))
47 if next_step >= self.q_period[index]:
48 result = True
49 return result
50
51 def quantize(self, parameter_group, overflow, eigenvalue_enabled, block_eigenvalue={}):
52
53 if overflow and not eigenvalue_enabled:
54 return
55
56 self.step()
57
58 self.update_fp16_ratio()
59
60 for i in range(len(parameter_group)):
61 for p in parameter_group[i]:
62 if len(p.size()) > 1 and hasattr(p, "start_bits") and p.start_bits:
63 param_id = id(p)
64 if block_eigenvalue is None:
65 eigenvalue, layer_id = None, 0
66 else:
67 eigenvalue, layer_id = block_eigenvalue[param_id] if param_id in block_eigenvalue else (None,
68 0)
69 if eigenvalue is not None:
70 factor = 1 + math.floor(eigenvalue * 4)
71 p.data = self.compute_quantization(p.data, layer_id, factor)

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected