Обучение языковой модели на собственных данных обычно требует десятки гигабайт видеопамяти и неделю подготовки. Unsloth ужимает обе цифры: четырёхбитная загрузка плюс адаптеры LoRA вмещают компактную модель в одну видеокарту, а готовый notebook запускается за вечер.

Что умеет Unsloth

Unsloth — свободный инструмент, который позволяет дообучать и запускать языковые модели, экономя видеопамять. Он встроен в экосистему Hugging Face и ускоряет загрузку, обучение и вывод. Поддерживаются LoRA, QLoRA, full fine-tuning, SFT, RL, а также выгрузка под локальный либо серверный запуск.

ВариантКогда использовать
Unsloth DesktopЛокальный запуск моделей через готовое приложение
Unsloth Studio (Beta)Визуальная подготовка данных, обучение и наблюдение за процессом
Unsloth CoreСкрипты Python, воспроизводимые эксперименты и собственные конвейеры
Готовые notebooksПервый эксперимент в Google Colab или Kaggle

Базовая схема работы Unsloth Core: загрузить instruct-модель в 4-битном виде, прикрепить LoRA-адаптеры, обучить их на собственных данных и сохранить отдельно либо слить с исходной моделью.

Важно: QLoRA — приём дообучения, при котором исходную модель грузят в 4-битном формате, а поправки фиксируют в лёгких LoRA-адаптерах. За счёт этого падают запросы к VRAM.

Unsloth, Ollama и LM Studio

Все три инструмента предназначены для открытых моделей, но закрывают разные участки процесса. Unsloth готовит данные, обучает и выгружает результат. Ollama и LM Studio поднимают готовую модель на локальном компьютере или сервере.

КритерийUnslothOllamaLM Studio
Основная задачаДообучение, RL, вывод и экспорт моделейЛокальный или серверный запуск моделейВизуальный запуск, подбор и тестирование моделей
Типичный пользовательML-инженер, разработчик, технический пользовательРазработчик, системный администратор, автор автоматизацийПользователь, которому нужен графический интерфейс
ДообучениеLoRA, QLoRA, full fine-tuning, SFT и RLЗапускает готовые модели и совместимые адаптерыВ основном используется для запуска и проверки готовых моделей
ИнтерфейсDesktop, Studio, notebooks и PythonТерминал, HTTP API и интеграцииДесктопное приложение с чатом и каталогом
ФорматыLoRA, Safetensors, GGUF и другие форматы экспортаGGUF, модели и адаптеры через ModelfileGGUF и MLX, импорт через приложение или lms import
Локальный APIЕсть в Unsloth StudioOpenAI-совместимый API на порту 11434OpenAI-совместимый API на порту 1234
Сервер без GUICore, Studio и DockerОдин из основных сценариевДоступен headless-режим
Подбор моделейКаталог Unsloth и готовые notebooksРеестр Ollama и импорт своих моделейВстроенный визуальный поиск по Hugging Face

Совет: связка выглядит так — обучите модель в Unsloth, выгрузите в GGUF, далее откройте файл в LM Studio для визуальной проверки либо подключите через Ollama — для API, автоматизаций и постоянной серверной эксплуатации.

Перенос модели в Ollama

После выгрузки найдите фактический GGUF-файл: Unsloth складывает артефакты в заданный каталог, а итоговое имя зависит от модели и версии экспортёра.

find ./unsloth-model -name "*.gguf"

Создайте Modelfile, в котором указан абсолютный путь к найденному файлу:

FROM /absolute/path/to/model-Q4_K_M.gguf

PARAMETER temperature 0.2
PARAMETER num_ctx 4096

Импортируйте и запустите модель в Ollama:

ollama create my-finetuned-model -f Modelfile
ollama run my-finetuned-model

Для QLoRA основной рекомендованный путь — слитая модель → GGUF → Ollama. Подключение отдельного адаптера напрямую — продвинутый сценарий:

FROM <exact-base-model>
ADAPTER /path/to/safetensors/adapter/directory

Нужно точное совпадение исходной модели и поддерживаемой архитектуры Ollama. Из-за различий в квантизации Ollama советует для прямого импорта в первую очередь неквантованные адаптеры. Если ответы нестабильны — выгрузите объединённую модель в GGUF.

Запуск модели в LM Studio

