Class MtpAnchorPool
java.lang.Object
smile.llm.model.qwen.MtpAnchorPool
- All Implemented Interfaces:
AutoCloseable
Per-request MTP draft anchor (post-final-norm hidden feeding the MTP
head's first draft step), keyed by request id.
QwenModel.lastPreNormHidden is a single field shared by every
forward (decode/prefill/verify), for whichever batch of requests that
forward just processed — safe only because at most one request was ever
mid-speculative-round at a time. Real multi-request batching needs each
request's anchor kept durably in its own row, scattered here immediately
after the forward that produced it (see Qwen.scatterMtpAnchor),
so a later forward for a different batch can never clobber it.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintbindRequest(int requestId) Binds a stable home row forrequestId.voidclose()getRow(int requestId) Returns a fresh[D]copy ofrequestId's anchor row, ornullif never written.getRows(int[] requestIds) Returns a fresh[B, D]tensor gathering each request's anchor row in order (batched MTP draft input), ornullif never written.booleanhasRow(int requestId) Returns whetherrequestIdhas a written anchor row yet.voidWritesrow's content intorequestId's durable anchor.voidunbindRequest(int requestId) Releases the home row forrequestId.
-
Constructor Details
-
MtpAnchorPool
public MtpAnchorPool(int maxBatchSize, int dim) Constructor.- Parameters:
maxBatchSize- maximum concurrently bound requests.dim- hidden dimension.
-
-
Method Details
-
bindRequest
public int bindRequest(int requestId) Binds a stable home row forrequestId.- Parameters:
requestId- id aligned withDeltaNetStatePool.bindRequest(int).- Returns:
- home row index.
-
unbindRequest
public void unbindRequest(int requestId) Releases the home row forrequestId.- Parameters:
requestId- previously bound id.
-
setRow
Writesrow's content intorequestId's durable anchor. Allocates the pool's backing tensor on the first call ever made on this pool (dtype/device taken fromrow); the anchor dimension itself is a fixed model hyperparameter, so no later reallocation is expected.- Parameters:
requestId- bound request id.row- anchor row[D]or[1, D].
-
hasRow
public boolean hasRow(int requestId) Returns whetherrequestIdhas a written anchor row yet.- Parameters:
requestId- bound request id.- Returns:
trueoncesetRow(int, Tensor)has been called for this id.
-
getRow
Returns a fresh[D]copy ofrequestId's anchor row, ornullif never written.- Parameters:
requestId- bound request id.- Returns:
- owned
[1, D]copy (matching the[B, D]shapeQwenMtp.draftStepexpects), ornull.
-
getRows
Returns a fresh[B, D]tensor gathering each request's anchor row in order (batched MTP draft input), ornullif never written.- Parameters:
requestIds- bound request ids (order = batch).- Returns:
- owned
[B, D]tensor, ornull.
-
close
public void close()- Specified by:
closein interfaceAutoCloseable
-