code: def test_encdec_multihead_attn_norm_add(self):
      grads = torch.randn_like(self.tst_inputs_q)
  
      for _ in range(5):
          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,
          )
  
          self.ref_inputs_q.backward(grads)
          self.tst_inputs_q.backward(grads)
  
      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
      )
      torch.testing.assert_close(
          self.ref_inputs_q.grad,
          self.tst_inputs_q.grad,
          atol=1e-3,
          rtol=1e-3,
      )
  
imports: import unittest
  import torch
label_desc: Use image node_id 2 for calling the EncdecMultiheadAttnNormAddTest obj's underlying member method code with example usage: obj.test_encdec_multihead_attn_norm_add() without return types