model = LlamaForCausalLM.from_pretrained(base_dir)
peft_model = PeftModel.from_pretrained(model, lora_dir)
merged_model = peft_model.merge_and_unload()
merged_model.save_pretrained(output_dir)
이렇게 하면 아래처럼 에러가 나타날 수 있다.
File "/home/***/dyeon/wandb-FastChat/fastchat/train/utils_dy.py", line 54, in merge_lora merged_model.save_pretrained(output_dir)
File "/home/***/miniforge3/envs/fctrain/lib/python3.10/site-packages/transformers/modeling_utils.py", line 2636, in save_pretrained state_dict = model_to_save.get_adapter_state_dict()
File "/home/***/miniforge3/envs/fctrain/lib/python3.10/site-packages/transformers/integrations/peft.py", line 423, in get_adapter_state_dict adapter_name = self.active_adapter()
File "/home/***/miniforge3/envs/fctrain/lib/python3.10/site-packages/transformers/integrations/peft.py", line 401, in active_adapter return self.active_adapters()[0]
File "/home/***/miniforge3/envs/fctrain/lib/python3.10/site-packages/transformers/integrations/peft.py", line 391, in active_adapters if isinstance(active_adapters, str):
UnboundLocalError: local variable 'active_adapters' referenced before assignment
그럴때에는 아래처럼 save_pretrained 의 주체를 peft_model 로 바꾸면 해결될 수 있다. 위 코드와 차이를 알겠는가?
peft_model.save_pretrained(output_dir)
원래 보통은 model, peft_model, merged_model 을 따로 안쓰고 model 로 같은 이름을 쓰지만 필자의 경우 디버깅 때문에 맨 위와 같이 다 다른 변수 이름을 사용하였다.
그러면 from_pretrained() 만 된 model, peft_model 의 상태 를 확인하면,
model 은 LlamaForCausalLM (llama 모델을 사용하였을 때) 를 확인할 수 있고,
peft_model 은 PeftModelForCausalLM 임을 확인할 수 있다.
이후 확인을 해보면, merge_and_unload() 함수를 사용하면 merged_model 은 LlamaForCausalLM 임을 확인할 수 있다.
그런데 merge 를 하면 model 과 peft_model 의 파라미터 값은 merged 값과 같은 값이 된다.
근데 peft_model 은 PeftModelForCausalLM 세팅은 그대로 유지됨을 확인한다.
그래서 그런가 싶다.. 사실 왜인지는 모르겠다 ㅠㅜ 아시는 분은 댓글로 알려주세요~.~
'머신러닝 이모저모' 카테고리의 다른 글
cuda downgrade 하기 (4) | 2024.11.08 |
---|---|
DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models (0) | 2024.11.07 |
[이화여대 강의] 2. Deep Learning Software Stack 1 (3) (3) | 2024.09.21 |
[이화여대 강의] 2. Deep Learning Software Stack 1 (2) (0) | 2024.09.20 |
[이화여대 강의] 2. Deep Learning Software Stack 1 (1) (0) | 2024.09.20 |