Импортируйте полученный GGUF-файл. Команда lms import пока помечена как экспериментальная; если она выдаёт ошибку — загрузите файл через интерфейс или скопируйте его в каталог моделей вручную.

lms import /absolute/path/to/model-Q4_K_M.gguf
lms ls

lms ls покажет идентификатор модели. Далее её можно открыть в чате, сверить с оригиналом и поднять через локальный API:

lms load <model-identifier> --identifier="my-finetuned-model"
lms server start --port 1234

Проверочный запрос:

curl http://localhost:1234/v1/chat/completions \
 -H "Content-Type: application/json" \
 -d '{
 "model": "my-finetuned-model",
 "messages": [
 {
 "role": "user",
 "content": "Выполни контрольное задание"
 }
 ]
 }'

Внимание: если модель отвечает правильно в Unsloth, но ломается после импорта, сверьте chat template, EOS token и формат системного сообщения. Они должны совпадать с обучающим контуром.

Выбор инструмента после обучения

  • LM Studio — ручное тестирование, визуальное сравнение и работа без терминала.
  • Ollama — локальный API, фоновая служба, автоматизации, агенты и несколько клиентов.
  • Unsloth Studio — оставьте основным интерфейсом, если планируете продолжать обучение, сверять контрольные точки и выгружать новые версии.
  • vLLM — высокая серверная нагрузка и параллельные пользователи.

Зачем нужно дообучение

Дообучение оправдано, когда модель обязана стабильно воспроизводить конкретное поведение:

  • отвечать в заданном формате;
  • выполнять узкую классификацию или извлечение данных;
  • поддерживать специальный стиль диалога;
  • применять повторяющуюся процедуру на примерах;
  • лучше работать с терминологией определённой области.

Для часто меняющихся фактов обычно проще RAG — подача релевантных документов в контекст при запросе. Дообучение комбинируется с RAG: адаптер отвечает за поведение и формат, а внешняя база поставляет актуальные сведения.

Перед обучением соберите небольшой тестовый набор запросов и зафиксируйте ответы исходной модели. Эти опорные ответы дадут возможность проверить, дало ли обучение измеримое улучшение.

Когда использовать

Дообучение оправдано, если можно собрать примеры правильного результата и оценить качество на новых данных. Ниже — задачи, которые реально начать с компактной модели и QLoRA.

СценарийЧему учить модельКак проверитьГде запускать
Ответы службы поддержкиТону, структуре ответа, правилам эскалацииОтложенные обращения и оценка операторовOllama или серверный API
Извлечение данныхВозвращать поля в строгом JSONДоля корректных полей и валидного JSONOllama, LM Studio или пакетный скрипт
Классификация обращенийВыбирать категорию, приоритет и маршрутAccuracy и матрица ошибокЛокальный API
Карточки товаровПревращать характеристики в заданный шаблонСоответствие полям и отсутствие выдуманных фактовПакетная обработка
Внутренний стильСоблюдать терминологию, длину и структуруРедакционный чеклистLM Studio для тестов, Ollama для интеграции
Работа с кодомСледовать внутренним паттернам и формату патчейТесты, линтер и проверка кодаКодинг-агент через локальный API
Нормализация расшифровокУбирать речевой шум и сохранять фактыСравнение с размеченными расшифровкамиЛокальный пакетный процесс
Генерация команд инструментовФормировать стабильные tool callsДоля валидных вызовов и успешных исполненийАгентный рантайм
Персональные адаптерыНастроить поведение под пользователя или командуИзолированные тестовые наборыОбщая базовая модель с разными LoRA
Офлайн-помощникВыполнять узкую задачу без внешнего APIТесты на целевом устройстве без сетиНоутбук, рабочая станция или локальный сервер

Поддержка и обработка обращений

Датасет можно собрать из проверенных диалогов между клиентами и специалистами. Модель учится определять тип запроса, формировать ответ в принятой структуре, уточнять недостающие данные и передавать сложные случаи оператору.

В обучающую выборку нельзя без подготовки переносить персональные данные, платёжные реквизиты и конфиденциальную переписку.

Извлечение структурированных данных

Unsloth подходит, чтобы адаптировать компактную модель под повторяемое преобразование текста в JSON. Примеры задач:

  • счёт или акт → реквизиты, сумма, дата;
  • резюме → навыки и опыт;
  • обращение клиента → категория и приоритет;
  • описание объекта → набор характеристик;
  • расшифровка встречи → решения и задачи.

