Stable diffusion на AMD - как быстро бегать на костылях!

Автор: Александр Вайс

Предисловие! Если хотите к сути - можете пропускать!

Добрый день дорогие читатели и случайные посетители сего блога!

О нейросетках много статей, ну, давайте и я одну напишу! Нынче время, когда нарисовать своих персонажей в хорошем качестве может каждый каждый.

Есть генеративные сервисы, но у каждого есть свои проблемы. Во многих вам дали одну модель, за рамки которой вы не выйдите, всегда есть ограничения, которые возможно частично снимаются за вашу оплату. Многие инструменты полноценного SD там не доступны или работают криво, в частности вечно проблемы с подключением Lora для особых штук (кроме генератора из Civitai) и получения возможностей инпеинта, чтобы изменять картинку точечно. Например, переделать косячное лицо. Ограничения по разрешению - тоже обычное дело.

Полно инструкций, как поставить SD на свой компьютер и радоваться возможности безгранично генерировать пор своих персонажей. Но вот проблема: эти модели сделаны под использование CUDA от Nvidia, а если вы на стороне красных или вообще синих (интел арк) то... всё плохо. Даже если видюха, казалось бы, мощная.

Что есть для AMD? DirectML - самая известная технология, может хоть на старой RX580 с 8 гигами видеопамяти завести SD. Правда ваша максимальное разрешение генерации будет удручающим и получить что-то красивое и сложное окажется куда тяжелее, а самым знакомым сообщением в терминале с запущенным локальным сервером будет строчка о том, что он крашнулся из-за недостатка видеопамяти. И даже если у вас топовые решения, оно тоже будет частым, а скорость генерации останется низкой.

Но относительно недавно до винды дошёл AMD ROCm, а потом хороший человек написал ZLUDA. Это штука позволяет запускать приложухи для CUDA на других устройствах. А потом эту штуку адаптировали для SD.

Кому подойдёт

И так, кто может применить для себя эту штуку? Видюхи на архитектуре RDNA2 и RDNA3. Начиная от RX 6600.

Полный список можете посмотреть здесь, достаточно возможности запуска в рантайм (только потребуется дополнительное действие при установке, если не поддерживает HIP SDK):

https://rocm.docs.amd.com/projects/install-on-windows/en/develop/reference/system-requirements.html

А ещё вам нужно 32 гига оперативывы. VAE сжирает у меня 23 гига за милую душу, больше винда не даёт.

Где взять?

Переписывать гайд по установке я не буду. Идёте по ссылке на гитхаб, там всё довольно просто. Если вы раньше ставили SD на компьютер, то питон и git, вероятно, у вас и так установлены, потребуется лишь добавить HIP SDK и запустить сетку с правильным аргументом.

Основная ссылка блога: https://github.com/vladmandic/automatic/wiki/ZLUDA

Да, это форк (ответвление) интерфейса автоматика и оно у меня работает лучше.

Почему-то изначально нет удобного .bat файла для запуска не из консоли, но можете взять тот, что применяется в оригинальном интерфейсе автоматика. По аргументам достаточно прописать:  --use-zluda --autolaunch 

Как это выглядит

Тёмный интерфейс по дефолту сразу +100 к крутости.

Выглядит чуть иначе, как по мне - настройки скомпонованы хуже, приходится открывать вкладки для некоторых действий. Зато есть очень удобная копка Enqueue, ожидаемо, добавляющая то что вы настроили в очередь! То есть набрали один промт на десять генераций, изменили настройки и добавили ещё на 10! Правда есть небольшой баг: процесс генерации того, что в очереди, в интерфейсе не отобразит, но на работу это не повлияет.

Кстати, там ещё много встроенных наборов стилей!

Зачем нужно и что поддерживает

На первый вопрос ответ прост: скорость генерации примерно в 5-7 раз выше и доступно большее разрешение. Я на 6700xt обычно ставил 650 на 900 - при таком краши из-за забитой памяти видеокарты случаются крайне редко. Сейчас я спокойно ставлю 780 на 1050 (примерно) и получаю время итерации сэмплинга около 1-1.2 секунд вместо ~6.

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

