Документация 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-Factory | hiyouga/LlamaFactory | SFT, LoRA, QLoRA, DoRA, полный; DPO и др. | написана для Qwen2.5, помечена «будет обновлено» | 6.2.2 |
| MS-SWIFT | modelscope/ms-swift | SFT, LoRA, GRPO, DPO, PPO; Megatron для MoE | самая полная и свежая | 6.2.2, 6.4.5 |
| verl | verl-project/verl | RL: PPO, GRPO, DAPO | короткая, один пример GRPO | 6.4.5 |
| Unsloth | unslothai/unsloth | LoRA/QLoRA на одной карте, GRPO | обзор + ссылки на ноутбуки | 6.2.1 |
| Axolotl | axolotl-ai-cloud/axolotl | SFT, RLHF, RM/PRM по YAML-конфигу | обзор + конфиг QLoRA для 32B | — |
Главная тонкость Qwen3: не сломать режим размышления
Заголовок раздела «Главная тонкость Qwen3: не сломать режим размышления»Самый ценный абзац раздела — на странице ms-swift. Гибридная модель Qwen3 умеет думать и не думать. Если дообучить её на обычных диалогах без рассуждений, модель «разучится» думать. Документация предлагает два способа этого избежать:
- Не учить на пустом блоке. В ответах датасета оставить пустой блок
<think>\n\n</think>\n\nи не считать по нему потери (в ms-swift — флаг--loss_scale ignore_empty_think). Модель видит формат, но не получает сигнала «никогда не думай». - Пометить такие примеры мягким переключателем. Дописать
/no_thinkк вопросу пользователя. Модель учится: «без размышления — только когда попросили».
А в данных с рассуждениями ответ ассистента выглядит так: <think>\n…рассуждение…\n</think>\n\nОтвет.
Страница Unsloth добавляет эмпирическое правило: чтобы сохранить рассуждения, смешивайте примерно 75% данных с рассуждениями и 25% без. Почему вообще модель забывает навыки при дообучении — урок 6.2.2 (раздел о забывании) и 6.4.4 о режимах мышления.
LLaMA-Factory (пересказ)
Заголовок раздела «LLaMA-Factory (пересказ)»Страница написана для 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 (пересказ)
Заголовок раздела «MS-SWIFT (пересказ)»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-LM | DeepSpeed ZeRO-2 | DeepSpeed ZeRO-3 | |
|---|---|---|---|
| Скорость | 9,6 с/шаг | — | 91,2 с/шаг |
| Память | 16 × 60 ГБ | не хватило памяти | 16 × 80 ГБ |
Вывод: для MoE экспертный параллелизм почти в 10 раз быстрее, чем ZeRO-3 «в лоб» (почему — урок 5.4.3).
verl (пересказ)
Заголовок раздела «verl (пересказ)»verl — библиотека RL-дообучения LLM от ByteDance, открытая версия статьи HybridFlow. Документация Qwen хвалит её за гибкость (алгоритмы вроде GRPO и PPO описываются в несколько строк, обучение на FSDP или Megatron сочетается с генерацией на vLLM или SGLang) и скорость (3D-HybridEngine перекладывает веса между фазами обучения и генерации без лишних копий).
Пример оригинала — GRPO на Qwen3-1.7B и задачах GSM8K (одна GPU на 80 ГБ и от 64 ГБ оперативной памяти):
- Подготовить данные:
python3 examples/data_preprocess/gsm8k.py --local_dir ~/data/gsm8k(из репозитория verl). - Запустить
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 (пересказ)
Заголовок раздела «Unsloth (пересказ)»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 (пересказ)
Заголовок раздела «Axolotl (пересказ)»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-8B | ms-swift или LLaMA-Factory | помещается на одну карту (оригиналу хватало 22 ГБ); на 4 картах — NPROC_PER_NODE=4 и gradient_accumulation_steps в 4 раза меньше |
| LoRA Qwen3-14B / 32B | LLaMA-Factory, Axolotl | QLoRA (4 бита): 14B — на одной карте, 32B — на одной-двух |
| Полное SFT Qwen3-1.7B / 4B | ms-swift, --deepspeed zero3 | 4 × 32 ГБ вместо 4 × 60 ГБ — уменьшите --max_length до 2048–4096 |
| GRPO Qwen3-0.6B / 1.7B на GSM8K | verl | trainer.n_gpus_per_node=4, меньше train_batch_size и max_response_length — см. verl, часть 3 |
| GRPO Qwen3-8B | ms-swift / verl с LoRA | полное GRPO 8B не поместится; LoRA + выгрузка оптимизатора — на грани |
Что сделать руками
Заголовок раздела «Что сделать руками»- Повторите «самосознание» на Qwen3-1.7B (быстрее) в ms-swift или LLaMA-Factory: модель должна называть себя новым именем, но по-прежнему решать простые задачи.
- Сделайте два варианта датасета без рассуждений: с
ignore_empty_thinkи с/no_think. Проверьте после обучения, думает ли модель на сложном вопросе без/no_think. - Сравните время шага и память LoRA и QLoRA на Qwen3-8B.
Словарик
Заголовок раздела «Словарик»| English | Русский |
|---|---|
| supervised fine-tuning (SFT) | обучение с учителем на диалогах |
| full-parameter fine-tuning | полное дообучение |
| self-cognition | «самосознание» (ответы о себе) |
| merge LoRA | слияние адаптера с моделью |
| packing | упаковка примеров в одну последовательность |
| reward function | функция награды |
| expert parallelism | экспертный параллелизм |