Обучите свою собственную модель FLUX LoRA с поддержкой LOW VRAM 12GB/16GB/20GB на Windows 10
#135 вторник, 26 ноября 2024 г. среда, 27 ноября 2024 г. 15 минут(ы) 1446 слов
Этот гайд поможет вам установить fluxgym на Windows, а также обучить свою собственную модель FLUX LoRA с поддержкой LOW VRAM 12GB/16GB/20GB на Windows 10.
Важно: Этот гайд предполагает, что у вас уже установлен Git и Python 3.10.6(или новее, но не более 3.11). Если нет, установите их перед тем, как продолжить.
https://git-scm.com/download/win Git-2.45.2-64-bit.exe
https://www.python.org/ftp/python/3.10.6/ python-3.10.6-amd64.exe
Примечание о версии Python: В настоящее время PyTorch под Windows поддерживает только Python 3.8-3.11; Python 2.x не поддерживается.
Дополнительно: Если при обучении fluxgym будет выдавать ошибки CUDA, установите себе поддержку CUDA под Windows 10 для Python и C++:
Полные инструкции по установке поддержки CUDA в Windows 10
Шаг 1: Установка fluxgym
1. Откройте командную строку (cmd.exe).
2. Перейдите в корень диска C:
, если вы, например, решили установить fluxgym в c:\fluxgym
:
cd c:\
3. Клонируйте репозиторий fluxgym с помощью Git:
git clone https://github.com/cocktailpeanut/fluxgym.git
4. Перейдите в каталог C:\fluxgym
с помощью команды:
cd fluxgym
5. Затем установите KohyaSS с помощью команды, приведенной ниже:
git clone -b sd3 https://github.com/kohya-ss/sd-scripts
6. Теперь создайте и активируйте виртуальную среду из корневой папки fluxgym:
python -m venv env
env\Scripts\activate
7. Далее нужно перейти в папку «sd-scripts» и установить необходимые библиотеки:
cd sd-scripts
pip install -r requirements.txt
8. Теперь вернитесь в корневую папку и установите зависимости:
cd ..
pip install -r requirements.txt
9. Наконец, установите библиотеку pytorch Nightly:
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
10. Загрузка моделей:
Автоматическая загрузка:
Теперь возможна автоматическая загрузка весов моделей Flux, Clip Encoders, VAE. Этот процесс способен загружать веса любых моделей в фоновом режиме. Все модели Flux по умолчанию уже настроены. При начальном процессе обучения модели загружаются в бэкенд.
Если вам нужна любая другая модель, достаточно указать соответствующие детали в файле fluxgym/models.yaml
. Просто следуйте формату по умолчанию, указанному в файле.
Ручная загрузка:
Выберите этот метод, если вы хотите настроить все вручную и не хотите ждать, пока модели загрузятся в фоновом режиме во время тренировки.
- Загрузить соответствующие текстовые кодировщики, которые помогут обучить вашу Flux LoRA, после загрузки просто поместите их в папку
fluxgym/models/clip
:- Flux text encoder Clip_L: clip_l.safetensors
- Flux text encoder T5XXL_fp16: t5xxl_fp16.safetensors
- Скачайте VAE (Variational Auto Encoder) и сохраните его в папке
fluxgym/models/vae
: ae.sft - Скачайте модель Flux Dev из репозитория Cocktailpeanut Huggingface и поместите ее в папку
fluxgym/models/unet
: flux1-dev.sft
Шаг 2: Запуск fluxgym
1. Откройте командную строку (cmd.exe).
2. Перейдите в корневую папку fluxgym
.
cd C:\fluxgym
3. Активируйте виртуальную среду
env\Scripts\activate
4. Запустите обучение LoRA, запустив файл приложения. Это приведет к запуску веб-интерфейса.
python app.py
Альтернативный вариант - открыть с помощью локального хоста веб-интерфейс у себя в браузере:
http://localhost:7860/
5. Описание интерфейса fluxgym
Step 1. LoRA Info
✏️ Шаг 1. Информация о LoRA. Настройте параметры обучения для вашей LoRA.
-
The name of your LoRA
Название вашей LoRA, это должно быть уникальное имя например :d00m_comic_d16_20t
-
Trigger word/sentence
Ключевое слово (слово-триггер) или предложение(триггерные слова), которое будет использоваться в prompt для активации данной LoRA, например:dmcmc comic
Важно выбрать уникальное название, которое не встречается в Интернете, иначе можно получить модель, похожую на реальный объект, связанный с выбранным словом.
Для обучения стилю вы можете использовать что-то вроде BTL1 style
. Вы можете использовать что-то вроде BTL1 person
и т.д., чтобы обучить модель фотографиям человека.
-
Base model (отредактируйте файл
models.yaml
, чтобы добавить к этому списку другие):flux-dev
-
VRAM
Выберите объем видеопамяти, которым располагает ваша видеокарта.- [x] 20G
- [ ] 16G
- [ ] 12G
-
Repeat trains per image
Выберите от10
до20
повторений для тренировки одного изображения для одной эпохи тренировки. Для фотографии или изображения персонажа достаточно10
повторений, для тренировки стиля лучше выбрать20
. -
Max Train Epochs
Сколько эпох (полных тренировочных циклов для всех ваших картинок, каждая эпоха будет сохранена в отдельном файле LoRA) вы планируете провести. Обычно от10
до16
достаточно. -
Expected training steps
Ожидаемые шаги обучения вычисляются автоматически из: [число ваших картинок] x [число повторений] x [число эпох] -
Sample Image Prompts (Отделить новыми строками) Чтобы проверить качество обучения в процессе тренировки, вы можете установить тестовый запрос на генерацию тестовых изображений.
-
Sample Image Every N Steps Через сколько шагов нужно выполнить тестовую генерацию изменений.
-
Resize dataset images Выберите
1024
, если вы хотите, чтобы ваши изображения автоматически масштабировались до1024
(1024 - рекомендуется для flux-dev).
Step 2. Dataset
Ваш дата сет картинок. Вы можете загружать изображения, выбирая каждое из них, или использовать функцию перетаскивания для отправки предварительно отобранных фотографий.
Использовать лучше всего 10
- 20
для тренировки фото человека или предмета. Для тренировки стиля лучше использовать 30
или более изображений.
- Upload your images
d00m_comic_000001.png
498.0 kBd00m_comic_000001.txt
535.0 Bd00m_comic_000002.png
527.9 kB ...
Загрузка файлов описаний изображений. Если у вас нет готовых описаний то вы можете их попробывать генерировать автоматически.
Добавьте описания изображений, используя триггерные слова. Используя модель LLM Vision Florence-2
, вы сможете генерировать автоматические описания изображений одним щелчком мыши (при этом модель Florence-2
будет загруженна).
После загрузки изображений отредактируйте описание для каждой картики.
Убедитесь, что в описаниях изображений есть слово-триггер.
Важно, чтобы в каждом описании изображения было ключевое слово(слово-триггер) или предложение(триггерные слова), которое будет использоваться в подсказке(prompt) для активации этой LoRA, например: dmcmc comic
.
Вместе с файлами изображений можно загружать и файлы с описанием изображений. Для этого необходимо соблюдать правила:
Каждый файл описания изображения должен быть файлом .txt
.
Каждый файл описания изображения должен иметь соответствующий файл изображения с таким же именем.
Например, если у вас есть файл изображения с именем img0.png
, соответствующий файл описания изображения должен быть с именем img0.txt
.
Advanced
Дополнительно
Вкладка Advanced автоматически создается путем разбора флагов запуска, доступных для последней версии sd-скриптов kohya. Это означает, что Fluxgym является полноценным пользовательским интерфейсом для использования скрипта Kohya.
По умолчанию вкладка «Дополнительно» скрыта. Вы можете нажать на «Дополнительно», чтобы развернуть ее.
Рекомендую ознакомиться:
network_dim - Этот параметр задает размерность сети. Он принимает целочисленное значение, по умолчанию - 4. Вы можете установить значение 16 или больше. Чем больше значение, тем больше будет файл LoRA, но и тем больше деталей будет сохранено.
learning_rate - Этот параметр определяет скорость изменения обучения LoRA по умолчанию 8e-4. Можно попробывть 2e-4 или 2e-3.
save_every_n_epochs - Этот параметр определяет сохранение LoRA каждые N эпох. Рекомендую поставить 1. Таким образом, вы сохраняете данные о каждой эпохе обучения и можете использовать их для отдельного тестирования.
caption_prefix - Этот параметр определяет префикс для текста описания изображений, полезный, если у вас есть автоматически генерируемые описания изображений и вы не хотите добавлять их вручную.
network_alpha - Этот параметр определяет альфа для масштабирования веса LoRA, по умолчанию 1 (то же, что и network_dim для того же поведения)
lr_scheduler - Этот параметр задает тип планировщика скорости обучения. Варианты: linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup, adafactor, по умолчанию cosine. И их опции, для тех, кто уже понимает.....
save_state - Этот параметр задает дополнительно сохранять состояние обучения (включая состояние оптимизатора и т.д.) при сохранении модели / оптимизатора.
network_weights - Этот параметр задает предварительно обученные веса для сети. Полезно если для использования вместе с save_state, позволяет возобновить прерванное обучение для Flux.
resume - Этот параметр задает сохраненное состояние для возобновления обучения. Задайте аргумент save_state в начале обучения с нуля, и использовать этот аргумент для возобновления --resume="STATE_IN_OUTPUT_DIR". Эти опции используют сохранение и загрузку состояния и веса оптимизатора.
Step 3. Train
Нажмите «Старт»(Start), чтобы начать тренировку и получить надпись: Training...
Train script
Здесь вы можете увидеть конфигурацию сгенерированного скрипта для обучения train.bat
, который будет находиться в папке C:\fluxgym\outputs\<Название вашей LoRA>\
.
Вы можете ознакомиться с этим файлом, если понимаете, что означает accelerate
.
Резульат обучения будет сохранение LoRA файлов .safetensors: C:\fluxgym\outputs\<Название вашей LoRA>\
.
Рекомендую обратить внимание на последние значения avr_loss, с 0.240
до 0.160
можно считать, что процесс обучения прошел успешно и сеть обучить лучше скорее всего уже не получится.
Бонусный код на Python для программистов для вывода Flux LoRA:
import os
import torch
from diffusers import FluxPipeline
branch = "dev"
model_id = f"./llms/black-forest-labs/FLUX.1-{branch}/" # путь куда вы сохранили с Huggingface модель https://huggingface.co/black-forest-labs/FLUX.1-dev
pipe = FluxPipeline.from_pretrained(model_id,torch_dtype=torch.bfloat16)
# Load LoRA weights
lora_id = "./models/d00m-comic-d16-20t.safetensors" # путь куда вы сохранили вашу Flux LoRA
pipe.load_lora_weights(lora_id, adapter_name="lora")
# Если у вас 24Gb или меньше GPU
#pipe.enable_model_cpu_offload()
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_slicing()
pipe.vae.enable_tiling()
pipe.to(dtype=torch.bfloat16)
# Если у вас больше 24Gb GPU
#pipe.to(device="cuda", dtype=torch.bfloat16)
lora_scale = 1.0
N = 10 # Установите нужное значение N
for i in range(N):
print(f"i = {i}")
# Тригерные слова для моей Flux LoRA "dmcmc comic"
prompt="Humorous funny dmcmc comic about office. Consistent characters, perfect character faces, not ugly."
# Generate the image with LoRA scale
prompt_embeds, pooled_prompt_embeds, _ = pipe.encode_prompt(prompt=prompt, prompt_2=prompt, lora_scale=lora_scale)
image = pipe(
prompt_embeds=prompt_embeds,
pooled_prompt_embeds=pooled_prompt_embeds,
num_inference_steps=50,
guidance_scale=3.5,
#guidance_scale=7.0,
#output_type="pil",
max_sequence_length=256,
#max_sequence_length=512,
#generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save(f"flux-1.0 {i}.png")