Sakhanda Wire
NVDA $230.86 +1.09% MSFT $512.80 -0.02% GOOGL $338.24 -1.70% META $725.93 +0.10% AMZN $248.23 -0.37%
← К новостям

Обучение модели для написания кода рисовать акварелью с помощью TRL и OpenEnv

Обучение модели программирования рисовать акварелью с TRL и OpenEnv
Опубликовано 3 сентября 2026 года
Обновить на GitHub
Training a coding model to paint watercolours

23 августа Surya Narreddi опубликовал прекрасное видео с акварелями, нарисованными языковой моделью. Модель пишет JavaScript с помощью p5.brush — библиотеки, которая «добавляет естественные инструменты рисования в p5.js». Видео быстро стало вирусным: на момент написания его посмотрели более 1,5 млн раз.

К видео прилагалась запись в блоге, объясняющая обучение на более раннем и узком этапе проекта: крупные планы цветов, а не полноценные композиции из видео; к сожалению, открытых артефактов пока нет. На его сайте сказано, что полный технический отчёт готовится, так что обязательно подпишитесь на него. Исходная идея принадлежит ему: она пришла из мира искусства и дизайна, где его навыки намного превосходят мои. Моя попытка относится к инженерной стороне: я воспроизвожу рецепт в открытом виде, публикуя каждый его элемент.

Примечание: чтобы узнать предысторию проекта из рассказа самого Surya, посмотрите это видео о его дипломной работе.

В этой статье я пытаюсь воспроизвести его идею с помощью TRL и OpenEnv. Датасет эталонных изображений, RL-среда, скрипты обучения и обученные модели — всё открыто.

Весь конвейер работает на Hugging Face от начала до конца:

После запуска двух Spaces рецепт сводится к одной команде. Создайте копии среды и модели-оценщика, задайте две переменные окружения для смешивания наград и запустите:

hf jobs uv run train/watercolour_grpo.py --flavor h200 --timeout 48h --secrets HF_TOKEN -- \
  --env-url https://<you>-watercolour-env.hf.space \
  --model Qwen/Qwen3.5-35B-A3B --lora --all-linear --bf16 --gradient-checkpointing \
  --subject 'a peach hibiscus' --references 4 \
  --top-p 0.95 --top-k 20 \
  --lr 5e-5 --lr-scheduler constant_with_warmup --warmup-steps 5 \
  --scale-rewards none \
  --steps 110 --n-episodes 240 --num-generations 8 \
  --per-device-batch-size 1 --gradient-accumulation-steps 8 \
  --max-completion-length 8192 \
  --run-tag my-run --out <you>/watercolour-grpo --push-to-hub

Остаток статьи — это история о том, как я к этому пришёл, а каждый элемент находится в репозитории.

Я шаг за шагом следовал оригинальной записи в блоге и менял что-либо только при строгой необходимости. Все собственные идеи я заносил в список, а не включал в эксперимент; этот список в конце превратился в раздел «Что я попробовал бы дальше» рядом с полным перечнем опубликованных артефактов. Если вы уже читали его пост, общая концепция и дизайн награды будут вам знакомы. Новый материал — это открытая реализация, пул с ручной оценкой и три варианта смешивания наград, которые были обучены и сравнены; начинается он с раздела «RL-среда, которую нужно создать».

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

Почему это всем понравилось

Картины выглядят свободными, несовершенными, сделанными вручную — особенно в момент, когда модели изображений создают идеальные (статистически усреднённые) изображения. Думаю, именно этот контраст во многом объясняет, почему видео стало вирусным. Оно напомнило мне первые дни генеративного искусства на базе ИИ, когда главным было исследовать новый медиум. DeepDream (2015) был инструментом отладки, который люди превратили в искусство; такие работы, как Edmond de Belamy (2018), появились благодаря тому, что художники исследовали, на что способен GAN, а художники вроде Mario Klingemann в те годы создавали мечтательные портреты с помощью нейросетей.

