Код для 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/