Найти тему
OVERCLOCKERS.RU

Выпущена вторая версия SD WebUI Neuro Linux, генерируем и тренируем с видеокартой GeForce GTX 1070

Оглавление

Предисловие

Однажды мною были замечены нейронные сети для генерации изображений, однако облачные сервисы оказались слишком ограниченными, а существующие сборки Stable Diffusion были вообще не портативными, от слова совсем, из-за множества отвратительных зависимостей их практически невозможно развернуть без доступа к интернету, и даже просто перенести в другую папку, что меня очень раздражало.

Потому я создал свои сборки Stable Diffusion на основе AUTOMATIC1111/stable-diffusion-webui, но они доступны только для Windows, ведь до сих пор я не знаю ни одного действительно адекватного и пригодного для нормального использования дистрибутива Linux, а потому нет смысла создавать софт для мёртвой экосистемы, хотя казалось бы, 2024 год, пора бы уже догнать хотя бы древнюю Windows XP/7, но увы, "линуксоиды" продолжают постоянно всё ломать и топить в болоте зависимостей, причём некоторые в последнее время агрессивно принуждают к обновлениям...

Разработчиков софта это тоже касается, так что не одни только разработчики дистрибутивов Linux творят мракобесие:

-3

Но сейчас у меня есть свой дистрибутив Linux на основе MX Linux под названием Chimbalix, и это моя основная операционная система на данный момент, не то чтобы Windows 7 умерла, нет, она до сих пор отлично работает, просто над чем ещё можно бесконечно танцевать с бубном, как не над вечно кривыми и убогими линуксами?

В конце концов я попытался сделать пригодный для использования линукс, и у меня получается, как бы забавно это не звучало. Только проблема в том, что я один всё делаю, следовательно, процесс затягивается, особенно когда начинаю работу над чем-то вроде сборок SD WebUI Neuro...

Теперь я всё делаю исключительно для своего дистрибутива, а остальной недоразвитый зоопарк уже по остаточному принципу, ведь в моём дистрибутиве есть специальный каталог "portsoft", который позволяет содержать такие приложения как SD WebUI Neuro, без него не было бы даже смысла создавать сборку Stable Diffusion под Linux:

-5

Ну а сборки Neuro можно найти в репозитории GitHub, правда софт для Linux не пользуется популярностью, в отличие от софта для Windows, что ожидаемо...

https://github.com/Shedou/Neuro

-6

На этом закончим предисловие, и начнём эксперименты!

-

Проверка работоспособности

Начнём с элементарного, проверим сборку на работоспособность.

Из дистрибутивов будут использованы "Chimbalix 23.1 Alphachi" и находящийся в разработке "Chimbalix 24.1 Alphachi-pre5", оба установлены в виртуальной машине VirtualBox, мне просто накладно будет постоянно перезагружать ПК для проверок, тем более в виртуальной машине дистрибутивы сразу после установки можно сказать, системы ещё не обросли дополнительным болотом зависимостей из линуксоидных репозиториев:

https://github.com/Shedou/Chimbalix

Ну а переносить сборку буду обычной флешкой, причём далеко не самой быстрой, как можно заметить:

-8

Начнём с дистрибутива Chimbalix 23.1 Alphachi, распаковываем сборку:

И запускаем "start-cpu.sh" через терминал, ведь в дистрибутиве версии 23.1 нет специального пункта меню для быстрого запуска скриптов, как в версии 24.1, потому приходится по-линуксоидски это делать, тем не менее оно работает сразу после распаковки:

Кстати, выделенных виртуальной машине 8 ГБ ОЗУ едва хватило для работы сборки, но ведь хватило же! И даже без подкачки:

Далее проверяю установочный скрипт, и тут случилось неприятное, мерзкие линуксоидные зависимости поругались между собой во время установки Service Pack 1 для Chimbalix 23.1 Alphachi, ну да ладно, фиг с ними, остальное то установилось без проблем:

И вообще, это же Open-Source, наверняка ведь кто-нибудь возьмёт и доработает скрипты, а исправленную версию предложит разработчику, то есть мне! Хотя учитывая что Chi-Calculator так никто за год и не взялся доработать, чтобы слишком большие результаты не ограничивались размером типа данных, да и прочие недостатки исправить, не похоже чтобы "попен-сорсные" философии работали в реальности, а ведь репозиторий до сих пор открыт:

