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를 정확히 분리하고 경로 관리하는 습관 중요