Перейти к содержимому
ПереводыQwen, InternLM и другие

Документация Qwen, часть 4: дообучение — LLaMA-Factory, ms-swift, verl, Unsloth, Axolotl

Пересказ раздела Training документации Qwen: пять фреймворков дообучения, форматы данных, как дообучать Qwen3 и не потерять режим размышления, рецепты SFT, LoRA и GRPO — с переносом на четыре RTX 4080.

Раздел Training — это не учебник по дообучению, а пять коротких «рецептов запуска» в чужих фреймворках. Теорию (что такое обучение с учителем на инструкцияхобучение с учителем на инструкциях (SFT)EN supervised fine-tuning (SFT), LoRALoRA (низкоранговая адаптация)EN low-rank adaptation (LoRA), GRPOGRPO (групповая относительная оптимизация политики)EN Group Relative Policy Optimization (GRPO)PPO без критика: на промпт генерируется группа из G ответов, преимущество — (r − среднее) / std по группе. DeepSeekMath, 2024.) вы берёте из уроков ступени 6, а отсюда — готовые команды и подводные камни, специфичные для Qwen3.

СтраницаФреймворкЧто умеетСостояние страницыУрок курса
LLaMA-Factoryhiyouga/LlamaFactorySFT, LoRA, QLoRA, DoRA, полный; DPO и др.написана для Qwen2.5, помечена «будет обновлено»6.2.2
MS-SWIFTmodelscope/ms-swiftSFT, LoRA, GRPO, DPO, PPO; Megatron для MoEсамая полная и свежая6.2.2, 6.4.5
verlverl-project/verlRL: PPO, GRPO, DAPOкороткая, один пример GRPO6.4.5
Unslothunslothai/unslothLoRA/QLoRA на одной карте, GRPOобзор + ссылки на ноутбуки6.2.1
Axolotlaxolotl-ai-cloud/axolotlSFT, RLHF, RM/PRM по YAML-конфигуобзор + конфиг QLoRA для 32B—

Главная тонкость Qwen3: не сломать режим размышления

Заголовок раздела «Главная тонкость Qwen3: не сломать режим размышления»

Самый ценный абзац раздела — на странице ms-swift. Гибридная модель Qwen3 умеет думать и не думать. Если дообучить её на обычных диалогах без рассуждений, модель «разучится» думать. Документация предлагает два способа этого избежать:

  1. Не учить на пустом блоке. В ответах датасета оставить пустой блок <think>\n\n</think>\n\n и не считать по нему потери (в ms-swift — флаг --loss_scale ignore_empty_think). Модель видит формат, но не получает сигнала «никогда не думай».
  2. Пометить такие примеры мягким переключателем. Дописать /no_think к вопросу пользователя. Модель учится: «без размышления — только когда попросили».

А в данных с рассуждениями ответ ассистента выглядит так: <think>\n…рассуждение…\n</think>\n\nОтвет.

Страница Unsloth добавляет эмпирическое правило: чтобы сохранить рассуждения, смешивайте примерно 75% данных с рассуждениями и 25% без. Почему вообще модель забывает навыки при дообучении — урок 6.2.2 (раздел о забывании) и 6.4.4 о режимах мышления.

Страница написана для Qwen2.5, но сама схема не изменилась.

Данные. Поддерживаются два формата:

  • alpaca — поля instruction (обязательно), input, output (обязательно), system, history (список пар «вопрос — ответ» предыдущих ходов);
  • sharegpt — список conversations из реплик {"from": "human" | "gpt", "value": …}, плюс system и tools.

Файл кладут в папку data/ и регистрируют в data/dataset_info.json: имя файла и соответствие колонок (для sharegpt — ещё "formatting": "sharegpt" и теги ролей).

Обучение. В оригинале — запуск torchrun … src/train.py с длинным списком флагов. Ключевые: --stage sft, --template qwen (шаблон чата Qwen — без него модель обучится на неправильном формате!), --finetuning_type lora, --lora_target q_proj,v_proj, --learning_rate 5e-6, --lr_scheduler_type cosine, --cutoff_len 4096, --bf16. Документация особо выделяет cutoff_len — максимальную длину примера: это главный рычаг против нехватки памяти.

