llama 3 계열 모델 학습 시 발생했던 문제 해결 - Songwooseok123/Study_Space GitHub Wiki
- 참고로 llama 3.1 부터는 해결되었다고 함
- llama3.1을 학습시켜 본 적은 없어서 모르겠음
- https://github.com/unslothai/unsloth/issues/416 이슈를 참고하고 실험해본 결과 정상적으로 학습이 되었음.
주요 원인:
- 파인튜닝 시
pad_token_id
와eos_token_id
가 동일하게 설정됨 (<|end_of_text|>
). - 이로 인해 모델이 EOS 토큰을 학습하지 못하고, 결과적으로 출력이 무한정 이어짐.
해결 방법:
-
pad_token_id
를 변경:tokenizer.add_special_tokens({"pad_token": "<|reserved_special_token_0|>"}) model.config.pad_token_id = tokenizer.pad_token_id tokenizer.padding_side = 'right'
pad_token_id
를<|reserved_special_token_0|>
로 변경해eos_token_id
와 구분.
-
변경 사항 확인:
python 코드 복사 print(f"Pad Token id: {tokenizer.pad_token_id} and Pad Token: {tokenizer.pad_token}") print(f"EOS Token id: {tokenizer.eos_token_id} and EOS Token: {tokenizer.eos_token}")
- 변경 후,
pad_token_id
는128002
,eos_token_id
는128001
로 구분됨.
- 변경 후,
-
추가 학습:
- 변경된
pad_token_id
로 30회 추가 학습 후, EOS 토큰이 정상적으로 생성되기 시작함.
- 변경된
결과:
pad_token_id
와eos_token_id
를 다르게 설정하면 EOS 토큰이 제대로 생성되며, 텍스트 생성이 불필요하게 길어지는 문제 해결됨.
추가 사항:
- Unsloth 팀에서도 해당 문제를 인지하고 수정 중임.
- 다른 사용자들도 동일한 문제를 경험했으며, 해당 방법으로 문제를 해결함.