-13

Ну да ладно, вернёмся к сборке SD WebUI, запускаем ярлыком из меню "Пуск", и оно работает:

Осталось проверить "удалятор", он прекрасно работает, как и задумывалось:

Теперь нужно проверить в дистрибутиве Chimbalix 24.1 Alphachi-pre5, снова этап распаковки:

Проверяю распакованную сборку, работает как надо:

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

Ну что, запускаем сборку из меню "Пуск", и радуемся ~70 МиБ свободного места на системном разделе:

В общем опять всё работает, ничего нового:

Ну и процесс удаления, тоже без проблем:

К слову о производительности, если в виртуальной машине мой R7 2700X с отключенным XFR вытягивал одну итерацию за 18-19 секунд с автоматически выбранными оптимизациями InvokeAI, то на реальном ПК уже выходит около 9 секунд на итерацию с оптимизациями Doggettx, что в 2 раза быстрее выходит:

-22

Так что даже без видеокарты вполне возможно побаловаться с генерацией картинок процессором, если конечно в качестве ЦП выступает R7 2700X или что-то более производительное...

Генерируем с помощью GeForce GTX 1070

Пожалуй пора полноценно запустить сборку, использовать буду оптимизации Xformers, просто так лучше с моей видеокартой, и да, сборка уже установлена в системе, в том числе модели:

Правда забыл про SDXL модель... Но это дело поправимое, жаль только маленькие скорости у 2.5" HDD подключенного через USB 3.0, но на SSD хранить такие объёмы не очень приятно конечно:

-24

Пожалуй сразу переключим модель на SDXL и именно с неё начнём:

-25

А теперь посмотрим на пределы, которые доступны моей GTX 1070 с 8 ГБ памяти!

Разрешение 512x512, SDXL для такого явно не предназначен, потому нарисовало мусор со скоростью 1.14 итерации в секунду, памяти на видеокарте занято ~6500 МиБ... Дальше размер 1024x1024, именно на такое разрешение рассчитана модель SDXL, и тут уже настолько внятный результат, насколько внятный запрос, а запрос у меня состоит из одного слова "test", памяти на видеокарте занято ~6770 МиБ, скорость примерно 3.5 секунды на итерацию.

Третий результат при разрешении 2048x2048, модель на такое разрешение не рассчитана, а потому выдает мусор, даже если сделать более конкретный запрос, скорость 22 секунды на итерацию, памяти занято ~7740 МиБ:

Пожалуй пора делать апгрейд видеокарты... Хотя ладно, я не так уж и много генерирую, чтобы ради повышения скорости менять свою GTX 1070 на что-то более новое.

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

Получилось, мягко говоря, не очень качественно, но гораздо лучше, чем без Hires:

-28

Думаю есть смысл сгенерировать несколько изображений в "правильном" разрешении добавив "negative promt", и посмотреть что из этого выйдет:

-29

Что тут сказать...

Хм, а как с этой задачей справится модель ChiMix_SF1-NED-AOM3_1 предназначенная для генерации 512x512 изображений...

-31

Поучаствует в этом сравнении даже SD 1.5 модель, просто потому что...

-32

Вот и результаты с моделью "ChiMix_SF1-NED-AOM3_1", получились очень даже неплохо, учитывая конечно что модель рассчитана на разрешение 512x512, а сгенерировала 1024x1024, SDXL предназначенная для 1024x1024 явно хуже себя чувствовала когда генерировал в x2 размере:

Ну и результаты с моделью "v1-5-pruned-emaonly" (SD 1.5), вот и получили то, что получали с SDXL моделью при 2048x2048... Получилось месиво:

Можно конечно использовать Hires, но так не интересно, потому сгенерировал три изображения в "правильном" разрешении:

-35

А самое удачное отправил в контрольную сеть, используя SoftEdge получилось не очень качественно, наверное нужно убрать "грибы" из запроса, однако уже нет месива из тысячи головешек:

Впрочем, никто не мешает использовать другие препроцессоры ControlNet, Lineart, Depth и Canny справились гораздо интереснее, причём эти изображения генерировались всего в 35 шагов вместо 50, так что при должном подходе и SD 1.5 модель способна выдавать "результат":

