Перейти к содержимому

Обучение моделей на вашей собственной разметке

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

Новое в v2.14.0

Обучение моделей подгоняет модель под метки, которые разметчики уже поставили, оценивает её на объектах, отложенных от обучения, и может показать ответы модели разметчикам как предварительные метки, которые остаётся подтвердить или исправить. На этой странице описаны цикл обучения, страница Training в админке, тренеры, сгруппированные по задачам, и страница или руководство, где каждая часть разобрана подробно. Страница рассчитана на владельцев исследований и администраторов, которые держат собственный сервер Potato. Страница Training и тренер sklearn-text есть в Potato с версии 2.11. Версия 2.14.0 добавляет 37 тренеров, удалённое обучение на GPU-серверах и кластерах SLURM, оценки на отложенных объектах в таблице Runs и публикацию на Hugging Face Hub.

Цикл обучения

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

  1. Разметка. Разметчики размечают объекты как обычно, а Potato сводит метки нескольких разметчиков на одном объекте в одну метку, по умолчанию методом Dawid-Skene или большинством голосов.
  2. Обучение. Запуск делит размеченные объекты на выборки train, val и test и обучает модель в отдельном процессе. Каждый объект остаётся в одной и той же выборке от запуска к запуску, потому что разбиение строится по хешу идентификатора объекта с фиксированным начальным значением.
  3. Оценка. Запуск оценивает модель на отложенных объектах val и test.
  4. Обратная запись. Предсказания запуска попадают в данные каждого объекта как предварительные метки для выбранных вами схем. Предсказания ниже порога уверенности и предсказания для объектов выборки train в данные не попадают.
  5. Исправление. Следующий разметчик видит уже заполненный ответ модели и подтверждает или меняет его. Проверяющий может также отметить, права ли была модель.
  6. Переобучение. Следующий запуск обучается на новых метках, а каждый объект, исправленный проверяющим, попадает в выборку train.

Включение обучения

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

yaml
model_training:
  enabled: true

Перезапустите сервер и откройте /admin/training в сессии администратора или с админским ключом API. Без enabled: true маршрутов обучения не существует. Включение обучения ничего не меняет для разметчиков, потому что предварительные метки появляются только для схем из списка writeback.schemas, а по умолчанию этот список пуст.

Панель Start a run вверху страницы Training содержит всю настройку запуска. В Schema перечислены схемы разметки исследования, в Trainer перечислены тренеры, подходящие к типу и объектам выбранной схемы, а в Runs on перечислены места, где запуск может выполняться. Поле Parameters принимает JSON и начинается с записи выбранного тренера в model_training.trainer_params. Примечание под полем называет все параметры, которые принимает тренер. Кнопка Train now запускает обучение. Запуск, начатый во время другого запуска, ждёт в очереди и показывается в таблице Runs как waiting #N с кнопкой Cancel run.

Страница Training в Potato с выбранными тренером sklearn-text, схемой sentiment и локальным бэкендом над таблицей Runs, где перечислены два завершённых запуска с оценками на отложенных объектах 0,847 и 0,840Два запуска sklearn-text на схеме sentiment, у каждого оценка по отзывам, которых модель не видела при обучении

Каждый идентификатор запуска в таблице Runs открывает страницу запуска по адресу /admin/training/runs/<run_id>. Страница запуска показывает статус, тренер, бэкенд, размеры выборок, оценку на отложенных объектах и параметры запуска, а затем все записанные метрики и журнал запуска. Неудавшийся запуск добавляет раздел What went wrong. Со страницы запуска можно также сохранить объекты val, test или train как версию датасета и опубликовать модель на Hugging Face Hub. Полный первый запуск на учебном проекте без GPU описан в руководстве Обучите свою первую модель.

Тренеры по задачам

В Potato 2.14.0 есть 38 тренеров, и в меню Trainer каждый назван по имени в реестре. Таблица группирует тренеров по виду разметки, из которой тренер учится.