Сценарий легко проконтролировать автоматически: JSON проходит валидацию, а извлечённые поля сравниваются с эталоном.

Единый формат корпоративных документов

Дообученная модель может стабильно собирать отчёты по проекту, карточки базы знаний, описания инцидентов и технические задания по фиксированной схеме.

Факты для документа лучше передавать в текущем запросе либо получать через RAG. Адаптер отвечает за структуру, язык и порядок разделов.

Локальная обработка чувствительных данных

После обучения модель выгружается в GGUF и запускается без внешнего API. Такой контур подходит для документов, которые нельзя отправлять в облачные сервисы.

Внимание: локальный запуск защищает данные от передачи внешнему API, но не отменяет контроль доступа, шифрование диска, журналирование и удаление временных файлов.

Адаптация под устройство

Компактную модель можно дообучить для одной узкой операции и запускать на ноутбуке, рабочей станции или edge-устройстве — компьютере на границе сети, который обрабатывает данные локально. Это полезно при работе без интернета, большом потоке однотипных запросов и необходимости зафиксировать конкретную версию модели.

Сперва определите лимиты целевого устройства, затем подбирайте объём модели и квантизацию. Контроль проводите на том же железе, где модель будет работать.

Когда дообучение не окупится

Не начинайте обучение, если:

  • задача покрывается системным промптом и парой примеров;
  • нужные факты постоянно меняются;
  • отсутствуют эталонные ответы для контроля;
  • набор данных состоит из случайно собранных документов;
  • нужен только поиск по внутренней базе;
  • ожидается единичный редкий запрос;
  • неясно, какую метрику требуется улучшить.

В этих ситуациях сперва проверьте промптинг, RAG либо готовую более мощную модель. Адаптацию добавляйте после появления измеримого ограничения.

Быстрый путь через Unsloth Studio

Если собственный Python-конвейер не нужен, начните с Unsloth Studio — локального веб-интерфейса, который на момент проверки находился в Beta.

  • Установите Unsloth Desktop либо запустите Studio по официальной инструкции.
  • Возьмите актуальную instruct-модель из каталога и сверьте её лицензию.
  • Загрузите JSONL, CSV либо документы и просмотрите полученные обучающие примеры.
  • Отложите отдельный набор контрольных запросов, который не попадёт в обучение.
  • Запустите короткий QLoRA-прогон с рекомендованными настройками.
  • Сопоставьте базовую и дообученную модели на одинаковых запросах.
  • Выгрузите удачную версию в GGUF для LM Studio либо Ollama.
Интерфейс Unsloth Studio для выбора модели, датасета и параметров QLoRA

Studio удобнее для первого эксперимента, отслеживания loss и сверки контрольных точек. Unsloth Core нужен, когда важны воспроизводимость, автоматизация, собственная обработка данных и встраивание обучения в кодовый конвейер.

Выбор модели и параметров

Для первого эксперимента берите актуальный conversational notebook Unsloth. Там уже согласованы модель, токенизатор, chat template и параметры записи.

Пример ниже берёт Llama 3.2 3B как компактную учебную модель, а не как безусловно лучший выбор в 2026 году. Для нового проекта сперва проверьте свежие model-specific notebooks, поддержку целевого языка, лицензию и ограничения будущего контура запуска.

Важно: Unsloth Core поставляется под Apache 2.0, отдельные компоненты Studio — под AGPL-3.0, а веса Llama 3.2 — по собственной лицензии Meta. Скачать и дообучить модель — не значит получить автоматическое разрешение на любое коммерческое применение.

При самостоятельной настройке стартуйте с компактной instruct-модели и QLoRA:

  • load_in_4bit=True;
  • max_seq_length=2048 для первого запуска;
  • LoRA rank r=16;
  • один короткий тестовый прогон на 60 шагов;
  • затем полноценное обучение на 1–3 эпохи.

Внимание: избегайте full fine-tuning на старте. Сперва проверьте данные и задачу на LoRA либо QLoRA. Полное обучение требует заметно больше памяти и не исправит плохой набор данных.

Объём модели выбирайте по доступной видеопамяти и длине примеров. Точные требования зависят от архитектуры, batch size и context length, поэтому сверяйтесь с карточкой выбранной модели и актуальным notebook.

Установка Unsloth Core

