После долгих 8 часов ожидания обучение наконец завершено.

Каковы же результаты тонкой настройки модели FLUX 1-dev 12B на DGX Spark (на базе ARM) при использовании всего 90W низкого потребления?

Сегодня мы сравним результаты LoRA адаптеров, созданных на 250, 500, 750 и 1000 шагах, и я расскажу о 'медовом месте (Honey Spot)', которое я обнаружил.


1. Условия и окружение тестирования



  • Базовая модель: FLUX 1-dev (12B)

  • Датасет: 40 реалистичных изображений людей (1024x1024)

  • Сэмплер: dpmpp_2m, euler

  • Оборудование: DGX Spark (120GB Unified Memory)

  • LoRA контрольные точки: 250, 500, 750, 1000 шаг

2. Сравнение результатов по шагам (Битва шагов)

Мы генерировали реалистичные изображения с людьми и тестировали их целостность.

🥉 Шаг 250: "Кто ты...?" (Недообучение)

  • Результат: Атмосфера похожа на обучаемую, но если спросить: "Это один и тот же человек?", можно увидеть сомнение. Не хватает тонких деталей в чертах лица.

  • Скорость: Генерация была самой быстрой (менее 100 секунд), но качество оставляло желать лучшего.

  • Диагноз: Недообучение. Модель еще не в состоянии полностью усвоить особенности данных.

🥈 Шаг 500: "О! Это ты!" (Хорошая подгонка)

  • Результат: Этот человек легко узнаваем. Наконец, почувствовал, что LoRA работает правильно.

  • Особенность: Иногда, когда меняешь выражение, может показаться, что это уже другой человек, но в целом целостность изображения впечатляет.

  • Диагноз: Вход в оптимальный диапазон обучения. На основе 40 изображений, с этой точки можно считать использование целесообразным.

🥇 Шаг 750: "Эстетика стабильности" (Стабильно)

  • Результат: Разница с 500 шагом небольшая, но ощущается большая стабильность. Характеристики человека хорошо сохраняются в различных позах.

  • Диагноз: Это продолжение 500 шага, и если говорить строго, то ощущение 'вызревания'.

🏅 Шаг 1000: "Совершенно, но... слишком идеально" (Риск переобучения)

  • Результат: Целостность 100%. Даже слямзить тест не составляет труда, так как выглядит очень естественно.

  • Проблема: Если попросить о 'сердитом выражении' или 'сексуальном выражении', целостность изображения разрушается.

  • Диагноз: Граница переобучения. Модель слишком восприняла обучающие данные ("это выражение этого человека"), и способность к обобщению начинает ухудшаться.

3. Технические загадки и анализ



Во время тестирования я обнаружил две интересные (или, возможно, смущающие) технические проблемы.

1) LoRA файлы по 5 ГБ?

Все 4 сгенерированных файла LoRA имели одинаковый размер 5 ГБ. Обычно, LoRA адаптеры должны быть в пределах десятков МБ до сотен МБ.

Анализ:

Сначала я сомневался: “Состояние оптимизатора или текстового кодировщика сохранено вместе?” Однако,
если применить LoRA ранга 256 ко всем слоям для модели масштаба FLUX 12B, количество параметров LoRA может достигать нескольких ГБ.
Таким образом, если применять чисто интуитивное представление ‘LoRA составляет десятки~сотни МБ’ на стандарте SD1.5, то это было бы неверным,
для крупных моделей ранжирование и диапазон LoRA напрямую коррелируют с объемом, что стало очевидным.
В следующий раз я планирую снизить network_dim до 64~128, чтобы пересмотреть баланс между объемом и производительностью.

2) Увеличение времени генерации (97~130 секунд)

Время генерации увеличилось по сравнению с до применения LoRA.

Анализ:

  1. Структурная причина: LoRA добавляет обученные веса ($B \times A$) к базовым весам ($W$), что увеличивает объем расчетов.

  2. Узкое место: По проекту учебного скрипта T5XXL текстовый кодировщик имеет структуру кэширования и передачи на CPU, поэтому,
    я подозреваю, что в инференсном пайплайне могла возникнуть похожая проблема с циклом CPU↔GPU.
    Но поскольку я еще не проверил это на уровне кода, в следующем эксперименте

  3. я собираюсь принудительно разместить все TE в CUDA

  4. и изменить стратегию кэширования,
    чтобы сравнить, как генерация времени и качество меняются.

4. Заключение: Поиск 'медового места (Honey Spot)'

Выводы, сделанные в результате этого 8-часового путешествия, ясны. "Просто много обучать - не всегда хорошо."

  1. Оптимальный диапазон: На основе 40 изображений, между 400~600 шагами выглядит как медовое место, которое сочетает в себе 'стоимость' и 'качество'. 1000 шагов - это пустая трата времени и может снизить гибкость.

  2. Значение данных: Если обучать только специфическое выражение, получится 'выраженческий робот'. При формировании датасета необходимо учитывать разнообразные углы и выражения, что гораздо важнее, чем увеличение количества шагов.

  3. Потенциал DGX Spark: Хотя это заняло 8 часов и были проблемы с установкой, сам факт, что можно тонко настраивать модель 12B с потреблением 90W, вдохновляет.

Конечно, это медовое место (400~600 шагов) создано в рамках довольно специфических условий:
"40 изображений / FLUX 1-dev / Эта LoRA настройка".
Тем не менее, опираясь на этот опыт,

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

5. Следующий шаг

Цель следующего эксперимента стала яснее.

  • Оптимизация: Принудительное назначение всех текстовых кодировщиков (TE) в CUDA, рассмотреть, является ли это намерением проектирования скрипта FLUX LoRA (сокращение использования VRAM за счет передачи больших T5XXL на CPU).

  • Диета LoRA: Сравнить объем/качество/целостность, когда network_dim понижен с 256 до 128 и 64.

  • Точный прицел: Не доходя до 1000 шагов, детально разбить диапазон 400~600 шагов (Сохранить каждые 50 шагов), чтобы найти лучший модель.

  • Внедрение заголовков в обучающий датасет:

    • Сравнить 40 одинаковых изображений, добавление заголовков против отсутствия
    • Анализировать с точки зрения “разнообразие выражений/поз против переобучения”.

Исследования в области низкопотребляющего высокоэффективного ИИ продолжаются. В следующем посте я вернусь с успешной диетой LoRA!