Download code/offload/dspark/probabilistic/pp3/prepare_verifier.py from ProprietaryLegal/dsv41-sampled-drafting: direct link, hf CLI and curl.
- Browser
- Download file 4.98 kB
-
https://huggingface.co/ProprietaryLegal/dsv41-sampled-drafting/resolve/main/code/offload/dspark/probabilistic/pp3/prepare_verifier.py
- Command line
-
hf download hf://ProprietaryLegal/dsv41-sampled-drafting/code/offload/dspark/probabilistic/pp3/prepare_verifier.py
-
curl -L -o prepare_verifier.py https://huggingface.co/ProprietaryLegal/dsv41-sampled-drafting/resolve/main/code/offload/dspark/probabilistic/pp3/prepare_verifier.py
4.98 kB
| """Prepare pinned image overlays offline. Writes only to an explicit empty output | |
| directory; never deploys or edits the image snapshot. Run before any coordinator | |
| window. The generated standard verifier accepts actual FP32 q, not log(q)/T. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import ast | |
| import hashlib | |
| import json | |
| from pathlib import Path | |
| UTILS = 'vllm/v1/worker/gpu/spec_decode/rejection_sampler_utils.py' | |
| RUNNER = 'vllm/v1/worker/gpu/model_runner.py' | |
| PINS = {UTILS: 'ef1d40bf31140eb644a8f3b7a003373209d6a8e297f059e70ea66cf4972d8d90', | |
| RUNNER: 'af9be025ff8a17a5aabd452fc3e4b987abe64fb28d852c569e1372d6f1e4d3a6'} | |
| ABI = 'pp3-dyadic24-standard-v1' | |
| def replace_once(text: str, old: str, new: str) -> str: | |
| if text.count(old) != 1: | |
| raise ValueError(f'probability overlay source mismatch: {old[:80]!r}') | |
| return text.replace(old, new) | |
| def utilities(text: str) -> str: | |
| text = 'import os\nREMOTE_DRAFT_PROBS_ABI = ' + repr(ABI) + '\n' + text | |
| old = ' if HAS_DRAFT_LOGITS:\n # draft_logits is stored pre-temperature, so apply scale first.' | |
| new = ''' if HAS_DRAFT_LOGITS == 2: | |
| q = tl.load(draft_logits_ptr + req_state_idx * draft_logits_stride_0 | |
| + draft_step * draft_logits_stride_1 + token, | |
| mask=mask, other=0.).to(tl.float32) | |
| draft_log_prob = tl.log(q) | |
| draft_lse = 0. | |
| elif HAS_DRAFT_LOGITS: | |
| # draft_logits is stored pre-temperature, so apply scale first.''' | |
| text = replace_once(text, old, new) | |
| text = replace_once(text, ' if HAS_DRAFT_LOGITS:\n # Get local draft max', | |
| ' if HAS_DRAFT_LOGITS == 1:\n # Get local draft max') | |
| text = replace_once(text, ' draft_log_probs = draft_logits - draft_lse', ''' draft_log_probs = draft_logits - draft_lse | |
| if HAS_DRAFT_LOGITS == 2: | |
| q = tl.load(draft_logits_ptr + req_state_idx * draft_logits_stride_0 | |
| + resample_idx * draft_logits_stride_1 + block, | |
| mask=mask, other=0.).to(tl.float32) | |
| draft_log_probs = tl.log(q)''') | |
| text = replace_once(text, ' # Compute the per-vocab-block logits stats,', ''' if os.environ.get("VLLM_DSPARK_SAMPLED_TOP32", "0") == "1": | |
| if use_block_verification or synthetic_conditional_rates is not None or watermark: | |
| raise ValueError("PP3 q ABI supports standard verification only, without watermarking") | |
| if draft_logits is None or draft_logits.dtype != torch.float32 or draft_logits.shape[-1] != target_logits.shape[-1]: | |
| raise ValueError("PP3 standard verification needs full-vocab FP32 probabilities") | |
| has_draft_logits = 2 | |
| # Compute the per-vocab-block logits stats,''') | |
| return text | |
| def runner(text: str) -> str: | |
| text = 'REMOTE_DRAFT_PROBS_ABI = ' + repr(ABI) + '\n' + text | |
| return replace_once(text, ' sampler_output: SamplerOutput | None\n', ''' # PP3 failed/missing-q rounds are target-only. Mask verification, never | |
| # reinterpret sampled IDs as point-mass proposals. Tensor values stay on GPU. | |
| pp3_valid = getattr(self.speculator, "sampled_valid", None) | |
| if pp3_valid is not None and input_batch.num_draft_tokens > 0: | |
| bad = ((input_batch.expanded_local_pos > 0) | |
| & ~pp3_valid[input_batch.expanded_idx_mapping.long()]) | |
| invalid_drafts = bad if invalid_drafts is None else invalid_drafts | bad | |
| sampler_output: SamplerOutput | None | |
| ''') | |
| def prepare(source: Path, output: Path) -> dict[str, object]: | |
| if output.exists(): | |
| raise ValueError('output must not exist; refuse overwriting any prepared overlay') | |
| texts = {} | |
| for name, pin in PINS.items(): | |
| data = (source / name).read_bytes() | |
| if hashlib.sha256(data).hexdigest() != pin: | |
| raise ValueError(f'image snapshot differs from pinned PP3 source: {name}') | |
| texts[name] = utilities(data.decode()) if name == UTILS else runner(data.decode()) | |
| ast.parse(texts[name]) | |
| compile(texts[name], name, 'exec') | |
| result: dict[str, object] = {'abi': ABI, 'source_sha256': PINS, | |
| 'output_sha256': {name: hashlib.sha256(text.encode()).hexdigest() | |
| for name, text in texts.items()}} | |
| output.mkdir(parents=True) | |
| for name, text in texts.items(): | |
| path = output / name | |
| path.parent.mkdir(parents=True, exist_ok=True) | |
| path.write_text(text) | |
| (output / 'receipt.json').write_text(json.dumps(result, indent=2)+'\n') | |
| return result | |
| def main() -> None: | |
| p = argparse.ArgumentParser(description=__doc__) | |
| p.add_argument('--source', type=Path, required=True) | |
| p.add_argument('--output', type=Path, required=True) | |
| a = p.parse_args() | |
| print(json.dumps(prepare(a.source, a.output), indent=2)) | |
| if __name__ == '__main__': | |
| main() | |