ProprietaryLegal's picture
PLI Labs public snapshot 2026-10-28 (history squashed)
e1acc15
Raw History Blame Contribute Delete
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()