Refactor and combine lambdas
This commit is contained in:
parent
f05c8483d8
commit
fea99d051a
|
|
@ -660,20 +660,6 @@ static std::unordered_map<std::string, ggml_type> target_bpw_type(
|
||||||
GGML_TYPE_Q6_K
|
GGML_TYPE_Q6_K
|
||||||
};
|
};
|
||||||
|
|
||||||
auto get_values = [&](const std::string & tensor_name) -> const float * {
|
|
||||||
if (!values_data) { return nullptr; }
|
|
||||||
const auto it = values_data->find(remap_imatrix(tensor_name, mapped));
|
|
||||||
if (it == values_data->end()) { return nullptr; }
|
|
||||||
return it->second.data();
|
|
||||||
};
|
|
||||||
|
|
||||||
auto get_activations = [&](const std::string & tensor_name) -> const float * {
|
|
||||||
if (!activations_data) { return nullptr; }
|
|
||||||
const auto it = activations_data->find(remap_imatrix(tensor_name, mapped));
|
|
||||||
if (it == activations_data->end()) { return nullptr; }
|
|
||||||
return it->second.data();
|
|
||||||
};
|
|
||||||
|
|
||||||
auto tensor_bytes = [](const ggml_tensor * t, const ggml_type typ) -> size_t {
|
auto tensor_bytes = [](const ggml_tensor * t, const ggml_type typ) -> size_t {
|
||||||
const int64_t n_per_row = t->ne[0];
|
const int64_t n_per_row = t->ne[0];
|
||||||
const size_t row_sz = ggml_row_size(typ, n_per_row);
|
const size_t row_sz = ggml_row_size(typ, n_per_row);
|
||||||
|
|
@ -991,6 +977,15 @@ static std::unordered_map<std::string, ggml_type> target_bpw_type(
|
||||||
sample_rows_per_slice[slice] = current_sampled_rows;
|
sample_rows_per_slice[slice] = current_sampled_rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto side_data = [&](const std::unordered_map<std::string, std::vector<float>> * m, const std::string & tensor_name) -> std::pair<const float*, size_t> {
|
||||||
|
if (!m) { return {nullptr, 0}; }
|
||||||
|
const std::string key = remap_imatrix(tensor_name, mapped);
|
||||||
|
const auto it = m->find(key);
|
||||||
|
if (it == m->end()) { return {nullptr, 0}; }
|
||||||
|
return { it->second.data(), it->second.size() };
|
||||||
|
};
|
||||||
|
|
||||||
|
// Copy this row's side data (values and activations), or broadcasts to all slices
|
||||||
auto copy_or_broadcast = [&](const float *src, size_t src_sz, std::vector<float> &dst) {
|
auto copy_or_broadcast = [&](const float *src, size_t src_sz, std::vector<float> &dst) {
|
||||||
const size_t want = (size_t)ne2 * (size_t)n_per_row;
|
const size_t want = (size_t)ne2 * (size_t)n_per_row;
|
||||||
dst.clear();
|
dst.clear();
|
||||||
|
|
@ -1005,26 +1000,17 @@ static std::unordered_map<std::string, ggml_type> target_bpw_type(
|
||||||
std::memcpy(dst.data() + s * n_per_row, src, n_per_row * sizeof(float));
|
std::memcpy(dst.data() + s * n_per_row, src, n_per_row * sizeof(float));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Mismatch – safer to skip using it for this tensor
|
|
||||||
LLAMA_LOG_WARN("%s: side data size mismatch for %s: got %zu, expected %zu or %zu; ignoring\n",
|
LLAMA_LOG_WARN("%s: side data size mismatch for %s: got %zu, expected %zu or %zu; ignoring\n",
|
||||||
__func__, name.c_str(), src_sz, (size_t)n_per_row, want);
|
__func__, name.c_str(), src_sz, (size_t)n_per_row, want);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const float * values_all = get_values(name);
|
const auto [values_all, values_sz] = side_data(values_data, name);
|
||||||
const float * activations_all = get_activations(name);
|
const auto [activations_all, activations_sz] = side_data(activations_data, name);
|
||||||
std::vector<float> values_sample;
|
std::vector<float> values_sample;
|
||||||
std::vector<float> activations_sample;
|
std::vector<float> activations_sample;
|
||||||
if (values_all) {
|
if (values_all) { copy_or_broadcast(values_all, values_sz, values_sample); }
|
||||||
auto itv = values_data->find(remap_imatrix(name, mapped));
|
if (activations_all) { copy_or_broadcast(activations_all, activations_sz, activations_sample); }
|
||||||
const size_t sz = itv == values_data->end() ? 0 : itv->second.size();
|
|
||||||
copy_or_broadcast(values_all, sz, values_sample);
|
|
||||||
}
|
|
||||||
if (activations_all) {
|
|
||||||
auto ita = activations_data->find(remap_imatrix(name, mapped));
|
|
||||||
const size_t sz = ita == activations_data->end() ? 0 : ita->second.size();
|
|
||||||
copy_or_broadcast(activations_all, sz, activations_sample);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int64_t nelem = ggml_nelements(t);
|
const int64_t nelem = ggml_nelements(t);
|
||||||
tensor_info info;
|
tensor_info info;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue