Усовершенствование модели 350M для структурированных выводов за 100 шагов GRPO
Введение
Данная статья представляет собой доступное руководство по улучшению малой модели для достижения более качественных структурированных выводов. Мы проводим дообучение модели LFM2.5-350M с использованием метода Group Relative Policy Optimization (GRPO) и библиотеки TRL, а затем оцениваем ее на бенчмарке IFStruct. Полный процесс требует около 500 образцов и 100 шагов тренировки, что достаточно для бесплатного GPU на Colab или Kaggle. Результаты показывают, что даже легкая доработка значительно повышает производительность с 22.6% до 29.7% на бенчмарке IFStruct.
Зачем нужна структурированная выдача?
Структурированная выдача является одной из самых распространенных задач для больших языковых моделей (LLM). Однако многие бенчмарки объединяют ее с более широкими оценками рассуждений или извлечений, вместо того чтобы оценивать ее в отдельности. Возможность модели возвращать действительный, парсируемый вывод в запрашиваемом формате и структуре — соблюдение схемы — часто определяет, может ли она быть интегрирована в конечную систему.
Предварительные условия
Руководство состоит из двух частей, которые выполняются в разных средах:
- Дообучение — выполняется на GPU. Сопутствующий ноутбук рассчитан на бесплатный GPU Colab или Kaggle.
- Оценка — может выполняться локально на MacBook (в нашем случае MacBook Pro с процессором Apple M5 Max и 36 ГБ унифицированной памяти) через
llama.cpp, который предоставляет сервер совместимый с OpenAI для взаимодействия с оценщиком IFStruct.
Для этого нам понадобятся uv для инструментов Python и llama.cpp для сервировки. Следуя документации по развертыванию Liquid AI llama.cpp, установите llama.cpp с помощью Homebrew и убедитесь, что llama-server доступен:
brew install llama.cpp
llama-server --versionОценка LFM2.5-350M на IFStruct
Перед началом давайте оценим модель LFM2.5-350M на бенчмарке IFStruct и посмотрим, можем ли мы воспроизвести заявленный результат 21.1%.
Бенчмарк IFStruct предназначен для проверки действительности выводов LLM и соблюдения схемы. Данные бенчмарка являются открытыми и доступны в Liquid4All/ifstruct, а публичный набор данных можно найти на Hugging Face в LiquidAI/ifstruct-v1.0.
git clone https://github.com/Liquid4All/ifstruct.gitДля сравнения оценки мы развернем модель локально на MacBook с помощью llama.cpp. Мы будем использовать BF16 GGUF (LiquidAI/LFM2.5-350M-GGUF).
После этого мы запускаем сервер базовой модели с помощью следующей команды:
llama-server
-hf LiquidAI/LFM2.5-350M-GGUF:BF16
-c 32768
-np 4
-ngl 99
--alias LiquidAI/LFM2.5-350M
--host 127.0.0.1
--port 8080--alias: имя модели, которое IFStruct отправляет конечной точке, совместимой с OpenAI;
-ngl 99: указывает llama.cpp выгрузить все слои на GPU при наличии;
-np 4: обрабатывает четыре запроса параллельно;
-c 32768: размер контекста запроса.
Как только сервер запустится, мы можем выполнить полный бенчмарк с 2000 образцами:
uv run ifstruct-eval
--model LiquidAI/LFM2.5-350M
--base-url http://localhost:8080/v1
--api-key dummy
--dataset data/test.jsonl
--results-file results/lfm2.5-350m-llamacpp-base.json
--n-threads 4
--max-tokens 2048
-vРезультаты оценки
============================================================
Модель: LiquidAI/LFM2.5-350M
============================================================
Общие результаты: 452/2000 прошли (22.6%)
Средняя задержка: 1453мс
По формату:
JSON: 180/1000 прошли (18.0%)
YAML: 272/1000 прошли (27.2%)
По верхнему уровню структуры:
Ключ-обертка: 288/1011 прошли (28.5%)
Обычный список: 164/989 прошли (16.6%)
По типу сущности:
- test__camera_review: 6/83 прошли (7.2%)
- test__clinical_trial: 20/104 прошли (19.2%)
- test__conference_schedule: 7/87 прошли (8.0%)
- test__escaping__bug_report_batch: 24/89 прошли (27.0%)
- test__escaping__config_snippet_audit: 15/85 прошли (17.6%)
- test__escaping__customer_email_thread: 5/73 прошли (6.8%)
- test__escaping__dialogue_sample: 14/95 прошли (14.7%)
- test__escaping__interview_transcript_segment: 21/80 прошли (26.2%)
- test__escaping__log_parser_examples: 21/72 прошли (29.2%)
- test__escaping__pr_discussion: 22/87 прошли (25.3%)
- test__escaping__repro_steps_batch: 16/73 прошли (21.9%)
- test__escaping__screenplay_scene: 16/92 прошли (17.4%)
- test__escaping__short_story_chapter: 15/84 прошли (17.9%)
- test__escaping__support_ticket_batch: 27/73 прошли (37.0%)
- test__escaping__terminal_session_notes: 20/70 прошли (28.6%)
- test__event_ticket_booking: 49/107 прошли (45.8%)
- test__gpu_review: 6/94 прошли (6.4%)
- test__invoice: 28/86 прошли (32.6%)
- test__job_posting: 25/85 прошли (29.4%)
- test__real_estate_listing: 31/82 прошли (37.8%)
- test__recipe: 3/70 прошли (4.3%)
- test__rental_car_booking: 27/79 прошли (34.2%)
- test__scientific_experiment: 13/69 прошли (18.8%)
Заключение
Легкое дообучение модели LFM2.5-350M с использованием GRPO может значительно улучшить ее способность генерировать структурированные выводы. Это открывает новые возможности для использования меньших моделей в задачах, требующих высокой точности и соответствия схемам.