in src/hyperpod_nemo_adapter/collections/model/sagemaker_base_model.py [0:0]
def _build_model_from_pretrain_peft(self, model_cfg):
assert not self.use_smp_model, "Must set use_smp_model=False to use PEFT"
assert self._cfg.do_finetune, "Must set do_finetune=True to use PEFT"
assert self._cfg.hf_model_name_or_path is not None, "Must provide pretrained weights to use PEFT"
# set env vars for efficient HF model loading (PEFT does not use SMP delayed param)
# see https://github.com/huggingface/transformers/blob/27903de7ecfc21e9b5a061c46c3b1ff73539d385/src/transformers/modeling_utils.py#L140
os.environ["ACCELERATE_USE_FSDP"] = "True"
os.environ["FSDP_CPU_RAM_EFFICIENT_LOADING"] = "True"
if (
self.peft_type is not None
and self.peft_type == "lora"
and self._cfg.get("model_type", None) == "deepseek_r1"
):
os.environ["FORCE_ACTIVATE"] = "True"
quantization_config = self.get_quantization_config()
model = self._build_model_from_pretrain(
model_cfg, torch_dtype=torch.bfloat16, quantization_config=quantization_config
)
lora_config = self.get_lora_config()
model.enable_input_require_grads()
checkpoint_dir = self.trainer.strategy.cfg.exp_manager.resume_from_checkpoint
if checkpoint_dir is not None:
if dist.get_rank() == 0:
_logger.debug(f"Model before loading adapter weights: {model}")
model = PeftModel.from_pretrained(model, checkpoint_dir, is_trainable=True)
if dist.get_rank() == 0:
_logger.info(f"Loaded adapter weights from {checkpoint_dir}.")
_logger.debug(f"Model after loading adapter weights: {model}")
else:
model = get_peft_model(model, lora_config)
if dist.get_rank() == 0:
model.print_trainable_parameters()
return model