| 271 | } |
| 272 | |
| 273 | static bool ggml_quantize_weights( |
| 274 | std::ifstream& fin, |
| 275 | std::ofstream& fout, |
| 276 | const ggml_ftype ftype, |
| 277 | const std::vector<std::string>& to_quant, |
| 278 | const std::vector<std::string>& to_skip) { |
| 279 | ggml_type qtype = GGML_TYPE_F32; |
| 280 | |
| 281 | switch (ftype) { |
| 282 | case GGML_FTYPE_MOSTLY_Q4_0: |
| 283 | qtype = GGML_TYPE_Q4_0; |
| 284 | break; |
| 285 | case GGML_FTYPE_MOSTLY_Q4_1: |
| 286 | qtype = GGML_TYPE_Q4_1; |
| 287 | break; |
| 288 | case GGML_FTYPE_MOSTLY_Q5_0: |
| 289 | qtype = GGML_TYPE_Q5_0; |
| 290 | break; |
| 291 | case GGML_FTYPE_MOSTLY_Q5_1: |
| 292 | qtype = GGML_TYPE_Q5_1; |
| 293 | break; |
| 294 | case GGML_FTYPE_MOSTLY_Q8_0: |
| 295 | qtype = GGML_TYPE_Q8_0; |
| 296 | break; |
| 297 | case GGML_FTYPE_UNKNOWN: |
| 298 | case GGML_FTYPE_ALL_F32: |
| 299 | case GGML_FTYPE_MOSTLY_F16: |
| 300 | case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: |
| 301 | case GGML_FTYPE_MOSTLY_Q2_K: |
| 302 | case GGML_FTYPE_MOSTLY_Q3_K: |
| 303 | case GGML_FTYPE_MOSTLY_Q4_K: |
| 304 | case GGML_FTYPE_MOSTLY_Q5_K: |
| 305 | case GGML_FTYPE_MOSTLY_Q6_K: { |
| 306 | fprintf(stderr, "%s: invalid model type %d\n", __func__, ftype); |
| 307 | return false; |
| 308 | } |
| 309 | }; |
| 310 | |
| 311 | if (!ggml_is_quantized(qtype)) { |
| 312 | fprintf(stderr, "%s: invalid quantization type %d (%s)\n", __func__, qtype, ggml_type_name(qtype)); |
| 313 | return false; |
| 314 | } |
| 315 | |
| 316 | size_t total_size_org = 0; |
| 317 | size_t total_size_new = 0; |
| 318 | |
| 319 | std::vector<float> work; |
| 320 | |
| 321 | std::vector<uint8_t> data_u8; |
| 322 | std::vector<ggml_fp16_t> data_f16; |
| 323 | std::vector<float> data_f32; |
| 324 | |
| 325 | std::vector<int64_t> hist_all(1 << 4, 0); |
| 326 | |
| 327 | int32_t n_tensors = 0; |
| 328 | read_safe(fin, n_tensors); |
| 329 | write_safe(fout, n_tensors); |
| 330 |
no test coverage detected