dsv41-offload / offload /dspark /worker /checkpoint.py
ProprietaryLegal's picture
PLI Labs public snapshot 2026-10-28 (history squashed)
0693474
Raw History Blame Contribute Delete
12.5 kB
"""Identity-checked loader for the DSpark drafter tensors that lane S2 copied to x86host.
Source of truth: ``TENSORS.json`` written by S2 next to the extracted safetensors files. Every entry records the
tensor's name, dtype, shape, the destination file and byte range, and the sha256 of the *source* byte range on the
Spark (``/srv/dsv41/legal-v2a``, hardlinked from HeNryous EXL3 2.75 bpw @ 86f85253). Loading re-hashes each
destination byte range and refuses the checkpoint on any difference, on a missing or unexpected tensor, or on a
header that disagrees with the manifest. Nothing is converted here: tensors come back as zero-copy CPU views of the
mapped files, in the checkpoint's own dtypes.
The tensor set is derived from config.json (three ``mtp.{0,1,2}`` stages, 128 drafter experts, the target's embedding
and EXL3 head), not from the manifest, so a manifest that lost or gained tensors is caught too.
"""
from __future__ import annotations
import hashlib
import json
import mmap
import os
import struct
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass
import torch
DTYPES = {
"BF16": torch.bfloat16,
"F16": torch.float16,
"F32": torch.float32,
"I16": torch.int16,
"I32": torch.int32,
"F8_E4M3": torch.float8_e4m3fn,
"F8_E8M0": torch.float8_e8m0fnu,
}
EXL3_PARTS = ("trellis", "suh", "svh", "mul1")
class IdentityError(RuntimeError):
"""The files on disk are not the tensors the manifest promises."""
@dataclass(frozen=True)
class DrafterShape:
"""The numbers of config.json the worker depends on (checked, never assumed)."""
hidden: int
vocab: int
n_heads: int
head_dim: int
rope_dim: int
q_lora: int
o_lora: int
o_groups: int
inter: int
n_experts: int
top_k: int
n_stages: int
n_target_layers: int
window: int
block: int
noise_token: int
markov_rank: int
hc_mult: int
hc_iters: int
hc_eps: float
rms_eps: float
swiglu_limit: float
route_scale: float
rope_theta: float
taps: tuple[int, ...]
@classmethod
def from_config(cls, cfg: dict) -> "DrafterShape":
t = cfg["text_config"]
n_layers = int(t["num_hidden_layers"])
ratios = t["compress_ratios"]
n_stages = int(t["num_nextn_predict_layers"])
if [int(r) for r in ratios[n_layers:n_layers + n_stages]] != [0] * n_stages:
raise IdentityError(f"drafter stages are not pure sliding-window layers: {ratios[n_layers:]}")
if t.get("scoring_func") != "sqrtsoftplus" or t.get("topk_method") != "noaux_tc" or not t.get("norm_topk_prob"):
raise IdentityError("routing is not sqrtsoftplus / noaux_tc / normalized top-k")
if t.get("hidden_act") != "silu":
raise IdentityError(f"hidden_act {t.get('hidden_act')!r}")
return cls(
hidden=int(t["hidden_size"]), vocab=int(t["vocab_size"]), n_heads=int(t["num_attention_heads"]),
head_dim=int(t["head_dim"]), rope_dim=int(t["qk_rope_head_dim"]), q_lora=int(t["q_lora_rank"]),
o_lora=int(t["o_lora_rank"]), o_groups=int(t["o_groups"]), inter=int(t["moe_intermediate_size"]),
n_experts=int(t["dspark_n_routed_experts"]), top_k=int(t["dspark_num_experts_per_tok"]),
n_stages=n_stages, n_target_layers=n_layers, window=int(t["sliding_window"]),
block=int(t["dspark_block_size"]), noise_token=int(t["dspark_noise_token_id"]),
markov_rank=int(t["dspark_markov_rank"]), hc_mult=int(t["hc_mult"]), hc_iters=int(t["hc_sinkhorn_iters"]),
hc_eps=float(t["hc_eps"]), rms_eps=float(t["rms_norm_eps"]), swiglu_limit=float(t["swiglu_limit"]),
route_scale=float(t["routed_scaling_factor"]), rope_theta=float(t["rope_theta"]),
taps=tuple(int(x) for x in t["dspark_target_layer_ids"]),
)
def required_names(s: DrafterShape) -> list[str]:
"""Every tensor the worker reads (plus ffn.gate.bias_vl, checked though text drafts never use it)."""
names = ["embed.weight"] + [f"head.{p}" for p in EXL3_PARTS]
for i in range(s.n_stages):
pre = f"mtp.{i}."
for lin in ("attn.wq_a", "attn.wkv", "attn.wq_b", "attn.wo_b",
"ffn.shared_experts.w1", "ffn.shared_experts.w2", "ffn.shared_experts.w3"):
names += [f"{pre}{lin}.{p}" for p in EXL3_PARTS]
names += [f"{pre}attn.wo_a.weight", f"{pre}attn.wo_a.scale", f"{pre}attn.attn_sink",
f"{pre}attn.q_norm.weight", f"{pre}attn.kv_norm.weight", f"{pre}attn_norm.weight",
f"{pre}ffn_norm.weight", f"{pre}ffn.gate.weight", f"{pre}ffn.gate.bias", f"{pre}ffn.gate.bias_vl"]
names += [f"{pre}hc_{s_}_{k}" for s_ in ("attn", "ffn") for k in ("fn", "base", "scale")]
for e in range(s.n_experts):
for w in ("w1", "w2", "w3"):
names += [f"{pre}ffn.experts.{e}.{w}.{p}" for p in EXL3_PARTS]
names += [f"mtp.0.main_proj.{p}" for p in EXL3_PARTS] + ["mtp.0.main_norm.weight"]
last = f"mtp.{s.n_stages - 1}."
names += [f"{last}norm.weight", f"{last}markov_head.embed.weight", f"{last}markov_head.head.weight",
f"{last}confidence_head.proj.weight"]
return names
def _read_header(path: str) -> tuple[int, dict]:
with open(path, "rb") as f:
n = struct.unpack("<Q", f.read(8))[0]
if n > 64 << 20:
raise IdentityError(f"{path}: implausible safetensors header length {n}")
return 8 + n, json.loads(f.read(n))
class Checkpoint:
"""The verified drafter tensors of one S2 delivery directory. ``get(name)`` returns a CPU view (no copy)."""
def __init__(self, root: str, verify: bool = True, threads: int = 16):
self.root = root
with open(os.path.join(root, "config.json")) as f:
self.config = json.load(f)
with open(os.path.join(root, "TENSORS.json")) as f:
self.manifest = json.load(f)
with open(os.path.join(root, "exl3_moe_plan.json")) as f:
self.plan_json = json.load(f)
self.shape = DrafterShape.from_config(self.config)
self._check_quant_config()
entries = {e["name"]: e for e in self.manifest["tensors"]}
need = required_names(self.shape)
missing = [n for n in need if n not in entries]
if missing:
raise IdentityError(f"{len(missing)} drafter tensors missing from TENSORS.json, e.g. {missing[:5]}")
# norm.weight (the target's final norm) is delivered too; the drafter uses mtp.2.norm, so it is ignored
extra = sorted(set(entries) - set(need) - {"norm.weight"})
if extra:
raise IdentityError(f"unexpected tensors in TENSORS.json: {extra[:5]} ({len(extra)})")
self.entries = {n: entries[n] for n in need}
self._maps: dict[str, mmap.mmap] = {}
self._headers: dict[str, tuple[int, dict]] = {}
from .identity import IdentityMismatch, resolve_inside
for e in self.entries.values():
fn = e["destination_file"]
if fn not in self._maps:
try: # never open a file outside the delivery (S5R fix 1)
path = resolve_inside(root, fn)
except IdentityMismatch as err:
raise IdentityError(f"{e['name']}: {err}") from err
self._headers[fn] = _read_header(path)
with open(path, "rb") as f:
self._maps[fn] = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
for name, e in self.entries.items():
self._check_header(name, e)
self.verified = False
if verify:
self.verify(threads)
def _check_quant_config(self) -> None:
q = self.config.get("quantization_config", {})
x = q.get("exl3_moe", {})
if q.get("quant_method") != "deepseek_v41_exl3" or x.get("exllamav3_version") != "1.6.0":
raise IdentityError(f"quantization_config is not deepseek_v41_exl3 / exllamav3 1.6.0: {q.get('quant_method')}")
if x.get("head") != "exl3":
raise IdentityError(f"head is {x.get('head')!r}, the worker implements the EXL3 head only")
if self.manifest.get("codebook") != "mul1" or self.plan_json.get("codebook") != "mul1":
raise IdentityError("codebook is not mul1")
self.head_k = int(x["head_k"])
self.drafter_k = {k: int(v) for k, v in x["dense"]["drafter"].items()}
def _check_header(self, name: str, e: dict) -> None:
fn = e["destination_file"]
hlen, hdr = self._headers[fn]
h = hdr.get(name)
if h is None:
raise IdentityError(f"{name}: not in {fn}'s header")
if h["dtype"] != e["dtype"] or list(h["shape"]) != list(e["shape"]):
raise IdentityError(f"{name}: header {h['dtype']} {h['shape']} vs manifest {e['dtype']} {e['shape']}")
a, b = h["data_offsets"]
if [hlen + a, hlen + b] != list(e["destination_byte_range"]):
raise IdentityError(f"{name}: header range {[hlen + a, hlen + b]} vs manifest {e['destination_byte_range']}")
if e["dtype"] not in DTYPES:
raise IdentityError(f"{name}: dtype {e['dtype']} not supported")
numel = 1
for d in e["shape"]:
numel *= int(d)
if numel * DTYPES[e["dtype"]].itemsize != b - a:
raise IdentityError(f"{name}: {b - a} bytes for {e['shape']} {e['dtype']}")
sa, sb = e["source_byte_range"]
if sb - sa != b - a:
raise IdentityError(f"{name}: source range {sb - sa} B vs destination {b - a} B")
def _bytes(self, name: str) -> memoryview:
e = self.entries[name]
a, b = e["destination_byte_range"]
return memoryview(self._maps[e["destination_file"]])[a:b]
def verify(self, threads: int = 16) -> dict:
"""sha256 of every destination byte range == the manifest's source-range sha256. Raises on any mismatch."""
def one(name: str) -> tuple[str, bool]:
return name, hashlib.sha256(self._bytes(name)).hexdigest() == self.entries[name]["source_byte_range_sha256"]
# big tensors first so the pool stays busy
order = sorted(self.entries, key=lambda n: -int(self.entries[n]["resident_packed_bytes"]))
with ThreadPoolExecutor(threads) as ex:
bad = [n for n, ok in ex.map(one, order) if not ok]
if bad:
raise IdentityError(f"sha256 mismatch for {len(bad)} tensors, e.g. {bad[:5]}")
self.verified = True
return {"tensors": len(order), "bytes": sum(int(self.entries[n]["resident_packed_bytes"]) for n in order)}
def get(self, name: str) -> torch.Tensor:
"""Zero-copy CPU view of the tensor bytes in the mapped file (read-only memory; copy before writing)."""
if not self.verified:
raise IdentityError("checkpoint not verified")
e = self.entries[name]
buf = self._bytes(name)
dt = DTYPES[e["dtype"]]
if len(buf) == 0:
return torch.empty(e["shape"], dtype=dt)
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore") # torch warns that the mmap is not writable; nothing writes it
t = torch.frombuffer(buf, dtype=torch.uint8)
return t.view(dt).view(*e["shape"]) if e["shape"] else t.view(dt).reshape(())
def exl3(self, prefix: str) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, int]:
"""(trellis int16 [in/16, out/16, 16K], suh fp16 [in], svh fp16 [out], K) of an EXL3 linear; mul1 checked."""
trellis, suh, svh, mul1 = (self.get(f"{prefix}.{p}") for p in EXL3_PARTS)
words = trellis.shape[-1]
if trellis.dim() != 3 or words % 16:
raise IdentityError(f"{prefix}.trellis shape {tuple(trellis.shape)}")
if int(mul1.reshape(-1)[0].item()) & 0xFFFFFFFF != 0x83DCD12D:
raise IdentityError(f"{prefix}.mul1 marker {int(mul1.reshape(-1)[0].item()) & 0xFFFFFFFF:#x} is not mul1")
if suh.shape[0] != trellis.shape[0] * 16 or svh.shape[0] != trellis.shape[1] * 16:
raise IdentityError(f"{prefix}: suh/svh {tuple(suh.shape)}/{tuple(svh.shape)} vs trellis {tuple(trellis.shape)}")
return trellis, suh, svh, words // 16
def close(self) -> None:
for m in self._maps.values():
m.close()
self._maps.clear()