Дотонування мовних моделей Qwen (Alibaba)
Qwen — сім'я моделей мов з відкритим кодом від Alibaba Cloud, випущена під ліцензією Apache 2.0 (базові версії) та ліцензією Tongyi Qianwen (більші версії). Сім'я Qwen2.5 включає моделі від 0.5B до 72B параметрів, плюс спеціалізовані версії: Qwen2.5-Coder (програмування), Qwen2.5-Math (математика), Qwen-VL (мультимодальна). За бенчмарками MMLU та HumanEval, Qwen2.5-72B конкурує з Llama 3.1 70B.
Лінійка моделей Qwen2.5 для дотонування
| Модель | Параметри | VRAM (bf16) | Особливість |
|---|---|---|---|
| Qwen2.5-0.5B | 0.5B | 1 ГБ | Edge/IoT |
| Qwen2.5-1.5B | 1.5B | 3 ГБ | Мобільні |
| Qwen2.5-7B | 7B | 14 ГБ | Основна робоча лошадка |
| Qwen2.5-14B | 14B | 28 ГБ | Рівновага якості/ресурсів |
| Qwen2.5-32B | 32B | 64 ГБ | Висока якість |
| Qwen2.5-72B | 72B | 144 ГБ | State-of-the-art з відкритим кодом |
| Qwen2.5-Coder-32B | 32B | 64 ГБ | Код, SQL, алгоритми |
Переваги Qwen для специфічних завдань
Багатомовна підтримка: Qwen навчається на даних з суттєвою долею китайської, англійської та 27 інших мов. Російська мова представлена набагато краще, ніж у багатьох західних моделей, важливо при роботі з російськомовними корпусами.
Довгий контекст: Qwen2.5 підтримує до 128K токенів контексту. Для завдань дотонування з довгими документами (контракти, наукові статті, нормативні акти) це критична перевага.
Qwen2.5-Coder: спеціалізована версія, що перевищує більшість моделей з відкритим кодом того ж розміру на HumanEval. При дотонуванні на корпоративних кодових базах забезпечує кращу стартову точку, ніж дотонування загальної моделі.
Дотонування через LLaMA-Factory
LLaMA-Factory — найзручніший інструмент для дотонування 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
Формат даних: Chat Template Qwen
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
- Токенів на запит (середнім): без змін (~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 забезпечує безперервний батчинг та PagedAttention, що при розмірі батча 16 дає пропускну спроможність ~240 tok/s на 2×A100.
Строки
- Підготовка набору даних: 2–5 тижнів
- Тренування (7B, QLoRA): 3–8 годин
- Тренування (72B, QLoRA, 4×A100): 24–72 години
- Ітерації та оцінка: 1–2 тижні
- Усього: 4–8 тижнів