Ладно, пожалуй хватит генерировать, пора тренировать!

-

Тренируем с помощью GeForce GTX 1070

Этим делом займусь уже завтра, но не волнуйтесь, здесь это время пройдёт как одна строчка текста!

Вот и настал новый день, пришло время тренировки небольшой вспомогательной сети (hypernetwork), первым делом создаю "сеть" с названием n68c-gs4-fx, можно конечно перейти в раздел "тренировка" (train), но сейчас там делать особо нечего:

Ведь сначала нужно подготовить исходные изображения:

-39

Само собой большие фотографии сначала уменьшу для упрощения дальнейшей обработки:

-40

Немного "волшебства" в графическом редакторе Krita:

Готово! Конечно, в идеале нужно было убрать фон, оставив лишь объект тренировки, но и так думаю сойдёт для начала:

-42

Обрабатываем изображения в разделе "Extras", нужно создать описания содержимого, и использовать буду Deepbooru:

-43

Правда справился он плохо со своей задачей, как и линуксоидный thumbnailer, отвечающий за миниатюры изображений... Видимо следовало использовать BLIP, но это особо и не важно, всё равно вручную придётся написать описания:

-44

Осталось настроить и начать тренировку, но у моей GTX 1070 оказалось недостаточно памяти для разрешения 1024x1024...

На 768x768 моих 8 ГБ тоже оказалось недостаточно, так что придется вернуться к 512x512, увы, тренировать это не генерировать:

Осталось только ждать и посматривать за прогрессом, прошло всего 200 итераций, а результат меня уже радует, наверное дело в удачной подготовке исходного материала:

Ещё следует заметить один нюанс, "гиперсеть" создается в совокупности с текущей выбранной моделью, в моём случае SD 1.5, с другими моделями сеть будет работать иначе, но этот нюанс я не проверял досконально, чтобы сказать к каким именно результатам может привести использование неподходящих сетей.

Прошло некоторое время, указанные 10000 итераций завершились, и в промежуточных результатах видно несколько самолётов, что довольно забавно:

Осталось сгенерировать изображение с новой гиперсетью:

При запросе " , n64c, n68c-gs4, motherboard" оно нарисовало системную плату, однако получилась какая-то смесь... При ослаблении гиперсетки (hypernet:n68c-gs4-fx:0.5) системная плата уже совсем не похожа на то, что я запрашивал, а без использования гиперсетки вообще нарисовало плату с зелёным текстолитом.

И только если убрать слово "motherboard" из запроса (последний результат), нейронная сеть выдает именно то, что я тренировал, насколько смогла конечно:

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

Но что произойдёт, если сменить модель на другую? SD 1.5 и без "дополнений" вроде как умеет рисовать системные платы, а вот у "ChiMix_SF1-NED-AOM3_1" есть некоторые проблемы с такими запросами...

Первые 4 изображения с запросом "n64c, n68c-gs4, motherboard", вторая пачка уже с использованием гиперсети "n64c, n68c-gs4, motherboard, ", модель определенно плохо справляется с компьютерным железом, но благодаря дополнительной "сетке" (не секте), эта проблема частично решается, и сразу видно, что гиперсеть не может даже слоты памяти нарисовать будучи оторванная от SD 1.5 модели:

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

Почему с техникой у нейронных сетей всё настолько плохо? Вообще ответ лежит на поверхности, достаточно заглянуть на "civitai.com" и всё встаёт на свои места, абсолютное большинство моделей рассчитаны на генерацию людей и персонажей из аниме/игр:

Есть ли модели рассчитанные на генерацию компьютерной техники и других подобных вещей? Вероятно есть, но я пока не знаю таких, увы.

А еще не стоит забывать про ОЗУ, некоторые наверняка до сих пор верят, что 8-16 ГБ это нормальный объём памяти для ПК, хватит даже на игры... Увы, 16 ГБ мне уже в 2017 году было недостаточно чтобы просто нормально поиграть в игры без помощи костыля под названием "файл подкачки", ну а сейчас Stable Diffusion у меня скушал 41 ГиБ ОЗУ, выводы делайте сами, так сказать предостережение для тех, кто во время сборки ПК захочет сэкономить на объёме ОЗУ по глупости:

