Giải quyết lỗi mã hóa (encoding) khi benchmark LLM cục bộ
Tôi muốn xây dựng một công cụ để chuyển đổi và benchmark các mô hình LLM cục bộ. Tôi cũng đã thêm nhiều câu hỏi benchmark tiếng Hàn để kiểm tra chúng tốt hơn.
Mọi thứ đều hoạt động tốt cho đến khi tôi chạy benchmark. Tôi liên tục gặp lỗi này:
UnicodeEncodeError: 'cp949' codec can't encode characters.
Tôi cứ ngỡ vấn đề nằm ở mã Python của mình. Tôi đã thử thay đổi cài đặt encoding sang utf-8. Tôi cũng thử giải mã các chuỗi thủ công. Mọi nỗ lực đều vô ích trong suốt nhiều giờ liền.
Vấn đề thực sự không nằm ở script của tôi. Worker LLM cục bộ đang cố gắng lưu các phản hồi của mô hình bằng encoding mặc định của hệ thống. Trên Windows, encoding này thường là CP949. Khi worker cố gắng lưu các ký tự tiếng Hàn bằng CP949, nó đã thất bại.
Cách khắc phục rất đơn giản. Tôi đã thay đổi worker để sử dụng utf-8 một cách rõ ràng khi lưu tệp.
Tôi cũng đã xây dựng một hệ thống tự động để quản lý quy trình này. Nó tuân theo các bước sau:
- Tải xuống các mô hình ứng viên.
- Chạy benchmark trên mô hình tốt nhất hiện tại.
- Kiểm tra tất cả các mô hình ứng viên mới.
- Lựa chọn và đề xuất mô hình tốt nhất dựa trên điểm số.
Thông qua quá trình tự động hóa này, tôi nhận thấy rằng Gemma2:2b hoạt động tốt hơn nhiều so với mô hình EXAONE đối với các tác vụ tiếng Hàn. Nó đưa ra các câu trả lời tự nhiên hơn và kết quả sáng tạo tốt hơn với tốc độ tương đương.
Bài học rút ra:
- Đừng bao giờ dựa vào encoding mặc định của hệ thống. Luôn sử dụng utf-8 cho các thao tác I/O tệp.
- Khi sử dụng
json.dumpvới văn bản tiếng Hàn, hãy sử dụngensure_ascii=Falsevà chỉ địnhutf-8. - Nếu bạn gặp lỗi encoding, hãy kiểm tra toàn bộ hệ thống và logic lưu tệp, chứ không chỉ riêng đoạn mã trực tiếp của bạn.
- Sử dụng tự động hóa để tìm ra các mô hình tốt nhất cho nhu cầu cụ thể của bạn.
Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi