| |
| """Build top-down with norms pinned at F16 (the norms-F16 probe). |
| |
| Usage: build_normstd.py --utility MODE --size MIB --output FILE |
| """ |
| import argparse |
| import os |
| import sys |
|
|
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
| from model_reader import read_model |
| from imatrix_reader import read_imatrix, detect_tied_groups, build_importance_table |
| from classifier import optimal_classify_topdown, compute_stats |
| from config_generator import generate_flags, format_flags |
| from quantizer import run_dry_run, run_quantization |
|
|
| M = "/mnt/Vsio/Downloads/NeoHorse-1-9B-BF16.gguf" |
| I = "/mnt/Vsio/Downloads/NeoHorse-1-9B.imatrix.gguf" |
|
|
|
|
| def main(): |
| ap = argparse.ArgumentParser() |
| ap.add_argument("--utility", default="mse") |
| ap.add_argument("--size", type=float, default=6500) |
| ap.add_argument("--output", required=True) |
| args = ap.parse_args() |
|
|
| model = read_model(M) |
| im = read_imatrix(I) |
| tg = detect_tied_groups(im) |
| imp = build_importance_table(im, model) |
| a, pad = optimal_classify_topdown(imp, tg, model, args.size, |
| uopt={"mode": args.utility}) |
| ne = {k: v["n_elements"] for k, v in model.get("tensors", {}).items()} |
| n = 0 |
| for t in a: |
| if "norm" in t or ne.get(t, 10 ** 9) < 100000: |
| if a[t] != "F16": |
| n += 1 |
| a[t] = "F16" |
| st = compute_stats(a, ne, pad) |
| print("norms rescued: %d total=%.1f (target %.0f)" % (n, st["total_mib"], args.size)) |
| flags = generate_flags(a, model, "Q5_K_M", args.size) |
| flags["imatrix"] = I |
| print(format_flags(flags)) |
| dry = run_dry_run(flags, M) |
| print("dry-run: %.0f" % (dry or -1)) |
| ok = run_quantization(flags, M, args.output) |
| print("OK" if ok else "FAILED") |
| sys.exit(0 if ok else 1) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|