Скидка 5% при первом запуске GPU по промокоду Активировать скидку

Обучение SDXL LoRA на облачном GPU через sd-scripts

В этом руководстве обучается LoRA только для U-Net модели SDXL base 1.0 через sdxl_train_network.py из kohya-ss/sd-scripts. Используется CLI-trainer в отдельном окружении. У Kohya GUI свой интерфейс настройки: нельзя считать, что эти TOML-файлы автоматически соответствуют всем полям GUI.

Объект примера — керамическая кружка ohwxmug. Изображения и подписи нужно подготовить самостоятельно. Конфиги задают начальные параметры, готовой обученной модели здесь нет. Выполнена проверка исходного кода и конфигураций; обучение на GPU не проводилось.

1. Подготовьте сервер

Выберите NVIDIA GPU с SSH-доступом в каталоге предложений. Проверьте VRAM, RAM и место на диске. Команды рассчитаны на Linux, доступную для записи папку /workspace, Git, Python 3.11 с поддержкой venv и работающий NVIDIA driver, совместимый с CUDA 12.8. Они не устанавливают драйвер и не требуют Docker внутри арендованного контейнера.

Для длительной работы используйте постоянную терминальную сессию, например tmux, если он установлен. Иначе разрыв SSH может прервать процесс. tmux не переживает удаление инстанса. Остановка Python сама по себе также не завершает платную аренду GPU.

2. Установите общий trainer для SDXL и FLUX

Используйте новую папку, не устанавливайте зависимости поверх ComfyUI. Версия исходного кода и пара пакетов PyTorch закреплены. Часть upstream-зависимостей не закреплена, поэтому сохраните environment.txt: это воспроизводимый по исходникам рецепт установки, но не полностью зафиксированный образ контейнера. То же окружение используется в руководстве FLUX.1; после этого раздела можно перейти к нему.

set -euo pipefail
nvidia-smi
python3.11 --version
mkdir -p /workspace/lora/config /workspace/lora/models
cd /workspace/lora
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
git checkout 690ea7f96c23182352ec63def76d431c6120bd2f
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
python -m pip install -r requirements.txt
python -m pip check
python -c "import torch; assert torch.cuda.is_available(), 'CUDA unavailable'; assert torch.cuda.is_bf16_supported(), 'bf16 unavailable'; print(torch.__version__, torch.version.cuda, torch.cuda.get_device_name(0))"
python -m pip freeze > /workspace/lora/config/environment.txt

Если проверка CUDA или bf16 не проходит, сначала исправьте окружение, затем скачивайте большие модели. Wheel включает CUDA runtime, но драйвер хоста должен его поддерживать. Одного названия видеокарты недостаточно. В новой сессии снова активируйте /workspace/lora/sd-scripts/.venv.

3. Скачайте базу и подготовьте данные

Используйте официальный чекпоинт SDXL base 1.0. Для него действуют условия Open RAIL++; это не MIT-лицензия. Рецепт не использует refiner или RealVisXL из существующего пресета ComfyUI.

set -euo pipefail
hf download stabilityai/stable-diffusion-xl-base-1.0 sd_xl_base_1.0.safetensors \
  --local-dir /workspace/lora/models
sha256sum /workspace/lora/models/sd_xl_base_1.0.safetensors \
  > /workspace/lora/config/sdxl-model.sha256
mkdir -p /workspace/lora/sdxl/images /workspace/lora/sdxl/holdout

Скопируйте пары изображение–UTF-8-подпись в /workspace/lora/sdxl/images. Проверочные референсы держите в holdout, которая не входит в обучающий набор. Перед запуском пройдите руководства по датасету и подписям.

4. Сохраните конфигурации

Скачайте файлы на свой компьютер и перенесите их через SSH-клиент передачи файлов в /workspace/lora/config/ на GPU-инстансе. Файлы должны лежать на сервере, а не только в папке загрузок браузера:

Прочитайте конфиги до запуска. Измените абсолютные пути, если у вас другой workspace. output_name обозначает эксперимент; trigger word берётся из подписей, а не из имени выходного файла.

