|
|
|
@ -16,9 +16,6 @@
|
|
|
|
|
#include <unordered_map>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
static const char * type_strs[] = { "q4_0", "q4_1", "i8", "i16", "i32", "f16", "f32" };
|
|
|
|
|
static_assert(sizeof(type_strs) == GGML_TYPE_COUNT * sizeof(char *), "Incomplete type list");
|
|
|
|
|
|
|
|
|
|
struct quantize_stats_params {
|
|
|
|
|
std::string model = "models/7B/ggml-model-f16.bin";
|
|
|
|
|
bool verbose = false;
|
|
|
|
@ -224,7 +221,7 @@ int main(int argc, char ** argv) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
int j;
|
|
|
|
|
for (j = 0; j < GGML_TYPE_COUNT && strcmp(argv[i], type_strs[j]) != 0; j++) {
|
|
|
|
|
for (j = 0; j < GGML_TYPE_COUNT && strcmp(argv[i], ggml_type_name((ggml_type) i)) != 0; j++) {
|
|
|
|
|
// find match
|
|
|
|
|
}
|
|
|
|
|
if (j < GGML_TYPE_COUNT) {
|
|
|
|
@ -279,7 +276,7 @@ int main(int argc, char ** argv) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (params.verbose) {
|
|
|
|
|
printf("%s: type %s, size %" PRId64 "\n", kv_tensor.first.c_str(), type_strs[kv_tensor.second->type], ggml_nelements(kv_tensor.second));
|
|
|
|
|
printf("%s: type %s, size %" PRId64 "\n", kv_tensor.first.c_str(), ggml_type_name(kv_tensor.second->type), ggml_nelements(kv_tensor.second));
|
|
|
|
|
}
|
|
|
|
|
if (kv_tensor.second->type == GGML_TYPE_F16) {
|
|
|
|
|
is_f16 = true;
|
|
|
|
@ -304,13 +301,14 @@ int main(int argc, char ** argv) {
|
|
|
|
|
|
|
|
|
|
// loop throught quantization types
|
|
|
|
|
for (int i = 0; i < GGML_TYPE_COUNT; i++) {
|
|
|
|
|
const ggml_type type = (ggml_type) i;
|
|
|
|
|
if (!params.include_types.empty() && std::find(params.include_types.begin(), params.include_types.end(), i) == params.include_types.end()) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
quantize_fns_t qfns = ggml_internal_get_quantize_fn(i);
|
|
|
|
|
if (qfns.quantize_row_q && qfns.dequantize_row_q) {
|
|
|
|
|
if (params.verbose) {
|
|
|
|
|
printf("testing %s ...\n", type_strs[i]);
|
|
|
|
|
printf("testing %s ...\n", ggml_type_name(type));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
error_stats global_stats {};
|
|
|
|
@ -322,7 +320,7 @@ int main(int argc, char ** argv) {
|
|
|
|
|
if (params.verbose) {
|
|
|
|
|
printf(" %s ...\n", kv_tensor.first.c_str());
|
|
|
|
|
}
|
|
|
|
|
std::string layer_name { type_strs[i] };
|
|
|
|
|
std::string layer_name { ggml_type_name(type) };
|
|
|
|
|
layer_name += "::" + kv_tensor.first;
|
|
|
|
|
test_roundtrip_on_layer(
|
|
|
|
|
layer_name,
|
|
|
|
@ -337,7 +335,7 @@ int main(int argc, char ** argv) {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
print_error_stats(type_strs[i], global_stats, params.print_histogram);
|
|
|
|
|
print_error_stats(ggml_type_name(type), global_stats, params.print_histogram);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|