File tree 2 files changed +14
-6
lines changed
2 files changed +14
-6
lines changed Original file line number Diff line number Diff line change @@ -299,12 +299,16 @@ def write_tensors(self):
299
299
if self .ftype != gguf .LlamaFileType .ALL_F32 and extra_f16 and not extra_f32 :
300
300
# TODO: cleaner model-specific per-tensor types
301
301
# NOTE: Q1_3 is only relevant for BitNet 1.58b
302
- if self .ftype == gguf .LlamaFileType .MOSTLY_Q1_3 and not any (
303
- self .match_model_tensor_name (new_name , key , None )
304
- for key in [
305
- gguf .MODEL_TENSOR .TOKEN_EMBD ,
306
- gguf .MODEL_TENSOR .OUTPUT ,
307
- ]
302
+ if (
303
+ self .ftype == gguf .LlamaFileType .MOSTLY_Q1_3
304
+ and gguf .can_quantize_to_q1_3 (data )
305
+ and not any (
306
+ self .match_model_tensor_name (new_name , key , None )
307
+ for key in [
308
+ gguf .MODEL_TENSOR .TOKEN_EMBD ,
309
+ gguf .MODEL_TENSOR .OUTPUT ,
310
+ ]
311
+ )
308
312
):
309
313
data = gguf .quantize_q1_3 (data )
310
314
assert data .dtype == np .uint8
Original file line number Diff line number Diff line change @@ -126,6 +126,10 @@ def quantize_q8_0(data: np.ndarray):
126
126
__q1_3_block_size , __q1_3_type_size = GGML_QUANT_SIZES [GGMLQuantizationType .Q1_3 ]
127
127
128
128
129
+ def can_quantize_to_q1_3 (n : np .ndarray ) -> bool :
130
+ return n .shape [- 1 ] % __q1_3_block_size == 0
131
+
132
+
129
133
def __quantize_q1_3_shape_change (s : tuple [int , ...]) -> tuple [int , ...]:
130
134
return (* s [:- 1 ], s [- 1 ] // __q1_3_block_size * __q1_3_type_size )
131
135
You can’t perform that action at this time.
0 commit comments