Ниже — вариант для Linux или WSL. Для Windows, macOS, AMD и Intel обратитесь к отдельным официальным инструкциям.

curl -LsSf https://astral.sh/uv/install.sh | sh

uv venv unsloth_env --python 3.13
source unsloth_env/bin/activate

uv pip install unsloth --torch-backend=auto

# Зафиксировать фактически установленные версии
uv pip freeze | grep -E '^(unsloth|unsloth_zoo|trl|transformers|torch)=='
uv pip freeze > requirements-lock.txt

Важно: в примере ниже задействован актуальный публичный API TRL: processing_class и max_length. В старых notebooks Unsloth могут встречаться tokenizer и max_seq_length. Не комбинируйте параметры из разных версий; при расхождении следуйте notebook для выбранной модели и его окружению.

Проверьте, что PyTorch видит GPU:

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'GPU not found')"

Для NVIDIA ожидается True и название видеокарты. Если выводится False, проверьте драйвер, версию CUDA и выбранный PyTorch backend.

Подготовка датасета

Для диалоговой instruct-модели используйте conversational-схему: в каждой строке JSONL лежит массив messages. Это не обязательно буквальный ChatML — токенизатор преобразует сообщения в chat template конкретной модели. Чужой шаблон вручную не подставляйте.

{"messages":[{"role":"system","content":"Отвечай кратко и возвращай результат в JSON."},{"role":"user","content":"Извлеки город: встреча состоится в Казани."},{"role":"assistant","content":"{\"city\":\"Казань\"}"}]}
{"messages":[{"role":"system","content":"Отвечай кратко и возвращай результат в JSON."},{"role":"user","content":"Извлеки город: офис находится в Самаре."},{"role":"assistant","content":"{\"city\":\"Самара\"}"}]}

Правила подготовки:

  • каждый пример содержит законченный запрос и эталонный ответ;
  • формат отвечает реальному режиму использования модели;
  • ответы не противоречат друг другу;
  • редкие случаи представлены отдельными примерами;
  • дубли, пустые строки и повреждённый JSON удалены;
  • часть данных заранее отложена для контроля.

Сто примеров — техническая отправная точка для проверки конвейера, а не гарантия качества. Для стабильного результата нужен более крупный и разнообразный набор. Контрольную выборку отделите до обучения и сделайте достаточно большой для редких и критичных случаев: десять тестовых строк годятся только для smoke test. Качество примеров важнее простого увеличения их количества.

Запуск QLoRA-дообучения

Пример использует небольшую Llama 3.2 Instruct. Перед запуском сверьте имя модели в каталоге Unsloth.

from datasets import load_dataset
from trl import SFTConfig, SFTTrainer
from unsloth import FastLanguageModel, is_bfloat16_supported

MAX_LENGTH = 2048
MODEL_NAME = "unsloth/Llama-3.2-3B-Instruct-unsloth-bnb-4bit"

model, tokenizer = FastLanguageModel.from_pretrained(
 model_name=MODEL_NAME,
 max_seq_length=MAX_LENGTH,
 load_in_4bit=True,
)

model = FastLanguageModel.get_peft_model(
 model,
 r=16,
 target_modules=[
 "q_proj", "k_proj", "v_proj", "o_proj",
 "gate_proj", "up_proj", "down_proj",
 ],
 lora_alpha=16,
 lora_dropout=0,
 bias="none",
 use_gradient_checkpointing="unsloth",
 random_state=3407,
)

raw_dataset = load_dataset(
 "json",
 data_files="train.jsonl",
 split="train",
)

split = raw_dataset.train_test_split(
 test_size=0.1,
 seed=3407,
)

def format_examples(batch):
 texts = [
 tokenizer.apply_chat_template(
 messages,
 tokenize=False,
 add_generation_prompt=False,
 )
 for messages in batch["messages"]
 ]
 return {"text": texts}

train_dataset = split["train"].map(format_examples, batched=True)
eval_dataset = split["test"].map(format_examples, batched=True)

trainer = SFTTrainer(
 model=model,
 processing_class=tokenizer,
 train_dataset=train_dataset,
 eval_dataset=eval_dataset,
 args=SFTConfig(
 dataset_text_field="text",
 max_length=MAX_LENGTH,
 per_device_train_batch_size=2,
 gradient_accumulation_steps=4,
 learning_rate=2e-4,
 warmup_steps=10,
 max_steps=60,
 logging_steps=1,
 eval_strategy="steps",
 eval_steps=20,
 per_device_eval_batch_size=1,
 fp16=not is_bfloat16_supported(),
 bf16=is_bfloat16_supported(),
 output_dir="outputs",
 optim="adamw_8bit",
 seed=3407,
 report_to="none",
 ),
)

