Как я учил нейросеть рисовать: история о 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-инженер хотя бы раз, чтобы научиться проверять код сохранения весов с параноидальной дотошностью. А история про галочку, крашащую обучение — напоминание, что даже символ может стать точкой отказа. Жду продолжения.
Комментарии