ЗадачаТренерыГде описано
Метки на текстеsklearn-text, hf-text-classification, setfitОбучите свою первую модель
Фрагменты, связи, деревья диалогов и глоссыhf-token-classification, hf-relation, hf-conversation-tree, byt5-glossТренеры
LLM и модели вознагражденияllm-sft, llm-dpo, reward-model, prm-rewardДообучение LLM
Изображения, слайды, микроскопия, карты и макеты страницhf-image-classification, torchvision-detect, ultralytics-detect, torchvision-segment, ultralytics-segment, cellpose, sam-finetune, layoutlmv3, vlm-sftМодели для изображений
Аудиоhf-audio-tagger, whisper-asr, diarizationМодели для аудио
Объёмы, облака точек и видеоvolume-unet, external-3d, video-trackОбъёмы, облака точек и видео
Молекулы, спектры, сигналы и эпизоды роботовrdkit-property, peak-cnn, signal-cnn, episode-modelНаучные модели
Модели решений (Laya, Jev, OpenJev)decision-calibrate, laya-finetune, openjev-finetuneТренеры
Модели, которые вы уже запускаете в другом местеlabel-studio-ml, hf-inference, openai-vlm-boxes, roboflow, cvat-nuclioСвоя модель

Пять тренеров в последней строке ничего не обучают. Каждый из этих пяти отправляет отложенные объекты модели, которая работает в другом месте, а Potato оценивает ответы, записывает их обратно и проверяет так же, как ответы обученной модели. Тренеру sklearn-text не нужно ничего сверх обычной установки Potato, а команда pip install "potato-annotation[train]" ставит всё, что нужно текстовым, графическим, аудио- и LLM-тренерам. Тренер, который не установлен, показывается на странице Training как "not installed" вместе с командой, которая его устанавливает. Страница Тренеры приводит для каждого тренера типы разметки, типы объектов, команду установки и параметры.

Где выполняются запуски

Запуск выполняется на бэкенде, который выбирают для каждого запуска в меню Runs on или по умолчанию через model_training.backend. В Potato четыре вида бэкенда.

  • local обучает на сервере Potato в подпроцессе. При device: auto сначала берётся CUDA, затем Metal от Apple, затем процессор.
  • ssh обучает на GPU-сервере, до которого Potato добирается по ssh с ключом. Potato копирует исходный код Potato на сервер, запускает обучение там и после успешного запуска копирует модель обратно.
  • slurm подключается к головному узлу кластера так же и отправляет задачу обучения на вычислительный узел командой sbatch. Бэкенд вызывает только sbatch, squeue, scancel и scontrol. Поэтому кластер без srun или sacct подходит.
  • agent обслуживает машину, до которой Potato не дотянуться, например рабочую станцию за NAT. Команда potato training agent на этой машине опрашивает сервер в поисках задач, а файлы модели остаются на этой машине.

Команда potato training check <backend> config.yaml проверяет бэкенд перед первым запуском, и кнопка Check на странице Training делает то же самое. Страница Конфигурация перечисляет все ключи бэкенда, а руководство Обучение на GPU-сервере или кластере шаг за шагом настраивает три удалённых вида.

Оценки на отложенных объектах

Каждый запуск оценивает модель на объектах val и test метрикой, выбранной по типу разметки схемы. Классификатор с одной меткой получает macro-F1, разметчик фрагментов получает F1 по фрагментам, детектор рамок получает mAP при IoU 0,5, а модель транскрипции получает 1 минус доля ошибочных слов. Таблица Runs показывает по одной главной оценке на запуск, а страница запуска перечисляет все метрики с выборкой в названии метрики, например val_macro_f1 или test_f1. Объект с меткой и без предсказания считается ошибкой. Поэтому тренер не может поднять оценку, пропуская трудные объекты. Когда тренер выбирает лучшую контрольную точку по объектам val, главная оценка берётся с объектов test, потому что оценка val уже повлияла на модель. Тренер, который ничего не выбирает по val, например sklearn-text, берёт главную оценку с объектов val. Страница Конфигурация приводит метрики для каждого типа разметки.

Предварительные метки и очередь проверки модели

Предварительная метка — это ответ модели, уже заполненный на странице разметки, чтобы разметчик подтвердил или изменил его. Обратная запись превращает предсказания запуска в предварительные метки для схем из writeback.schemas, и блок pre_annotation для этого не нужен. Добавьте блок writeback в model_training:

yaml
model_training:
  enabled: true
  writeback:
    schemas: [sentiment]
    min_confidence: 0.6
    include_unlabeled: true

С этим блоком предсказание для sentiment с уверенностью ниже 0,6 сохраняется и не показывается. Параметр include_unlabeled: true заставляет каждый запуск предсказывать также для объектов, которые никто ещё не разметил. Без этого параметра запуск предсказывает только для отложенных объектов val и test. Объекты выборки train такого запуска предварительных меток не получают, а обратная запись никогда не меняет человеческую метку. Предварительная метка становится ответом разметчика, только когда разметчик правит её или переходит к следующему объекту.

