Обучите свою собственную модель 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. Просто следуйте формату по умолчанию, указанному в файле.

Ручная загрузка:

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

  1. Загрузить соответствующие текстовые кодировщики, которые помогут обучить вашу Flux LoRA, после загрузки просто поместите их в папку fluxgym/models/clip:
    1. Flux text encoder Clip_L: clip_l.safetensors
    2. Flux text encoder T5XXL_fp16: t5xxl_fp16.safetensors
  2. Скачайте VAE (Variational Auto Encoder) и сохраните его в папке fluxgym/models/vae: ae.sft
  3. Скачайте модель 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

fluxgym setup screen 01

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 kB
  • d00m_comic_000001.txt 535.0 B
  • d00m_comic_000002.png 527.9 kB ...

fluxgym setup screen 02

Загрузка файлов описаний изображений. Если у вас нет готовых описаний то вы можете их попробывать генерировать автоматически.

Добавьте описания изображений, используя триггерные слова. Используя модель 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.

fluxgym setup screen 02

Резульат обучения будет сохранение 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")