| |
| """DSpark-style speculative decoding quantizer for x8Dsub-byte compression. |
| |
| Pure Python standard library only. Applies the x8D quantize law |
| (``Quanta[i] = weight_byte[i] * 0.001``) with **semi-autoregressive |
| speculative decoding** on 8x8 byte blocks, per the AGENTS.md spec: |
| |
| 1. Generate entire 8x8 byte blocks in parallel (not one byte at a time). |
| 2. A lightweight **confidence head** predicts survival probability per position. |
| 3. Positions with confidence **below the 0.001 threshold** are re-masked and |
| regenerated. |
| 4. Under heavy load, dynamically clip verification length to save compute. |
| |
| The flow operates purely on byte coordinates (0-255), never on floats or |
| tokens, so it stays inside the byte law. |
| """ |
|
|
| from __future__ import annotations |
|
|
| import hashlib |
| import random |
| from dataclasses import dataclass |
| from typing import Callable, Dict, Iterable, List, Optional, Sequence, Tuple |
|
|
| from .x8d_export import LAW, quantize, to_u8 |
|
|
| |
| BLOCK_ROWS: int = 8 |
| BLOCK_COLS: int = 8 |
| BLOCK_SIZE: int = BLOCK_ROWS * BLOCK_COLS |
|
|
| |
| CONFIDENCE_THRESHOLD: float = 0.001 |
|
|
| |
| HEAVY_LOAD_VERIFY_CLIP: int = 16 |
|
|
| DEFAULT_VERIFY_LEN: int = 64 |
|
|
| |
| _BYTE_SCALE: Tuple[float, ...] = tuple(b / 256.0 for b in range(256)) |
|
|
| |
| |
| MASK_ID: int = 256 |
|
|
| |
| MODALITIES: Tuple[str, ...] = ("text", "image", "audio", "video") |
|
|
|
|
| @dataclass(frozen=True) |
| class DSparkMaskConfig: |
| """k-parallel DSpark block-mask schedule for one modality. |
| |
| Formalizes the DSpark block configuration: each 8x8 block (64 bytes) is |
| masked, re-noised and verified **in parallel** as one batch of ``k_blocks`` |
| blocks (DiffusionGemma-style block-autoregressive canvas commit, with |
| ``canvas_length`` for the 264-byte vocab / 256-byte canvas parity). |
| |
| Attributes: |
| k_blocks: number of parallel 8x8 blocks decoded per batch. |
| mask_ratio: fraction of the 64 byte positions masked per round. |
| entropy_bound: confidence threshold; positions below it are re-masked |
| and regenerated. |
| verify_clip: verification length per block; None = full 64 bytes, |
| heavy load clips to ``BLOCK_SIZE // 16``. |
| canvas_length: diffusion canvas length (DiffusionGemma parity: 256). |
| modality: one of text/image/audio/video. |
| steps: denoising/regeneration steps per block. |
| """ |
|
|
| k_blocks: int = 8 |
| mask_ratio: float = 0.7 |
| entropy_bound: float = 0.001 |
| verify_clip: Optional[int] = None |
| canvas_length: int = 256 |
| modality: str = "text" |
| steps: int = 48 |
|
|
|
|
| |
| |
| |
| DSPARK_MODALITY_SCHEDULES: Dict[str, DSparkMaskConfig] = { |
| "text": DSparkMaskConfig(), |
| "image": DSparkMaskConfig( |
| modality="image", mask_ratio=0.85, k_blocks=16, steps=32 |
| ), |
| "audio": DSparkMaskConfig( |
| modality="audio", mask_ratio=0.8, k_blocks=8, steps=40 |
| ), |
| "video": DSparkMaskConfig( |
| modality="video", mask_ratio=0.9, k_blocks=32, steps=24 |
| ), |
| } |
|
|
|
|
| class SpeculativeDecodeError(ValueError): |
| """Raised when speculative decoding cannot reach convergence.""" |
|
|
|
|
| def _split_blocks(data: bytes, block_size: int = BLOCK_SIZE) -> List[bytes]: |
| """Split raw bytes into equal-sized blocks, padding the tail with zeros. |
| |
| Args: |
| data: raw weight bytes. |
| block_size: number of bytes per block (default 64 = 8x8). |
| |
| Returns: |
| List of blocks, each exactly ``block_size`` bytes. |
| """ |
| blocks: List[bytes] = [] |
| for i in range(0, len(data), block_size): |
| chunk = data[i : i + block_size] |
| if len(chunk) < block_size: |
| chunk = chunk + bytes(block_size - len(chunk)) |
| blocks.append(chunk) |
| return blocks |
|
|
|
|
| def _block_surrogate(block: bytes, step: int) -> float: |
| """Deterministic pseudo-confidence for a block, in [0, 1). |
| |
| Stand-in for a real lightweight confidence head (the actual model's |
| head would predict survival probability per position). Deterministic so |
| speculative quantization is reproducible. |
| |
| Args: |
| block: 8x8 byte block. |
| step: current decode step (injects schedule dependence). |
| |
| Returns: |
| A confidence value in [0.0, 1.0). |
| """ |
| digest = hashlib.sha256(bytes(block) + bytes([step & 0xFF])).digest() |
| return int.from_bytes(digest[:8], "big") / (2**64 - 1) |
|
|
|
|
| def _verify_positions( |
| quanta: Sequence[float], |
| confidence: Sequence[float], |
| threshold: float = CONFIDENCE_THRESHOLD, |
| heavy_load: bool = False, |
| verify_len: Optional[int] = None, |
| ) -> List[int]: |
| """Return byte positions that FAILED verification (below threshold). |
| |
| Positions whose confidence is below the 0.001 threshold are re-masked |
| for regeneration. Under heavy load the verification length is clipped |
| (only the first ``verify_len`` positions are checked). |
| |
| Args: |
| quanta: sub-byte coordinates for the block. |
| confidence: survival probability per position (parallel to quanta). |
| threshold: x8D survival threshold (default 0.001). |
| heavy_load: clip verification length when True. |
| verify_len: optional explicit verification length. |
| |
| Returns: |
| List of failed byte positions within the block. |
| """ |
| n = len(quanta) |
| if heavy_load: |
| n = min(n, verify_len or (DEFAULT_VERIFY_LEN // HEAVY_LOAD_VERIFY_CLIP)) |
| elif verify_len is not None: |
| n = min(n, verify_len) |
| return [i for i in range(n) if confidence[i] < threshold] |
|
|
|
|
| def speculative_quantize( |
| weight_bytes: bytes, |
| max_steps: int = 16, |
| seed: int = 0, |
| heavy_load: bool = False, |
| verify_len: Optional[int] = None, |
| ) -> Tuple[List[float], Dict[str, int]]: |
| """Speculatively quantize raw weight bytes block-by-block (8x8). |
| |
| Each 8x8 block is generated in parallel in one shot; the confidence head |
| then verifies every position and any position below the 0.001 threshold |
| is re-masked and regenerated. Blocks that never converge raise. |
| |
| Args: |
| weight_bytes: raw uint8 weight bytes. |
| max_steps: regeneration budget per block. |
| seed: RNG seed for reproducible regeneration. |
| heavy_load: enable dynamic verification-length clipping. |
| verify_len: optional verification length override. |
| |
| Returns: |
| ``(quanta, stats)`` where quanta are the sub-byte coordinates and |
| stats reports blocks, regenerations and convergence. |
| """ |
| rng = random.Random(seed) |
| blocks = _split_blocks(weight_bytes) |
| out_quanta: List[float] = [] |
| stats = {"blocks": len(blocks), "regenerations": 0, "converged": 0} |
| step = 0 |
| byte_scale = _BYTE_SCALE |
| for block in blocks: |
| current = block |
| for _ in range(max_steps): |
| current_quanta = quantize(current) |
| |
| block_conf = float(_block_surrogate(current, step)) |
| confidence = [(block_conf + byte_scale[b]) / 2.0 for b in current] |
| failed = _verify_positions( |
| current_quanta, |
| confidence, |
| heavy_load=heavy_load, |
| verify_len=verify_len, |
| ) |
| |
| |
| |
| |
| |
| |
| failed = [ |
| i |
| for i in failed |
| if (int(round(current_quanta[i] / LAW)) & 0xFF) != current[i] |
| ] |
| if not failed: |
| break |
| stats["regenerations"] += 1 |
| |
| renoised = bytearray(current) |
| for i in failed: |
| renoised[i] = rng.randint(0, 255) |
| current = bytes(renoised) |
| step += 1 |
| else: |
| raise SpeculativeDecodeError( |
| f"block {len(out_quanta) // BLOCK_SIZE} did not converge in {max_steps} steps" |
| ) |
| stats["converged"] += 1 |
| out_quanta.extend(quantize(current)) |
| |
| del out_quanta[len(weight_bytes):] |
| return out_quanta, stats |
|
|
|
|
| def speculative_save_gguf( |
| name: str, |
| weight_bytes: bytes, |
| filename: str, |
| max_steps: int = 16, |
| seed: int = 0, |
| heavy_load: bool = False, |
| ) -> Tuple[str, Dict[str, int]]: |
| """Speculatively quantize a weight tensor and store it in an x8D container. |
| |
| Args: |
| name: tensor name inside the container. |
| weight_bytes: raw weight bytes. |
| filename: output .gguf path. |
| max_steps: regeneration budget per 8x8 block. |
| seed: RNG seed. |
| heavy_load: clip verification length. |
| |
| Returns: |
| ``(output_path, stats)``. |
| """ |
| from .x8d_export import save_gguf |
|
|
| quanta, stats = speculative_quantize( |
| weight_bytes, max_steps=max_steps, seed=seed, heavy_load=heavy_load |
| ) |
| payload = to_u8(quanta) |
| save_gguf({name: payload}, filename) |
| return filename, stats |
|
|
|
|
| |
| |
| |
| |
| |
| QuantizerCallable = Callable[[bytes, int], float] |
|
|
|
|
| def confidence_head_probe( |
| block: bytes, step: int, surrogate: Optional[QuantizerCallable] = None |
| ) -> float: |
| """Confidence head entry point (override-able in a torch build). |
| |
| Args: |
| block: 8x8 byte block. |
| step: decode step. |
| surrogate: optional replacement for the deterministic surrogate. |
| |
| Returns: |
| Per-block survival probability in [0.0, 1.0). |
| """ |
| fn = surrogate or _block_surrogate |
| return fn(block, step) |
|
|
|
|
| def mask_block( |
| block: bytes, cfg: DSparkMaskConfig, seed: int |
| ) -> Tuple[List[int], List[int]]: |
| """Mask ``mask_ratio`` of the 64 byte positions to MASK(256). |
| |
| Deterministic by seed: the masked positions are drawn without replacement |
| from a ``random.Random(seed)`` sampler, so a given ``(block, cfg, seed)`` |
| triple always masks the same positions. |
| |
| Args: |
| block: 8x8 byte block (exactly 64 bytes). |
| cfg: DSpark mask schedule. |
| seed: RNG seed selecting the masked positions. |
| |
| Returns: |
| ``(masked_ids, truth_ids)`` where ``masked_ids`` holds the block with |
| masked positions replaced by MASK(256) and ``truth_ids`` holds the |
| original 64 bytes (used for verification). |
| """ |
| if len(block) != BLOCK_SIZE: |
| raise ValueError(f"block must be {BLOCK_SIZE} bytes, got {len(block)}") |
| rng = random.Random(seed) |
| n_mask = int(round(cfg.mask_ratio * BLOCK_SIZE)) |
| n_mask = max(0, min(BLOCK_SIZE, n_mask)) |
| positions = rng.sample(range(BLOCK_SIZE), n_mask) |
| pos_set = set(positions) |
| truth = list(block) |
| masked = [MASK_ID if i in pos_set else truth[i] for i in range(BLOCK_SIZE)] |
| return masked, truth |
|
|
|
|
| def renoise_block(masked: List[int], seed: int) -> List[int]: |
| """Refill MASK(256) slots with seeded random bytes 0-255. |
| |
| Args: |
| masked: block with MASK(256) at masked positions. |
| seed: RNG seed for the replacement bytes. |
| |
| Returns: |
| The block with every MASK slot replaced by a random byte 0-255 (no |
| MASK ids remain). |
| """ |
| rng = random.Random(seed) |
| return [rng.randint(0, 255) if v == MASK_ID else v for v in masked] |
|
|
|
|
| def dspark_block_generate( |
| block: bytes, cfg: DSparkMaskConfig, seed: int = 0 |
| ) -> bytes: |
| """Run the DSpark k-parallel mask loop on one 8x8 block. |
| |
| Each step, in parallel across the block: mask ``mask_ratio`` of the 64 |
| byte positions to MASK(256), re-noise the masked slots with random bytes, |
| score every position with the confidence head (``_block_surrogate``-style: |
| one sha256 per block + per-byte scale), accept positions at or above the |
| ``entropy_bound`` and regenerate the rest. ``verify_clip`` honors the |
| heavy-load clip (only the first N positions are verified). |
| |
| Args: |
| block: 8x8 byte block (exactly 64 bytes). |
| cfg: DSpark mask schedule. |
| seed: RNG seed (deterministic end-to-end). |
| |
| Returns: |
| The generated 64 bytes. |
| """ |
| if len(block) != BLOCK_SIZE: |
| raise ValueError(f"block must be {BLOCK_SIZE} bytes, got {len(block)}") |
| rng = random.Random(seed) |
| verify_len = ( |
| BLOCK_SIZE if cfg.verify_clip is None else min(BLOCK_SIZE, cfg.verify_clip) |
| ) |
| byte_scale = _BYTE_SCALE |
| current = bytearray(block) |
| for step in range(cfg.steps): |
| masked, _ = mask_block(bytes(current), cfg, seed=seed + step) |
| candidate = renoise_block(masked, seed=seed + step) |
| block_conf = float(_block_surrogate(bytes(candidate), step)) |
| confidence = [(block_conf + byte_scale[b]) / 2.0 for b in candidate] |
| for i in range(verify_len): |
| if confidence[i] < cfg.entropy_bound: |
| candidate[i] = rng.randint(0, 255) |
| current = bytearray(candidate) |
| return bytes(current) |
|
|
|
|
| def dspark_batch_mask( |
| blocks: List[bytes], cfg: DSparkMaskConfig, seed: int = 0 |
| ) -> List[bytes]: |
| """Apply the k-parallel schedule across ``cfg.k_blocks`` blocks at a time. |
| |
| The multi-modal + language throughput path: ``cfg.k_blocks`` 8x8 blocks are |
| decoded in parallel per round; each block derives its seed from the batch |
| offset so the whole batch is deterministic. A trailing partial batch (when |
| ``len(blocks)`` is not a multiple of ``k_blocks``) is processed as-is. |
| |
| Args: |
| blocks: list of 8x8 byte blocks (each exactly 64 bytes). |
| cfg: DSpark mask schedule. |
| seed: base RNG seed for the batch. |
| |
| Returns: |
| One generated 64-byte block per input block, in order. |
| """ |
| out: List[bytes] = [] |
| for start in range(0, len(blocks), cfg.k_blocks): |
| group = blocks[start : start + cfg.k_blocks] |
| for offset, block in enumerate(group): |
| out.append(dspark_block_generate(block, cfg, seed=seed + start + offset)) |
| return out |
|
|
|
|
| def size_report( |
| num_params: int = 16_000_000_000, |
| baseline_bits: int = 16, |
| stored_bytes_per_param: float = 1.0, |
| ) -> Dict[str, float]: |
| """Compute the size comparison for a model of ``num_params`` weights. |
| |
| Args: |
| num_params: total parameter count (default 16B). |
| baseline_bits: float width of the original checkpoint (default 16 = |
| BF16/FP16). |
| stored_bytes_per_param: x8D on-disk cost (U8 byte = 1.0). |
| |
| Returns: |
| Dict with baseline_size_gb, x8d_storage_gb, subbyte_coordinate_mb, |
| disk_reduction_pct and coordinate_reduction_pct. |
| """ |
| baseline_bytes = num_params * (baseline_bits / 8.0) |
| x8d_bytes = num_params * stored_bytes_per_param |
| |
| subbyte_bits = num_params * (baseline_bits * LAW) |
| subbyte_bytes = subbyte_bits / 8.0 |
| return { |
| "baseline_size_gb": baseline_bytes / 1e9, |
| "x8d_storage_gb": x8d_bytes / 1e9, |
| "subbyte_coordinate_mb": subbyte_bytes / 1e6, |
| "disk_reduction_pct": (1.0 - x8d_bytes / baseline_bytes) * 100.0, |
| "coordinate_reduction_pct": (1.0 - subbyte_bytes / baseline_bytes) * 100.0, |
| "law": LAW, |
| } |
|
|
|
|
| def print_size_report(num_params: int = 16_000_000_000, baseline_bits: int = 16) -> None: |
| """Human-readable size comparison (full FP16 model vs x8D sub-byte).""" |
| r = size_report(num_params=num_params, baseline_bits=baseline_bits) |
| print(f"x8Dsub-byte 0.001 size comparison ({num_params:,} params, {baseline_bits}-bit baseline)") |
| print(f" Full FP16/BF16 model : {r['baseline_size_gb']:.2f} GB") |
| print(f" x8D U8 .gguf storage : {r['x8d_storage_gb']:.2f} GB (disk reduction {r['disk_reduction_pct']:.1f}%)") |
| print(f" Sub-byte coordinates : {r['subbyte_coordinate_mb']:.1f} MB (coordinate reduction {r['coordinate_reduction_pct']:.2f}%)") |
| print(f" Scaling law : {r['law']} (0.001 x {baseline_bits} bits = {baseline_bits*LAW:.3f} bit/weight)") |
|
|
|
|
| def modality_size_report( |
| num_params: int = 16_000_000_000, baseline_bits: int = 16 |
| ) -> Dict[str, Dict[str, object]]: |
| """Per-modality size summary under each DSpark block-mask schedule. |
| |
| Each modality's entry carries the generic ``size_report`` numbers plus the |
| schedule's ``mask_ratio``, ``k_blocks`` and ``steps``, so throughput paths |
| can be sized together with their diffusion configuration. |
| |
| Args: |
| num_params: total parameter count for the size math. |
| baseline_bits: float width of the original checkpoint. |
| |
| Returns: |
| Dict keyed by modality, each a Dict of size + schedule fields. |
| """ |
| out: Dict[str, Dict[str, object]] = {} |
| for name, cfg in DSPARK_MODALITY_SCHEDULES.items(): |
| row = size_report(num_params=num_params, baseline_bits=baseline_bits) |
| row["mask_ratio"] = cfg.mask_ratio |
| row["k_blocks"] = cfg.k_blocks |
| row["steps"] = cfg.steps |
| row["verify_clip"] = cfg.verify_clip |
| row["canvas_length"] = cfg.canvas_length |
| out[name] = row |
| return out |
|
|
|
|
| def print_modality_size_report( |
| num_params: int = 16_000_000_000, baseline_bits: int = 16 |
| ) -> None: |
| """Human-readable per-modality DSpark schedule + size table.""" |
| print( |
| f"x8Dsub-byte 0.001 modality schedules " |
| f"({num_params:,} params, {baseline_bits}-bit baseline)" |
| ) |
| print(f" {'modality':<8}{'mask_ratio':>11}{'k_blocks':>9}{'steps':>7}{'x8d_storage_gb':>17}{'subbyte_mb':>12}") |
| for name, row in modality_size_report( |
| num_params=num_params, baseline_bits=baseline_bits |
| ).items(): |
| print( |
| f" {name:<8}{row['mask_ratio']:>11.2f}{row['k_blocks']:>9d}" |
| f"{row['steps']:>7d}{row['x8d_storage_gb']:>17.2f}{row['subbyte_coordinate_mb']:>12.1f}" |
| ) |
|
|