Слияние LoRA. llamafactory-cli export с путями к базовой модели и адаптеру, --template qwen, --finetuning_type lora и папкой для результата.

Современный способ запуска — YAML-конфиги и llamafactory-cli train — показан в уроке 6.2.2.

ms-swift — фреймворк обучения и развёртывания от сообщества ModelScope. Документация перечисляет: 500+ текстовых и 200+ мультимодальных моделей; CPU, RTX, A100/H100, Ascend NPU, Mac (MPS); полное дообучение, LoRA, QLoRA, DoRA; DDP, DeepSpeed ZeRO-2/3, FSDP и параллелизмы Megatron (тензорный, конвейерный, по последовательности, экспертный); DPO, GRPO, DAPO, PPO, KTO и другие методы выравнивания.

Формат данных SFT — привычный список messages с ролями system, user, assistant (JSON, JSONL или CSV).

«Самосознание» за 30 минут. Классическое первое упражнение: научить модель отвечать на «кто ты?» по-новому. LoRA на Qwen3-8B, 22 ГБ видеопамяти, одна карта A10. Смесь 2000 обычных диалогов (swift/Qwen3-SFT-Mixin#2000) и 600 примеров «самосознания» (swift/self-cognition:qwen3#600) с подставленными именем swift-robot и автором swift. Параметры: --train_type lora --lora_rank 8 --lora_alpha 32 --target_modules all-linear --learning_rate 1e-4 --gradient_accumulation_steps 16 --max_length 2048, одна эпоха. После обучения swift infer --adapters … — и модель представляется как swift-robot (в режиме размышления — сначала подумав об этом).

Зачем смешивать с обычными диалогами? Чтобы модель выучила новый ответ на один вопрос, но не забыла всё остальное.

Дальше: swift export --adapters … --merge_lora true (слить LoRA), --push_to_hub true (выложить на ModelScope или Hugging Face). По умолчанию ms-swift качает модели и датасеты с ModelScope; для Hugging Face — --use_hf true.

Полное дообучение на 4 GPU в оригинале рассчитано на 4 × 60 ГБ: NPROC_PER_NODE=4 swift sft --train_type full --deepspeed zero3 --packing true --max_length 8192 --use_liger_kernel true --attn_impl flash_attn. Упаковка (--packing) требует FlashAttention.

GRPO. Данные — те же messages, но без последнего ответа ассистента (его сгенерирует модель); для награды за правильность нужен столбец solution, остальные столбцы передаются в функцию награды как **kwargs. Пример оригинала: Qwen3-8B, полный GRPO на 8 × 70 ГБ, 5000 задач AI-MO/NuminaMath-TIR, --reward_funcs accuracy, --num_generations 16 (размер группы), генерация через vLLM (--use_vllm true), выгрузка модели и оптимизатора на время генерации (--offload_model --offload_optimizer), --overlong_filter true (не учиться на обрезанных ответах).

Megatron-SWIFT для MoE. Полное SFT Qwen3-30B-A3B на двух машинах по 8 × A800 с экспертным параллелизмом 8 и тензорным 2. Таблица сравнения из оригинала:

Megatron-LMDeepSpeed ZeRO-2DeepSpeed ZeRO-3
Скорость9,6 с/шаг—91,2 с/шаг
Память16 × 60 ГБне хватило памяти16 × 80 ГБ

Вывод: для MoE экспертный параллелизм почти в 10 раз быстрее, чем ZeRO-3 «в лоб» (почему — урок 5.4.3).

verl — библиотека RL-дообучения LLM от ByteDance, открытая версия статьи HybridFlow. Документация Qwen хвалит её за гибкость (алгоритмы вроде GRPO и PPO описываются в несколько строк, обучение на FSDP или Megatron сочетается с генерацией на vLLM или SGLang) и скорость (3D-HybridEngine перекладывает веса между фазами обучения и генерации без лишних копий).

Пример оригинала — GRPO на Qwen3-1.7B и задачах GSM8K (одна GPU на 80 ГБ и от 64 ГБ оперативной памяти):

  1. Подготовить данные: python3 examples/data_preprocess/gsm8k.py --local_dir ~/data/gsm8k (из репозитория verl).
  2. Запустить python3 -m verl.trainer.main_ppo algorithm.adv_estimator=grpo … с ключевыми параметрами: data.train_batch_size=1024, data.max_response_length=1024, actor_rollout_ref.actor.optim.lr=1e-6, actor_rollout_ref.actor.use_kl_loss=True с kl_loss_coef=0.001 и kl_loss_type=low_var_kl, actor_rollout_ref.rollout.name=vllm, actor_rollout_ref.rollout.n=3 (размер группы), trainer.total_epochs=15.

Подробный разбор verl, каждого параметра и запуска на четырёх картах — в нашем переводе документации verl.

Unsloth — библиотека для быстрого дообучения на одной карте: собственные ядра на Triton и ручной обратный проход, по заявлению авторов — без потери точности. Цифры со страницы (заявления авторов Unsloth, не замеры команды Qwen): обучение в 2 раза быстрее при на 70% меньшем расходе памяти; Qwen3-14B помещается в бесплатную Colab T4 на 16 ГБ; MoE Qwen3-30B-A3B дообучается в 4-битном виде на 17,5 ГБ (слой-маршрутизатор по умолчанию не обучается).

Готовые ноутбуки: Qwen3-14B «рассуждения + диалог», Qwen3-4B с GRPO и LoRA, Qwen3-14B на Alpaca (базовая модель). Советы: max_seq_length 2048 для начала (Qwen3 поддерживает до 40 960), load_in_4bit=True для экономии памяти, для MoE — класс FastModel вместо FastLanguageModel, для ModelScope — переменная UNSLOTH_USE_MODELSCOPE=1.

Axolotl описывает всё обучение одним YAML-файлом. Требования: NVIDIA Ampere или новее (для bf16 и FlashAttention), Python 3.11+, CUDA 12.4+; PyTorch ставить до Axolotl. Для Qwen3 есть готовый конфиг QLoRA для Qwen3-32B; запуск — axolotl train конфиг.yaml, слияние — axolotl merge-lora конфиг.yaml. Для меньшей модели достаточно поменять base_model. Поддерживаются SFT, RLHF (DPO и др.), обучение моделей награды (RM) и процессных моделей награды (PRM).

🖥 На вашей машине (4× RTX 4080, 32 ГБ) — наша адаптация

Заголовок раздела «🖥 На вашей машине (4× RTX 4080, 32 ГБ) — наша адаптация»
ЗадачаЧемЧто поменять относительно оригинала
«Самосознание» LoRA, Qwen3-8Bms-swift или LLaMA-Factoryпомещается на одну карту (оригиналу хватало 22 ГБ); на 4 картах — NPROC_PER_NODE=4 и gradient_accumulation_steps в 4 раза меньше
LoRA Qwen3-14B / 32BLLaMA-Factory, AxolotlQLoRA (4 бита): 14B — на одной карте, 32B — на одной-двух
Полное SFT Qwen3-1.7B / 4Bms-swift, --deepspeed zero34 × 32 ГБ вместо 4 × 60 ГБ — уменьшите --max_length до 2048–4096
GRPO Qwen3-0.6B / 1.7B на GSM8Kverltrainer.n_gpus_per_node=4, меньше train_batch_size и max_response_length — см. verl, часть 3
GRPO Qwen3-8Bms-swift / verl с LoRAполное GRPO 8B не поместится; LoRA + выгрузка оптимизатора — на грани
  1. Повторите «самосознание» на Qwen3-1.7B (быстрее) в ms-swift или LLaMA-Factory: модель должна называть себя новым именем, но по-прежнему решать простые задачи.
  2. Сделайте два варианта датасета без рассуждений: с ignore_empty_think и с /no_think. Проверьте после обучения, думает ли модель на сложном вопросе без /no_think.
  3. Сравните время шага и память LoRA и QLoRA на Qwen3-8B.
EnglishРусский
supervised fine-tuning (SFT)обучение с учителем на диалогах
full-parameter fine-tuningполное дообучение
self-cognition«самосознание» (ответы о себе)
merge LoRAслияние адаптера с моделью
packingупаковка примеров в одну последовательность
reward functionфункция награды
expert parallelismэкспертный параллелизм