trainer.train()

Этот упрощённый пример считает loss по всей собранной последовательности, включая инструкции пользователя. Для рабочего instruction-tuning изучите response-only либо completion-only обучение в актуальном notebook выбранной модели, чтобы оптимизировать в первую очередь ответы ассистента.

Вслед за запуском должны появиться training loss, eval_loss на шагах контроля и каталог outputs с checkpoints. Наличие этих файлов подтверждает работу конвейера, но не качество модели.

max_steps=60 годится для проверки конвейера. Для полноценного запуска замените на num_train_epochs=1 и при необходимости увеличьте до трёх эпох, следя за validation loss.

Проверка результата

Падение training loss подтверждает, что LLM учится на наборе данных, но само по себе не доказывает полезность адаптера. Контролируйте результат в три этапа:

  • Прогоните одинаковые контрольные запросы на исходной и дообученной модели.
  • Проверьте точность формата, содержание и поведение на примерах, отсутствовавших в обучении.
  • Убедитесь, что модель сохранила базовые навыки и не копирует обучающие ответы механически.

Для классификации и извлечения данных считайте метрики на отдельной отложенной выборке. Для диалогового поведения подготовьте фиксированный набор сценариев и критерии ручной оценки. Порог успешности задайте до обучения, чтобы не подбирать метрику задним числом.

ЗадачаОсновная проверкаЧто считать ошибкой
JSON-извлечениеВалидность JSON и точность по каждому полюНевалидная схема, пропущенное или выдуманное значение
КлассификацияMacro-F1, матрица ошибок и recall критичных классовОшибочный маршрут или пропуск приоритетного класса
ПоддержкаЧеклист фактов, тона, структуры и эскалацииВыдуманный факт, нарушение политики или неверная эскалация
Tool callsДоля валидных вызовов и успешных исполненийНеверная схема, аргумент или выбор инструмента
Панель Unsloth Studio с прогрессом обучения, метриками loss и загрузкой GPU

Признаки переобучения:

  • training loss продолжает падать, а validation loss растёт;
  • модель повторяет фразы из набора данных;
  • ответы становятся однообразными;
  • качество падает на иных формулировках той же задачи.

Сохранение LoRA и экспорт в GGUF

Запись небольшого LoRA-адаптера:

model.save_pretrained("unsloth-lora")
tokenizer.save_pretrained("unsloth-lora")

Выгрузка слитой модели в GGUF под llama.cpp, Ollama либо LM Studio:

model.save_pretrained_gguf(
 "unsloth-model",
 tokenizer,
 quantization_method="q4_k_m",
)

Артефакты сохранятся в каталоге unsloth-model; точное имя файла не стоит предугадывать. Найдите созданный GGUF и используйте этот путь в LM Studio либо Modelfile Ollama:

find ./unsloth-model -name "*.gguf"

q4_k_m годится как стартовый баланс размера и качества. Для более точного контроля дополнительно выгрузите q8_0 и сопоставьте ответы.

Внимание: при исполнении выгруженной модели применяйте тот же chat template и корректный EOS token, что использовались при обучении. Несовпадение шаблона часто провоцирует повторы, бессвязный текст либо бесконечную генерацию.

Для многопользовательского серверного вывода изучите выгрузку в 16-bit и запуск через vLLM. GGUF в первую очередь удобен для локального исполнения через llama.cpp-совместимые инструменты.

Лицензии и воспроизводимость

Перед обучением проверьте четыре независимых права и ограничения:

  • лицензию Unsloth и используемых компонентов;
  • лицензию базовой модели и её Acceptable Use Policy;
  • право применять документы, переписку и код в обучающем наборе данных;
  • условия распространения получившегося адаптера либо слитой модели.

Для Llama 3.2 действует Llama 3.2 Community License. Для другого примера условия могут отличаться. Фиксируйте рядом с результатом название и revision базовой модели, chat template, версии пакетов, параметры обучения, seed и описание набора данных. Без этого эксперимент трудно воспроизвести либо проверить.

Типичные проблемы

