로컬 LLM 벤치마킹 시 발생하는 인코딩 오류 해결하기
로컬 LLM 모델을 교체하고 벤치마킹할 수 있는 도구를 만들고 싶었습니다. 또한 모델을 더 효과적으로 테스트하기 위해 많은 한국어 벤치마크 질문을 추가했습니다.
벤치마크를 실행하기 전까지는 모든 것이 잘 작동했습니다. 하지만 벤치마크를 실행하자 계속해서 다음과 같은 오류가 발생했습니다:
UnicodeEncodeError: 'cp949' codec can't encode characters.
처음에는 제 Python 코드에 문제가 있다고 생각했습니다. 인코딩 설정을 utf-8로 변경해 보기도 하고, 문자열을 수동으로 디코딩해 보기도 했습니다. 몇 시간 동안 아무것도 해결되지 않았습니다.
진짜 문제는 제 스크립트가 아니었습니다. 로컬 LLM 워커(worker)가 시스템 기본 인코딩을 사용하여 모델 응답을 저장하려고 시도하고 있었던 것이 문제였습니다. Windows의 경우, 이는 종종 CP949로 설정되어 있습니다. 워커가 CP949를 사용하여 한국어 문자를 저장하려고 할 때 오류가 발생한 것입니다.
해결 방법은 간단했습니다. 파일을 저장할 때 워커가 명시적으로 utf-8을 사용하도록 변경했습니다.
또한 이 프로세스를 관리하기 위한 자동화 시스템을 구축했습니다. 시스템은 다음과 같은 단계로 진행됩니다:
- 후보 모델 다운로드.
- 현재 가장 성능이 좋은 모델로 벤치마크 실행.
- 모든 새로운 후보 모델 테스트.
- 점수를 기반으로 최적의 모델 선택 및 추천.
이 자동화 과정을 통해, 한국어 작업에서 Gemma2:2b가 EXAONE 모델보다 훨씬 더 뛰어난 성능을 보인다는 것을 발견했습니다. 비슷한 속도에서 더 자연스러운 답변과 더 뛰어난 창의적 결과를 제공합니다.
배운 점:
- 시스템 기본 인코딩에 절대 의존하지 마세요. 파일 I/O에는 항상 utf-8을 사용하세요.
- 한국어 텍스트와 함께
json.dump를 사용할 때는ensure_ascii=False를 사용하고 utf-8을 지정하세요. - 인코딩 오류가 발생하면 현재 작성 중인 코드뿐만 아니라 전체 시스템과 파일 저장 로직을 확인하세요.
- 자동화를 활용하여 특정 요구 사항에 가장 적합한 모델을 찾으세요.
Optional learning community: https://t.me/GyaanSetuAi