Этот проект кажется мне ближе к тем первым дням. В своей дипломной работе Surya описывает путь, который привёл его к этой идее. Он начал с текстовых запросов к моделям text-to-image, где запрос — единственный рычаг управления, а дополнительные детали дают всё больше контроля лишь до определённого предела. Обучение самой модели позволяет пойти дальше. Вторая часть идеи — медиум. Модель пишет программу примерно из 150 строк JavaScript, которая рисует изображение. Выход модели — это код. Его можно прочитать, отредактировать и запустить снова, а решение за каждым мазком кисти видно. Стиль же рождается из ограничения: модели разрешено использовать только десять методов библиотеки. Подробнее об этом ниже.

В тот же период Anna Ridler сфотографировала тысячи тюльпанов, вручную разметила каждый, выставила сам датасет как произведение искусства, а позже обучила на нём модель. Я узнал о её работе из ссылок, которые возвращали ИИ-агенты во время создания этого проекта, и она мне понравилась, потому что здесь сделано нечто очень похожее: набор изображений тщательно отобран вручную, а затем на нём проводится обучение.

RL для вкуса

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

Здесь наградой является эстетическое предпочтение. Правильного ответа не существует. Настоящий вопрос проекта: можно ли применять RL к вкусу?

Награда, как она определена в его блоге и реализована в созданной мной RL-среде:

термин вес что измеряет
gate 0.05 эскиз компилируется, что-то рисует и не жульничает
length 0.05 мягко стимулирует более длинные фрагменты кода
попарное сравнение 0.60 стиль по сравнению с эталонами, выбранными из пула
HPSv3 0.30 эстетическое предпочтение рендера

HPSv3 — открытая модель предпочтений на 7 млрд параметров. Дайте ей изображение и текстовое описание, и она вернёт оценку того, насколько это изображение понравилось бы человеку. Модель обучалась на большом наборе человеческих выборов между парами изображений, поэтому её оценка представляет собой усреднённый вкус множества людей. В качестве попарного оценщика используется Qwen3-VL-30B-A3B-Instruct — универсальная модель компьютерного зрения, вызываемая через HF Inference Providers. Попарный оценщик видит картину-кандидата рядом с четырьмя эталонами, случайно выбранными из пула, и получает письменное описание того, чему уделять внимание (растекание краски, полупрозрачные лессировки, мягкие края). Каждое сравнение проводится в обоих порядках показа, а итоговая оценка — это доля сравнений, выигранных кандидатом. Единственный стандарт оценщика — пул, поэтому его оценка отражает мой вкус, закодированный в этих рейтингах.

The reward pipeline, piece by piece
Два из четырёх компонентов функции награды — это модели. Обе являются приближёнными выразителями чьего-то вкуса.

Именно на таких весах остановился Narreddi. Здесь вкус определяется пулом. Это переносит основную работу с настройки гиперпараметров на создание набора, который решает, что считать красивым.

Я обучил три запуска с этой наградой. Они различаются только распределением веса между двумя моделями-оценщиками:

запуск попарный оценщик HPSv3 роль
judge-led 0.60 0.30 оригинальное смешивание, остановлено на шаге 110
hps-led 0.30 0.60 промежуточный вариант, остановлен на шаге 110
hps-only 0.00 0.90 проверочный запуск, остановлен на шаге 60

Я начал с hps-only, чтобы проверить, способен ли конвейер вообще чему-либо обучиться. Когда награда начала расти, а метрики оставались здоровыми, не было смысла продолжать этот запуск дольше, поэтому я запустил два более длительных. Более длинные запуски должны были ответить на вопрос: сколько возможностей HPSv3 можно передать попарному оценщику? Чем больший вес несёт оценщик, тем больше награда означает мой вкус, а не вкус всех, и тем сложнее её наращивать. К слову, если зайти слишком далеко или если ваш стиль слишком сильно отличается от среднего, модель может полностью остановиться.

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

Отказ от ответственности. Если использовать передовую модель, она уже может генерировать JavaScript-код, рисующий акварель по запросу. Это исходная точка. Здесь речь идёт о том, чтобы научить этому меньшую модель, одновременно привнеся в неё собственные художественные предпочтения человека.

RL-среда, которую нужно создать

