@@ -547,13 +547,14 @@ def _setup_inputs(self):
547547 else :
548548 self .softmax_offset = None
549549
550- def gen_valid (bs , max_seqlen , pad_ratio ):
550+ def generate_valid_segment_ids_and_pos (bs , max_seqlen , pad_ratio ):
551551 pad_len = int (max_seqlen * pad_ratio )
552552 valid_len = max_seqlen - pad_len
553553 tokens = jnp .concatenate ([jnp .ones ((bs , valid_len )), jnp .zeros ((bs , pad_len ))], axis = - 1 )
554- return tokens , jnp .logical_not (tokens )
554+ segment_pos = jnp .broadcast_to (jnp .arange (max_seqlen , dtype = tokens .dtype ), tokens .shape )
555+ return tokens , segment_pos , jnp .logical_not (tokens )
555556
556- def generate_random_segment_ids (
557+ def generate_random_segment_ids_and_pos (
557558 batch_size ,
558559 sequence_length ,
559560 num_segments ,
@@ -601,7 +602,7 @@ def generate_random_segment_ids(
601602 return segment_ids , segment_pos , segment_pad
602603
603604 if self .qkv_layout .is_thd ():
604- self .segment_ids_q , self .segment_pos_q , self .pad_q = generate_random_segment_ids (
605+ self .segment_ids_q , self .segment_pos_q , self .pad_q = generate_random_segment_ids_and_pos (
605606 self .batch_size , self .max_seqlen_q , self .num_segments_per_seq , seed = 42
606607 )
607608 self .seqlens_q , self .offsets_q = get_seqlens_and_offsets (self .segment_ids_q )
@@ -617,7 +618,7 @@ def generate_random_segment_ids(
617618 self .window_size is not None or self .attn_mask_type .is_bottom_right ()
618619 ): # SWA or BRCM requires kv_len >= q_len
619620 min_segment_len = self .seqlens_q
620- self .segment_ids_kv , self .segment_pos_kv , self .pad_kv = generate_random_segment_ids (
621+ self .segment_ids_kv , self .segment_pos_kv , self .pad_kv = generate_random_segment_ids_and_pos (
621622 self .batch_size ,
622623 self .max_seqlen_kv ,
623624 self .num_segments_per_seq ,
@@ -626,13 +627,12 @@ def generate_random_segment_ids(
626627 )
627628 self .seqlens_kv , self .offsets_kv = get_seqlens_and_offsets (self .segment_ids_kv )
628629 else :
629- self .segment_ids_q , self .pad_q = gen_valid (
630+ self .segment_ids_q , self .segment_pos_q , self . pad_q = generate_valid_segment_ids_and_pos (
630631 self .batch_size , self .max_seqlen_q , pad_ratio
631632 )
632- self .segment_ids_kv , self .pad_kv = gen_valid (
633+ self .segment_ids_kv , self .segment_pos_kv , self . pad_kv = generate_valid_segment_ids_and_pos (
633634 self .batch_size , self .max_seqlen_kv , pad_ratio
634635 )
635- self .segment_pos_q = self .segment_pos_kv = None
636636 self .seqlens_q = self .seqlens_kv = self .offsets_q = self .offsets_kv = None
637637
638638 # For reference code
@@ -682,24 +682,15 @@ def generate_random_segment_ids(
682682 (self .offsets_q , self .offsets_kv ),
683683 )
684684 case SeqDescFormat .SegmentIDs :
685- # Exercise the path to generate the segment_pos in from_segment_ids_and_pos()
686- # if no CP and load balancing, else explicitly pass the segment_pos
685+ # from_segment_ids_and_pos requires explicit segment_pos.
687686 self .sequence_desciptor = SequenceDescriptor .from_segment_ids_and_pos (
688687 (
689688 self .cp_reorder_fn (self .segment_ids_q ),
690689 self .cp_reorder_fn (self .segment_ids_kv ),
691690 ),
692691 (
693- (
694- self .cp_reorder_fn (self .segment_pos_q ),
695- self .cp_reorder_fn (self .segment_pos_kv ),
696- )
697- if self .cp_size > 1 and self .cp_load_balanced
698- else None
699- ),
700- is_thd = self .qkv_layout .is_thd (),
701- is_segment_ids_reordered = (
702- True if self .cp_size > 1 and self .cp_load_balanced else False
692+ self .cp_reorder_fn (self .segment_pos_q ),
693+ self .cp_reorder_fn (self .segment_pos_kv ),
703694 ),
704695 )
705696 case _:
@@ -727,9 +718,7 @@ def generate_random_segment_ids(
727718 case SeqDescFormat .SegmentIDs :
728719 self .sequence_desciptor = SequenceDescriptor .from_segment_ids_and_pos (
729720 (self .segment_ids_q , self .segment_ids_kv ),
730- None ,
731- is_thd = self .qkv_layout .is_thd (),
732- is_segment_ids_reordered = False ,
721+ (self .segment_pos_q , self .segment_pos_kv ),
733722 )
734723 case _:
735724 raise ValueError (f"Unknown { self .seq_desc_format = } " )
0 commit comments