class_docstr: base class for all mixin based adapter models
docstr: ModelPT override. Optimizer will get self._optimizer_param_groups.
  Makes two optimizer param groups, one for the frozen model params
  and one for the prompt-table/prompt-encoder params. The learning
  rate for the frozen model's params will always be zero effectively
  freezing the model's params but still allowing for the needed gradients
  to be passed around in pipeline parallel models. The prompt-encoder
  and/or prompt table will use the learning rate set by the user.
docstr_tok: ["ModelPT","override",".","Optimizer","will","get","self._optimizer_param_groups",".","Makes","two","optimizer","param","groups",",","one","for","the","frozen","model","params","and","one","for","the","prompt-table\/prompt-encoder","params",".","The","learning","rate","for","the","frozen","model","'s","params","will","always","be","zero","effectively","freezing","the","model","'s","params","but","still","allowing","for","the","needed","gradients","to","be","passed","around","in","pipeline","parallel","models",".","The","prompt-encoder","and\/or","prompt","table","will","use","the","learning","rate","set","by","the","user","."]
code: def setup_optimizer_param_groups(self):
      """
      ModelPT override. Optimizer will get self._optimizer_param_groups.
      Makes two optimizer param groups, one for the frozen model params
      and one for the prompt-table/prompt-encoder params. The learning
      rate for the frozen model's params will always be zero effectively
      freezing the model's params but still allowing for the needed gradients
      to be passed around in pipeline parallel models. The prompt-encoder
      and/or prompt table will use the learning rate set by the user.
      """
      self.freeze()  # Freeze the entire model
      opt_params = []
      for _, module in self.named_modules():
          if (
              isinstance(module, adapter_mixins.AdapterModuleMixin)
              and module.is_adapter_available()
          ):
              module.set_enabled_adapters(enabled=True)
              module.unfreeze_enabled_adapters()  # selectively unfreeze the adapter modules.
              opt_params += [
                  p for p in module.parameters() if p.requires_grad
              ]
      self._optimizer_param_groups = ({"params": opt_params},)
      logging.info(f"Optimizer groups set:\n{self.summarize()}")
  
imports: from omegaconf.dictconfig import DictConfig
  from pytorch_lightning.trainer.trainer import Trainer
  from nemo.collections.nlp.models.language_modeling.megatron_gpt_sft_model import MegatronGPTSFTModel
  from nemo.collections.nlp.modules.common.megatron.adapters.mcore_mixins import MCoreGPTEmbeddingMixin, MCoreSelfAttentionMixin, MCoreTransformerLayerMixin, swap_mcore_mixin
  from nemo.collections.nlp.modules.common.megatron.adapters.parallel_adapters import AdapterName, InfusedAdapterConfig, LoraKQVAdapterConfig, LoraKQVAdapterWeightTyingConfig, MLPInfusedAdapterConfig, ParallelLinearAdapterConfig, ParallelLinearAdapterWeightTyingConfig, PromptEncoderAdapterConfig
  from nemo.core.classes.mixins import adapter_mixins
  from nemo.utils import logging, model_utils
  from nemo.utils.decorators import deprecated
label_desc: Use image node_id 11 for calling the MegatronGPTPEFTModel obj's underlying member method code with example usage: obj.setup_optimizer_param_groups() without return types