解决本地 LLM 基准测试中的编码错误
我想构建一个用于切换和基准测试本地 LLM 模型的工具。为了更好地测试它们,我还添加了许多韩语基准测试问题。
一切运行正常,直到我开始运行基准测试。我一直看到这个错误:
UnicodeEncodeError: 'cp949' codec can't encode characters.
我以为问题出在我的 Python 代码中。我尝试将编码设置更改为 utf-8,尝试手动解码字符串。折腾了好几个小时,都没有效果。
真正的症结不在我的脚本。本地 LLM worker 正尝试使用系统默认编码来保存模型响应。在 Windows 上,这通常是 CP949。当 worker 尝试使用 CP949 保存韩语字符时,操作失败了。
解决方法很简单。我修改了 worker,使其在保存文件时显式使用 utf-8。
我还构建了一个自动化系统来管理这一过程。它遵循以下步骤:
- 下载候选模型。
- 对当前最佳模型运行基准测试。
- 测试所有新的候选模型。
- 根据评分选择并推荐最佳模型。
通过这种自动化方式,我发现 Gemma2:2b 在韩语任务中的表现远优于 EXAONE 模型。在速度相近的情况下,它能提供更自然的回答和更好的创意结果。
经验教训:
- 永远不要依赖系统默认编码。文件 I/O 始终使用 utf-8。
- 使用
json.dump处理韩语文本时,请使用ensure_ascii=False并指定 utf-8。 - 如果遇到编码错误,请检查整个系统和文件保存逻辑,而不仅仅是眼前的代码。
- 利用自动化来寻找最符合你特定需求的模型。
Optional learning community: https://t.me/GyaanSetuAi