Отзыв на товар на странице разметки Potato, где модель уже выбрала Positive до того, как разметчик ответилНовый разметчик видит выбранный моделью ответ и подтверждает или меняет его

Стратегия assignment_strategy: model_review выдаёт проверяющим объекты с предварительными метками, начиная с наименее уверенных. Проверяющий записывает по каждому объекту вердикт accept, correct или reject. Отклонённая предварительная метка снимается с объекта и больше не показывается. Каждый следующий запуск обучается на объекте с вердиктом correct и никогда не оценивает модель на этом объекте. Предварительные метки тянут разметчиков к ответу модели. Включайте include_unlabeled, когда оценка на отложенных объектах оправдывает доверие к модели, а разметчиков, которые принимают предварительные метки не читая, находите с помощью руководства Как отличить проверку от бездумного согласия в данных с предварительными метками. Руководство Модель в цикле проводит обратную запись, проверку и переобучение на одном проекте.

Переобучение по мере поступления разметки

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

yaml
model_training:
  enabled: true
  auto_retrain:
    enabled: true
    trainer: sklearn-text
    schemas: [sentiment]
    update_frequency: 25
    min_interval_s: 600

С этими значениями запуск начинается, когда с последнего автоматического запуска поступило 25 аннотаций и с завершения последнего запуска прошло 600 секунд. Страница Конфигурация перечисляет все ключи auto_retrain и причины, по которым проверка пропускает запуск, а руководство Модель в цикле показывает, когда включать переобучение.

Публикация модели на Hugging Face Hub

У успешного запуска, модель которого лежит на сервере Potato, на странице запуска есть форма Publish to the Hugging Face Hub. При отправке выгружаются веса модели, конфигурация и файлы токенизатора, а также карточка модели README.md, составленная по запуску. В карточке названы тренер, базовая модель, схемы, метки, размеры выборок и оценка на отложенных объектах. Предсказания запуска и любые копии обучающих данных остаются на сервере.

Название репозитория вводится дважды, и отправка проходит, только если оба названия совпадают. Флажок Private по умолчанию отмечен, а токен Hugging Face берётся из переменной окружения на сервере (по умолчанию HF_TOKEN), а не со страницы. Модель, оставшуюся на удалённом хосте или на машине агента, со страницы запуска опубликовать нельзя. Страница Конфигурация перечисляет, какие файлы выгружаются, и маршрут API, а руководство Дообучение LLM на вашей разметке проводит публикацию от начала до конца.

Обучение моделей и движок разметки

Движок разметки использует тех же тренеров. При включённой дистилляции (features.distill) движок обучает модель тренером (по умолчанию sklearn-text) на человеческих метках движка и на машинных метках, которые подтвердил контракт, а затем ставит модель перед настроенным каскадом как источник trained. Объекты выборок cert и audit движка в обучающую выборку дистилляции никогда не попадают. Источник trained может также загрузить модель из запуска обучения, если указать каталог модели запуска как artifact_dir. Страница Конфигурация движка разметки перечисляет ключи дистилляции.

Обучение моделей и активное обучение

Функция активного обучения в Potato обучает модель на метках исследования для более узкой цели, чем обучение моделей. Активное обучение подгоняет классификатор scikit-learn внутри процесса сервера каждые update_frequency аннотаций и использует его, чтобы переупорядочить очередь, поставив вперёд самые неопределённые объекты. Разметчики получают переупорядоченную очередь только при assignment_strategy: active_learning. Классификатор активного обучения оценивается на объектах, на которых он обучался, а его предсказания разметчикам не показываются.

Обучение моделей запускает любого из 38 тренеров в отдельном процессе или на другой машине, оценивает модель на отложенных объектах и показывает ответы модели как предварительные метки. Обучение моделей может также упорядочивать очередь. При assignment_strategy: llm_confidence первыми идут объекты, у которых опубликованная предварительная метка наименее уверенная. Параметр acquisition у hf-text-classification и hf-image-classification заменяет этот порядок оценкой по margin, энтропии, BALD или core-set. Используйте активное обучение, чтобы решить, какие объекты люди будут размечать дальше. Используйте обучение моделей, когда нужна модель с оценкой на отложенных объектах, предварительные метки для разметчиков или модель для публикации.

Руководства

Каждое руководство проводит одну настройку от установки до оценённого запуска.

Дополнительные материалы

Подробности реализации см. в исходной документации.