Главная/Блог/Гайд/Обучение Gemma-3 математическому…
Гайд4 мин чтения · 6 июля 2026 г.

Обучение Gemma-3 математическому мышлению: Полный гайд по GRPO и Tunix

Разбираем пошаговый процесс обучения модели Gemma-3 решению математических задач с помощью алгоритма GRPO, библиотеки Tunix и адаптеров LoRA. Глубокое погружение в архитектуру RL-обучения.

Обучение Gemma-3 математическому мышлению: Полный гайд по GRPO и Tunix

В эпоху, когда большие языковые модели (LLM) стали неотъемлемой частью повседневной жизни, их способность к логическому и математическому рассуждению остается одним из самых сложных вызовов. Простое предсказание следующего токена часто приводит к галлюцинациям или арифметическим ошибкам, особенно в сложных задачах. Однако новые подходы к обучению с подкреплением (Reinforcement Learning, RL) открывают двери для создания моделей, которые не просто «угадывают» ответ, а выстраивают структурированную цепочку рассуждений. В этой статье мы подробно разберем флагманский туториал от MarkTechPost, посвященный обучению модели Gemma-3 решению задач из датасета GSM8K с использованием передовых инструментов: библиотеки Tunix, алгоритма GRPO (Group Relative Policy Optimization) и адаптеров LoRA. Это не просто набор команд для копирования, а глубокое погружение в то, как современные AI-инженеры конструируют конвейеры обучения, которые можно адаптировать под собственные нужды, даже с ограниченными вычислительными ресурсами.

Ключевая идея подхода заключается в том, чтобы научить модель не только находить правильный числовой ответ, но и следовать строгому формату вывода: сначала предоставлять логическое обоснование в специальных тегах, а затем — финальный результат. Такой подход значительно повышает интерпретируемость результатов и снижает вероятность ошибок. Мы рассмотрим весь цикл: от настройки окружения и загрузки данных до определения функций вознаграждения и финальной оценки модели. Этот материал предназначен для разработчиков, исследователей и энтузиастов, которые хотят понять внутреннюю механику обучения LLM с подкреплением на практике.

01Архитектура решения: Почему именно Tunix и GRPO?

Прежде чем погружаться в код, важно понять архитектурные решения, заложенные в этот туториал. Выбор пал на модель Gemma-3 от Google. Это легковесные, но мощные модели, которые отлично подходят для локального запуска и экспериментов благодаря своей эффективности. Использование версии с небольшим количеством параметров позволяет запустить весь процесс обучения на одном ускорителе, что делает этот гайд доступным для широкого круга разработчиков без доступа к мощным кластерам.

Центральным элементом инфраструктуры выступает библиотека Tunix. Это относительно новая, но быстро развивающаяся библиотека, построенная поверх JAX и Flax. Ее главное преимущество — нативная поддержка распределенного обучения и интеграция с экосистемой Google для высокопроизводительных вычислений. Tunix предоставляет готовые компоненты для RL-обучения, такие как кластеры ролей (Actor, Reference, Rollout), что избавляет разработчика от необходимости писать сложную инфраструктуру с нуля.

Алгоритм GRPO (Group Relative Policy Optimization) выбран не случайно. В отличие от классического PPO (Proximal Policy Optimization), который требует обучения отдельной модели-критика (Critic) для оценки ценности состояний, GRPO использует группу генераций для каждой задачи. Он сравнивает ответы внутри группы, нормализуя преимущества относительно среднего значения. Это упрощает архитектуру, снижает потребление памяти и часто приводит к более стабильному обучению. В сочетании с LoRA (Low-Rank Adaptation), которая позволяет дообучать только небольшую часть параметров модели, мы получаем эффективный, быстрый и ресурсосберегающий пайплайн.

Схема взаимодействия компонентов в пайплайне обучения
Схема взаимодействия компонентов в пайплайне обучения

02Шаг 1: Подготовка среды и установка зависимостей

Первый этап любого ML-проекта — это настройка окружения. В данном случае мы работаем в среде Google Colab, что дает нам доступ к GPU/TPU без необходимости локальной установки драйверов. Однако процесс установки библиотек здесь нетривиален, так как Tunix и JAX требуют специфических версий зависимостей.

Скрипт установки начинается с проверки наличия библиотеки Tunix. Если она отсутствует, запускается процесс установки всей экосистемы: JAX, Flax, Qwix (для оптимизации), TensorFlow (для работы с датасетами) и Hugging Face Hub. Важно отметить, что некоторые пакеты, такие как Flax и Wandb, могут конфликтовать с уже установленными версиями, поэтому скрипт включает команды `pip uninstall` перед установкой актуальных версий из исходников (git). Это стандартная практика для работы с развивающимися библиотеками, где стабильные релизы могут отставать от необходимых фич.

terminalpython
import importlib.util
import os
import shutil as _sh

if importlib.util.find_spec("tunix") is None:
    print("Installing Tunix + JAX ecosystem — this takes ~5-8 min…")
    !pip install -q ipywidgets tensorboardX transformers grain nest_asyncio
    !pip install -q datasets huggingface_hub
    !pip install -q "numpy>2"
    !pip install -q tensorflow tensorflow_datasets
    !pip install -q git+https://github.com/jax-ml/jax
    !pip install -q git+https://github.com/google/tunix
    !pip install -q git+https://github.com/google/qwix
    !pip uninstall -q flax
    !pip install -q git+https://github.com/google/flax
    !pip uninstall -q wandb
    print("\n\n✅ Install done. The runtime will RESTART now.")
    print("👉  After it restarts, RUN THIS CELL AGAIN to start training.\n")
    os.kill(os.getpid(), 9)

После перезагрузки ядра необходимо повторно выполнить блок аутентификации. Ключевым моментом здесь является получение токена Hugging Face. Модель Gemma-3 требует лицензионного доступа, поэтому без валидного токена загрузка весов будет заблокирована. Скрипт пытается автоматически получить токен из переменных окружения Colab, но если это не удается, предлагает ввести его вручную через `getpass`. Это обеспечивает безопасность, так как токен не сохраняется в открытом виде в логах.

💡
Совет по оптимизации. Обратите внимание на строку `os.environ["WANDB_MODE"] = "disabled"`. В туториалах часто включают Weights & Bi

Источник: MarkTechPost ↗