| 9131 | } |
| 9132 | |
| 9133 | static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, const llama_model_quantize_params * params) { |
| 9134 | ggml_type quantized_type; |
| 9135 | llama_ftype ftype = params->ftype; |
| 9136 | |
| 9137 | switch (params->ftype) { |
| 9138 | case LLAMA_FTYPE_MOSTLY_Q4_0: quantized_type = GGML_TYPE_Q4_0; break; |
| 9139 | case LLAMA_FTYPE_MOSTLY_Q4_1: quantized_type = GGML_TYPE_Q4_1; break; |
| 9140 | case LLAMA_FTYPE_MOSTLY_Q5_0: quantized_type = GGML_TYPE_Q5_0; break; |
| 9141 | case LLAMA_FTYPE_MOSTLY_Q5_1: quantized_type = GGML_TYPE_Q5_1; break; |
| 9142 | case LLAMA_FTYPE_MOSTLY_Q8_0: quantized_type = GGML_TYPE_Q8_0; break; |
| 9143 | case LLAMA_FTYPE_MOSTLY_F16: quantized_type = GGML_TYPE_F16; break; |
| 9144 | case LLAMA_FTYPE_ALL_F32: quantized_type = GGML_TYPE_F32; break; |
| 9145 | |
| 9146 | // K-quants |
| 9147 | case LLAMA_FTYPE_MOSTLY_Q2_K: quantized_type = GGML_TYPE_Q2_K; break; |
| 9148 | case LLAMA_FTYPE_MOSTLY_Q3_K_S: |
| 9149 | case LLAMA_FTYPE_MOSTLY_Q3_K_M: |
| 9150 | case LLAMA_FTYPE_MOSTLY_Q3_K_L: quantized_type = GGML_TYPE_Q3_K; break; |
| 9151 | case LLAMA_FTYPE_MOSTLY_Q4_K_S: |
| 9152 | case LLAMA_FTYPE_MOSTLY_Q4_K_M: quantized_type = GGML_TYPE_Q4_K; break; |
| 9153 | case LLAMA_FTYPE_MOSTLY_Q5_K_S: |
| 9154 | case LLAMA_FTYPE_MOSTLY_Q5_K_M: quantized_type = GGML_TYPE_Q5_K; break; |
| 9155 | case LLAMA_FTYPE_MOSTLY_Q6_K: quantized_type = GGML_TYPE_Q6_K; break; |
| 9156 | |
| 9157 | default: throw std::runtime_error(format("invalid output file type %d\n", ftype)); |
| 9158 | } |
| 9159 | |
| 9160 | int nthread = params->nthread; |
| 9161 | |
| 9162 | if (nthread <= 0) { |
| 9163 | nthread = std::thread::hardware_concurrency(); |
| 9164 | } |
| 9165 | |
| 9166 | // mmap consistently increases speed Linux, and also increases speed on Windows with |
| 9167 | // hot cache. It may cause a slowdown on macOS, possibly related to free memory. |
| 9168 | #if defined(__linux__) || defined(_WIN32) |
| 9169 | constexpr bool use_mmap = true; |
| 9170 | #else |
| 9171 | constexpr bool use_mmap = false; |
| 9172 | #endif |
| 9173 | |
| 9174 | llama_model_loader ml(fname_inp, use_mmap); |
| 9175 | if (ml.use_mmap) { |
| 9176 | ml.mapping.reset(new llama_mmap(&ml.file, /* prefetch */ 0, ggml_is_numa())); |
| 9177 | } |
| 9178 | |
| 9179 | llama_model model; |
| 9180 | llm_load_arch(ml, model); |
| 9181 | llm_load_hparams(ml, model); |
| 9182 | |
| 9183 | struct quantize_state_internal qs(model, params); |
| 9184 | |
| 9185 | if (params->only_copy) { |
| 9186 | ftype = model.ftype; |
| 9187 | } |
| 9188 | |
| 9189 | const size_t align = GGUF_DEFAULT_ALIGNMENT; |
| 9190 | struct gguf_context * ctx_out = ml.sparse_deriv == GGML_SPARSE_INFERENCE ? gguf_init_empty_sparse() : gguf_init_empty(); |
no test coverage detected