Хотя большое разрешение на первичной генерации не ставьте. У меня и 1032 на 1624 вытянула, но механизм внимания сломался. Говорят, больше 1024 на 1024 на первичной ставить не стоит. Лучше сгенерировать на меньшем, а потом засунуть в img2img и сделать ресайз (главное сохранить пропорции) с денойзингом около 0.5. А на большом сразу обычно выходит вот что:

Поддерживает эта версия любые виды моделей SD. В начале вы видите результат крайне популярных на Civitai моделей Pony пошедших от SDXL.

Эти модели НАМНОГО лучше справляются с генерацией людей и их взаимодействий с окружением. Дать что-то в руку персонажу на SD 1.5 - это боль.  Намного лучше с руками и целостностью одежды, а также волос.

А вот в плане всяких стилизаций и абстракций Pony нещадно проигрывает. Магия, магические узоры, стили рисовки, стили объектов через множество Lora - с этим старые многочисленные модели справляются лучше. От них легче получить разнообразную магичность и абстрактность. С другой стороны они и косячат намного больше.

Вот вам пример того, что я делал на старых:

Кстати, если использую тот же промт, что для картинки в начале на модели Brickandmortar v2 то получу вот что:

Какой-то лазер из пальца торчит... но это первичная генерация, ничего не правил и промт под SDXL написан! Кстати, косячная картинка выше тоже от этой модели! И все облоги для моего Расколотого Мира сгенерированы в ней.

Обрате внимание! Отдельно от моделей SD есть модели VAE! На самом деле в цепочке генерации именно VAE отвечает за визуализацию, она превращает наборы чисел, данные картинки, которые генерирует модель в пиксели, которые мы получаем! Для SD 1.5 и SDXL эти VAE разные!

Если вы использовали SD 1.5, то у вас просто всегда был "vae-ft-mse-84000-pruned". Он давал яркие, качественные картинки. Если вы возьмёте Brickandmortar v2 и поставите в настройке VAE: none, при котором используется тот VAE, который встроен в модель, то выйдет вот что:

А вот SDXL отлично работает на встроенных моделях. Пример выше, зато если вы подсунете ему такую VAE, то он либо выдаст ошибку, либо выдаст отвратительный результат. А данный генератор просто не будет отображать vae-ft-mse как доступный вариант, если не установить бэкэнд на original. Это можно сделать, но тогда потребуется перезапуск нейросети и работать она станет в режиме DirectML, как мне кажется. То есть: медленно.

Но у меня случайно оказался иной вариант VAE, результат чуть выше, там где палец-лазер, вы видели. Не смотрите, что цвета блеклые, просто сама модель склонна делать более мрачные картинки. Причём работать она по-прежнему будет очень быстро. Скачать можете здесь:

https://huggingface.co/JCTN/sd-vae-collection/blob/main/cute%20vae.safetensors

Только иногда при переключении обратно на None для SDXL она по факту не переключается и выходит цветовая мешанина. Просто перезапустите сетку и лучше не скачите между SD 1.5 и SDXL, вот и всё.

Пару подводных камней:

Смотрите при запуске, что Sampling method установлен правильно, а то Default может применить чёрти что. Euler a и DPM++ 2M обычно работают лучше всего. Но в настройках есть функция сохранения дефолтных настроек генерации, которые загружаются при запуске.

Face restore иногда склонен жрать много памяти и не отдавать, а потом вешать винду, оставшуюся без оперативы. Но работает хорошо. Фактически он автоматически делает специальной нейросетью инпейнт на обнаруженное лицо.

HiDiffusion работает странно и малость криво, и чёрт бы с ним. Не нужно генерить изображения чрезмерного разрешения.

Если в Settings - Image Options не установите сохраняемый формат картинок на PNG то не сможете посмотреть информацию о генерации из файла открыв картинку блокнотом. Но можете засовывать файлы во вкладку Process, где картинки можно, например, апскейлить простыми методами или удалять фон, она отобразит метадату.


Напоследок вам ещё пару картинок:

Применяемая модель: PerfectPony 3, без отдельного улучшения лиц каким-либо методом.

+150
1 622

0 комментариев, по

1,51М 7 333 788
Наверх Вниз