[PD] Diversify fake-prefill handoff tokens (#37302)

Co-authored-by: xingyuliu <xingyuliu@fb.com>
Co-authored-by: Lianmin Zheng <lianminzheng@gmail.com>
This commit is contained in:
Xingyu Liu
2026-09-01 18:34:38 -07:00
committed by GitHub
co-authored by xingyuliu Lianmin Zheng
parent db017e3490
commit 8b596c10b0
@@ -20,6 +20,7 @@ Life cycle of a request in the decode server
from __future__ import annotations
import hashlib
import logging
import time
from collections import deque
@@ -2012,6 +2013,22 @@ def alloc_for_decode_prealloc(
return kv_loc
def _generate_fake_prefill_handoff_output_id(req: Req) -> int:
"""Generate a deterministic synthetic handoff token for fake-PD requests.
Fake-PD skips prefill and KV transfer, so its allocated prompt KV has no
request-specific state and its metadata output token remains zero. Reusing
token 0 for every request can unrealistically correlate decode workloads.
Hash the request ID so every TP rank gets the same request-diverse token.
"""
if req.vocab_size is None or req.vocab_size <= 0:
raise ValueError("Fake-PD requests require a positive vocabulary size")
digest = hashlib.blake2b(
req.rid.encode(), digest_size=8, person=b"fake-pd"
).digest()
return int.from_bytes(digest, byteorder="little") % req.vocab_size
class DecodeTransferQueue(DecodeHiCacheTransferMixin):
"""
Store the requests that is polling kv
@@ -2142,6 +2159,10 @@ class DecodeTransferQueue(DecodeHiCacheTransferMixin):
if replayed_boundary:
committed_output_id = decode_req.req.pd_rebootstrap_forced_output_id
decode_req.req.pd_rebootstrap_forced_output_id = None
elif _is_fake_transfer(decode_req.req):
committed_output_id = _generate_fake_prefill_handoff_output_id(
decode_req.req
)
else:
committed_output_id = output_id[0].item()
decode_req.req.output_ids.append(committed_output_id)