Код для Fine-Tuning

 AI Fine Tuning Qwen2.5

Код для 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: Обязательно обучайте модель выдавать рассуждения в формате <reasoning>...</reasoning><answer>...</answer>. Это улучшает точность и интерпретируемость

Синтетические данные: Для создания качественного датасета используйте более мощные модели (например, Qwen 2.5 72B) для генерации примеров таблиц с нужными ошибками, а затем дообучайте на них меньшую модель

Формат вывода: Убедитесь, что в вашем датасете ответы модели строго следуют одному формату — это критически важно для стабильности работы модели в production.

Такой подход позволяет создать специализированного ассистента для анализа маршрутизации с минимальными вычислительными затратами.


https://chat.deepseek.com/share/ipnqx7zri0oinsz85d


AI Fine Tuning Qwen2.5





Комментарии

Популярные сообщения из этого блога

Рекомендуемый размер датасета

JSON Data 23

JSON Data 24