본문 바로가기
project

[DevPrep] 6. koalpaca 모델 저장

by alphaca202 2024. 3. 28.

모델이 제대로 저장이 안되는 이유가 뭘까..?

 

▶ 시도 1 - 그냥 torch 모델 저장하는 방법 대로 저장함

model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()

 

여기서 모델이 빈 상태로라도 정의가 되어 있어야 저장한 걸 불러올 수 있는데....

일단 저 부분을 모른다 그럼 어떻게 저장하지?

라는 생각에서 transformers 라이브러리를 사용한 모델의 저장 방법을 검색해봤다! 

실제로 transformers 라이브러리를 사용한 모델은 다른 방법을 사용해야 했다. 

 

transformers 라이브러리 사용한 모델을 그냥 model.load_state_dict(torch.load(PATH)) 하면 왜 안돼?

 

gpt왈

 

transformers 라이브러리를 사용하여 미리 학습된 모델을 불러올 때는 일반적으로 model.load_state_dict(torch.load(PATH))를 사용하는 것이 아니라 from_pretrained 메서드를 사용해야 합니다. 이는 transformers 라이브러리의 모델들이 사전 훈련된 모델 가중치와 모델 구조를 함께 저장하기 때문입니다. 그래서 단순히 load_state_dict를 호출해서는 모델의 구조가 부족하게 됩니다.

 

 

 

 

▶ 시도 2 - Transformers 라이브러리에서 학습한 모델 저장하는 방법을 써보자

model.save_pretrained("saving_folder") 를 써서 모델을 저장하고자 했다. 

 

=> 여기서는 config 파일이 생성되지 않았는데 불러오는 과정에서 config파일이 없다는 오류가 계속 발생했다. 

=> 결국 불러오는 코드가 문제였다. 

 

 

 

▶ 시도 3 - hugging face 에 push를 하는 방법

 

- 로그인

!huggingface-cli login

 

- push

# 훈련된 모델 저장
# model.push_to_hub('beomi/qlora-koalpaca-polyglot-12.8b-50step')
# 아래 아이디 부분을 수정해서 쓰세요.
model.push_to_hub('허깅페이스id/model5')

 

이렇게 저장하고, 불러올 때 코드가 중요하다. (결국 불러오는 코드에 문제가 있어서 안됐던 것)

peft Lora로 학습을 시켰기 때문에 불러올 때도 이 finetuning 방법에 맞게 불러와야함. 

 

 

=> 결국 결론 .. 백본 모델을 학습 시킬 때 peft Lora 모델을 사용해서 fine-tuning 시켰다. 이걸 저장하고 불러올 때 이 파인튜닝 기법에 맞게 불러와야 되는데 그냥 마구잡이로 불러오다보니 당연히 안됨. 가져와서 config도 만들어주고 처리를 해서 모델을 로드해야한다. 

 

 

Beomi 님의 "peft로 Lora 로드" 코드를 썼더니 잘 작동했다.. (이 코드에용.. ) 

https://colab.research.google.com/github/Beomi/KoAlpaca/blob/main/2023_06_08_PEFT%EB%A1%9CLoRA%EB%A1%9C%EB%93%9C.ipynb

 

2023_06_08_PEFT로LoRA로드.ipynb

Colaboratory notebook

colab.research.google.com

 

 

fine- tuning 할 때 썼던 코드는 이거에요!!

-> Beomi 님 코드에서 data랑 학습 rate만 바꾼 것! 

https://colab.research.google.com/drive/1UBwwjx6m862C-cos1IlBjz1YB1h-sLKI?usp=sharing

 

모델테스트_data3

Colaboratory notebook

colab.research.google.com

 

Python/NLP Code

 

 

Transformers 라이브러리에서 학습한 모델 저장, 불러오기 

Python/NLP Code

Transformers 라이브러리에서 학습한 모델 저장, 불러오기