Так что будем уже завершать статью...

Напоследок сгенерирую несколько изображений с помощью моделей SD 1.5, ChiMix_SF1-NED-AOM3_1, RaemuMix v8.1 (на основе SD 1.5), Raemu XL (на основе SDXL 1.0) и SDXL base 1.0, а чтобы результаты можно было сравнить между собой, будем использовать одинаковые параметры для всех моделей.

Начнём с размера 512x512, запрос "landscape, day, sun, lake, road, forest, grassland", зерно "2394593424", сэмплер "DPM++ 2M Karras", а для упрощения задачи использоваться будет скрипт "X/Y/Z plot":

В итоге при разрешении 512x512 откровенно не справилась только модель SDXL Base v1.0, модель SD 1.5 не смогла нарисовать озеро, а RaemuMix v8.1 не нарисовала дорогу, а RaemuXL не нарисовала солнце, только ChiMix_SF1-NED-AOM3_1 нарисовала практически всё запрошенное, хотя дорога получилась не очень:

Пожалуй усложним задачу, сэмплер сменим на "DPM++ 3M SDE Karras", и будем использовать два зерна "894319" и "10435734":

Опять модель SDXL Base не справилась, SD 1.5 снова показала посредственный результат, тем временем оставшиеся модели хоть и теряют временами солнце, однако стараются нарисовать всё:

В разрешении 1280x720 результаты получились интереснее, модель SD 1.5 показала себя как всегда, посредственно, ChiMix и RaemuMix выдали неплохо, но лучшие результаты пожалуй за SDXL моделями:

Безусловно SDXL модели справились лучше всех при размере 1280x720, однако стоит заметить, что даже с моделями на основе SD 1.5 возможно сгенерировать довольно качественные изображения, например стандартный фон дистрибутива Chimbalix 23.1 Alphachi сгенерирован как раз с помощью модели ChiMix, причём в разрешении 1920x1080, а после небольшой обработки получилось вот это:

-59

Так что даже используя неподходящие модели можно добиться нужного результата, особенно если использовать контрольные сети, что ранее уже демонстрировалось, разумеется всему есть цена, в данном случае усложнение процесса генерации...

Ну что, осталось проверить как разные модели справляются с генерацией человека! Ну а чтобы нейронная сеть случайно не нарисовала ничего "неприемлемого", я буду использовать слово "nsfw" (not safe/suitable for work - небезопасно/неподходяще для работы) в Negative Promt, да и сам запрос упростил:

Разрешение 512x512, SDXL Base v1.0, как обычно, не справилась, хотя пыталась, SD 1.5 нарисовала реалистично, ChiMix выдала что-то среднее, а вот RaemuMix/RaemuXL однозначно аниме стиль:

-61

Интересно, как обстоят дела при разрешении 1280x720?

Модель SD 1.5 почему-то постоянно пытается рисовать клонированных детей при столь простом запросе, остальные модели явно не "поняли" что от них хотели:

-62

Думаю есть смысл повторить с более сложным запросом, потому что базовая SD 1.5 модель постоянно рисует детей даже с другими сидами, и это меня уже начинает напрягать:

Теперь SDXL Base начала рисовать детей... Да что ж такое:

-64

Похоже у базовых моделей Stable Diffusion было тяжёлое детство... Дорабатываем запрос:

-65

И наконец получаем результат!

-66

Модель SD 1.5 старалась, очень старалась... Но увы, она единственная нарисовала "объект" трижды!

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

RaemuMix нарисовала в аниме стиле, как и всегда.

А вот RaemuXL уже попыталась в реалистичность, причём получилось это даже лучше, чем у SDXL Base модели, и в целом она выдала результаты наиболее соответствующие запросу, такое ощущение, что первые три модели вообще проигнорировали слово "portrait":

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

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

Ранее я уже оставлял ссылки на GitHub репозитории, но оставлю и здесь, чтобы не потерялись:

Сборки Neuro: ( https://github.com/Shedou/Neuro ).

Дистрибутив Chimbalix: ( https://github.com/Shedou/Chimbalix ).

Ну и закончим традиционно грибами:

Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.

-70