모델이 제대로 저장이 안되는 이유가 뭘까..?
▶ 시도 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 로드" 코드를 썼더니 잘 작동했다.. (이 코드에용.. )
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 라이브러리에서 학습한 모델 저장, 불러오기
'project' 카테고리의 다른 글
[DevPrep] 5. koalpaca fine-tuning test (1) | 2024.03.07 |
---|---|
[DevPrep] 4. gpt 프롬프팅 테스트 & 데이터 (0) | 2024.03.04 |
[DevPrep] 3. gpt 파인튜닝과 프롬프트 엔지니어링 (0) | 2024.02.17 |
[DevPrep] 2. llm 비교해서 선정하기 (0) | 2024.02.17 |