Resolución de errores de codificación en el benchmarking de LLM locales
Quería construir una herramienta para cambiar y realizar benchmarks de modelos LLM locales. También añadí muchas preguntas de benchmark en coreano para probarlos mejor.
Todo funcionaba bien hasta que ejecuté los benchmarks. No dejaba de ver este error:
UnicodeEncodeError: 'cp949' codec can't encode characters.
Pensé que el problema estaba en mi código de Python. Intenté cambiar mi configuración de codificación a utf-8. Intenté decodificar cadenas manualmente. Nada funcionó durante horas.
El problema real no era mi script. El worker del LLM local estaba intentando guardar las respuestas del modelo utilizando la codificación predeterminada del sistema. En Windows, esto suele ser CP949. Cuando el worker intentó guardar caracteres coreanos usando CP949, falló.
La solución fue sencilla. Cambié el worker para que utilizara utf-8 explícitamente al guardar archivos.
También construí un sistema automatizado para gestionar este proceso. Sigue estos pasos:
- Descarga modelos candidatos.
- Ejecuta benchmarks en el mejor modelo actual.
- Prueba todos los nuevos modelos candidatos.
- Selecciona y recomienda el mejor modelo basándose en las puntuaciones.
Gracias a esta automatización, descubrí que Gemma2:2b funciona mucho mejor que el modelo EXAONE para tareas en idioma coreano. Proporciona respuestas más naturales y mejores resultados creativos a una velocidad similar.
Lecciones aprendidas:
- Nunca confíes en la codificación predeterminada del sistema. Utiliza siempre utf-8 para la E/S de archivos.
- Al usar json.dump con texto en coreano, utiliza ensure_ascii=False y especifica utf-8.
- Si ves errores de codificación, comprueba todo el sistema y la lógica de guardado de archivos, no solo tu código inmediato.
- Utiliza la automatización para encontrar los mejores modelos para tus necesidades específicas.
Comunidad de aprendizaje opcional: https://t.me/GyaanSetuAi