class_docstr: This lobe enables the integration of HuggingFace and SpeechBrain
  pretrained mBART models.
  
  Source paper mBART: https://arxiv.org/abs/2001.08210
  Transformer from HuggingFace needs to be installed:
  https://huggingface.co/transformers/installation.html
  
  The model is normally used as a text decoder of seq2seq models. It
  will download automatically the model from HuggingFace or use a local path.
  
  Arguments
  ---------
  source : str
      HuggingFace hub name: e.g "facebook/mbart-large-50-many-to-many-mmt"
  save_path : str
      Path (dir) of the downloaded model.
  freeze : bool (default: True)
      If True, the model is frozen. If False, the model will be trained
      alongside with the rest of the pipeline.
  target_lang: str (default: fra_Latn (a.k.a French)
      The target language code according to NLLB model.
  decoder_only : bool (default: True)
      If True, only take the decoder part (and/or the lm_head) of the model.
      This is useful in case one wants to couple a pre-trained speech encoder (e.g. wav2vec)
      with a text-based pre-trained decoder (e.g. mBART, NLLB).
  share_input_output_embed : bool (default: True)
      If True, use the embedded layer as the lm_head.
  
  Example
  -------
  >>> src = torch.rand([10, 1, 1024])
  >>> tgt = torch.LongTensor([[250008,    313,     25,    525,    773,  21525,   4004,      2]])
  >>> model_hub = "facebook/mbart-large-50-many-to-many-mmt"
  >>> save_path = "savedir"
  >>> model = mBART(model_hub, save_path) # doctest: +SKIP
  >>> outputs = model(src, tgt) # doctest: +SKIP
code: def __init__(
      self,
      source,
      save_path,
      freeze=True,
      target_lang="fr_XX",
      decoder_only=True,
      share_input_output_embed=True,
  ):
      super().__init__(
          source=source,
          save_path=save_path,
          freeze=freeze,
          seq2seqlm=True,
      )
  
      self.target_lang = target_lang
      self.decoder_only = decoder_only
      self.share_input_output_embed = share_input_output_embed
  
      self.load_tokenizer(
          source=source, pad_token=None, tgt_lang=target_lang
      )
  
      if share_input_output_embed:
          self.model.lm_head.weight = (
              self.model.model.decoder.embed_tokens.weight
          )
          self.model.lm_head.requires_grad = False
          self.model.model.decoder.embed_tokens.requires_grad = False
  
      if decoder_only:
          # When we only want to use the decoder part
          del self.model.model.encoder
  
      for k, p in self.model.named_parameters():
          # It is a common practice to only fine-tune the encoder_attn and layer_norm layers of this model.
          if "encoder_attn" in k or "layer_norm" in k:
              p.requires_grad = True
          else:
              p.requires_grad = False
  
file_path: speechbrain/speechbrain/lobes/models/huggingface_transformers/mbart.py
imports: import torch
  import logging
  from speechbrain.lobes.models.huggingface_transformers.huggingface import HFTransformersInterface
label_desc: Use image node_id 1 to create a new mBART object from inherited base classes: HFTransformersInterface with example: obj = mBART(source, save_path, freeze, target_lang, decoder_only, share_input_output_embed)