Дообучение (Fine-Tuning) языковой модели Qwen (Alibaba)
Qwen — семейство открытых языковых моделей Alibaba Cloud, выпускаемых под лицензией Apache 2.0 (базовые версии) и Tongyi Qianwen License (крупные версии). Семейство Qwen2.5 включает модели от 0.5B до 72B параметров, а также специализированные версии: Qwen2.5-Coder (программирование), Qwen2.5-Math (математика), Qwen-VL (мультимодальная). По бенчмаркам MMLU и HumanEval Qwen2.5-72B конкурирует с Llama 3.1 70B.
Модельный ряд Qwen2.5 для fine-tuning
| Модель | Параметры | VRAM (bf16) | Особенность |
|---|---|---|---|
| Qwen2.5-0.5B | 0.5B | 1 GB | Edge/IoT |
| Qwen2.5-1.5B | 1.5B | 3 GB | Мобильные |
| Qwen2.5-7B | 7B | 14 GB | Основная рабочая лошадка |
| Qwen2.5-14B | 14B | 28 GB | Баланс качества/ресурсов |
| Qwen2.5-32B | 32B | 64 GB | Высокое качество |
| Qwen2.5-72B | 72B | 144 GB | State-of-the-art открытых |
| Qwen2.5-Coder-32B | 32B | 64 GB | Код, SQL, алгоритмы |
Преимущества Qwen для специфических задач
Многоязычность: Qwen обучен на данных с существенной долей китайского, английского и ещё 27 языков. Русский язык представлен значительно лучше, чем в ряде западных моделей, что важно при работе с русскоязычными корпусами.
Длинный контекст: Qwen2.5 поддерживает до 128K токенов контекста. При fine-tuning задач с длинными документами (договоры, научные статьи, нормативные акты) это критическое преимущество.
Qwen2.5-Coder: специализированная версия, превосходящая по HumanEval большинство открытых моделей того же размера. При дообучении на корпоративной кодовой базе даёт лучший старт, чем дообучение общей модели.
Fine-tuning через LLaMA-Factory
LLaMA-Factory — наиболее удобный инструмент для fine-tuning Qwen, поддерживающий весь спектр методов (Full, LoRA, QLoRA, DoRA) с единым конфигурационным форматом:
# config.yaml
model_name_or_path: Qwen/Qwen2.5-7B-Instruct
method: lora
dataset: my_dataset
template: qwen
finetuning_type: lora
lora_rank: 16
lora_alpha: 32
lora_target: q_proj,v_proj
output_dir: ./qwen25-7b-finetuned
num_train_epochs: 3
per_device_train_batch_size: 4
gradient_accumulation_steps: 4
learning_rate: 2.0e-4
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
llamafactory-cli train config.yaml
Альтернативно — использование swift от ModelScope (Alibaba):
swift sft \
--model_type qwen2_5_7b_instruct \
--dataset my_dataset \
--train_type lora \
--output_dir ./output
Формат данных: Qwen Chat Template
Qwen2.5 использует специфический chat template с тегами <|im_start|> и <|im_end|>:
<|im_start|>system
Ты — ассистент для анализа финансовой отчётности.<|im_end|>
<|im_start|>user
Рассчитай EBITDA по данным: выручка 850M, COGS 420M, OpEx 180M, DA 45M<|im_end|>
<|im_start|>assistant
EBITDA = Выручка - COGS - OpEx + DA = 850 - 420 - 180 + 45 = **295M**<|im_end|>
При использовании transformers напрямую применяем tokenizer.apply_chat_template() для корректного форматирования.
Практический кейс: финансовый анализ на Qwen2.5-14B
Задача: автоматический анализ квартальных отчётов компаний (МСФО), извлечение ключевых показателей, расчёт финансовых коэффициентов, флаги аномалий.
Датасет: 1800 примеров: входные данные из отчётности → структурированный анализ (JSON + текстовое резюме на русском).
Обучение: Qwen2.5-14B Instruct, QLoRA (r=32, alpha=64), 4 эпохи, 2×A100 40GB, 6 часов.
Результаты:
- Корректность расчёта коэффициентов: 71% → 94%
- Точность флагов аномалий (F1): 0.67 → 0.88
- Качество текстового резюме (human eval, 1–5): 3.1 → 4.4
- Токенов на запрос (avg): без изменений (~1800)
Деплой дообученной Qwen через vLLM
from vllm import LLM, SamplingParams
llm = LLM(
model="./qwen25-14b-merged",
dtype="bfloat16",
tensor_parallel_size=2, # 2 GPU
max_model_len=32768,
gpu_memory_utilization=0.9
)
sampling_params = SamplingParams(temperature=0.1, max_tokens=2048)
outputs = llm.generate(prompts, sampling_params)
vLLM обеспечивает continuous batching и PagedAttention, что при batch размере 16 даёт throughput ~240 tok/s на 2×A100.
Сроки
- Подготовка датасета: 2–5 недель
- Обучение (7B, QLoRA): 3–8 часов
- Обучение (72B, QLoRA, 4×A100): 24–72 часа
- Итерации и оценка: 1–2 недели
- Итого: 4–8 недель







