Тюнінг моделі на 350M параметрів для структурованого виводу через GRPO
Hugging Face опублікувала рецепт донавчання компактних моделей на дотримання схеми за допомогою Group Relative Policy Optimization (GRPO) у TRL. За 100 кроків і 500 зразків на безкоштовному GPU точність моделі в бенчмарку IFStruct зросла з 22,6% до 29,7%.

Вплив: Середній
Чому це важливо
Ви можете розгортати швидкі локальні моделі розміром до 1B параметрів для виклику інструментів в агентах без помилок парсингу JSON та витрат на пропрієтарні API.
TL;DR
- 01100 кроків GRPO збільшують точність схеми моделі на 350M параметрів з 22,6% до 29,7% на IFStruct.
- 02LoRA на модулях гібридної архітектури навчає лише 6 млн параметрів (1,66%), вміщуючись у безкоштовні 16GB GPU.
- 03Експортований формат BF16 GGUF виконується локально у стандартному сервері llama.cpp.
Ключові факти
- Базовий бал IFStruct
- 22,6%
- Бал після тюнінгу IFStruct
- 29,7%
- Кроків навчання
- 100
- Кількість семплів
- 500
- Навчено параметрів
- 6 млн (1,66%)
- Вимоги до GPU VRAM
- 16 ГБ
Конфігурація тренування та LoRA
Рішення поєднує бібліотеку TRL від Hugging Face та модель LFM2.5-350M від Liquid AI. Через гібридну архітектуру уваги та згорток адаптер LoRA підключається до шарів q_proj, k_proj, v_proj, out_proj та in_proj. Це навчає близько 6 млн параметрів — лише 1,66% від усього об'єму моделі.
Складові функції винагороди в GRPO
Замість узагальнених штрафів конвеєр використовує три зважені функції винагороди в діапазоні [0, 1]:
json_format_reward(вага1.0): нараховує 1.0 за запитану форму (raw або markdown-блок), 0.2 за валідний парсинг без дотримання форми, і 0.0 за синтаксичні помилки.field_count_reward(вага0.5): перевіряє кількість ключів верхнього рівня зі зниженням оцінки за відхилення.schema_validation_reward(вага2.0): перевіряє структуру на відповідність JSON Schema з блокуванням оцінки за відсутності обов'язкових полів.
Запуск та локальний інференс
Параметри тренування включають num_generations=8, gradient_accumulation_steps=8, max_completion_length=1024, temperature=1.1 та штраф KL beta=0.01. Навчання займає 100 кроків на GPU з 16 ГБ VRAM. Злиті ваги конвертуються в BF16 GGUF і запускаються локально через llama-server з прапорцем --alias lfm25-350m-grpo-structured-output, підвищуючи результат у бенчмарку IFStruct з 22,6% до 29,7%.
Спробуй за 2 хвилини
git clone --depth 1 https://github.com/ggml-org/llama.cpp
python llama.cpp/convert_hf_to_gguf.py --outfile ./models/lfm25-350m-grpo-bf16.gguf ./outputs/lfm25-350m-nemotron-schema-grpo-mergedbash
✓ Коли використовувати
- Коли ви запускаєте агентів екстракції даних на локальному залізі або edge-пристроях з обмеженою пам'яттю.
- Коли будуються детерміновані пайплайни виклику інструментів із JSON через локальні інстанси llama.cpp.
✕ Коли НЕ варто
- Коли сервісу потрібні довгі багатокрокові міркування та генерація складного коду, а не лише витяг структурованих полів.
- Коли хмарні флагманські моделі з вбудованим примусовим декодуванням повністю вкладаються у ваш бюджет затримок і витрат.
Що зробити сьогодні
- Клонуйте репозиторій Liquid4All IFStruct для перевірки базової точності схеми вашої моделі.
- Налаштуйте параметри тренування TRL GRPO на 8 генерацій на промпт у межах 16 ГБ пам'яті GPU.
- Конвертуйте збережені ваги LoRA у формат BF16 GGUF через скрипт конвертації llama.cpp.
Джерела