code: def forward(
      self, trg_tokens, encoder_out, encoder_padding_mask, cache=None
  ):
      x = self.forward_embedding(trg_tokens, cache)
  
      if cache == {}:
          for i in range(self.num_layers):
              cache[i] = {}
  
      for i, layer in enumerate(self.layers):
          layer_cache = cache[i] if cache else None
          x = layer(
              x,
              encoder_out,
              encoder_padding_mask,
              layer_cache,
          )
  
      x = self.layer_norm(x)
  
      self.output_projection.weight = self.embed_tokens.para[
          : self.embed_tokens.config.vocab_size
          * self.embed_tokens.config.embedding_dim
      ].view(
          self.embed_tokens.config.vocab_size,
          self.embed_tokens.config.embedding_dim,
      )
      self.output_projection.weight_quant._amax = (
          self.embed_tokens.para[-1].data
      )
      x = self.output_projection(x)
      return x
  
imports: from dataclasses import dataclass
  import torch
  import torch.nn
  from lightseq.training import LSTransformerEmbeddingLayer, LSTransformerEncoderLayer, LSTransformerDecoderLayer
  from lightseq.training.ops.pytorch.util import MODEL_ARCH
  from lightseq.training.ops.pytorch.quantization import QuantLinear
label_desc: Use image node_id 4 for calling the LSTransformerDecoder obj's underlying member method code with example usage: obj.forward(trg_tokens, encoder_out, encoder_padding_mask, cache) and returns: x