Среда объединяет всё, что находится между моделью и наградой, включая JavaScript-библиотеку, которую модель использует для рисования, системный запрос с ограничениями, безголовый Chromium, визуализирующий каждый эскиз, и шлюз, отбрасывающий попытки жульничать.

Библиотека делает больше, чем кажется. p5.brush, созданная @acamposuribe, имитирует медиум, а не просто рисует фигуры: пигмент выходит за края заливки, бумага имеет текстуру, мазки обладают массой, а поля потоков увлекают кисть. Когда модель вызывает brush.fillBleed(0.25), она решает, насколько далеко растечётся краска.

Примечание. Автор p5.brush пытался научить машину рисовать задолго до появления всего этого. В 2022 году он создал серию генеративного искусства, в которой спрятан дневник об обучении p5.js рисовать как ребёнок: «Она едва умеет пользоваться мелками [...] Она не может выполнить простые команды. На сегодня я закончил, это ужасно раздражает». Изначально серия должна была состоять из трёх работ, но он создал две. Когда видео Surya стало вирусным, он процитировал его, поделился этим дневником и сказал, что эта работа стала третьей частью, появившейся самостоятельно.

p5.brush предоставляет 47 методов. В запросе разрешены 10: scaleBrushes, noStroke, fill, noFill, fillBleed, fillTexture, beginShape, vertex, endShape и circle. Остальные тридцать семь — линии, штриховка, пользовательские кисти — нарушили бы акварельный вид. С этими десятью методами модель может рисовать только залитые фигуры, а библиотека добавляет растекание к каждой из них.

A generated sketch and the painting it produces
Фрагмент draw() одного из запусков и результат его визуализации. Комментарии принадлежат самой модели. Награда 0,864, 129 строк, шаг 22. Полный исходный код каждой картины находится в датасете запусков.

Его запись в блоге сэкономила мне много времени, которое я мог бы потратить на перебор вариантов запроса. Подробная справка по API заставляет модель выдумывать несуществующие методы, а его 200 итераций GEPA сошлись на строгом списке разрешённых методов без документации. Я увидел те же ошибки и составил список вручную. Моё единственное дополнение к этому рецепту — одно предложение: рисовать каждый лепесток два или три раза — сначала большой слой, затем внутри него меньший, более непрозрачный. Это небольшое изменение сделало мои результаты гораздо более красочными.

Примечание. Если вы впервые слышите о GEPA, это автоматический оптимизатор запросов. Языковая модель обычными словами анализирует, где текущий запрос не сработал, и предлагает лучший, после чего цикл повторяется.

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

Пул — это функция награды

Пул состоит из 178 картин, разделённых на два уровня в соответствии с моими личными предпочтениями: love и okay. Все они действительно сгенерированы моделью. Четыре модели с открытыми весами, вызываемые через Inference Providers, написали эскизы p5.brush, работая каждая с настоящей фотографией гибискуса под открытой лицензией с iNaturalist. Модель компьютерного зрения дала письменные отзывы по каждому эскизу после трёх итераций улучшения. Затем я оценил каждый финальный рендер отдельно, и 178 работ прошли отбор.

генератор число картин
GLM-5.2 64
Kimi-K3 57
Qwen3-Coder-Next 35
Qwen3.5-122B-A10B 22

Здесь я выбрал четыре разных семейства моделей, чтобы проверить различия в их стилях. Это были открытые модели, которые в быстрой проверке надёжности каждый раз создавали корректный эскиз; ещё два кандидата пришлось исключить из-за провала этой проверки. Если вы захотите создать собственный пул, можно выбрать другие модели.

A love reference beside an okay one
Два уровня в их реальном виде. Не соглашаться с оценкой вполне разумно: теперь чьё-то суждение стало функцией награды.

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

Человеческих картин в пуле нет, и это серьёзное ограничение. p5.brush — нишевая библиотека, а существующие в ней работы людей с доступным кодом насчитывают лишь несколько произведений — намного меньше, чем потребовалось бы для обучающего корпуса, как отмечается и в его блоге.

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

Если внимательнее посмотреть на оценщиков, они отвечают на разные вопросы. HPSv3 решает, является ли изображение цветком, а попарный оценщик — хорошо ли оно нарисовано в выбранном мной стиле.

Ещё один запуск наудачу

До того как что-либо заработало, был долгий период плоских кривых награды. Если вы пытались воспроизвести научную статью или запись в блоге без открытых артефактов, то, вероятно, понимаете это чувство. Каждый запуск проверял теорию, которая казалась мне разумным объяснением проблемы. Запуск занимает много времени, поэтому я ставил следующий в очередь, ещё разбираясь с результатами предыдущего. Как всегда, ответом стало начать с более простой работающей системы, а затем постепенно добавлять поверх неё новые компоненты. Первой обучившейся попыткой была простая контрольная задача без браузера и оценщиков; причина заключалась в том, что мой learning rate был слишком низким.

Three reward experiments flat against the run that worked
Три эксперимента с наградой — три плоские линии. Я заменил пул, убрал шум рендера и отключил попарного оценщика, но кривая не сдвинулась. В сработавшем запуске изменилась конфигурация тренера, поэтому разница заключается в тренере, а не в смешивании наград.

Ещё одно изменение, на поиск которого ушло время, — правильная настройка параметров LoRA. Обычный список target_modules предполагает плотную модель, а Qwen/Qwen3.5-35B-A3B — это смесь экспертов, которая по-другому называет большинство своих проекций, поэтому адаптер обучал десять слоёв из сорока. Я решил проблему, заменив список на all-linear, который охватывает каждый линейный слой. Маршрутизируемые эксперты в этой архитектуре являются объединёнными тензорами, которые даже all-linear оставляет замороженными, но все остальные слои получают адаптер — и этого оказалось достаточно для обучения.

Исправление состояло из четырёх изменений в TRL GRPOTrainer:

настройка было стало почему
learning rate 2e-5 5e-5 верхний предел, который используется в LoRA Without Regret для GRPO
планировщик linear constant_with_warmup при линейном уменьшении к середине запуска большая часть learning rate уже была израсходована, поэтому награда не начала расти
scale_rewards group none один отказ шлюза уменьшал каждое другое преимущество в группе
target_modules список вручную all-linear охватить каждый линейный слой

Эти четыре изменения разблокировали первый успешный запуск (hps-only), и награда явно начала улучшаться.

С этой конфигурацией обучаются все три запуска. Оба запуска с оценщиком были рассчитаны на 200 шагов, но остановлены на 110, при этом награда всё ещё медленно росла. Один шаг занимает от пятнадцати до восемнадцати минут, а сравнение вариантов уже было стабильным, поэтому я остановил оба запуска, чтобы сэкономить вычислительные ресурсы. Средняя награда группы в первой и последней трети каждого запуска:

запуск шаги первая треть последняя треть Δ
hps-only 60 0.58 0.71 +0.13
judge-led 110 0.45 0.72 +0.27
hps-led 110 0.57 0.82 +0.24
The three runs, one curve each

Три кривые соответствуют тому, насколько велик вес моего вкуса. Чем больше вес оценщика, тем ниже старт и тем шумнее подъём. judge-led провёл первые тридцать шагов почти без изменений, прежде чем сдвинуться. Это тот же приём, который помог при отладке: уменьшить задачу до тех пор, пока что-то не начнёт обучаться, а затем по одному возвращать сложные компоненты.

Сам компонент попарного оценщика вырос в двух запусках, где он использовался. По мере обучения модель выигрывает больше сравнений с пулом — утверждение, которого hps-only сделать не мог. Ни одна группа ни в одном запуске не схлопнулась в одинаковые награды — это режим отказа GRPO, уничтожающий градиент. Для интересующихся: кривые отдельных метрик (HPSv3, покрытие краской, энтропия) находятся в репозитории в формате CSV.

Полная команда запуска, оборудование и две переменные окружения, превращающие это в два других запуска, находятся в рецепте.

Чему модель действительно научилась