ПроблемаЧто проверить
CUDA out of memoryУменьшите batch size и max_seq_length, оставьте 4-bit, увеличьте gradient accumulation
Модель ломается в OllamaСверьте chat template, EOS token и служебные токены
Загрузка останавливается на 90–95%Установите UNSLOTH_STABLE_DOWNLOADS=1 до импорта Unsloth
Validation loss растётСократите число эпох, снизьте learning rate, проверьте дубли и противоречия
Ответы копируют датасетДобавьте разнообразные примеры и увеличьте отложенную выборку
Экспорт завершается по OOMУменьшите maximum_memory_usage при сохранении, например до 0.5

Ограничения

Ограничения

Что учитывать

Технические границы, которые нужно учитывать при планировании адаптации.

Требования к видеопамяти зависят от модели — Размер, batch size и context length определяют расход VRAM.

Llama 3.2 3B в 4-bit с LoRA r=16 укладывается в 6–8 ГБ, но более крупные модели требуют пропорционально больше. Сверяйтесь с карточкой модели и актуальным notebook перед запуском.

Прямой импорт адаптера в Ollama — продвинутый сценарий — Требует точного совпадения исходной модели и поддерживаемой архитектуры.

Для QLoRA рекомендуется объединённая модель → GGUF → Ollama, а не подключение адаптера напрямую.

lms import в LM Studio помечен как экспериментальный — Команда может не сработать.

Если она не работает — загрузите файл через интерфейс либо скопируйте GGUF в каталог моделей вручную.

Загрузка может останавливаться на 90–95%

— Известная проблема, устраняется установкой переменной окружения UNSLOTH_STABLE_DOWNLOADS=1 до импорта Unsloth в скрипте.

Лицензии компонентов различаются — Unsloth Core — Apache 2.0, компоненты Studio — AGPL-3.0, веса моделей — по собственным лицензиям вендоров.

Коммерческое применение требует проверки каждого слоя.

Антипаттерны

Антипаттерны

Чего не делать

Ошибочные ходы, которые приводят к потере времени и ресурсов.

Начинать с полного дообучения — Full fine-tuning требует значительно больше памяти и не спасёт слабый набор данных.

Сперва проверьте данные и задачу на QLoRA с 60 шагами, затем переходите к полному обучению.

Использовать персональные данные без подготовки

— Перенос персональных данных, платёжных реквизитов и конфиденциальной переписки в обучающую выборку без анонимизации нарушает регуляции и создаёт юридический риск.

Обучать на случайно собранных документах — Датасет из неструктурированных файлов без разметки и проверки даёт непредсказуемый результат.

Сначала определите формат, отложите контрольную выборку, удалите дубли.

Смешивать параметры из разных версий TRL — В старых notebooks встречаются tokenizer и max_seq_length, в актуальном API — processing_class и max_length.

Не комбинируйте параметры из разных версий; ориентируйтесь на notebook для выбранной модели.

Игнорировать chat template и EOS token при экспорте — Несовпадение шаблона провоцирует повторы, бессвязный текст или бесконечную генерацию.

Фиксируйте chat template и EOS token рядом с моделью.

Чеклист

Чеклист

Проверка перед запуском

Проверяемые действия перед запуском адаптации.

Адаптация особенно полезна, когда у команды есть повторяемая задача, качественные примеры и понятный способ оценить результат. Отдельно стоит рассчитать требования к железу и дальнейший контур запуска модели.

GPU виден PyTorch — torch.cuda.is_available() возвращает True, название видеокарты определено.

Если False — проверьте драйвер, CUDA и PyTorch backend.

Контрольные запросы записаны до обучения — Ответы исходной модели сохранены как опорная точка.

После обучения можно сопоставить и измерить улучшение.

Датасет соответствует реальному использованию — Формат примеров совпадает с тем, как модель будет применяться.

Ответы не противоречат друг другу, дубли удалены, редкие случаи представлены.

Контрольная выборка отделена — Тестовые данные не попадают в обучение.

Размер выборки достаточен для редких и критичных случаев, а не ограничивается десятью строками.

Версии пакетов зафиксированы — requirements-lock.txt создан после установки.

Включает unsloth, trl, transformers, torch с точными версиями для воспроизводимости.

Лицензии проверены — Unsloth, базовая модель и компоненты Studio — каждый слой отдельно.

Коммерческое применение подтверждено или ограничено.

Ссылки

Ссылки