tokenizer, peftmodel 설정 트러블슈팅 - 100-hours-a-week/12-marong-Wiki GitHub Wiki

에러 내용

  • PEFTModel.from_pretrained()으로 어댑터만 로드하고 사용할 때, Tokenizer를 불러오는 과정에서 tokenizer config mismatch, unk_token 관련 오류 발생
  • LLM 추론 시 pad_token_id, eos_token_id 등이 제대로 설정되지 않아 ValueError, IndexError 발생

원인 분석

  • 원본 모델(base_model)을 로드하지 않고, PEFT 어댑터만 로드하여 tokenizer 정보가 불완전함
  • tokenizer를 Hugging Face hub나 로컬에서 가져오지 않고, PEFTModel에만 의존
  • AutoTokenizer.from_pretrained(peft_model_path) 사용 시, 어댑터 디렉토리에는 tokenizer 관련 파일이 없어 실패
  • 따라서 special tokens, vocab 파일 등 tokenizer 구성 누락

해결 방법

  • 반드시 원본 모델(base model)의 경로에서 tokenizer를 로드해야 함:
tokenizer = AutoTokenizer.from_pretrained("beomi/KoAlpaca-Polyglot-3.8B")
model = AutoModelForCausalLM.from_pretrained("beomi/KoAlpaca-Polyglot-3.8B")
model = PeftModel.from_pretrained(model, "path/to/peft/adapter")
  • PEFT 어댑터는 base 모델에 merge되는 구조이므로, tokenizer도 base 경로 기준으로 불러야 일관성 유지 가능
  • tokenizer.pad_token, tokenizer.eos_token 등 필요한 특수 토큰 설정도 함께 지정
  • 추론 시 model.config.pad_token_id, model.config.eos_token_id 등을 tokenizer와 동기화

회고

  • PEFT 어댑터만으로는 tokenizer 구성이 완전하지 않으므로 항상 base 모델과 함께 로드 필요
  • tokenizer mismatch는 추론 오류의 주요 원인이며, tokenizer/model config 분리 주의 필요
  • base model, tokenizer, peft adapter를 정확히 분리하고 경로 관리하는 습관 중요