В каждом запуске первым делом модель научилась перестать создавать плохие картины — почти пустые холсты и бесформенные размытые пятна, которые получают общую награду ниже 0,3. В hps-only три четверти роста среднего значения группы объясняются тем, что плохие картины стали редкими. В запусках с оценщиком падение ещё круче: число результатов с наградой ниже 0,3 сокращается с 99 до 16 между первой и последней третью judge-led и с 37 до 4 в hps-led.

Median against best, per step

Вот почему очевидный визуальный показатель — лучшая картина каждого шага — почти не показывает изменений в hps-only. Он вырос всего на +0,034 за запуск, тогда как медиана выросла на +0,155. Обучение заметно в середине распределения.

Попарный оценщик меняет верхнюю часть. В hps-only картины стали надёжнее, но не лучше. Качество хороших работ добавило к среднему значению группы лишь +0,03, а когда HPSv3 увидел лепестки вокруг центра и стебель, он перестал требовать больше пигмента. При включённом оценщике появляется вторая часть истории. Лучше здесь означает ближе к пулу, то есть ближе к тому, что я оценил как «хорошее», или к тому, что понравилось мне больше. Это добавило +0,12 в judge-led и +0,16 в hps-led; лучшие картины каждого шага тоже улучшились, а покрытие краской в обоих запусках удвоилось (с 0,11 до 0,23 и с 0,13 до 0,30), тогда как в hps-only оно почти не изменилось. Когда есть эталон, который нужно превзойти, хорошая картина всё ещё может стать лучше, и модель начинает получать награду за использование большего количества пигмента.

Ещё один вывод. Модель игнорирует явную инструкцию — и правильно делает. Системный запрос требует от пятнадцати до тридцати залитых фигур. Но фактическое среднее находится между 7 и 9, а n_shapes почти не коррелирует с наградой ни в одном запуске (+0,000, −0,14, +0,07). Политика не получает награду за выполнение этой фразы, поэтому не выполняет её.

У подхода hps-only также есть потолок. Если бы каждый результат достигал уровня хороших картин, средняя награда этого запуска составила бы 0,771. Открытым остаётся вопрос, удалось бы преодолеть этот потолок за большее число шагов.

Картины также показывают то, чего не видно в таблицах. Внутри каждого запуска они выглядят похоже. По мере обучения награды внутри каждой группы сближаются, а медианные картины в начальном видео выглядят как варианты одного и того же цветка. Так GRPO делает то, для чего предназначен, при использовании пула, созданного для одного объекта. Пул определяет, что считать разнообразием, так же как он определяет, что считать качеством. Если награда платит только за сходство с одним цветком, модель учится рисовать именно этот цветок. Для более разнообразных результатов нужен более разнообразный пул, а его создание требует дополнительной работы по отбору. Новые композиции Surya — пример такого подхода. Картины животных Alex Yango используют тот же рецепт, но с другим содержимым пула. Это главное различие между эстетической наградой и проверяющей математические ответы системой. За числом стоит очень человеческая работа — решение о том, что входит в набор награды. Эссе Jason Liu о вкусе формулирует общую версию этой мысли в одной строке: ИИ перенёс узкое место с создания на способность замечать.

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

178 paintings from the two judge runs, unlabelled
178 фаворитов по награде из двух запусков с оценщиком, перемешанные. Теперь выберите свои.

Чтобы выбрать, вы просмотрели множество работ и оставили несколько — и это именно та работа, благодаря которой была создана награда этого проекта. Каждая картина каждого запуска вместе с эскизом и наградой находится в датасетах результатов, а просматривать их можно в этой галерее.

The median painting of the last step of each run
Медианная картина последнего шага каждого запуска, в том же порядке, что и в начальном видео. Одна базовая модель, один пул, три варианта награды, три стиля.

Поскольку награда частично основывалась на моём вкусе, справедливо завершить рассказ моей оценкой как зрителя. На мой взгляд, judge-led — запуск, который в итоге даёт наиболее разнообразные и художественно интересные результаты. hps-led рисует убедительные акварели, но лучшие работы объединяет мягкий, влажный по влажному вид, почти ставший самостоятельным стилем. hps-only сходится сильнее всего, и большинство его картин останавливаются на одних и тех же цветах. Вы можете судить сами в галерее, где представлены все картины всех запусков с сортировкой по шагу и награде.

