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
Навчання моделі коду малювати аквареллю

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 описує шлях, який привів його сюди. Спочатку він створював підказки для моделей перетворення тексту на зображення, де підказка є єдиним важелем, який можна потягнути, а додаткові деталі дають більше контролю лише до певної межі. Навчання самої моделі дозволяє піти далі. Інша половина ідеї — медіум. Модель пише програму приблизно зі 150 рядків JavaScript, яка малює зображення. Результат моделі — це код. Його можна прочитати, відредагувати й запустити знову, а рішення за кожним мазком пензля стає видимим. Стиль виникає з обмеження: моделі дозволено лише десять методів бібліотеки. Про це — далі.

У той самий період Anna Ridler сфотографувала тисячі тюльпанів, вручну позначила кожен із них, виставила сам датасет як витвір мистецтва, а згодом навчила на ньому модель. Я знайшов її роботу завдяки посиланням, які повертали AI-агенти під час створення цього проєкту, і вона мені сподобалася, бо цей проєкт робить щось дуже подібне: вручну добирає набір зображень, а потім навчається на ньому.

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. Попарний оцінювач бачить картину-кандидата поруч із чотирма еталонами, випадково вибраними з пулу, і отримує письмовий опис того, на що звертати увагу (патьоки, напівпрозорі заливки, м’які краї). Кожне порівняння виконується в обох порядках показу, а його оцінка — це частка порівнянь, які кандидат виграв. Його єдиний стандарт — пул, тож його оцінка є моїм смаком, закодованим у цих рейтингах.

Конвеєр винагороди, компонент за компонентом
Два з чотирьох складників функції винагороди є моделями. Обидві моделі є замінниками чиїхось смакових уподобань.

Це ваги, на яких зупинився 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. Решта тридцяти семи — лінії, штрихування, власні пензлі — зруйнували б акварельний вигляд. Із цими десятьма методами модель може малювати лише заповнені фігури, а бібліотека додає до кожної з них розтікання.

Згенерований ескіз і картина, яку він створює
Частина 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

Тут я вибрав чотири різні сімейства моделей, щоб перевірити відмінності в їхніх стилях. Це були відкриті моделі, які під час швидкої перевірки надійності щоразу створювали дійсний ескіз; ще двох кандидатів відкинули через невдалу перевірку. Якщо ви хочете створити власний пул, можете вибрати інші моделі.

Еталон із категорії «подобається» поруч із еталоном «прийнятно»
Два рівні такими, якими вони є насправді. Не погодитися з оцінкою цілком нормально: чиєсь судження тепер є функцією винагороди.

Рівні відіграють реальну роль у винагороді. Коли попарний оцінювач вибирає чотири еталони, половина походить із love, а половина — з okay, тож політика завжди зустрічається з суперниками, яких іноді може перемогти, а перемога приносить однакову винагороду проти обох рівнів. Це одна з небагатьох моїх свідомих змін: оригінал порівнює лише з найвищим рівнем, а я залишив легший рівень у вибірці, щоб слабка рання політика все одно отримувала сигнал.

Жодної картини, створеної людиною, там немає, і це реальне обмеження. p5.brush — нішова бібліотека, а наявних у ній людських робіт із доступним кодом — лише жменька, зовсім недостатня для навчального корпусу, як також зазначає його блог.

Цікава ідея тут, як я вже обговорював раніше, полягає в тому, що модель навчиться імітувати те, що містить пул. Якщо спрямувати середовище на інший датасет, винагорода автоматично зміниться без жодної зміни рядка коду. Для датасету, який я згенерував і відкрито поширюю, я також додаю вихідний ескіз.

Якщо придивитися до оцінювачів, вони відповідають на різні питання. HPSv3 визначає, чи це квітка, а попарний оцінювач — чи добре вона намальована в обраному мною стилі.

Ще один-єдиний yolo-запуск

До того як щось запрацювало, був довгий період пласких кривих винагороди. Якщо ви намагалися відтворити наукову статтю чи публікацію в блозі без відкритих артефактів, мабуть, вам це знайомо. Кожен запуск перевіряв теорію, яка здавалася мені розумною відповіддю на питання, що не так. Запуск займає багато часу, тому я ставив у чергу наступний, ще опрацьовуючи результати попереднього. Як завжди, відповіддю стало почати з простішого робочого варіанта, а потім будувати поверх нього. Просте контрольне завдання без браузера та оцінювачів стало першою спробою, яка навчилася, і причина була в тому, що моя швидкість навчання була надто низькою.

Три експерименти з винагородою, пласкі порівняно з робочим запуском
Три експерименти з винагородою, три пласкі лінії. Я замінив пул, прибрав шум рендерера й вимкнув попарний оцінювач, але крива не зрушила. У запуску, який зрушив із місця, було змінено конфігурацію тренера, тож різниця полягає в тренері, а не в суміші винагород.

Ще одна зміна, на пошук якої пішов час, — правильне налаштування параметрів LoRA. Звичайний список target_modules передбачає щільну модель, а Qwen/Qwen3.5-35B-A3B є сумішшю експертів, яка називає більшість своїх проєкцій інакше, тож адаптер навчав лише десять шарів із сорока. Я розв’язав це, змінивши список на all-linear, який охоплює кожен лінійний шар. Маршрутизовані експерти в цій архітектурі є об’єднаними тензорами, які навіть all-linear залишає замороженими, але всі інші шари отримують адаптер — цього виявилося достатньо для навчання.

Виправлення складалося з чотирьох змін у GRPOTrainer бібліотеки TRL:

налаштування було стало чому
швидкість навчання 2e-5 5e-5 верхня межа, яку використовує LoRA Without Regret для GRPO
планувальник linear constant_with_warmup лінійне спадання використало більшу частину швидкості навчання до середини запуску, тож винагорода не почала зростати
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
Три запуски, по одній кривій на кожен

Три криві відповідають тому, наскільки вагомим є мій смак. Що більше важить оцінювач, то нижчий старт і шумніше зростання. judge-led провів свої перші тридцять кроків майже без змін, перш ніж рушити. Це той самий прийом, який допоміг під час налагодження. Зменшіть проблему до розміру, за якого щось навчається, а потім додавайте складні частини по одній.

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

Повна команда запуску, обладнання та дві змінні середовища, які перетворюють цей запуск на два інші, наведені в рецепті.

Чого вона насправді навчилася

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

Медіана проти найкращого результату на кожному кроці

Саме тому очевидний візуальний показник — найкраща картина на кожному кроці — майже не демонструє різниці в 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 картин із двох запусків з оцінювачем без підписів
178 улюблених картин за версією винагороди з двох запусків з оцінювачем, перемішані. Тепер виберіть свої.

Щоб зробити вибір, ви переглянули багато робіт і залишили кілька — саме такою є робота, що створила винагороду цього проєкту. Кожна картина кожного запуску, з її ескізом і винагородою, є в датасетах розгортань, а переглянути їх можна в цій галереї.

Медіанна картина останнього кроку кожного запуску
Медіанна картина останнього кроку кожного запуску в тому самому порядку, що й у вступному відео. Та сама базова модель, той самий пул, три суміші винагород, три стилі.

Оскільки винагорода частково ґрунтувалася на моєму смаку, буде чесно завершити моїм вердиктом як глядача. На мій погляд, judge-led — це запуск, який зрештою стає найрізноманітнішим і найцікавішим з художнього погляду. hps-led створює переконливі акварелі, але його найкращі роботи мають спільний м’який вигляд «мокре по мокрому», який майже перетворюється на окремий стиль. hps-only сходиться найсильніше, і більшість його картин зупиняється на тих самих кольорах. Ви можете оцінити це самостійно в галереї, де кожну картину кожного запуску можна сортувати за кроком і винагородою.

Інфраструктура — це складно

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

Збої інфраструктури потрапляли у винагороду як нулі. Рендер, який завершувався тайм-аутом, або оцінювач, який не відповідав, отримували таку саму оцінку, як погана картина, — 0,0 усередині групи. У всіх моїх запусках це становило близько 1,5% розгортань, а в найгіршому запуску сягало 5,2%. Це навчає модель на шумі, тому тепер такі шляхи повертають None, а розгортання виключається з групи.

Я також знайшов помилку в OpenEnv і надіслав виправлення до основного проєкту. Клієнт підтримує одне постійне websocket-з’єднання, а сокет, закритий віддаленою стороною, залишався в кеші, тож кожен наступний виклик завершувався помилкою, хоча середовище було працездатним. Щоб знайти це, мені знадобилося два наполовину завершені запуски. Виправлення надіслано до основного проєкту, і запуски, виконані з ним, відтоді працюють без помилок.

Кроки 11 і 12 запуску judge-led, чотири найкращі результати кожного
Два послідовні кроки запуску 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 або встановіть таймер засинання.

Інфраструктура: що оплачується під час запуску, а що переживає його завершення
Чотири платні сервіси мають одночасно залишатися працездатними. Лише Hub і trackio переживають завершення запуску.

Усе працює на HF Jobs, із середовищем як Docker Space і метриками в trackio.

Що я спробував би далі

Правилом цього проєкту було відтворити рецепт, відкривши всі ресурси, а не покращити його, тому в процесі накопичився список неперевірених ідей. Ось ті, які я справді спробував би, у порядку кількості наявних доказів.

Кілька кроків і можливість для моделі бачити те, що вона малює. Це перше, що я спробував би. Оригінальний блог навчає модель в один хід, тож я теж навчав в один хід, і в цій конфігурації модель малює із заплющеними очима. На вхід ніколи не подається зображення, а єдиний відгук, який вона отримує, — одне число. Доказом того, що цикл зворотного зв’язку працює, є сам пул. Еталонні картини походять від моделей, які виконували три ітерації під керівництвом критика комп’ютерного зору, і пізніші раунди були кращими. Матеріал, що визначає винагороду, створено за допомогою циклу, якого політика не отримує.

Менші моделі. Є докази, що 35B — це більше, ніж потрібно. У моїх побічних експериментах модель 4B уже писала дійсні ескізи, які проходили шлюз. Якщо 4B може цьому навчитися, вартість експерименту зменшиться на порядок.

Інші ідеї у списку — SFT на джерелах пулу перед початком RL, явне заохочення пігменту, зміна суміші еталонів оцінювача від простих до складних у міру просування запуску, доки не залишиться лише love, розширення списку з десяти дозволених методів для більшого візуального діапазону (мої спроби призводили до помилок у більшій кількості ескізів і руйнували акварельний вигляд), а також перевірка того, наскільки послідовним насправді є попарний оцінювач, шляхом оцінювання того самого зображення двічі.

І цей метод не обмежується квітами. Alex Yango малював тварин за тим самим механізмом, а Brendan Hogan навчав анімації на полотні на пулі вручну оцінених кліпів. Раніше я також експериментував із чимось подібним, використовуючи бенчмарк пелікана Simon Willison, де код рендериться в зображення й оцінюється.

А під усім цим лежить питання, на яке цей проєкт не може дати остаточної відповіді. 178 картин, створених моделями, визнача

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

Вперше опубліковано виданням Hugging Face

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

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

← До новин

Ще новини

Усі останні новини