Код для Fine-Tuning (PyTorch + LoRA)
Использование LoRA позволяет эффективно дообучать 7B-модель с ограниченными ресурсами
PYTHON
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from datasets import load_dataset
from trl import SFTTrainer
# 1. Загрузка модели и токенизатора
model_name = "Qwen/Qwen2.5-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
# 2. Настройка LoRA (эффективная адаптация)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], # Основные модули внимания
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
# 3. Подготовка модели
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16, # Для экономии памяти
device_map="auto",
trust_remote_code=True
)
model = prepare_model_for_kbit_training(model)
model = get_peft_model(model, lora_config)
# 4. Загрузка датасета в формате Hugging Face
dataset = load_dataset("json", data_files="routing_dataset.jsonl")
# 5. Форматирование данных для SFTTrainer (используем 'messages')
def formatting_func(example):
# Преобразуем 'messages' в строку для обучения
# Ожидаем формат: [{"role": "system", "content": "..."}, ...]
messages = example["messages"]
formatted_text = tokenizer.apply_chat_template(messages, tokenize=False)
return formatted_text
# 6. Настройка обучения
training_args = TrainingArguments(
output_dir="./routing-llm-finetuned",
per_device_train_batch_size=4,
gradient_accumulation_steps=4, # Эффективный батч = 16
num_train_epochs=3,
learning_rate=2e-4,
fp16=True, # Используйте bf16, если поддерживается
logging_steps=10,
save_steps=100,
report_to="none",
)
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
args=training_args,
train_dataset=dataset,
formatting_func=formatting_func,
max_seq_length=2048,
)
# 7. Запуск обучения
trainer.train()
# 8. Сохранение модели
model.save_pretrained("./routing-llm-lora-adapter")
Ключевые моменты
Chain-of-Thought: Обязательно обучайте модель выдавать рассуждения в формате ....... Это улучшает точность и интерпретируемость
Синтетические данные: Для создания качественного датасета используйте более мощные модели (например, Qwen 2.5 72B) для генерации примеров таблиц с нужными ошибками, а затем дообучайте на них меньшую модель
Формат вывода: Убедитесь, что в вашем датасете ответы модели строго следуют одному формату — это критически важно для стабильности работы модели в production.
Такой подход позволяет создать специализированного ассистента для анализа маршрутизации с минимальными вычислительными затратами.
https://chat.deepseek.com/share/ipnqx7zri0oinsz85d
https://ai-fine-tuning.blogspot.com/