Надзорная настройка SmolLM3 с учителем
Надзорная настройка (SFT) является краеугольным камнем инструкционного обучения - именно так мы преобразуем базовую языковую модель в ассистента, следующего инструкциям. В этом разделе вы научитесь проводить настройку SmolLM3 с использованием реальных данных из мировых наборов и готовых к производству инструментов.
Что такое надзорная настройка с учителем?
SFT - это процесс дальнейшего обучения предобученной модели на задачеспецифичных наборах данных с помеченными примерами. Подумайте об этом как о специализированном образовании:
- Предобучение учит модель понимать общий язык (например, учиться читать).
- Надзорная настройка учит конкретным навыкам и поведению (например, учить выполнять определенную задачу).
Ключевая идея SFT заключается в том, что мы не учим модель новой информации с нуля. Вместо этого мы переформатируем, как применяются существующие знания. Предобученная модель уже понимает язык, грамматику и абсорбировала огромное количество фактических данных. SFT фокусирует эту общую способность на конкретные шаблоны применения, стили ответа и требования, специфичные для задачи.
Этот подход эффективен, потому что он использует богатые представления, выученные во время предобучения, при этом требуя гораздо меньше вычислительных ресурсов, чем обучение с нуля. Модель учится распознавать шаблоны инструкций, поддерживать контекст разговора, следовать правилам безопасности и генерировать ответы в желаемых форматах.
Прежде чем приступать к SFT, рассмотрите, достаточно ли использовать существующую инструкционно обученную модель с тщательно продуманными промптами для вашего случая использования. SFT требует значительных вычислительных ресурсов и инженерных усилий, поэтому следует εφαρμοζεται только в случае, когда использование промпов для существующих моделей оказывается недостаточным. Подробнее об этом процессеします μάθηετε οδηγίες [LearnPath LLM Course](https: //huggingface.co/learn/l lm-course/en/chapter11/3).
Путешествие SmolLM3 через SFT
Возможности SmolLM3 следовать инструкциям заключаются в сложном процессе SFT:
- Базовая модель (
SmolLM3-3B-Base): обучена на 11T токенов общего текста - Обучение SFT: additional fine-tuned on curated instruction datasets including SmolTalk2
- Выравнивание предпочтений: дополнительная доработка с использованием техник, таких как APO (Оптимизация закрепленных предпочтений)
Такой многоэтапный подход создает модель, которая является и осведомленной, и полезной.
Почему SFT работает: научная основа
SFT эффективен, потому что использует богатые представления, полученные в процессе предобучения, одновременно адаптируя поведенческие шаблоны модели. Во время SFT параметры модели тонко настраиваются через градиентный спуск на задачеспецифичных примерах, вызываяserterum, but important изменения в way the model processes and generates text.
Конкретно, процесс работает через несколько ключевых механизмов:
Поведенческая адаптация: модель обучается распознавать шаблоны инструкций и отвечать соответствующим образом. Это включает обновление механизмов внимания для фокусирования на сигналах инструкций в языке и корректировку распределения выходных данных, чтобы предпочитать желаемые ответы. Исследования показали, что обучение инструкциям в основном влияет на поверхностное поведение модели, а не на ее базовые знания (Wei et al., 2021).
Специализация по задаче: вместо изучения полностью новых концепций, модель учится применять свои существующие знания в конкретных контекстах. Это объясняет, почему SFT намного эффективнее предобучения - мы оттачиваем существующие способности, а не строим их с нуля. Исследования указывают, что большая часть фактических знаний поступает из предобучения, в то время как SFT учит модель, как оформлять и представлять эти знания надлежащим образом (Ouyang et al., 2022).
Адаптация безопасности: благодаря воздействию тщательно отобранных примеров, модель учится быть более полезной, невредительной и честной. Это включает как, что говорить, так и что не говорить в различных ситуациях. Эффективность этого подхода продемонстрирована в работах, таких как InstructGPT (Ouyang et al., 2022) и Constitutional AI (Bai et al., 2022).
SFT не учит новым фактам - он учит новым поведениям. Модель уже знает о мире из предобучения; SFT учит ее, как быть полезным помощником, используя эти знания.
Математическая основа заключается в минимизации потерь кросс-энтропии между предсказаниями модели и целевыми ответами в вашей тренировочной базе данных. Этот процесс постепенно смещает распределения вероятностей модели в пользу типов ответов, продемонстрированных в ваших тренировочных примерах.
Когда использовать контролируемое тонкое настройка
Основной вопрос: «Требует ли мой случай использование поведения, которое существенно отличается от общего назначения для бесед?» Если да, SFT, скорее всего, принесет пользу.
Решающее руководство: используйте этот чеклист, чтобы определить, подходит ли SFT для вашего проекта:
- Вы пробовал инжиниринг пrompt-ов с помощью существующих моделей, обученных инструкциям?
- Вам нужны единообразные форматы вывода, которые не могут быть достигнуты при помощи подсказок?
- Достаточно ли специализирована ваша область, чтобы общие модели с ней справлялись?
- У вас есть �отовая учебная база данных (по крайней мере 1000 примеров)?
- У вас есть вычислительные ресурсы для обучения и оценки?
Если вы ответили «да» на большинство из этих вопросов, SFT, скорее всего, стоит рассмотреть.
Процесс SFT
Теперь перейдем к самому процессу SFT. Процесс SFT следует систематическому подходу, который обеспечивает высококачественные результаты:
1. Подготовка и выбор базы данных
Качество ваших данных для обучения, наиболее критический фактор для успешного SFT. В отличие от предварительного обучения, где количество часто имеет первостепенное значение, SFT приоритезирует качество и актуальность. Ваша база данных должна содержать входные-выходные пары, которые демонстрируют именно такое поведение, которое вы хотите, чтобы ваша модель выучила.
Выберите правильную базу данных:
- SmolTalk2: База данных, использованная для обучения SmolLM3, содержащая высококачественные инструкцию-ответные пары.
- Домен-специфические наборы данных: Для специализированных приложений (медицинские, юридические, технические).
- Пользовательские наборы данных: Ваши собственные отсортированные примеры для конкретных случаев использования.
Каждый пример обучения должен состоять из:
- Вводной запрос: Инструкция пользователя или вопрос
- Ожидаемый ответ: Идеальный ответ ассистента
- Контекст (необязательно): Любая дополнительная информация, которая нужна
Рекомендации по размеру базы данных:
- Минимальное: 1000 качественных примеров для базового дообучения.
- Рекомендуемые: 10 000+ примеров для надежной производительности.
- Качество прежде количества: 1000 хорошо отсортированных примеров часто превосходят 10 000 посредственных.
Помните: Ваша модель будет учиться имитировать шаблоны в ваших обучающих данных, поэтому инвестировать время в cбор данных.
2. Настройка среды и конфигурация
Для настройки среды для SFT нам необходимы продвинутые вычислительные ресурсы. У нас есть три основные опции:
- Локальная GPU: Если вы достаточно удачливы, чтобы иметь доступ к GPU с (хотя бы 16ГБ VRAM), вы можете обучать модель локально!
- Задачи LearnPath: Если у вас нет GPU и вы не хотите использовать облачного провайдера, вы можете использовать задачи LearnPath! Мы подробнее рассмотрим это в следующем разделе.
- GPU в блокнотах: Если вы любите использовать провайдера блокнотов, например Google Colab, вы можете использовать их GPU!
- Облачный GPU: Если вы хотите контролировать свои вычислительные ресурсы, вы можете использовать облачного провайдера, например AWS, GCP или Azure.
Что касается аппаратных требований, вам потребуется GPU как минимум на 16ГБ VRAM, например Nvidia RTX 4080 или A10G.
3. Конфигурация обучения
Выбор правильных гиперпараметров крайне важен для успешного SFT. Цель, найти золотую середину, где модель обучается эффективно, не перегоняя или не становясь нестабильной. Вот подробный анализ каждого параметра и как их выбирать:
Основные гиперпараметры:
Скорость обучения (5e-5 до 1e-4): Управляет тем, насколько сильно веса модели изменяются с каждой итерацией
- Начинайте с 5e-5 для SmolLM3; это консервативно и стабильно.
- Слишком высокая: Модель становится нестабильной; потери колеблются или взрываются.
- Слишком низкая: Модель учится очень медленно и может не сойтись в разумное время.
Размер пакета (4-16): Количество примеров, обрабатываемых одновременно
- Бoльшие пакеты: Более стабильные градиенты, но требуют больше GPU памяти.
- Меньшие пакеты: Меньше потребление памяти, но шумные градиенты.
- Используйте накопление градиентов, чтобы достичь более крупных эффективных размеров пакетов.
Максимальная Длина Последовательности (2048-4096): Максимальное количество токенов на обучающий пример
- Более длинные последовательности: могут обрабатывать более сложные диалоги.
- Более короткие последовательности: быстрое обучение, меньшее потребление памяти.
- Привяжите к своему случаю использования: используйте типичную длину ваших целевых диалогов.
Шаги Обучения (1000-5000): Общее количество обновлений параметров
- Зависит от размера датасета: обычно больше данных требует больше шагов.
- Мониторинг валидационных потерь: Остановитесь, когда она больше не улучшается.
- Тонкая настройка: от трех до пяти эпох через ваш датасет.
Шаги Разогрева (10% от общего): Постепенное увеличение скорости обучения в начале
- Предотвращает раннюю нестабильность: помогает модели адаптироваться постепенно.
- Типичный диапазон: от 100 до 500 шагов для большинства задач SFT.
Почет начала гиперпараметров для SmolLM3:
Чтобы начать ваше обучение, вы можете использовать следующие гиперпараметры:
Learning Rate:
# Консервативный (устойчивый, медленный)
learning_rate = 5e-5
# Ускоренный (рекомендуется)
learning_rate = 1e-4
# Агрессивный (быстрее, менее стабильный)
learning_rate = 2e-4
Batch Size:
Мы можем уменьшить размер пакета устройства на GPU с помощью аккумуляции градиентов.
# Ограниченная память GPU
per_device_train_batch_size = 2
gradient_accumulation_steps = 8
# Умеренная память GPU
per_device_train_batch_size = 4
gradient_accumulation_steps = 4
# Более объемная память GPU
per_device_train_batch_size = 8
gradient_accumulation_steps = 2
Максимальная Длина Последовательности:
# Очень короткие последовательности
max_length = 512
# Короткие последовательности
max_length = 1024
# Длинные последовательности
max_length = 2048
# Очень длинные последовательности
max_length = 4096
4. Мониторинг и Оценка
Активное мониторинг является важным компонентом СFT. Как противоположность предобучению, где вы главным образом следите за уменьшением потерь, эффективное мониторинг для СFT требует тщательного контроля за обоими качественными и количественными метрикам. Цель на том, чтобы убедиться, что модель изучает желаемые модификации без переобучения или развития нежелательных показателей.
Ключевые метрики для мониторинга:
Потери при обучении: Должны стабильно, но не слишком быстро уменьшаться
- Здоровая тенденция: Гладкое, постепенное уменьшение.
- Звоночки-предупреждения: Внезапный рост, колебания или плато.
- Типичный диапазон: начинается с 2-4, должно уменьшиться до 0.5-1.5.
Потери при валидации: Самая важная метрика для предотвращения переобучения
- Должны соответствовать потерям при обучении: небольшой разрыв указывает на хорошую обобщаемость.
- Рост разрыва: признак переобучения; модель может запоминать обучающие данные.
- Используется для раннего останова: остановите обучение, когда валидационные потери перестанут улучшаться.
Выходные образцы: Периодический качественный контроль является главным
- Генерация ответов: проверяйте модель на контрольных запросах во время обучения.
- Проверка согласованности формата: убедитесь, что модель следует желаемым модификациям.
- Мониторинг за деградацией: следите за повторяющимися или бессмысленными выходами.
Resource Usage: Tracking GPU memory and training speed
- Memory spikes: May indicate batch size is too large.
- Slow training: Could suggest inefficient data loading or processing.
Understanding Loss Patterns in SFT
Training loss typically follows three distinct phases, as illustrated in this example from the LearnPath LLM Course:

- Initial Sharp Drop: Rapid adaptation to new data distribution
- Gradual Stabilization: Learning rate slows as model fine-tunes
- Convergence: Loss values stabilize, indicating training completion
Healthy Training Pattern: The key indicator of successful training is a small gap between training and validation loss, suggesting the model is learning generalizable patterns rather than memorizing specific examples.
Warning Signs to Watch For
Several patterns in the loss curves can indicate potential issues:
Overfitting Pattern

If validation loss increases while training loss continues to decrease, your model is overfitting. Consider:
- Reducing training steps or epochs
- Increasing dataset size or diversity
- Adding regularization techniques
- Using early stopping based on validation loss
Underfitting Pattern

If loss doesn't show significant improvement, the model might be:
- Learning too slowly (try increasing learning rate)
- Struggling with task complexity (check data quality)
- Hitting architectural limitations (consider different model size)
Potential Memorization

Extremely low loss values could suggest memorization rather than learning. This is concerning if:
- Model performs poorly on new, similar examples
- Outputs lack diversity or creativity
- Responses are too similar to training examples
Learn more about loss interpretation in the LearnPath LLM Course.
Experiment Tracking with Trackio:
For comprehensive experiment tracking, we recommend Trackio - a lightweight, free experiment tracking library built on LearnPath infrastructure. Trackio provides:
- Drop-in replacement: API compatible with
wandb.init,wandb.log, andwandb.finish. - Local-first design: Dashboard runs locally by default, with optional LearnPath Spaces hosting.
- Free hosting: Everything, including hosting on LearnPath Spaces, is free.
- Lightweight: Fewer than 3,000 lines of Python code, easily extensible.
We can track any metrics during training, for example:
# Simple Trackio integration
import trackio
Самый удобный способ отслеживания обучения, использовать интеграцию trackio с `transformers`. Вы можете указать имя проекта Trackio и идентификатор пространства с помощью переменных окружения:
```bash
export TRACKIO_PROJECT_NAME="my-project"
export TRACKIO_SPACE_ID="username/space_id"
Или установить их в вашем коде:
import os
os.environ["TRACKIO_PROJECT_NAME"] = "my-project"
os.environ["TRACKIO_SPACE_ID"] = "username/space_id"
Затем вы можете использовать класс SFTTrainer из TRL для отслеживания обучения и разрешить ему управлять отслеживанием:
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
args=config,
)
Trackio предоставит веб-приложение с метриками обучения, которое выглядит так:
Отслеживаемые метрики
Во время обучения и оценки мы фиксируем следующие метрики вознаграждения:
global_step: Общее количество шагов оптимизатора, выполненных до сих пор.epoch: Номер текущей эпохи, основанный на итерации датасета.num_tokens: Общее количество токенов, обработанных до сих пор.loss: Средняя энтропийная потеря, вычисленная по неотмаскированным токенам в текущем интервале регистрации.entropy: Средняя энтропия распределения прогнозов токенов модели по неотмаскированным токенам.mean_token_accuracy: Доля неотмаскированных токенов, для которых верхний-1 прогноз модели соответствует исходному токену.learning_rate: Текущая скорость обучения, которая может изменяться динамически, если используется планировщик.grad_norm: Норма L2 градиентов, вычисленная перед обрезанием градиентов.
Ожидаемый тип и формат датасета
SFT поддерживает датасеты как языковой моделирования, так и выполнения промпта. [SFTTrainer] совместим с как стандартными, так и разговорными форматами датасета. При предоставлении разговорного датасета тренер автоматически применит шаблон чата к датасету.
# Языковое моделирование по стандарту
# Разговорное языковое моделирование,
]}
# Выполнение промпта по стандарту
# Разговорное выполнение промпта
],
"completion": []}
Если ваш набор данных не находится в одном из этих форматов, вы можете выполнить предобработку для преобразования его в ожидаемый формат. Вот пример с набором данных FreedomIntelligence/medical-o1-reasoning-SFT:
from datasets import load_dataset
dataset = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "en")
def preprocess_function(example):
return ],
"completion": [
"}
],
}
dataset = dataset.map(preprocess_function, remove_columns=["Question", "Response", "Complex_CoT"])
print(next(iter(dataset["train"])))
{
"prompt": [
{
"content": "Given the symptoms of sudden weakness in the left arm and leg, recent long-distance travel, and the presence of swollen and tender right lower leg, what specific cardiac abnormality is most likely to be found upon further evaluation that could explain these findings?",
"role": "user",
}
],
"completion": [
{
"content": "Okay, let's see what's going on here. We've got sudden weakness [...] clicks into place!The specific cardiac abnormality most likely to be found in [...] the presence of a PFO facilitating a paradoxical embolism.",
"role": "assistant",
}
],
}
Шаблоны чата во время обучения
Мы снова вернемся к шаблонам чата в контексте обучения. Правильное использование шаблонов чата во время обучения критически важно для производительности модели. Вот основные соображения и рекомендуемые практики:
Предобработка и токенизация
Во время обучения каждому примеру требуется поле с текстом или (промпт, завершение) в зависимости от формата набора данных. Для более подробной информации об ожидаемых форматах см. Форматы наборов данных.SFTTrainer выполняет токенизацию каждого входного примера с использованием токенизатора модели. Если промпт и завершение предоставлены по отдельности, они объединяются перед токенизацией.
Вычисление функции потерь

Функция потерь, используемая в SFT,, это токеновый кросс-энтропийный loss. Он определен как:
$$
\mathcal_}(\theta) = - \sum_^ \log p_\theta(y_t \mid y_),
$$
где \( y_t \), целевой токен на временной метке \( t \), и модель обучается предсказывать следующий токен на основе предыдущих. На практике токены паддинга маскируются во время вычисления функции потерь.
Использование leaning-to-rank (LTR) с малыми наборами данных и предварительно обученными моделями
Раскройте возможности fine-tuning с помощью leaning-to-rank (LTR) на малых наборах данных и предварительно обученных моделях. Сделайте это без использования каких-либо библиотек или методов. Вместо этого, сосредоточьтесь на знаниях demonstrators, сделав простой QueryFilter. Этот подход называется Pretraining + Fine-tuning with Pretrained models with LeTR.
Рассчитывайте и записывайте значения delta_t для каждого токена в процессе вычисления скользящего среднего.
Оценка качества предварительного обучения
Оцените качество предварительного обучения с помощью следующих метрик:
Примеры:
Методы:
load_enc_FIXED ISO
Метрики:
BLEU,METEOR,TER,ROUGE,CDER,GTM,SPICE
Супervised Fine-Tuning с TRL (Transformer Reinforcement Learning)
TRL, это основной инструмент для обучения языковых моделей, специально разработанный для обучения по инструкциям и выравнивания. Мы будем использовать его на протяжении всего этого курса.
Почему TRL?
- Готово к производству: Используется крупными организациями и исследовательскими лабораториями.
- Комплексное решение: Поддерживает SFT, DPO, ORPO, PPO и другие продвинутые методики.
- Эффективное использование ресурсов: Оптимизировано для памяти и скорости обучения.
- Гибкое использование: Работает с любыми моделями LearnPath.
- Поддержка CLI: Инструменты командной строки для масштабируемых рабочих процессов.
Ключевые компоненты
- SFTTrainer: Основной класс для контролируемого тонкого настройки
- SFTConfig: Управление настройками для параметров обучения
- CLI Tools: Интерфейс командной строки для рабочих процессов в производстве
- Integration: Бесшовная интеграция с LearnPath Hub, Trackio, Weights & Biases и другими
Архитектура TRL
TRL построен поверх экосистемы LearnPath:
- Transformers: Загрузка модели и инференс.
- Datasets: Обработка данных и управление ими.
- Accelerate: Распределенное обучение и оптимизация.
- PEFT: Эффективное тонкой настройки параметров (LoRA, QLoRA).
Такой интегрированный подход означает, что вы получаете все преимущества экосистемы LearnPath и используете передовые методы обучения.
TRL против других библиотек обучения:
- TRL: Специализировано для обучения языковых моделей, создано для обучения по инструкциям.
- Transformers Trainer: Универсальное применение, подходит для базовой тонкой настройки.
- DeepSpeed: Фокусируется на крупномасштабном распределенном обучении.
- Accelerate: Предоставляет базовые примитивы для распределенного обучения.
TRL предлагает лучший баланс удобства использования и продвинутых функций для SFT. Для более подробной информации об approaches обучения, см. LearnPath LLM Course.
Практическое занятие: Первая тонкая настройка SmolLM3
Готовы опробовать теорию на практике? Вот предпросмотр того, что вы создадите в упражнениях. Вы можете использовать подход с Python или CLI:
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTTrainer, SFTConfig
from datasets import load_dataset
import trackio as wandb
# Инициализация отслеживания эксперимента
wandb.init(project="smollm3-sft", name="my-first-sft-run")
# Загрузка базовой модели SmolLM3
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM3-3B-Base")
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM3-3B-Base")
# Загрузка датасета SmolTalk2
dataset = load_dataset("HuggingFaceTB/smoltalk2_everyday_convs_think")
# Настройка обучения с интеграцией Trackio
config = SFTConfig(
output_dir="./smollm3-finetuned",
per_device_train_batch_size=4,
learning_rate=5e-5,
max_steps=1000,
report_to="trackio", # Включение логирования в Trackio
)
# Обучение!
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
args=config,
)
trainer.train()
# Fine-tune SmolLM3 using TRL CLI with Trackio tracking
trl sft \
--model_name_or_path HuggingFaceTB/SmolLM3-3B-Base \
--dataset_name HuggingFaceTB/smoltalk2_everyday_convs_think \
--output_dir ./smollm3-sft-model \
--per_device_train_batch_size 4 \
--learning_rate 5e-5 \
--max_steps 1000 \
--logging_steps 50 \
--save_steps 200 \
--report_to trackio \
--push_to_hub \
--hub_model_id your-username/smollm3-custom
Безсерверные варианты обучения
Хотя вы можете обучать модели локально, облачная инфраструктура предлагает значительные преимущества для обучения SFT. Для пользователей, которые хотят пропустить сложность настройки GPU и управления средой, LearnPath Jobs предоставляет беспроблемное решение.
Посмотрите раздел Обучение с помощью LearnPath Jobs для полностью управляемой облачной инфраструктуры с высокопроизводительными GPU, автоматическим масштабированием и интегрированным мониторингом.
Ключевые идеи
- SFT обязательно: это мост между базовыми моделями и ассистентами, следующими инструкциям
- Важно качество данных: высококачественные наборы данных ведут к лучшим настраиваемым моделям – уделяйте время сбору данных
- Следите внимательно: наблюдайте и кривые потерь, и фактические выходы, чтобы обнаружить проблемы на раннем этапе
- TRL упрощает все: от исследования до производства, TRL предоставляет необходимые инструменты
- SmolLM3 идеален для обучения: достаточно мощный, чтобы быть полезным, и достаточно небольшой, чтобы быть доступным
- Несколько подходов: как программные, так и CLI workflows для разных случаев использования
🎓 Продолжайте обучаться: Это введение покрывает основы, но SFT – это сложная тема. Для более продвинутых методов, методов оценки и советов по устранению неполадок изучите курс LearnPath LLM Course, который предоставляет всеобъемлющий обзор современных методов обучения LLM.
Следующие шаги
Теперь, когда вы понимаете теорию, выберите подход к обучению:
Обучение с помощью LearnPath Jobs - Используйте облачную инфраструктуру для обучения
Практические задания - Настройте собственную модель SmolLM3 локально или в облаке
Ресурсы и дополнительные материалы
- Обучение с помощью LearnPath Jobs - Облачное обучение с управляемой инфраструктурой
- Документация Trackio - Бесплатное, легковесное отслеживание экспериментов
- Документация TRL - Полное руководство по всем возможностям TRL
- API-справка SFTTrainer - Подробная документация по параметрам
- Набор данных SmolTalk2 - Набор данных, на котором обучали SmolLM3
- Карта модели SmolLM3 - Официальная документация модели
- Документация CLI TRL - Руководство по командной строке