Инфраструктура — это сложно

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

Сбои инфраструктуры попадали в награду как нули. Рендер, завершившийся по тайм-ауту, или оценщик, не ответивший на запрос, получал ту же оценку, что и плохая картина, — 0,0 внутри группы. Во всех моих запусках это составляло около 1,5% результатов, а в худшем запуске достигало 5,2%. Это обучает модель на шуме, поэтому теперь такие пути возвращают None, а результат исключается из группы.

Я также обнаружил ошибку в OpenEnv и отправил исправление в основной проект. Клиент поддерживает одно постоянное соединение websocket, и сокет, закрытый удалённой стороной, оставался в кэше, из-за чего каждый последующий вызов завершался ошибкой, хотя среда была исправна. Чтобы найти причину, мне пришлось потратить два незавершённых запуска. Исправление отправлено в основной проект, и запуски, выполненные с ним, с тех пор работают без сбоев.

Steps 11 and 12 of the judge-led run, best four of each
Два последовательных шага запуска judge-led, по четыре лучших результата каждого. Вам решать, выглядят ли картины шага 12 на полбалла хуже.

Награда за шаг зависит от того, какие эталоны были выбраны. Попарный оценщик выбирает четыре эталона на шаг, поэтому каждый шаг сталкивается с новым набором соперников, а некоторые наборы просто сложнее. Сам GRPO в основном защищён от этой проблемы, поскольку преимущества вычисляются внутри группы, а сложный набор двигает всю группу вместе. Однако кривая, которую я читал, такой защиты не имела, и некоторые шаги, выглядевшие плохими, на самом деле просто сравнивались со сложными эталонами. Изображение выше — один из примеров. Шаг 12 получил оценку на полбалла ниже шага 11 в основном потому, что ему достались самые сложные эталоны запуска, хотя сами картины выглядят близко.

Во что это обходится

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

компонент что требуется
тренер 1 H200. 18 часов для 60 шагов, около 34 для 110
HPSv3 Space a100-large, работающий весь запуск
среда Space cpu-upgrade, который достаточно быстро выполняет рендеринг
попарный оценщик квота Inference Providers для Qwen/Qwen3-VL-30B-A3B-Instruct
пул, разовые расходы фотографии с открытой лицензией из iNaturalist, квота Inference Providers для четырёх генераторов и ваши собственные часы на оценку

Один шаг состоит из восьми результатов и занимает от пятнадцати до восемнадцати минут, из которых 70–80% приходится на рендеринг. Один рендер занимает от 69 до 96 секунд при ограничении в 90 секунд. Частично это ожидаемо: в Space нет GPU, поэтому Chromium программно визуализирует холст WEBGL, а растекания и текстуры p5.brush требуют больших затрат на обработку пикселей. Тем не менее я ожидал большей скорости и не нашёл полной причины.

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

The infrastructure: what is billed during a run, and what outlives it
Четыре платных сервиса должны одновременно оставаться работоспособными. Только Hub и trackio переживают завершение запуска.

Всё работает на HF Jobs, среда представлена как Docker Space, а метрики собираются в trackio.

Что я попробовал бы дальше

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

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

Меньшие модели. Есть основания полагать, что 35B — больше необходимого. В моих побочных экспериментах модель на 4B уже писала корректные эскизы, проходившие шлюз. Если 4B может этому обучиться, стоимость эксперимента снизится на порядок.

Другие идеи в списке — провести SFT на источниках пула перед началом RL, явно вознаграждать использование пигмента, менять соотношение эталонов оценщика от простых к сложным по мере продвижения запуска, пока не останется только love, расширить список из десяти разрешённых методов для большего визуального диапазона (мои попытки приводили к сбою большего числа эскизов и нарушали акварельный вид), а также проверить, насколько последователен попарÐ

Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.

Впервые опубликовано изданием Hugging Face

Читать оригинал на Hugging Face ↗

Текст и изображения принадлежат Hugging Face и приводятся здесь с указанием авторства и ссылкой на оригинальную публикацию.

← К новостям

Ещё новости

Все последние новости