Ошибки обучения LoRA: OOM, NaN loss и слабый результат
Начните с этапа сбоя. Ошибка скачивания модели, CUDA out of memory и визуально слабый адаптер требуют разных действий. Сохраните исходные лог и конфиг до изменений: повтор того же запуска может потратить аренду, не добавив полезной информации.
Окружение и загрузка модели
| Симптом | Что проверить первым | Следующее действие |
|---|---|---|
torch.cuda.is_available() возвращает false |
Активный venv, видимость GPU, драйвер и wheel | Исправить CUDA до обучения; рецепт здесь специально останавливается |
| Не проходит проверка bf16 | Поддержка железом и runtime | Подготовить отдельную проверенную конфигурацию точности, а не просто убрать проверку |
| 401/403 при загрузке FLUX | Доступ аккаунта, принятые условия, права токена | Получить разрешённый доступ; не подставлять случайное зеркало или чекпоинт |
| Модель не найдена или tensor shape mismatch | Семейство и ожидаемые компоненты | Использовать нужную SDXL base или файлы FLUX.1 dev |
Killed без traceback |
RAM хоста и лимиты контейнера, затем диск | Проверить диагностику хоста/контейнера; offload мог исчерпать RAM |
| Ошибка импорта или зависимостей | Окружение и pip check |
Сверить установку с закреплённым рецептом и списком пакетов |
Не устанавливайте зависимости обучения в venv ComfyUI. Раздельные окружения позволяют обновлять trainer без скрытого изменения inference.
Датасет и кэш
Запустите проверку датасета для конкретного image_dir из TOML. Наличие изображений в другой папке не исправляет этот путь.
- Ноль обучающих изображений: неверный путь, неподдерживаемые имена или вложенные каталоги. Используйте плоскую структуру из руководства по данным.
- Не найдены подписи: не совпадает имя или регистр, у
.txtпоявилось лишнее расширение либо файл не читается как UTF-8. Не соглашайтесь случайно на запасные class labels. - Неожиданное количество изображений: в папку попали дубликаты или файлы другого эксперимента. Проверьте сводку до первого обновления оптимизатора.
- Assertion при кэшировании текста: пример требует замороженных энкодеров и фиксированных подписей. Shuffle/dropout с этим режимом конфликтуют.
- Подписи изменились, результат — нет: могли использоваться старые embeddings. Создайте свежую копию из оригинальных пар и пересчитайте кэш, сохранив прежний запуск.
Smoke test тоже строит кэш, поэтому его первый этап может занимать гораздо больше пяти обновлений. Отсутствие новых строк в логе само по себе не означает зависание: проверьте активность процесса и текущую операцию.
CUDA out of memory
Определите, когда возникает OOM: загрузка, кэширование, обучение или оценка. Сначала оставьте batch 1. Закройте свои конкурирующие GPU-процессы, попробуйте меньшее разрешение отдельным экспериментом, сохраните gradient checkpointing. Для FLUX проверьте FP8 и swapping вместе с RAM хоста.
Увеличение gradient accumulation не уменьшает память одного слишком большого микробатча. Снижение только max_train_steps сокращает длительность, но обычно не помогает вместить первый шаг. После выяснения этапа сбоя GPU с большей памятью может оказаться правильным решением.
Не запускайте ComfyUI и обучение одновременно на карте с ограниченной памятью. Оценивайте после обучения либо на другом осознанно выбранном инстансе. Подробнее — в подборе GPU.
NaN loss, чёрные изображения и нестабильное обучение
Остановите запуск с нечисловым или бесконечным loss. Проверьте декодирование изображений, актуальность кэша, базу и точность. В примере SDXL VAE работает в float32; посторонний fp16-рецепт может вести себя иначе. После исключения ошибок данных и окружения попробуйте меньший learning rate с новой папкой результатов.
Чёрная картинка при inference не обязательно означает NaN при обучении: причиной могут быть неверный VAE, несовместимый workflow или неисправная базовая установка. Сгенерируйте изображение без адаптера на той же базе, чтобы разделить причины.
Сохранение и прерывания
При переполнении диска или ошибке прав проверьте свободное место и output path. Диск расходуют адаптеры, состояние оптимизатора, кэши и Python-пакеты. Не удаляйте единственную копию датасета или последний полный чекпоинт ради свободного места.
В копируемых командах используется set -euo pipefail: ошибка trainer остаётся ошибкой команды даже при записи вывода через tee. Цикла повторов нет. Неудачная запись может оставить частичный файл, поэтому его наличие не доказывает успех. Используйте предыдущий полный адаптер/состояние и объяснение чекпоинтов.
LoRA загружается, но результат неверный
Проверьте семейство базы, реально выбранный файл, trigger word, силу и подключение модели к sampler. Посмотрите серверный лог на несовпавшие ключи LoRA. Успешный render может использовать лишь часть нужных весов или вообще не применять их.
Если всё верно, сравните ранние чекпоинты и базу без адаптера. Постоянное повторение фона датасета указывает на проблемы данных или обобщения. Отсутствие эффекта может быть слабым обучением либо неудачным проверочным промптом. До увеличения rank или оплаты нового длинного запуска используйте фиксированные промпты оценки.
Перед повтором запишите, что изменилось и какой результат подтвердит исправление. Сохраните работу и завершите аренду, когда закончите: исключение или закрытый терминал не дают платформе команду прекратить списания. SDXL · FLUX · Все руководства.
Готовы запустить?
Запустить GPU-сервер