|
AI Qwen Fine Tuning
Компактные модели ИИ удобно использовать для автоматизации отдельных процессов в офисе или на предприятии, которые раньше предполагали только ручной труд. Например, контроль локальной сети, построенной с использованием динамической маршрутизации на протоколах OSPF и BGP.
Компактные модели ИИ (например, Qwen2.5) содержат минимум избыточной информации, но вполне достаточную внутреннюю структуру. Небольшой размер в 5 Гбайт позволяет снизить требования к аппаратной части.
Используя даже слабые серверы HP Gen 9 с доступной серверной видеокартой Nvidia P100 можно автоматизировать аналитику. Специально написанный Python-скрипт будет запускать проверку динамической таблицы маршрутизации (Cisco "show ip route"), например каждые 10 минут.
Для этого надо тренировать модель ИИ (fine tuning) на соответствующем датасете.
Датасет должен содержать 2000-3000 примеров в JSON формате.
Datasets >>>>
Если интересно, то: arrayphotocintrol - Вы же понимаете, что это такое
Ниже представлена структура датасета и готовый код для fine-tuning Qwen2.5 под задачу анализа таблиц маршрутизации. Основной подход - синтетическая генерация данных и обучение с Chain-of-Thought (CoT), что доказало свою эффективность для сетевых задач
Формат данных должен имитировать реальный диалог с моделью, где на вход подается таблица и вопрос, а на выходе — рассуждение (CoT) и ответ
Структура обучающего JSON Dataset
JSON
{
"messages": [
{
"role": "system",
"content": "You are a network routing expert. Analyze the routing table, detect issues, and provide step-by-step reasoning."
},
{
"role": "user",
"content": "Routing table:\n\n\nQuestion: Does this routing table contain a routing loop or summarization error?"
},
{
"role": "assistant",
"content": "\n1. I will examine the routing table for duplicate routes with equal metrics.\n2. I will check for overlapping
networks that indicate poor summarization.\n3. [Step-by-step analysis of the specific table]\n\n\nYes, a
potential routing loop exists between ...\n"
}
]
}
Рекомендации по созданию данных:
Синтетическая генерация: Используйте LLM (DeepSeek-R1, Qwen 2.5 72B) для генерации разнообразных примеров таблиц маршрутизации с различными ошибками . Генерация должна быть целевой: вы создаете запросы, в которых указываете, какие ошибки должна содержать таблица (петли, неверная суммаризация).
Структуризация: Используйте инструменты вроде promptwright для масштабной генерации на основе графа тем .
Баланс: Обеспечьте разнообразие примеров: "здоровые" таблицы, таблицы с петлями, ошибками суммаризации, проблемами next-hop и т.д.
Код для Fine-Tuning (PyTorch + LoRA)
LoRA (Low-Rank Adaptation) — это метод параметрически-эффективной тонкой настройки (fine-tuning) больших предварительно обученных моделей машинного обучения. Он позволяет адаптировать такие модели к конкретным задачам с минимальными вычислительными и ресурсными затратами.
Использование 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.
Такой подход позволяет создать специализированного ассистента для анализа маршрутизации с минимальными вычислительными затратами.
Опыт работы >>>>
Prompts >>>>
ИИ Датасеты >>>>
AI Fine Tuning >>>>
Суть LoRA заключается в ее подходе к адаптации модели без погружения в подробности повторной тренировки всей модели. В отличие от традиционного дообучения, где каждый параметр подвергается изменению, LoRA выбирает более умный путь. Она замораживает предварительно обученные веса модели и вводит обучаемые матрицы ранговой декомпозиции в каждый слой архитектуры трансформера. Этот подход существенно снижает количество обучаемых параметров, обеспечивая более эффективный процесс адаптации.
Хотя LoRA является прорывом в снижении потребностей в хранении, она все еще требует мощного GPU для загрузки модели для обучения. Вот где появляется QLoRA, или квантованная LoRA, сочетая LoRA с квантованием для более умного подхода.
Обычно весовые параметры хранятся в 32-битовом формате (FP32), что означает, что каждый элемент матрицы занимает 32 бита места. Представьте, если бы мы могли сжать одну и ту же информацию всего в 8 или даже 4 бита. Это основная идея QLoRA. Квантование относится к процессу отображения непрерывных бесконечных значений на меньший набор дискретных конечных значений. В контексте LLM оно относится к процессу преобразования весов модели из более высоких типов данных в типы с более низкой точностью.
LoRA находит свое практическое применение в библиотеке Hugging Face Parameter Efficient Fine-Tuning (PEFT), упрощая ее использование. Для тех, кто хочет использовать QLoRA, она доступна через комбинацию библиотек bitsandbytes и PEFT. Кроме того, библиотека HuggingFace Transformer Reinforcement Learning (TRL) облегчает дообучение с встроенной поддержкой LoRA. Вместе эти три библиотеки предоставляют необходимый инструментарий для дообучения выбранной предварительно обученной модели, позволяя генерировать убедительные и связные описания продукта при указании конкретных инструкций по атрибутам.
Head Hunter
Qwen2.5 (7B) Datasets
|
|