llama 3 계열 모델 학습 시 발생했던 문제 해결 - Songwooseok123/Study_Space GitHub Wiki

  • 참고로 llama 3.1 부터는 해결되었다고 함
  • llama3.1을 학습시켜 본 적은 없어서 모르겠음
  • https://github.com/unslothai/unsloth/issues/416 이슈를 참고하고 실험해본 결과 정상적으로 학습이 되었음.

주요 원인:

  • 파인튜닝 시 pad_token_ideos_token_id가 동일하게 설정됨 (<|end_of_text|>).
  • 이로 인해 모델이 EOS 토큰을 학습하지 못하고, 결과적으로 출력이 무한정 이어짐.

해결 방법:

  1. 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와 구분.
  2. 변경 사항 확인:

    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_id128002, eos_token_id128001로 구분됨.
  3. 추가 학습:

    • 변경된 pad_token_id로 30회 추가 학습 후, EOS 토큰이 정상적으로 생성되기 시작함.

결과:

  • pad_token_ideos_token_id를 다르게 설정하면 EOS 토큰이 제대로 생성되며, 텍스트 생성이 불필요하게 길어지는 문제 해결됨.

추가 사항:

  • Unsloth 팀에서도 해당 문제를 인지하고 수정 중임.
  • 다른 사용자들도 동일한 문제를 경험했으며, 해당 방법으로 문제를 해결함.