Настройка Значение в примере Назначение
Разрешение / batch 1024 × 1024 / 1 Bucketing включён, апскейл исходников выключен
Адаптер Rank 16, alpha 16 Только U-Net; текстовые энкодеры заморожены
Learning rate 0.0001 Начальное экспериментальное значение
Шаги / accumulation 1 000 / 4 Шаги оптимизатора; эффективный batch примерно четыре изображения на одной GPU
Управление памятью bf16, SDPA, gradient checkpointing, кэши Снижение части расходов памяти без гарантированного потолка VRAM
Сохранение Каждые 200 шагов и в конце Адаптер и отдельное состояние для продолжения обучения

VAE работает в float32 благодаря no_half_vae. Dropout и перемешивание подписей, а также аугментации изображений отключены для согласованности кэшей. Подробнее — в настройках обучения.

set -euo pipefail
cd /workspace/lora/sd-scripts
source .venv/bin/activate
python /workspace/lora/config/check-dataset.py /workspace/lora/sdxl/images
python sdxl_train_network.py --help > /workspace/lora/config/sdxl-help.txt

Проверка датасета не запускает обучение. --help подтверждает, что trainer импортируется, но не проверяет, поместится ли модель в GPU.

5. Сначала выполните пять шагов

Запускайте после просмотра датасета. Это настоящая работа на GPU, включая загрузку моделей и кэширование набора. Пять шагов оптимизатора не ограничивают длительность подготовки и счёт. Проверка папки защищает от повторного использования результатов прежнего smoke test; для повтора задайте новый путь.

set -euo pipefail
cd /workspace/lora/sd-scripts
source .venv/bin/activate
test ! -e /workspace/lora/sdxl/smoke-output
CUDA_VISIBLE_DEVICES=0 accelerate launch \
  --num_processes 1 --num_machines 1 --mixed_precision bf16 --dynamo_backend no \
  --num_cpu_threads_per_process 2 sdxl_train_network.py \
  --config_file /workspace/lora/config/sdxl-train.toml \
  --max_train_steps 5 --save_every_n_steps 5 \
  --output_dir /workspace/lora/sdxl/smoke-output --output_name smoke-sdxl \
  2>&1 | tee /workspace/lora/sdxl/smoke.log
test -s /workspace/lora/sdxl/smoke-output/smoke-sdxl.safetensors

Успех означает завершение без ошибки и появление непустого файла адаптера. Проверьте в логе количество изображений, путь базы, обучаемую сеть и конечные значения loss. Сам факт сохранения файла ещё не означает, что адаптер научился чему-то полезному.

6. Запустите первый эксперимент

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

set -euo pipefail
cd /workspace/lora/sd-scripts
source .venv/bin/activate
test ! -e /workspace/lora/sdxl/output-v1
CUDA_VISIBLE_DEVICES=0 accelerate launch \
  --num_processes 1 --num_machines 1 --mixed_precision bf16 --dynamo_backend no \
  --num_cpu_threads_per_process 2 sdxl_train_network.py \
  --config_file /workspace/lora/config/sdxl-train.toml \
  2>&1 | tee /workspace/lora/sdxl/train-v1.log
test -s /workspace/lora/sdxl/output-v1/mug-sdxl-v1.safetensors

pipefail сохраняет ошибочный статус trainer, даже когда вывод одновременно записывается через tee. Автоматического повтора нет. При сбое найдите последнюю содержательную ошибку в логе и откройте руководство по диагностике.

7. Сравните, скачайте и завершите аренду

Промежуточные адаптеры получают имена вроде mug-sdxl-v1-step00000200.safetensors, итоговый — mug-sdxl-v1.safetensors. Папка с окончанием -state содержит состояние обучения; в ComfyUI загружается не она.

Используйте таблицу оценки, затем подключите выбранный адаптер с той же SDXL base через готовый ComfyUI workflow. Другая SDXL-модель, например RealVisXL, может дать иной результат: проверяйте это как отдельный эксперимент inference.

Скачайте адаптер, конфиги, логи, контрольную сумму базы и нужную папку состояния. Проверьте локальные копии перед завершением инстанса через его элементы управления. Единственная копия на арендованном диске не является резервной.

Источники: обучение SDXL в закреплённой версии, установка trainer, совместимые версии PyTorch. Все руководства по LoRA.

Готовы запустить?

Запустить GPU-сервер