Обучение моделей на вашей собственной разметке
Обучите модель на метках вашего исследования со страницы Training в админке, оцените модель на отложенных объектах и покажите её ответы разметчикам как предварительные метки.
Новое в v2.14.0
Обучение моделей подгоняет модель под метки, которые разметчики уже поставили, оценивает её на объектах, отложенных от обучения, и может показать ответы модели разметчикам как предварительные метки, которые остаётся подтвердить или исправить. На этой странице описаны цикл обучения, страница Training в админке, тренеры, сгруппированные по задачам, и страница или руководство, где каждая часть разобрана подробно. Страница рассчитана на владельцев исследований и администраторов, которые держат собственный сервер Potato. Страница Training и тренер sklearn-text есть в Potato с версии 2.11. Версия 2.14.0 добавляет 37 тренеров, удалённое обучение на GPU-серверах и кластерах SLURM, оценки на отложенных объектах в таблице Runs и публикацию на Hugging Face Hub.
Цикл обучения
Каждый круг цикла обучает модель на человеческих метках, собранных к этому моменту, и даёт следующему разметчику ответы модели как отправную точку. Цикл состоит из шести шагов.
- Разметка. Разметчики размечают объекты как обычно, а Potato сводит метки нескольких разметчиков на одном объекте в одну метку, по умолчанию методом Dawid-Skene или большинством голосов.
- Обучение. Запуск делит размеченные объекты на выборки train, val и test и обучает модель в отдельном процессе. Каждый объект остаётся в одной и той же выборке от запуска к запуску, потому что разбиение строится по хешу идентификатора объекта с фиксированным начальным значением.
- Оценка. Запуск оценивает модель на отложенных объектах val и test.
- Обратная запись. Предсказания запуска попадают в данные каждого объекта как предварительные метки для выбранных вами схем. Предсказания ниже порога уверенности и предсказания для объектов выборки train в данные не попадают.
- Исправление. Следующий разметчик видит уже заполненный ответ модели и подтверждает или меняет его. Проверяющий может также отметить, права ли была модель.
- Переобучение. Следующий запуск обучается на новых метках, а каждый объект, исправленный проверяющим, попадает в выборку train.
Включение обучения
Обучение моделей по умолчанию выключено, и включается оно одним ключом конфигурации. Добавьте этот блок в существующую конфигурацию:
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.
Два запуска 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:
model_training:
enabled: true
writeback:
schemas: [sentiment]
min_confidence: 0.6
include_unlabeled: trueС этим блоком предсказание для sentiment с уверенностью ниже 0,6 сохраняется и не показывается. Параметр include_unlabeled: true заставляет каждый запуск предсказывать также для объектов, которые никто ещё не разметил. Без этого параметра запуск предсказывает только для отложенных объектов val и test. Объекты выборки train такого запуска предварительных меток не получают, а обратная запись никогда не меняет человеческую метку. Предварительная метка становится ответом разметчика, только когда разметчик правит её или переходит к следующему объекту.
Новый разметчик видит выбранный моделью ответ и подтверждает или меняет его
Стратегия assignment_strategy: model_review выдаёт проверяющим объекты с предварительными метками, начиная с наименее уверенных. Проверяющий записывает по каждому объекту вердикт accept, correct или reject. Отклонённая предварительная метка снимается с объекта и больше не показывается. Каждый следующий запуск обучается на объекте с вердиктом correct и никогда не оценивает модель на этом объекте. Предварительные метки тянут разметчиков к ответу модели. Включайте include_unlabeled, когда оценка на отложенных объектах оправдывает доверие к модели, а разметчиков, которые принимают предварительные метки не читая, находите с помощью руководства Как отличить проверку от бездумного согласия в данных с предварительными метками. Руководство Модель в цикле проводит обратную запись, проверку и переобучение на одном проекте.
Переобучение по мере поступления разметки
Параметр auto_retrain запускает обучение автоматически по мере поступления аннотаций, и каждый новый запуск заменяет предварительные метки предыдущего. Добавьте блок в model_training:
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. Используйте активное обучение, чтобы решить, какие объекты люди будут размечать дальше. Используйте обучение моделей, когда нужна модель с оценкой на отложенных объектах, предварительные метки для разметчиков или модель для публикации.
Руководства
Каждое руководство проводит одну настройку от установки до оценённого запуска.
- Обучите свою первую модель на вашей разметке обучает
sklearn-textна исследовании тональности без GPU. - Обучение на GPU-сервере, кластере SLURM или машине за NAT настраивает GPU-сервер по ssh, кластер SLURM и опрашивающего агента.
- Разметка с моделью в цикле: предварительные метки и переобучение охватывает обратную запись, проверку, отбор,
auto_retrainи версии датасета. - Дообучение LLM на вашей разметке обучает модели SFT, DPO, вознаграждения и пошагового вознаграждения с QLoRA и публикацией на Hub.
- Обучение моделей детекции и сегментации на разметке изображений обучает детекторы и сегментаторы на изображениях, слайдах, микроскопии и картах, а также Cellpose, SAM, LayoutLMv3 и визуально-языковые модели.
- Обучение моделей речи и аудио на вашей разметке обучает Whisper, диаризацию дикторов, детекторы на спектрограммах и теггеры аудио с файлами RTTM.
- Обучение моделей на объёмах, облаках точек и видео обучает
volume-unet,external-3dиvideo-track. - Обучение моделей на молекулах, спектрах, сигналах и эпизодах роботов обучает
rdkit-property,peak-cnn,signal-cnnиepisode-model. - Предварительные метки и оценки на отложенных объектах от модели, которую вы уже запускаете подключает модель, которую вы уже обслуживаете, через мост к модели или
label-studio-ml. - Дообучение с дифференциальной приватностью через Opacus обучает классификатор с параметром
dpи Opacus.
Дополнительные материалы
- Тренеры - все 38 тренеров, сгруппированные по задачам
- Конфигурация - каждый ключ
model_training, бэкенд, маршрут и путь хранения - Активное обучение - переупорядочивание очереди классификатором scikit-learn
- Предразметка с помощью LLM и моделей зрения - предварительные метки от LLM или модели зрения вместо обученной модели
- Движок разметки - машинные метки, проверенные на слепой выборке человеческих меток
- Симулятор пользователей - имитация разметчиков, чтобы опробовать цикл до прихода настоящих разметчиков
Подробности реализации см. в исходной документации.