LLM inference시 겪었던 가장 골치아픈 오류

singleheart·2024년 3월 22일
0

작년쯤 회사에서 다른 팀이 내가 만든 LLM을 사용하다가 리포트했던 버그가 있었다. “ㅠㅠ”나 “^^”로 시작하는 입력만 넣으면 특정 문자열만 반복해서 출력된다는 것이었다.

닷새 정도 디버깅하고 결국 원인을 찾았는데, 우선 문제는 bf16으로 학습한 모델을 fp16으로 읽어서 사용했기 때문이었다. fp16도 5.96e-8에서 65504 범위는 나타낼 수 있으니 신경망에서 계산되는 값이 범위로 떨어지면 문제 없는데 넘어가면 문제가 생기는 것이다. 0이 되거나 무한대로 가거나. 그러면 0으로 나누다가 NaN이 발생해서 나 같은 스페셜 토큰을 대신 출력하고, 다음 토큰을 생성할 때에도 이전 토큰을 넣어주어야 하는데 똑같은 입력을 주니까 계속 똑같은 출력을 반복하는 .

모델을 원래의 타입인 bf16이나 더 큰 fp32로 로드하면 문제가 해결되었다. 이후로 파인튜닝시 fp16은 피하도록 가이드하고 있다.

profile
개발자

0개의 댓글