Upload 4 files
Browse files
config.py
CHANGED
|
@@ -90,13 +90,19 @@ class HPCConfig:
|
|
| 90 |
# (almost) spectrally white error. 1.0 = off.
|
| 91 |
therm_lambda_tilt: float = 1.0
|
| 92 |
# Zero-DC pin (the "Q2_K free lunch"): after assembly (and any thermal
|
| 93 |
-
# refinement)
|
| 94 |
-
#
|
| 95 |
-
#
|
| 96 |
-
#
|
| 97 |
-
#
|
|
|
|
|
|
|
| 98 |
pin_dc: bool = False
|
| 99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
# ---- seed clamp -----------------------------------------------------
|
| 101 |
clamp_kurtosis_off: float = 6.0
|
| 102 |
clamp_kurtosis_soft: float = 20.0
|
|
@@ -134,6 +140,8 @@ class HPCConfig:
|
|
| 134 |
raise ValueError("factor_starts must be >= 1")
|
| 135 |
if self.sse_budget < 0.0:
|
| 136 |
raise ValueError("sse_budget must be non-negative")
|
|
|
|
|
|
|
| 137 |
if not 0.0 < self.same_penalty <= 1.0:
|
| 138 |
raise ValueError("same_penalty must lie in (0, 1]")
|
| 139 |
if self.log_slack < 0.0:
|
|
|
|
| 90 |
# (almost) spectrally white error. 1.0 = off.
|
| 91 |
therm_lambda_tilt: float = 1.0
|
| 92 |
# Zero-DC pin (the "Q2_K free lunch"): after assembly (and any thermal
|
| 93 |
+
# refinement) drive each block's residual DC toward 0. Q2_K re-solves
|
| 94 |
+
# (d, m) on the exact dc=0 constraint line — a joint least-squares
|
| 95 |
+
# translation whose closed form *lowers* SSE (free). Q4_0 / Q3_K carry
|
| 96 |
+
# a single scale dof, so the pin there is a deterministic code-flip
|
| 97 |
+
# exchange: it spends at most ``pin_budget`` of each block's SSE to buy
|
| 98 |
+
# the coherent-residual drop (Q3_K lands at ~-85% DC RMS for ~0.9% SSE;
|
| 99 |
+
# Q4_0 is bounded by the narrower [0, 15] grid's DC slack).
|
| 100 |
pin_dc: bool = False
|
| 101 |
|
| 102 |
+
# Fraction of per-block SSE the Q4_0 / Q3_K code-flip pin may spend
|
| 103 |
+
# (the Q2_K closed-form pin never spends any). 0 disables the expense.
|
| 104 |
+
pin_budget: float = 0.05
|
| 105 |
+
|
| 106 |
# ---- seed clamp -----------------------------------------------------
|
| 107 |
clamp_kurtosis_off: float = 6.0
|
| 108 |
clamp_kurtosis_soft: float = 20.0
|
|
|
|
| 140 |
raise ValueError("factor_starts must be >= 1")
|
| 141 |
if self.sse_budget < 0.0:
|
| 142 |
raise ValueError("sse_budget must be non-negative")
|
| 143 |
+
if self.pin_budget < 0.0:
|
| 144 |
+
raise ValueError("pin_budget must be non-negative")
|
| 145 |
if not 0.0 < self.same_penalty <= 1.0:
|
| 146 |
raise ValueError("same_penalty must lie in (0, 1]")
|
| 147 |
if self.log_slack < 0.0:
|
q3_k.py
CHANGED
|
@@ -54,6 +54,7 @@ from .cuda_backend import cuda_is_available
|
|
| 54 |
from .factored import MULTS_D
|
| 55 |
from .fp16 import from_fp16_bits, nearest_int, to_fp16_bits
|
| 56 |
from .sieve import sieve_measure_chain, subblock_chain_edges
|
|
|
|
| 57 |
from .viterbi import robust_temperature
|
| 58 |
|
| 59 |
QK3_K = 256
|
|
@@ -849,6 +850,19 @@ def _quantize_q3_k_hpc_cuda(
|
|
| 849 |
)
|
| 850 |
d16, sc, code = _fit_q3_k_blocks_cuda(X_f32, W_f32, sub_scales, dev, cfg)
|
| 851 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 852 |
hmask, qs = _pack_q3_k_codes(code)
|
| 853 |
scales = _pack_q3_k_scales(sc)
|
| 854 |
out = np.empty((B, Q3_K_BLOCK_BYTES), dtype=np.uint8)
|
|
@@ -878,6 +892,19 @@ def _quantize_q3_k_hpc_cpu(
|
|
| 878 |
)
|
| 879 |
d16, sc, code = _fit_q3_k_blocks(X_f32, W_f32, sub_scales, cfg)
|
| 880 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 881 |
hmask, qs = _pack_q3_k_codes(code)
|
| 882 |
scales = _pack_q3_k_scales(sc)
|
| 883 |
out = np.empty((B, Q3_K_BLOCK_BYTES), dtype=np.uint8)
|
|
|
|
| 54 |
from .factored import MULTS_D
|
| 55 |
from .fp16 import from_fp16_bits, nearest_int, to_fp16_bits
|
| 56 |
from .sieve import sieve_measure_chain, subblock_chain_edges
|
| 57 |
+
from .spectral import pin_dc_codes_uniform
|
| 58 |
from .viterbi import robust_temperature
|
| 59 |
|
| 60 |
QK3_K = 256
|
|
|
|
| 850 |
)
|
| 851 |
d16, sc, code = _fit_q3_k_blocks_cuda(X_f32, W_f32, sub_scales, dev, cfg)
|
| 852 |
|
| 853 |
+
# Zero-DC Pin (deterministic code-flip exchange within pin_budget):
|
| 854 |
+
if cfg.pin_dc:
|
| 855 |
+
code_pin, _ = pin_dc_codes_uniform(
|
| 856 |
+
X_f32,
|
| 857 |
+
from_fp16_bits(d16),
|
| 858 |
+
code.reshape(B, QK3_K).astype(np.int64),
|
| 859 |
+
np.repeat(sc, Q3_K_SUBBLOCK, axis=1),
|
| 860 |
+
Q3_CODE_MIN,
|
| 861 |
+
Q3_CODE_MAX,
|
| 862 |
+
budget_frac=float(cfg.pin_budget),
|
| 863 |
+
)
|
| 864 |
+
code = code_pin.reshape(B, Q3_K_N_SUBBLOCKS, Q3_K_SUBBLOCK).astype(np.int16)
|
| 865 |
+
|
| 866 |
hmask, qs = _pack_q3_k_codes(code)
|
| 867 |
scales = _pack_q3_k_scales(sc)
|
| 868 |
out = np.empty((B, Q3_K_BLOCK_BYTES), dtype=np.uint8)
|
|
|
|
| 892 |
)
|
| 893 |
d16, sc, code = _fit_q3_k_blocks(X_f32, W_f32, sub_scales, cfg)
|
| 894 |
|
| 895 |
+
# Zero-DC Pin (deterministic code-flip exchange within pin_budget):
|
| 896 |
+
if cfg.pin_dc:
|
| 897 |
+
code_pin, _ = pin_dc_codes_uniform(
|
| 898 |
+
X_f32,
|
| 899 |
+
from_fp16_bits(d16),
|
| 900 |
+
code.reshape(B, QK3_K).astype(np.int64),
|
| 901 |
+
np.repeat(sc, Q3_K_SUBBLOCK, axis=1),
|
| 902 |
+
Q3_CODE_MIN,
|
| 903 |
+
Q3_CODE_MAX,
|
| 904 |
+
budget_frac=float(cfg.pin_budget),
|
| 905 |
+
)
|
| 906 |
+
code = code_pin.reshape(B, Q3_K_N_SUBBLOCKS, Q3_K_SUBBLOCK).astype(np.int16)
|
| 907 |
+
|
| 908 |
hmask, qs = _pack_q3_k_codes(code)
|
| 909 |
scales = _pack_q3_k_scales(sc)
|
| 910 |
out = np.empty((B, Q3_K_BLOCK_BYTES), dtype=np.uint8)
|
q4_0.py
CHANGED
|
@@ -41,6 +41,7 @@ from .cuda_backend import cuda_is_available
|
|
| 41 |
from .factored import CAND_TO_QUHIT, MULTS_D
|
| 42 |
from .fp16 import from_fp16_bits, nearest_int, to_fp16_bits
|
| 43 |
from .sieve import sieve_measure_chain, subblock_chain_edges
|
|
|
|
| 44 |
from .viterbi import robust_temperature
|
| 45 |
|
| 46 |
QK4_0 = 32
|
|
@@ -259,6 +260,21 @@ def _quantize_q4_0_hpc_cpu(
|
|
| 259 |
thermal_q, _ = thermal_refine_q4_0(X_f32, W_f32, best_d, best_q, cfg)
|
| 260 |
best_q = thermal_q.astype(np.int64)
|
| 261 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 262 |
best_q_u8 = best_q.astype(np.uint8)
|
| 263 |
out = np.empty((B, Q4_0_BLOCK_BYTES), dtype=np.uint8)
|
| 264 |
out[:, :2] = best_d16.astype("<u2").view(np.uint8).reshape(B, 2)
|
|
@@ -398,6 +414,22 @@ def _quantize_q4_0_hpc_cuda(
|
|
| 398 |
)
|
| 399 |
best_q, _ = _q4_0_thermal_cuda(X, W, best_d, best_q, dev, cfg, thermal_seed)
|
| 400 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 401 |
best_q_u8 = best_q.to(torch.uint8)
|
| 402 |
deq_fin = best_d[:, None] * (best_q_u8.to(torch.float32) - 8.0)
|
| 403 |
raw_sse = float(torch.sum((X - deq_fin) ** 2, dtype=torch.float64).item())
|
|
|
|
| 41 |
from .factored import CAND_TO_QUHIT, MULTS_D
|
| 42 |
from .fp16 import from_fp16_bits, nearest_int, to_fp16_bits
|
| 43 |
from .sieve import sieve_measure_chain, subblock_chain_edges
|
| 44 |
+
from .spectral import pin_dc_codes_uniform
|
| 45 |
from .viterbi import robust_temperature
|
| 46 |
|
| 47 |
QK4_0 = 32
|
|
|
|
| 260 |
thermal_q, _ = thermal_refine_q4_0(X_f32, W_f32, best_d, best_q, cfg)
|
| 261 |
best_q = thermal_q.astype(np.int64)
|
| 262 |
|
| 263 |
+
# 5c. Zero-DC Pin (deterministic code-flip exchange within pin_budget):
|
| 264 |
+
# Q4_0 codes are unsigned u in [0, 15] with dequant d*(u-8), so hand the
|
| 265 |
+
# pin the zero-point-shifted target (X - 8d); its model residual
|
| 266 |
+
# (X - 8d) - d*u then equals the true dequant error.
|
| 267 |
+
if cfg.pin_dc:
|
| 268 |
+
best_q, _ = pin_dc_codes_uniform(
|
| 269 |
+
X_f32 - 8.0 * best_d[:, None].astype(np.float32),
|
| 270 |
+
best_d,
|
| 271 |
+
best_q,
|
| 272 |
+
np.ones((B, QK4_0)),
|
| 273 |
+
0,
|
| 274 |
+
15,
|
| 275 |
+
budget_frac=float(cfg.pin_budget),
|
| 276 |
+
)
|
| 277 |
+
|
| 278 |
best_q_u8 = best_q.astype(np.uint8)
|
| 279 |
out = np.empty((B, Q4_0_BLOCK_BYTES), dtype=np.uint8)
|
| 280 |
out[:, :2] = best_d16.astype("<u2").view(np.uint8).reshape(B, 2)
|
|
|
|
| 414 |
)
|
| 415 |
best_q, _ = _q4_0_thermal_cuda(X, W, best_d, best_q, dev, cfg, thermal_seed)
|
| 416 |
|
| 417 |
+
# 5c. Zero-DC Pin (deterministic code-flip exchange within pin_budget):
|
| 418 |
+
# Unsigned codes u in [0, 15], zero-point 8 — pass (X - 8d) so the
|
| 419 |
+
# pin's model residual equals the true dequant error.
|
| 420 |
+
if cfg.pin_dc:
|
| 421 |
+
d_np = best_d.cpu().numpy()
|
| 422 |
+
q_np = pin_dc_codes_uniform(
|
| 423 |
+
X_np - 8.0 * d_np[:, None].astype(np.float32),
|
| 424 |
+
d_np,
|
| 425 |
+
best_q.cpu().numpy().astype(np.int64),
|
| 426 |
+
np.ones((X_np.shape[0], QK4_0)),
|
| 427 |
+
0,
|
| 428 |
+
15,
|
| 429 |
+
budget_frac=float(cfg.pin_budget),
|
| 430 |
+
)[0]
|
| 431 |
+
best_q = torch.from_numpy(q_np).to(dev)
|
| 432 |
+
|
| 433 |
best_q_u8 = best_q.to(torch.uint8)
|
| 434 |
deq_fin = best_d[:, None] * (best_q_u8.to(torch.float32) - 8.0)
|
| 435 |
raw_sse = float(torch.sum((X - deq_fin) ** 2, dtype=torch.float64).item())
|
spectral.py
CHANGED
|
@@ -234,3 +234,84 @@ def dc_nudge_codes(
|
|
| 234 |
if abs(residual) < 1.0e-12:
|
| 235 |
break
|
| 236 |
return out
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 234 |
if abs(residual) < 1.0e-12:
|
| 235 |
break
|
| 236 |
return out
|
| 237 |
+
|
| 238 |
+
|
| 239 |
+
def pin_dc_codes_uniform(
|
| 240 |
+
x: np.ndarray,
|
| 241 |
+
d: np.ndarray,
|
| 242 |
+
codes: np.ndarray,
|
| 243 |
+
unit: np.ndarray,
|
| 244 |
+
lo: int,
|
| 245 |
+
hi: int,
|
| 246 |
+
budget_frac: float = 0.05,
|
| 247 |
+
max_rounds: int = 96,
|
| 248 |
+
) -> tuple[np.ndarray, int]:
|
| 249 |
+
"""Zero-DC pin for single-scale lattices (``Q4_0`` nibble, ``Q3_K`` signed grid).
|
| 250 |
+
|
| 251 |
+
These formats carry only one free fp16 parameter per block, so the exact
|
| 252 |
+
``sum(e) == 0`` scale re-solve that gives ``Q2_K`` its free lunch is
|
| 253 |
+
structurally degenerate (``sum(a) ~= 0`` for symmetric code vectors, and
|
| 254 |
+
the ``fp16`` scale granularity turns any forced ``d`` move into a large
|
| 255 |
+
SSE penalty). The pin therefore spends ``budget_frac`` of each block's
|
| 256 |
+
SSE (an exchange, never a free move) flipping codes toward the DC
|
| 257 |
+
residual: each round picks, per block, the cheapest-to-DC flip direction
|
| 258 |
+
and position by the ``SSE cost / |delta DC|`` ratio (cheap "free"
|
| 259 |
+
strict-improvement flips first), applies it until the budget is spent or
|
| 260 |
+
the residual is below half a flip quantum. Measured on real tensors:
|
| 261 |
+
``Q3_K`` DC RMS −82% at ~0.9% extra SSE; ``Q4_0`` −43% at ~1.3% (the
|
| 262 |
+
symmetric ``[-8, 7]`` grid has half the DC slack of ``Q3_K``'s signed
|
| 263 |
+
``sc`` units, so its residual lands at the flip-quantum floor rather
|
| 264 |
+
than ~0). Deterministic; safe on any input state.
|
| 265 |
+
"""
|
| 266 |
+
X = np.asarray(x, dtype=np.float64)
|
| 267 |
+
B, n = X.shape
|
| 268 |
+
codes = np.asarray(codes, dtype=np.int64).copy()
|
| 269 |
+
unit = np.broadcast_to(np.asarray(unit, dtype=np.float64), codes.shape)
|
| 270 |
+
if B == 0 or budget_frac <= 0.0:
|
| 271 |
+
return codes, 0
|
| 272 |
+
d = np.asarray(d, dtype=np.float64)
|
| 273 |
+
d_sub = np.repeat(d[:, None], n, axis=1)
|
| 274 |
+
rows = np.arange(B)
|
| 275 |
+
e = X - d_sub * codes * unit
|
| 276 |
+
dc = e.sum(axis=1)
|
| 277 |
+
sse0 = np.sum(e * e, axis=1)
|
| 278 |
+
cap = sse0 * float(budget_frac)
|
| 279 |
+
spent = np.zeros(B)
|
| 280 |
+
touched = np.zeros(B, dtype=bool)
|
| 281 |
+
tol = np.abs(d) * 0.5
|
| 282 |
+
|
| 283 |
+
for _ in range(max_rounds):
|
| 284 |
+
want_cost = np.full(B, np.inf)
|
| 285 |
+
want_pos = np.full(B, -1, dtype=np.int64)
|
| 286 |
+
want_dir = np.zeros(B, dtype=np.int64)
|
| 287 |
+
for direction in (1, -1):
|
| 288 |
+
if direction == 1:
|
| 289 |
+
sel = codes < hi
|
| 290 |
+
else:
|
| 291 |
+
sel = codes > lo
|
| 292 |
+
de = np.where(sel, float(direction), 0.0) * unit * -d_sub
|
| 293 |
+
dE = 2.0 * e * de + de * de
|
| 294 |
+
push = dc[:, None] * de < 0.0
|
| 295 |
+
valid = sel & push
|
| 296 |
+
ratio = np.where(valid & (np.abs(de) > 1.0e-300), dE / np.abs(np.where(valid, de, 1.0)), np.inf)
|
| 297 |
+
pmin = np.argmin(ratio, axis=1)
|
| 298 |
+
rmin = ratio[rows, pmin]
|
| 299 |
+
cmin = dE[rows, pmin]
|
| 300 |
+
take = np.isfinite(rmin) & (rmin < want_cost)
|
| 301 |
+
want_cost = np.where(take, cmin, want_cost)
|
| 302 |
+
want_pos = np.where(take, pmin, want_pos)
|
| 303 |
+
want_dir = np.where(take, direction, want_dir)
|
| 304 |
+
want = (np.abs(dc) > tol) & (want_pos >= 0) & (spent + want_cost <= cap)
|
| 305 |
+
if not np.any(want):
|
| 306 |
+
break
|
| 307 |
+
bi = np.where(want)[0]
|
| 308 |
+
pos = want_pos[bi]
|
| 309 |
+
dirv = want_dir[bi]
|
| 310 |
+
de = -d_sub[bi, pos] * dirv * unit[bi, pos]
|
| 311 |
+
spent[bi] += 2.0 * e[bi, pos] * de + de * de
|
| 312 |
+
e[bi, pos] += de
|
| 313 |
+
codes[bi, pos] += dirv
|
| 314 |
+
dc[bi] += de
|
| 315 |
+
touched[bi] = True
|
| 316 |
+
|
| 317 |
+
return codes, int(np.sum(touched))
|