Upload 2 files
Browse files- __main__.py +25 -0
- gui.py +31 -1
__main__.py
CHANGED
|
@@ -53,6 +53,12 @@ def _config_from_args(args) -> HPCConfig:
|
|
| 53 |
cfg.therm_lambda_tilt = float(args.thermal_tilt)
|
| 54 |
if args.pin_dc:
|
| 55 |
cfg.pin_dc = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
if args.no_q4_fallback:
|
| 57 |
cfg.enable_q4_fallback = False
|
| 58 |
if args.keep_embd:
|
|
@@ -304,6 +310,25 @@ def main() -> None:
|
|
| 304 |
help="zero-DC pin (Q2_K free lunch): re-solve (d, m) on the exact dc=0 line "
|
| 305 |
"after assembly/thermal; strictly lowers SSE while driving row-DC residual to ~0",
|
| 306 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
parser.add_argument(
|
| 308 |
"--format",
|
| 309 |
choices=("mixed", "mixed_q1", "custom", "q1_0", "q3_k", "q4_0", "q2_k"),
|
|
|
|
| 53 |
cfg.therm_lambda_tilt = float(args.thermal_tilt)
|
| 54 |
if args.pin_dc:
|
| 55 |
cfg.pin_dc = True
|
| 56 |
+
if getattr(args, "segment", False):
|
| 57 |
+
cfg.segment = True
|
| 58 |
+
if getattr(args, "segment_k", None) is not None:
|
| 59 |
+
cfg.segment_k = int(args.segment_k)
|
| 60 |
+
if getattr(args, "segment_iters", None) is not None:
|
| 61 |
+
cfg.segment_iters = int(args.segment_iters)
|
| 62 |
if args.no_q4_fallback:
|
| 63 |
cfg.enable_q4_fallback = False
|
| 64 |
if args.keep_embd:
|
|
|
|
| 310 |
help="zero-DC pin (Q2_K free lunch): re-solve (d, m) on the exact dc=0 line "
|
| 311 |
"after assembly/thermal; strictly lowers SSE while driving row-DC residual to ~0",
|
| 312 |
)
|
| 313 |
+
parser.add_argument(
|
| 314 |
+
"--segment",
|
| 315 |
+
action="store_true",
|
| 316 |
+
help="band-major superblock segmentation for Q2_K / Q3_K (emits HPCQ.SEG.V1 label channels)",
|
| 317 |
+
)
|
| 318 |
+
parser.add_argument(
|
| 319 |
+
"--segment-k",
|
| 320 |
+
type=int,
|
| 321 |
+
default=None,
|
| 322 |
+
metavar="K",
|
| 323 |
+
help="band count k for superblock segmentation (default 16)",
|
| 324 |
+
)
|
| 325 |
+
parser.add_argument(
|
| 326 |
+
"--segment-iters",
|
| 327 |
+
type=int,
|
| 328 |
+
default=None,
|
| 329 |
+
metavar="N",
|
| 330 |
+
help="proxy fixed-point rounds for superblock segmentation (default 4)",
|
| 331 |
+
)
|
| 332 |
parser.add_argument(
|
| 333 |
"--format",
|
| 334 |
choices=("mixed", "mixed_q1", "custom", "q1_0", "q3_k", "q4_0", "q2_k"),
|
gui.py
CHANGED
|
@@ -184,6 +184,9 @@ class HPCQuantizeGUI:
|
|
| 184 |
self.thermal_var = tk.IntVar(value=0)
|
| 185 |
self.thermal_tilt_var = tk.DoubleVar(value=1.0)
|
| 186 |
self.pin_dc_var = tk.BooleanVar(value=False)
|
|
|
|
|
|
|
|
|
|
| 187 |
|
| 188 |
self.cli_preview_var = tk.StringVar()
|
| 189 |
self.status_var = tk.StringVar(value="Ready.")
|
|
@@ -217,6 +220,11 @@ class HPCQuantizeGUI:
|
|
| 217 |
self.promote_attn_q4_var,
|
| 218 |
self.quant_format_var,
|
| 219 |
self.thermal_var,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 220 |
):
|
| 221 |
v.trace_add("write", lambda *_: self._update_cli_preview())
|
| 222 |
|
|
@@ -483,10 +491,23 @@ class HPCQuantizeGUI:
|
|
| 483 |
text="Pin DC residual to 0 (Q2_K free lunch)",
|
| 484 |
variable=self.pin_dc_var,
|
| 485 |
).grid(row=3, column=0, columnspan=2, sticky=tk.W, padx=4, pady=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 486 |
ttk.Label(
|
| 487 |
spec_f, text="(λ multiplier ≥1 during thermal anneal; ~1e2–1e3 ≈ zero-coherent-residual '0-error' anneal)",
|
| 488 |
foreground="#93c5fd",
|
| 489 |
-
).grid(row=
|
| 490 |
|
| 491 |
# Right: GGUF Tensor Browser
|
| 492 |
browser_frame = ttk.LabelFrame(right_pane, text="3. GGUF Tensor Inspector & Live Status", padding=8)
|
|
@@ -816,6 +837,9 @@ class HPCQuantizeGUI:
|
|
| 816 |
therm_passes=max(0, int(self.thermal_var.get())),
|
| 817 |
therm_lambda_tilt=max(1.0, float(self.thermal_tilt_var.get())),
|
| 818 |
pin_dc=bool(self.pin_dc_var.get()),
|
|
|
|
|
|
|
|
|
|
| 819 |
quant_format=self.quant_format_var.get(),
|
| 820 |
custom_quant_map=self._custom_map_for_plan() or {},
|
| 821 |
enable_q4_fallback=bool(self.q4_fallback_var.get()) and self.quant_format_var.get() not in ("q2_k", "q3_k"),
|
|
@@ -869,6 +893,12 @@ class HPCQuantizeGUI:
|
|
| 869 |
cmd += ["--thermal-tilt", str(float(self.thermal_tilt_var.get()))]
|
| 870 |
if self.pin_dc_var.get():
|
| 871 |
cmd += ["--pin-dc"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 872 |
cmd.append("--verbose")
|
| 873 |
return " ".join(shlex.quote(part) for part in cmd)
|
| 874 |
|
|
|
|
| 184 |
self.thermal_var = tk.IntVar(value=0)
|
| 185 |
self.thermal_tilt_var = tk.DoubleVar(value=1.0)
|
| 186 |
self.pin_dc_var = tk.BooleanVar(value=False)
|
| 187 |
+
self.segment_var = tk.BooleanVar(value=False)
|
| 188 |
+
self.segment_k_var = tk.IntVar(value=16)
|
| 189 |
+
self.segment_iters_var = tk.IntVar(value=4)
|
| 190 |
|
| 191 |
self.cli_preview_var = tk.StringVar()
|
| 192 |
self.status_var = tk.StringVar(value="Ready.")
|
|
|
|
| 220 |
self.promote_attn_q4_var,
|
| 221 |
self.quant_format_var,
|
| 222 |
self.thermal_var,
|
| 223 |
+
self.thermal_tilt_var,
|
| 224 |
+
self.pin_dc_var,
|
| 225 |
+
self.segment_var,
|
| 226 |
+
self.segment_k_var,
|
| 227 |
+
self.segment_iters_var,
|
| 228 |
):
|
| 229 |
v.trace_add("write", lambda *_: self._update_cli_preview())
|
| 230 |
|
|
|
|
| 491 |
text="Pin DC residual to 0 (Q2_K free lunch)",
|
| 492 |
variable=self.pin_dc_var,
|
| 493 |
).grid(row=3, column=0, columnspan=2, sticky=tk.W, padx=4, pady=1)
|
| 494 |
+
ttk.Checkbutton(
|
| 495 |
+
spec_f,
|
| 496 |
+
text="Band-Major Segmentation (Q2_K / Q3_K)",
|
| 497 |
+
variable=self.segment_var,
|
| 498 |
+
).grid(row=3, column=2, columnspan=2, sticky=tk.W, padx=4, pady=1)
|
| 499 |
+
ttk.Label(spec_f, text="Seg Bands (k):").grid(row=4, column=0, sticky=tk.W, padx=4, pady=2)
|
| 500 |
+
ttk.Spinbox(
|
| 501 |
+
spec_f, from_=2, to=16, increment=1, textvariable=self.segment_k_var, width=8
|
| 502 |
+
).grid(row=4, column=1, sticky=tk.EW, padx=4, pady=2)
|
| 503 |
+
ttk.Label(spec_f, text="Seg Iters:").grid(row=4, column=2, sticky=tk.W, padx=4, pady=2)
|
| 504 |
+
ttk.Spinbox(
|
| 505 |
+
spec_f, from_=1, to=12, increment=1, textvariable=self.segment_iters_var, width=8
|
| 506 |
+
).grid(row=4, column=3, sticky=tk.EW, padx=4, pady=2)
|
| 507 |
ttk.Label(
|
| 508 |
spec_f, text="(λ multiplier ≥1 during thermal anneal; ~1e2–1e3 ≈ zero-coherent-residual '0-error' anneal)",
|
| 509 |
foreground="#93c5fd",
|
| 510 |
+
).grid(row=5, column=0, columnspan=4, sticky=tk.W, padx=4, pady=(0, 2))
|
| 511 |
|
| 512 |
# Right: GGUF Tensor Browser
|
| 513 |
browser_frame = ttk.LabelFrame(right_pane, text="3. GGUF Tensor Inspector & Live Status", padding=8)
|
|
|
|
| 837 |
therm_passes=max(0, int(self.thermal_var.get())),
|
| 838 |
therm_lambda_tilt=max(1.0, float(self.thermal_tilt_var.get())),
|
| 839 |
pin_dc=bool(self.pin_dc_var.get()),
|
| 840 |
+
segment=bool(self.segment_var.get()),
|
| 841 |
+
segment_k=max(2, int(self.segment_k_var.get())),
|
| 842 |
+
segment_iters=max(1, int(self.segment_iters_var.get())),
|
| 843 |
quant_format=self.quant_format_var.get(),
|
| 844 |
custom_quant_map=self._custom_map_for_plan() or {},
|
| 845 |
enable_q4_fallback=bool(self.q4_fallback_var.get()) and self.quant_format_var.get() not in ("q2_k", "q3_k"),
|
|
|
|
| 893 |
cmd += ["--thermal-tilt", str(float(self.thermal_tilt_var.get()))]
|
| 894 |
if self.pin_dc_var.get():
|
| 895 |
cmd += ["--pin-dc"]
|
| 896 |
+
if self.segment_var.get():
|
| 897 |
+
cmd += ["--segment"]
|
| 898 |
+
if int(self.segment_k_var.get()) != 16:
|
| 899 |
+
cmd += ["--segment-k", str(int(self.segment_k_var.get()))]
|
| 900 |
+
if int(self.segment_iters_var.get()) != 4:
|
| 901 |
+
cmd += ["--segment-iters", str(int(self.segment_iters_var.get()))]
|
| 902 |
cmd.append("--verbose")
|
| 903 |
return " ".join(shlex.quote(part) for part in cmd)
|
| 904 |
|