Download code/tools/solve_assignment_2tier.py from FlyCockpit/GLM-5.2-NVFP4-AQLM-Abliterated-Vision: direct link, hf CLI and curl.
- Browser
- Download file 2.53 kB
-
https://huggingface.co/FlyCockpit/GLM-5.2-NVFP4-AQLM-Abliterated-Vision/resolve/main/code/tools/solve_assignment_2tier.py
- Command line
-
hf download hf://FlyCockpit/GLM-5.2-NVFP4-AQLM-Abliterated-Vision/code/tools/solve_assignment_2tier.py
-
curl -L -o solve_assignment_2tier.py https://huggingface.co/FlyCockpit/GLM-5.2-NVFP4-AQLM-Abliterated-Vision/resolve/main/code/tools/solve_assignment_2tier.py
2.53 kB
| #!/usr/bin/env python3 | |
| """Two-tier per-expert assignment: hot = NVFP4 (4.5bpw), cold = full 2-bpw | |
| AQLM (w13 1x16, w2 1x16). No base tier. Hot count is set byte-exactly from | |
| the expert budget; hot experts chosen by global routing mass with per-layer | |
| floor/cap. | |
| Usage: solve_assignment_2tier.py <stats.npz> [expert_budget_gb] | |
| Output: /data/glm52-expert-assignment.json {layer: {hot: [...], cold: [...]}} | |
| """ | |
| import json | |
| import os | |
| import sys | |
| import numpy as np | |
| STATS = sys.argv[1] | |
| EXPERT_BUDGET_GB = float(sys.argv[2]) if len(sys.argv) > 2 else 250.0 | |
| OUT = "/data/glm52-expert-assignment.json" | |
| ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| COST_HOT, COST_COLD = 21.234, 9.437 # MB/expert | |
| MIN_HOT, MAX_HOT = 16, 176 | |
| d = np.load(STATS) | |
| counts = d["counts"].astype(np.float64) | |
| layer_ids = d["layer_ids"].tolist() | |
| plan = json.load(open(os.path.join(ROOT, "hybrid_plan.json"))) | |
| whole = set(plan["nvfp4_layers"]) - {78} # none expected now | |
| keep = [i for i, li in enumerate(layer_ids) if li not in whole] | |
| counts = counts[keep] | |
| layer_ids = [layer_ids[i] for i in keep] | |
| n_layers, n_exp = counts.shape | |
| mass = counts / counts.sum(axis=1, keepdims=True).clip(min=1) | |
| total = n_layers * n_exp | |
| budget_mb = EXPERT_BUDGET_GB * 1e3 | |
| n_hot = int((budget_mb - total * COST_COLD) / (COST_HOT - COST_COLD)) | |
| print(f"budget {EXPERT_BUDGET_GB} GB -> {n_hot} hot experts " | |
| f"({n_hot/total:.1%})") | |
| hot = [set() for _ in range(n_layers)] | |
| for li in range(n_layers): | |
| hot[li].update(np.argsort(mass[li])[::-1][:MIN_HOT].tolist()) | |
| placed = sum(len(h) for h in hot) | |
| order = np.dstack(np.unravel_index( | |
| np.argsort(mass, axis=None)[::-1], mass.shape))[0] | |
| for li, ei in order: | |
| if placed >= n_hot: | |
| break | |
| if len(hot[li]) >= MAX_HOT or int(ei) in hot[li]: | |
| continue | |
| hot[li].add(int(ei)) | |
| placed += 1 | |
| out = {} | |
| hot_mass = [] | |
| for li in range(n_layers): | |
| h = sorted(int(x) for x in hot[li]) | |
| out[str(layer_ids[li])] = { | |
| "hot": h, | |
| "cold": [e for e in range(n_exp) if e not in hot[li]], | |
| } | |
| hot_mass.append(mass[li, h].sum()) | |
| json.dump(out, open(OUT, "w")) | |
| tot_mb = placed * COST_HOT + (total - placed) * COST_COLD | |
| print(f"hot: {placed} ({placed/total:.1%}) covering mean " | |
| f"{np.mean(hot_mass):.1%} of routing mass " | |
| f"(min {np.min(hot_mass):.1%} max {np.max(hot_mass):.1%})") | |
| print(f"expert bytes: {tot_mb/1e3:.1f} GB | hot/layer: " | |
| f"min {min(len(h) for h in hot)} max {max(len(h) for h in hot)} " | |
| f"mean {placed/n_layers:.0f}") | |
| print("saved", OUT) | |