🚀 The feature, motivation and pitch
Disaggregated serving already moves a request's KV from a context server to a generation server on
demand. We'd like to expose that same transceiver path as a standalone, proactive operation: tell
instance B to pull a given prompt's KV from instance A and commit it to B's reuse cache, without
generating.
Motivation. Today the only ways to get a prompt's KV onto a specific instance are to actually run
a request there (cold prefill) or to rely on on-demand disagg at request time. A proactive transfer
enables, all on the existing transceiver:
- Cache migration / rebalancing — move a hot prompt's KV off an overloaded instance onto an idle
one, instead of recomputing it there.
- Replication — keep a copy of a prompt's KV on more than one instance.
Proposed surface (additive, off by default):
- A
kv_transfer_only flag on a generation_only disaggregated request: the engine pulls the KV over
the transceiver, commits it for reuse, and finishes without a generation forward pass.
- A fire-and-forget
POST /v1/kv_transfer {model, messages|prompt, source} endpoint (+
GET /v1/kv_transfer/stats) that orchestrates the existing context_only → generation_only ticket
flow internally, so callers never handle disagg tickets.
It reuses the existing disagg transceiver — no new transport, and regular disagg/serving paths are
unchanged. A PR follows in #15736.
Alternatives
No response
Additional context
No response
Before submitting a new issue...
🚀 The feature, motivation and pitch
Disaggregated serving already moves a request's KV from a context server to a generation server on
demand. We'd like to expose that same transceiver path as a standalone, proactive operation: tell
instance B to pull a given prompt's KV from instance A and commit it to B's reuse cache, without
generating.
Motivation. Today the only ways to get a prompt's KV onto a specific instance are to actually run
a request there (cold prefill) or to rely on on-demand disagg at request time. A proactive transfer
enables, all on the existing transceiver:
one, instead of recomputing it there.
Proposed surface (additive, off by default):
kv_transfer_onlyflag on ageneration_onlydisaggregated request: the engine pulls the KV overthe transceiver, commits it for reuse, and finishes without a generation forward pass.
POST /v1/kv_transfer {model, messages|prompt, source}endpoint (+GET /v1/kv_transfer/stats) that orchestrates the existingcontext_only→generation_onlyticketflow internally, so callers never handle disagg tickets.
It reuses the existing disagg transceiver — no new transport, and regular disagg/serving paths are
unchanged. A PR follows in #15736.
Alternatives
No response
Additional context
No response
Before submitting a new issue...