Fine-tuning Engine
BetaДообучение LLM на ваших данных. Full fine-tuning, LoRA, QLoRA с автоматическим подбором гиперпараметров и распределённым обучением на GPU.
Датасеты
Загрузка и версионирование
Обучение
LoRA, QLoRA, Full FT
Оценка
Метрики и сравнение
Методы дообучения
Full Fine-tuning
Обновление всех весов модели. Максимальное качество, но требует много GPU памяти.
LoRA
РекомендуемLow-Rank Adaptation. Обучаются только адаптеры, основная модель заморожена.
QLoRA
LoRA с квантизацией модели в 4-bit. Минимальные требования к памяти.
Подготовка датасета
Загрузите обучающие данные в формате JSONL с диалогами или инструкциями.
Формат данных
{"messages": [{"role": "system", "content": "Ты эксперт по банковским продуктам"},{"role": "user", "content": "Какая ставка по ипотеке?"},{"role": "assistant", "content": "Текущая ставка по ипотеке составляет от 16.9% годовых..."}]}{"messages": [{"role": "system", "content": "Ты эксперт по банковским продуктам"},{"role": "user", "content": "Как открыть вклад?"},{"role": "assistant", "content": "Для открытия вклада вам потребуется паспорт..."}]}
1from coren import Coren23client = Coren()45# Создание датасета6dataset = client.finetuning.datasets.create(7 name="bank-support-dialogues",8 description="Диалоги службы поддержки банка",9 format="jsonl",10 tags=["support", "banking", "v2"]11)1213# Загрузка данных14client.finetuning.datasets.upload(15 dataset_id=dataset.id,16 file="training_data.jsonl"17)1819# Проверка статистики20stats = client.finetuning.datasets.get(dataset.id)21print(f"Примеров: {stats.num_examples}")22print(f"Токенов: {stats.total_tokens}")
Рекомендации по данным
- • Минимум 100 примеров для LoRA, 1000+ для Full FT
- • Разнообразие примеров важнее количества
- • Включайте edge cases и сложные сценарии
- • Проверяйте качество разметки перед обучением
Запуск обучения
Создайте задачу обучения с нужными гиперпараметрами. Система автоматически выберет оптимальную конфигурацию GPU.
1# Запуск LoRA fine-tuning2job = client.finetuning.jobs.create(3 name="bank-support-llm-v2",4 base_model="llama-3-70b",5 dataset_id=dataset.id,6 method="lora", # "lora", "qlora", "full"7 hyperparameters={8 "learning_rate": 2e-5,9 "epochs": 3,10 "batch_size": 4,11 "warmup_steps": 100,12 "lora_rank": 16,13 "lora_alpha": 32,14 "lora_dropout": 0.05,15 "target_modules": ["q_proj", "v_proj", "k_proj", "o_proj"]16 },17 compute={18 "gpu_type": "A100",19 "num_gpus": 220 },21 validation_split": 0.1,22 early_stopping={23 "metric": "eval_loss",24 "patience": 325 }26)2728print(f"Задача создана: {job.id}")29print(f"Статус: {job.status}")
Мониторинг обучения
Отслеживайте прогресс и метрики в реальном времени.
1import time23# Мониторинг прогресса4while job.status in ["pending", "running"]:5 job = client.finetuning.jobs.get(job.id)67 if job.progress:8 print(f"Эпоха: {job.progress.current_epoch}/{job.progress.total_epochs}")9 print(f"Шаг: {job.progress.current_step}/{job.progress.total_steps}")1011 if job.metrics:12 print(f"Train Loss: {job.metrics.train_loss:.4f}")13 print(f"Eval Loss: {job.metrics.eval_loss:.4f}")1415 time.sleep(60)1617if job.status == "completed":18 print(f"Обучение завершено!")19 print(f"Модель: {job.output_model_id}")20elif job.status == "failed":21 print(f"Ошибка: {job.error}")
Пример ответа статуса
{"id": "ftjob_abc123","status": "running","progress": {"current_epoch": 2,"total_epochs": 3,"current_step": 1500,"total_steps": 2250},"metrics": {"train_loss": 0.342,"eval_loss": 0.389,"learning_rate": 1.8e-5},"estimated_completion": "2024-01-15T14:30:00Z"}
Оценка качества
Оцените качество дообученной модели на тестовом датасете и сравните с базовой моделью.
1# Запуск оценки2evaluation = client.finetuning.evaluations.create(3 model_id=job.output_model_id,4 eval_dataset_id="ds_eval_bank_support",5 metrics=["perplexity", "accuracy", "bleu"],6 num_samples=5007)89# Получение результатов10results = client.finetuning.evaluations.get(evaluation.id)1112print("Результаты оценки:")13print(f" Perplexity: {results.metrics.perplexity}")14print(f" Accuracy: {results.metrics.accuracy}")15print(f" BLEU: {results.metrics.bleu}")1617print("\nСравнение с базовой моделью:")18print(f" Perplexity: {results.comparison.improvement.perplexity}")19print(f" Accuracy: {results.comparison.improvement.accuracy}")
Perplexity
Качество предсказаний
Ниже лучше
Accuracy
Точность классификации
Выше лучше
BLEU
Качество генерации
Выше лучше
Custom
Кастомные метрики
Настраиваемые
API эндпоинты
Датасеты
/v1/finetuning/datasetsСписок датасетов/v1/finetuning/datasetsСоздать датасет/v1/finetuning/datasets/{id}/uploadЗагрузить данные/v1/finetuning/datasets/{id}Удалить датасетЗадачи обучения
/v1/finetuning/jobsСписок задач/v1/finetuning/jobsСоздать задачу/v1/finetuning/jobs/{id}Статус задачи/v1/finetuning/jobs/{id}/cancelОтменить задачу/v1/finetuning/jobs/{id}/logsЛоги обученияОценка
/v1/finetuning/evaluationsЗапустить оценку/v1/finetuning/evaluations/{id}Результаты оценки