def forward(self,
                attention_mask: torch.LongTensor,
                past_key_values_length: int = 0):
        """`input_ids_shape` is expected to be [bsz x seqlen]."""
        attention_mask = attention_mask.long()

        # create positions depending on attention_mask
        positions = (
            torch.cumsum(attention_mask, dim=1).type_as(attention_mask) *
            attention_mask).long() - 1

        # cut positions if `past_key_values_length` is > 0
        positions = positions[:, past_key_values_length:]

        return super().forward(positions + self.offset)
`input_ids_shape` is expected to be [bsz x seqlen].
mmpretrain/models/multimodal/blip2/modeling_opt.py