class_docstr: Drop-in replacement for all output linear layers.
  
  An "output" linear layer is one that maps from a width dimension (e.g.,
  `d_model` in a Transformer) to a non-width dimension (e.g., vocab size).
  
  This layer implements the version of μP with a 1/width multiplier and a
  constant variance initialization for both weights and biases.
  Arguments:
      mpu_vocab_size: model parallel size of vocabulary.
      parallel_output: wether output logits being distributed or not.
code: def forward(self, hidden_states, word_embeddings_weight):
      if hasattr(word_embeddings_weight, "infshape"):
          width_mult = word_embeddings_weight.infshape.width_mult()
      else:
          width_mult = 1.0
          if not self.warn_once:
              logging.warning(
                  "need to set_shape before use mu-Transfer readout layer"
              )
          self.warn_once = True
      async_tensor_model_parallel_allreduce = (
          parallel_state.get_tensor_model_parallel_world_size() > 1
      )
      output = parallel_lm_logits(
          hidden_states / width_mult,
          word_embeddings_weight,
          self.parallel_output,
          bias=self.bias,
          async_tensor_model_parallel_allreduce=async_tensor_model_parallel_allreduce,
      )
      return output
  
file_path: NeMo/nemo/collections/nlp/modules/common/megatron/mup/layer.py
imports: import torch
  from nemo.collections.nlp.modules.common.megatron.module import MegatronModule
  from nemo.collections.nlp.modules.common.megatron.utils import parallel_lm_logits
  from nemo.utils import logging
label_desc: Use image node_id 2 for calling the MuReadout obj's underlying member method code with example usage: obj.forward(hidden_states, word_embeddings_weight) and returns: output