# scenario batched_verify_k4
bind_gpu_to_thread()
create_stream() -> 1
create_event() -> 2
adapter_id_for(-1)
adapter_id_for(-1)
adapter_id_for(-1)
adapter_id_for(-1)
num_free_blocks() -> 1000
-- tick 1
alloc_sequence() -> slot 0
adapter_id_for(-1)
acquire_adapter_slot(-1)
ep_broadcast_cmd_for_seq(seq=0, cmd=0xfffffff0)
ep_broadcast_cmd(0x5)
ep_broadcast_cmd(0x0)
ep_broadcast_cmd(0x5)
ep_broadcast_tokens(n=5)
ep_sync_vision_embeds(n=5)
prefill(n=5, s1@0:len=5, stream=0)
argmax_on_device(row=0, stream=0) -> 10
alloc_sequence() -> slot 1
adapter_id_for(-1)
acquire_adapter_slot(-1)
ep_broadcast_cmd_for_seq(seq=1, cmd=0xfffffff0)
ep_broadcast_cmd(0x6)
ep_broadcast_cmd(0x0)
ep_broadcast_cmd(0x6)
ep_broadcast_tokens(n=6)
ep_sync_vision_embeds(n=6)
prefill(n=6, s2@1:len=6, stream=0)
argmax_on_device(row=0, stream=0) -> 20
alloc_sequence() -> slot 2
adapter_id_for(-1)
acquire_adapter_slot(-1)
ep_broadcast_cmd_for_seq(seq=2, cmd=0xfffffff0)
ep_broadcast_cmd(0x7)
ep_broadcast_cmd(0x0)
ep_broadcast_cmd(0x7)
ep_broadcast_tokens(n=7)
ep_sync_vision_embeds(n=7)
prefill(n=7, s3@2:len=7, stream=0)
argmax_on_device(row=0, stream=0) -> 30
mtp_slot_draft_capacity(0)
mtp_slot_draft_capacity(1)
mtp_slot_draft_capacity(2)
sync_secondary()
can_batch_verify([2, 2, 2]) -> true
decode_batch(tokens=[10, 20, 30], seqs=["s1@0:len=5", "s2@1:len=6", "s3@2:len=7"], stream=0)
argmax_batch(row=0, n=3, stream=0) -> [11, 21, 31]
stash_verify_hidden_rows([0, 1, 2], stream=0)
run_mtp_propose_batched(tokens=[11, 21, 31], positions=[6, 7, 8], stash=[0, 1, 2], n=3, stream=0) -> [[12, 13, 14], [22, 24, 24], [32, 33, 34]]
start_checkpoint_async(s1@0:len=6)
start_checkpoint_async(s2@1:len=7)
start_checkpoint_async(s3@2:len=8)
num_free_blocks() -> 997
-- tick 2
mtp_slot_draft_capacity(0)
mtp_slot_draft_capacity(1)
mtp_slot_draft_capacity(2)
can_batch_verify([4, 4, 3]) -> true
sync_secondary()
decode_verify_batched(tokens=[11, 12, 13, 14, 21, 22, 24, 24, 31, 32, 33], ks=[4, 4, 3], seqs=["s1@0:len=10", "s2@1:len=11", "s3@2:len=11"], stream=0, woa=true) -> [12, 13, 14, 15, 22, 23, 1, 1, 32, 33, 34]
stash_verify_hidden_rows([3, 5, 10], stream=0)
stash_verify_catchup_rows([(0, 0), (1, 1), (2, 2), (4, 4), (8, 8), (9, 9)])
gdn_fold_accepted(slots=[0, 1, 2], accepted=[4, 2, 3], k=4) -> true
commit_accepted_prefix(s1@0:len=10, na=4, k=4)
trim_proposer_state(s1@0:len=10, na=3, stream=0)
trim_proposer_state(s2@1:len=9, na=1, stream=0)
commit_accepted_prefix(s2@1:len=9, na=2, k=4)
commit_accepted_prefix(s3@2:len=11, na=3, k=3)
trim_proposer_state(s3@2:len=11, na=2, stream=0)
run_mtp_catchup_batched(tokens=[[12, 13, 14], [22], [32, 33]], slots=[0, 4, 8], pos=[7, 8, 9]) -> 0
run_mtp_propose_batched(tokens=[15, 23, 34], positions=[10, 9, 11], stash=[0, 1, 2], n=3, stream=0) -> [[16, 17, 18], [24, 25, 27], [35, 36, 37]]
num_free_blocks() -> 997
-- tick 3
mtp_slot_draft_capacity(0)
mtp_slot_draft_capacity(1)
mtp_slot_draft_capacity(2)
can_batch_verify([4, 4, 3]) -> true
sync_secondary()
decode_verify_batched(tokens=[15, 16, 17, 18, 23, 24, 25, 27, 34, 35, 36], ks=[4, 4, 3], seqs=["s1@0:len=14", "s2@1:len=13", "s3@2:len=14"], stream=0, woa=true) -> [16, 17, 18, 19, 24, 25, 26, 1, 35, 36, 37]
stash_verify_hidden_rows([3, 6, 10], stream=0)
stash_verify_catchup_rows([(0, 0), (1, 1), (2, 2), (4, 4), (5, 5), (8, 8), (9, 9)])
gdn_fold_accepted(slots=[0, 1, 2], accepted=[4, 3, 3], k=4) -> true
commit_accepted_prefix(s1@0:len=14, na=4, k=4)
trim_proposer_state(s1@0:len=14, na=3, stream=0)
trim_proposer_state(s2@1:len=12, na=2, stream=0)
commit_accepted_prefix(s2@1:len=12, na=3, k=4)
commit_accepted_prefix(s3@2:len=14, na=3, k=3)
trim_proposer_state(s3@2:len=14, na=2, stream=0)
run_mtp_catchup_batched(tokens=[[16, 17, 18], [24, 25], [35, 36]], slots=[0, 4, 8], pos=[11, 10, 12]) -> 0
run_mtp_propose_batched(tokens=[19, 26, 37], positions=[14, 12, 14], stash=[0, 1, 2], n=3, stream=0) -> [[20, 21, 63], [27, 28, 30], [38, 39, 40]]
num_free_blocks() -> 997
-- tick 4
mtp_slot_draft_capacity(0)
mtp_slot_draft_capacity(1)
mtp_slot_draft_capacity(2)
can_batch_verify([4, 4, 3]) -> true
sync_secondary()
decode_verify_batched(tokens=[19, 20, 21, 63, 26, 27, 28, 30, 37, 38, 39], ks=[4, 4, 3], seqs=["s1@0:len=18", "s2@1:len=16", "s3@2:len=17"], stream=0, woa=true) -> [20, 21, 63, 63, 27, 28, 29, 1, 38, 39, 40]
stash_verify_hidden_rows([3, 6, 10], stream=0)
stash_verify_catchup_rows([(0, 0), (1, 1), (2, 2), (4, 4), (5, 5), (8, 8), (9, 9)])
gdn_fold_accepted(slots=[0, 1, 2], accepted=[4, 3, 3], k=4) -> true
trim_proposer_state(s2@1:len=15, na=2, stream=0)
commit_accepted_prefix(s2@1:len=15, na=3, k=4)
commit_accepted_prefix(s3@2:len=17, na=3, k=3)
trim_proposer_state(s3@2:len=17, na=2, stream=0)
run_mtp_catchup_batched(tokens=[[27, 28], [38, 39]], slots=[4, 8], pos=[13, 15]) -> 0
run_mtp_propose_batched(tokens=[29, 40], positions=[15, 17], stash=[1, 2], n=3, stream=0) -> [[30, 31, 1], [41, 63, 63]]
fx apply ReleaseSeq{cache=true, finish_sequence}
cache_sequence(s1@0:len=18)
free_sequence(s1@0:len=18, blocks=2)
ep_broadcast_cmd_for_seq(seq=0, cmd=0xfffffff1)
fx apply CompactSlot{target=0}
compact_sequence(s3@2:len=17, new_slot=0)
num_free_blocks() -> 996
-- tick 5
mtp_slot_draft_capacity(1)
mtp_slot_draft_capacity(0)
can_batch_verify([4, 3]) -> true
sync_secondary()
decode_verify_batched(tokens=[29, 30, 31, 1, 40, 41, 63], ks=[4, 3], seqs=["s2@1:len=19", "s3@0:len=20"], stream=0, woa=true) -> [30, 31, 63, 1, 41, 63, 63]
stash_verify_hidden_rows([2, 6], stream=0)
stash_verify_catchup_rows([(0, 0), (1, 1), (4, 4), (5, 5)])
gdn_fold_accepted(slots=[1, 0], accepted=[3, 3], k=4) -> true
trim_proposer_state(s2@1:len=18, na=2, stream=0)
commit_accepted_prefix(s2@1:len=18, na=3, k=4)
fx apply ReleaseSeq{cache=true, finish_sequence}
cache_sequence(s2@1:len=18)
free_sequence(s2@1:len=18, blocks=2)
ep_broadcast_cmd_for_seq(seq=1, cmd=0xfffffff1)
fx apply ReleaseSeq{cache=true, finish_sequence}
cache_sequence(s3@0:len=20)
free_sequence(s3@0:len=20, blocks=2)
ep_broadcast_cmd_for_seq(seq=0, cmd=0xfffffff1)
num_free_blocks() -> 1000
-- tick 6
fx apply EpShutdown
ep_broadcast_cmd_for_seq(seq=0, cmd=0xffffffff)
fx apply Quiesce{stream=0}
synchronize(stream=0)
fx apply Quiesce{stream=1}
synchronize(stream=1)
fx teardown
teardown()
out s1: T10 T11 T12 T13 T14 T15 T16 T17 T18 T19 T20 T21 Done(stop, n=13, think=0, cached=0, acc=9, guard=None)
out s2: T20 T21 T22 T23 T24 T25 T26 T27 T28 T29 T30 T31 Done(stop, n=13, think=0, cached=0, acc=7, guard=None)
out s3: T30 T31 T32 T33 T34 T35 T36 T37 T38 T39 T40 T41 Done(stop, n=13, think=0, cached=0, acc=8, guard=None)