исследования 1 мин

Как я учил нейросеть рисовать: история о 92 000 потерянных шагах и модели, которая умела рисовать только снег

Энтузиаст тренирует диффузионную модель изображений на одной RTX 5090, сталкиваясь с абсурдными багами: модель, рисующая только снег, случайный откат на 92 000 шагов из-за двух строк кода, крах из-за символа галочки в логах. Модель научилась генерировать простые объекты, но большинство проблем были не в AI, а в собственном коде.

Это редкий честный рассказ о том, как выглядит реальная работа с генеративными моделями за пределами корпоративных лабораторий — с одной видеокартой, малым датасетом и горой неожиданных багов. Полезно всем, кто хочет понять, что обучение моделей — это 20% ML и 80% отладки собственного кода.

Дневник энтузиаста: как я учил нейросеть рисовать

Энтузиаст под ником Creative-Listen-6847 продолжает свой эксперимент по обучению диффузионной модели изображений с нуля на единственной RTX 5090. После создания собственного VAE (который сжимает и восстанавливает изображения) он перешёл к главному — генератору, превращающему текст в картинки.

Модель, которая рисовала только снег

Первая версия модели обрабатывала текстовые описания как размытое резюме вместо отдельных слов. Loss падал, потом застревал намертво. Результат: «Заснеженная гора» выглядела правдоподобно, но портрет превращался в растекающееся лицо, а пума — в серую кашу. Модель решила, что «расплывчатая текстурированная клякса» — универсальный безопасный ответ.

Баг на 92 000 шагов

Самый болезненный эпизод: из-за ошибки копипаста функция сохранения промежуточных результатов каждые 1000 шагов откатывала модель к старой резервной копии. 92 000 шагов обучения были выброшены — модель сама себя обнуляла по таймеру. Автор несколько дней изучал странный график loss, думая о глубоких проблемах обучения, пока не нашёл две неправильные строки кода.

Вторая попытка: новая архитектура, новые беды

Перестроенная модель начала правильно читать описания слово за словом. Переход на больший датасет (37k → значительно больше пар изображение-текст) вскрыл проблемы масштабирования:

  • Краш на первом батче: загрузчик данных пытался открыть все 71 файл датасета одновременно
  • Сборка датасета съела всю память и оставила 47 ГБ битых файлов
  • Один символ галочки в строке логов обрушил весь процесс обучения
  • Отсутствующий обратный слэш в пути блокировал запуск целый вечер

Работает ли это?

Да. «Красное платье» дало красное платье. «Белый кот» — правильно очерченное белое пятно. «Красный спорткар» сначала превратился в банку (модель услышала «car», нарисовала jar), но позже стал настоящей машиной. Клубника упорно оставалась неправильного цвета.

Странность: Loss практически не двигался, пока изображения явно улучшались. Для этого типа обучения Loss — плохой индикатор качества.

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

Главный вывод: модель никогда не была сложной частью. Сложным был собственный код.

Ключевые выводы

  • Обучение генеративных моделей на потребительском железе реально (одна RTX 5090), но требует тщательной оптимизации на каждом этапе
  • Большинство проблем возникает не из-за архитектуры модели, а из-за инфраструктурного кода: загрузки данных, сохранения чекпоинтов, логирования
  • Loss в диффузионных моделях — ненадёжный индикатор качества: модель может улучшаться визуально при стагнирующем Loss
  • Ошибки масштабирования проявляются внезапно: код, работающий на малых данных, рушится при увеличении объёма
  • Простые баги (копипаст, символ в логах, слэш в пути) могут стоить десятков тысяч шагов обучения и дней времени

Автор: Ксения Лаврова · Источник: reddit.com

Мнение редакции

**Это один из самых честных дневников ML-экспериментов, что я видел.** Автор не строит из себя гуру, не продаёт курсы — просто делится болью и радостью обучения модели на одной видеокарте. И знаете что? Это куда полезнее, чем очередной туториал от OpenAI.

Особенно ценно то, что он высвечивает: проблема не в сложности нейросетей, а в инфраструктурном коде вокруг них. Загрузчик данных, чекпоинты, логи — вот где прячутся настоящие монстры. Баг с откатом на 92 000 шагов — это боль, которую должен пережить каждый ML-инженер хотя бы раз, чтобы научиться проверять код сохранения весов с параноидальной дотошностью. А история про галочку, крашащую обучение — напоминание, что даже символ может стать точкой отказа. Жду продолжения.

Ещё по теме

Комментарии