docstr: q, k, v: are in shape [*, L, H, D]
docstr_tok: ["q",",","k",",","v",":","are","in","shape","[","*",",","L",",","H",",","D","]"]
code: def forward(ctx, q, k, v, bias1=None, bias2=None):
      """
      q, k, v: are in shape [*, L, H, D]
      """
      bias1_ = (
          bias1.contiguous()
          if bias1 is not None
          else torch.tensor([], dtype=q.dtype, device=q.device)
      )
      bias2_ = (
          bias2.contiguous()
          if bias2 is not None
          else torch.tensor([], dtype=q.dtype, device=q.device)
      )
      q = q.contiguous()
      k = k.contiguous()
      v = v.contiguous()
      o, lse = _attention(q, k, v, bias1_, bias2_)
      ctx.save_for_backward(q, k, v, o, lse, bias1_, bias2_)
      return o
  
file_path: DeepSpeed/deepspeed/ops/deepspeed4science/evoformer_attn.py
imports: import torch
  import numpy
  from deepspeed.ops.op_builder import EvoformerAttnBuilder
  from deepspeed.accelerator import get_accelerator
label_desc: Use image node_id 1 for calling the EvoformerFusedAttention obj's underlying member method code with example usage: obj.forward(ctx, q, k, v, bias1, bias2) and returns: o