code: def test_encdec_multihead_attn(self):
      ref_outputs, _ = self.ref_layer.forward(
          self.ref_inputs_q,
          self.ref_inputs_k,
          self.ref_inputs_k,
          key_padding_mask=None,
          need_weights=False,
          attn_mask=None,
          is_training=True,
      )
  
      tst_outputs, _ = self.tst_layer.forward(
          self.tst_inputs_q,
          self.tst_inputs_k,
          self.tst_inputs_k,
          key_padding_mask=None,
          need_weights=False,
          attn_mask=None,
          is_training=True,
      )
      torch.testing.assert_close(
          self.ref_inputs_q, self.tst_inputs_q, atol=1e-5, rtol=1e-5
      )
      torch.testing.assert_close(
          self.ref_inputs_k, self.tst_inputs_k, atol=1e-5, rtol=1e-5
      )
      torch.testing.assert_close(
          ref_outputs, tst_outputs, atol=1e-3, rtol=1e-3
      )
  
      with torch.no_grad():
          ref_grads = torch.randn_like(ref_outputs)
          tst_grads = ref_grads.clone()
      ref_outputs.backward(ref_grads)
      tst_outputs.backward(tst_grads)
      torch.testing.assert_close(
          self.ref_inputs_q.grad,
          self.tst_inputs_q.grad,
          atol=1e-3,
          rtol=1e-3,
      )
  
file_path: apex/apex/contrib/test/multihead_attn/test_encdec_multihead_attn.py
imports: import unittest
  import torch
label_desc: Use image node_id 2 for calling the EncdecMultiheadAttnTest obj's underlying member method code with example usage: obj.test_encdec_multihead_attn() without return types