Сборка Stable Diffusion web UI Neuro: Доступная и простая в использовании нейросеть. Часть 2
реклама
Предисловие
В предыдущей части я имел дело с "пре релизом" Stable Diffusion web UI, по идее он должен избавить пользователя от мучений с зависимостями и ручной установкой всего что криво могло установиться по инструкции, но в реальности это оказался просто нерабочий хлам с обнадёживающим описанием:
реклама
И так, с чего бы начать... Пожалуй начну с того, что мне уже надоело как разработчики не доводят своё дело до конца, от чего заинтересованные пользователи вынуждены страдать пытаясь установить и использовать такие вот "творения":
реклама
По сути я тоже являюсь пользователем, и мне стало интересно поработать с нейронными сетями, не передать в двух словах сколько было пройдено проблем пока я доводил приложение до адекватного работоспособного состояния, хотя это обязан был сделать разработчик приложения. Впрочем, не буду рассказывать повторно про уже пройденный путь, вы можете найти статьи про это в моём блоге...
Я уже могу выложить свою сборку в общественный доступ для всех кто не желает проходить ад зависимостей лично, но не буду этого делать. Сборка конечно есть, но она ещё не совсем готова для нормального использования, да и мусора там собралось слишком много:
Потому я соберу заново с нуля сборку, чтобы точно не осталось ничего лишнего, именно сейчас я и буду работать над сборкой которую впоследствии оформлю в своём репозитории GitHub Neuro:
реклама
А чтобы сборка получилась максимально качественной насколько смогу это сделать, не вижу ничего зазорного в использовании наработок других людей, они всё равно давно брошены и бесполезны, а совместив это с моими наработками может выйти нечто рабочее:
Ссылки на репозитории обязательно оставлю.
реклама
Stable Diffusion web UI: ( https://github.com/AUTOMATIC1111/stable-diffusion-webui ).
И на свой репозиторий.
Мои сборки Neuro: ( https://github.com/Shedou/Neuro ).
-
--
---
Сборка
Прежде всего использую свои наработки:
Вдобавок ещё отключу проверку тухлых SSL сертификатов, ибо они могут доставлять проблемы когда приложение будет насасывать зависимости из репозиториев, не сразу, но проблемы будут, потому заранее подложу соломку.
Немного колдую над оформлением BAT файла которым буду всё запускать, исправляю недостатки, дорабатываю, и начинаю установку:
Как можно заметить я скомбинировал свои наработки и нерабочий "пре релиз", Git взял из "пре релиза", Python уже взял полноценный чистый, ибо от "пре релиза" не подходил, команды в BAT файле тоже совместил таким образом, чтобы просто нормально работало всё, и при этом не зависело от папки в которой находится сборка.
Так как многое у меня уже находилось в кэше, то выкачивать пришлось только зависимости которые не кэшировались.
В общем так я и собирал всё воедино, не без ошибок во время скачивания зависимостей...
У меня 4 раза подряд оборвалось скачивание одной и той же зависимости, но я был настойчив и наконец добрался до этапа скачивания модели, наконец можно закрыть окно и подсунуть модель вручную чтобы лишний раз не качать:
Так гораздо лучше, чем через мобильный интернет каждый раз скачивать одно и то же.
В итоге оно заработало:
Но есть проблема, папка Python весит маловато как-то, похоже я где-то облажался, или нет?
В общем, создал я виртуальную машину и установил компактную Windows 10, чтобы наверняка условия были максимально жёсткими для проверки на работоспособность...
Так как в виртуальной машине нет доступа к видеокарте, то я прописал аргументы для работы только с процессором, и оно заработало, а это значит что всё получилось как надо, но это ещё не конец.
Нужно отключить лишнее, теперь при запуске не будет проверки файлов и сверку с репозиториями, это экономит примерно 5 секунд на запуске (NVMe SSD Samsung 970 PRO 512GB), да и незачем это делать когда всё уже собрано. Почему так грубо сделал прямо в файле launch.py, а не аргументом при запуске SD WEBUI? Всё просто, я не хочу случайно забыть про аргумент во время дальнейшей работы, всё равно эта функция больше не нужна при каждом запуске:
Добавляю несколько аргументов в пустую строку "COMMANDLINE_ARGS=" и запускаю, первый аргумент говорит сам за себя, как и второй.
Наконец оно работает, впрочем, это я уже знал когда в виртуальной машине проверил.
Возвращаюсь к BAT файлам и создаю дополнительные варианты, оно вроде и понятно какой для чего, но думаю нужно будет сделать описание:
В итоге я создал файл с информацией полезной, он ещё в доработке, но во время работы над разделом "Операционная система" я так подумал, и решил сделать поддержку Windows 7, как не крутите, но Windows 7/8/10/11 это прямые наследники Windows Vista, и было бы кощунством не сделать парочку простых действий для работы сборки с Windows 7:
Собственно вот и работа Stable Diffusion web UI в Windows 7, просто установил в виртуальную машину первую попавшуюся сбору Windows с интегрированным SP1, чтобы не тратить время на установку чистой системы и потом SP1 отдельно, и vcredist 2015-2022 ещё сверху накатил, так как приложению нужны такие базовые компоненты ОС как VC Redist:
Для тех кто думает что Windows 7 якобы безвозвратно устарела, нет, Windows 10/11 кардинально не отличаются от "семёрки", так как все они наследницы Windows Vista, разница в отношении корпорации к якобы устаревшей системе, такое же отношение уже проявляется к Windows 10, ведь нужно как то заставлять людей переходить на "прекрасную" Windows 11...
Корпорации нужна власть и деньги, в том числе над системами пользователей, и Windows 7 просто не позволяет корпорации получить желанную власть позволяющую навязывать пользователям всё что угодно, таким образом корпорация всеми доступными способами старается избавиться от Windows 7, даже если это откровенно вредоносные способы, например подсылка пользователям Windows 7 вредоносных "обновлений", полагаю теперь можно и для Windows 10 подобное ожидать:
В любом случае раз уж я решил сделать поддержку Windows 7, то это нужно сделать максимально простым делом для пользователя.
Главная причина неработоспособности SD WEBUI в среде Windows 7 это официальный Python, казалось бы, такая базовая вещь от которой зависят многие другие программы...
Но ничего страшного, ведь есть люди, которые подтёрли попу "официалам" и выпустили даже более полноценные установочные пакеты Python, чем это смогли сделать "официалы", я по сути занимаюсь сейчас тем же самым, подтираю попу разработчикам SD WEBUI работая над своей сборкой:
Так как неофициальный Python оказался лучше официального, то его и оставлю в сборке SD WEBUI Neuro:
Но есть и ещё одна проблема, её корни растут уже со стороны NVIDIA, это библиотека cudart64_110.dll, для Windows 7 последняя версия библиотеки насколько я знаю 11.4, а в составе SD WEBUI по умолчанию поставлена библиотека версии 11.7.
Я бы мог просто заменить библиотеку CUDART версией 11.4, но это потенциально может вызвать проблемы при использовании самых новых видеокарт от NVIDIA, хотя и не факт, потому я подойду к задаче с другой стороны.
Так гораздо лучше, теперь можно сменить версию CUDART просто запустив BAT файл, я сделал не только возможность установить более старую версию библиотеки, но и вернуть назад изначальную версию, вдруг кто-то случайно установит версию для Windows 7 находясь в Windows 10/11:
Впрочем, даже с версией CUDART 11.4 приложение работает без проблем в Windows 10, оно как раз сейчас работает с более старой версией CUDART предназначенной для Windows 7:
Почему я не оставлю старую версию CUDART? Вообще это очень заманчивое предложение, особенно если посмотреть на таблицу совместимости, у версии 11.4 есть явное преимущество в том, что она работает буквально везде, даже в Windows 7, и поддерживает видеокарты начиная с Kepler и заканчивая Ampere, как и версия 11.7 которая уже не работает в среде Windows 7.
И что важно заметить, подавляющее большинство видеокарт серии GTX 600 не будут работать ни с одной из версий CUDA 11.x, как и ряд видеокарт из серии GTX 700, этот нюанс требует особого внимания, к нему я ещё вернусь...
В общем есть проблема, я не проверял досконально на работоспособность версию CUDART 11.4, хотя и проблем не заметил в работе, хотя версия 11.7 тоже не идеал, ведь она не поддерживает видеокарты RTX 4000 (Ada Lovelace).
Так как я уже сделал возможность выбора подходящей версии CUDART, то почему бы не сделать "апгрейд"? Конечно, я не смогу проверить на работоспособность так как у меня нет видеокарты RTX 4000 серии, но людям с такими видеокартами это может быть полезно.
Да, ради одного файла для сборки я собираюсь скачать установочный пакет весом 3.1 ГБ...
В любом случае оно работает, хотя без видеокарты серии RTX 4000 не могу сказать насколько всё хорошо, и не будет ли неожиданных проблем в последствии, так что оставлю этот вариант чисто на усмотрение пользователя, на случай если со стандартным CUDART версии 11.7 не заработает какая нибудь RTX 4070Ti:
Пожалуй осталось только загрузить Windows 7 и проверить работоспособность сборки в реальных условиях, и вот тут уже начали всплывать ранее незамеченные проблемы, нет, проблема не в операционной системе:
Оно ищет python в системном диске и даже игнорирует конкретное указание пути к исполняемому файлу, довольно забавная проблема:
В интернете оказывается с этой проблемой уже сталкивались, только вот решение этой проблемы неприемлемое... Зато теперь я знаю где откапывать "тухлую крысу" от разработчиков...
О да, это настолько глупо, что я даже не знаю как это комментировать...
Почему это глупо? В интернете советуют удалить папку venv, якобы это решение проблемы, только вот незадача, без этой папки ничего не будет работать, особенно без доступа к интернету, ибо там много зависимостей, да, тех самых зависимостей которые нужно было скачивать при первом запуске SD WEBGUI:
Что поделать, беру в руки палку (волшебную) и начинаю колдовать понос для разработчиков подобного "чуда", пара строчек и файл в папке venv всегда в актуальном состоянии, сначала я думал сделать отдельный BAT для внесения исправлений, но потом объяснять каждому пользователю, как и при каких условиях его нужно и можно трогать... Так что да, оно будет обновлять этот файл при каждом запуске.
Осталось только использовать BAT файл устанавливающий подходящую для Windows 7 версию CUDART:
И вот нейросеть у меня работает в Windows 7 не боясь переноса в другой каталог:
Таким образом я не только проверил приложение в "устаревшей" Windows 7, но и исправил "тухлую крысу" тактично подложенную разработчиками Stable Diffusion web UI в папке venv.
Можно конечно предложить пользователю вручную исправлять путь, или даже варварски удалить папку venv как предлагали в репозитории SD WEB UI в качестве "решения проблемы", но какой тогда смысл от моей сборки если пользователю придётся плясать над бубном?
Раз уж пошла такая пляска, то автоматизирую и подмену cudart64_110 в зависимости от используемой операционной системы, чтобы пользователю не приходилось даже заходить в папку Redist и что-то там открывать для установки подходящей версии библиотеки:
Есть конечно и минус у такого подхода, для использования CUDART v12 нужно будет изменить BAT файл, но я всё подготовил заранее, если вдруг будут проблемы при использовании видеокарт серии RTX 4000, достаточно просто закомментировать строку для Windows 10 символом двоеточия, и раскомментировать строку ниже с экспериментальной версией библиотеки, выглядит это так:
Это конечно не гарантирует решение потенциально возможных проблем при использовании RTX 4000, как минимум у меня нет видеокарт данной серии для тестов и отладки, но в случае если проблемы всё же будут это лучше, чем вообще ничего.
Теперь казалось бы сборка закончена, всё работает даже в Windows 7, и будет работать если я сразу же загружу Windows 10 на этом же ПК, но это ещё не конец:
Чтобы жизнь не казалась сахаром, я скопирую свою сборку на обычную флешку и проверю, вдруг ещё всплывет какая-нибудь недоработка:
Вот и настало время проверить насколько портативна моя сборка, и она легко запустилась с флешки:
Казалось бы, на этом сборка завершена... А вот и нет, и ещё раз нет! Раз уж начал доводить до ума чужой недоразвитый софт, то покажу до конца процесс.
Конечно же делаю резервную копию, это тот момент, когда в среднестатистическом ПК меньше ОЗУ чем я трачу (~17 ГБ) на создание одного архива с резервной копией:
Теперь можно дальше работать над сборкой, не забываю и про UX, ибо какой смысл от сборки, если пользователь даже не поймет что нужно запускать:
Далее скачиваю и устанавливаю несколько весьма полезных дополнений чтобы они остались в составе автономной сборки:
Не обошлось конечно без "приколов", но тут я сам виноват, что полез использовать расширение Tiled Diffusion не зная как им пользоваться :)
В комплект конечно же добавляю VAE файл и настраиваю SD WEBUI:
В процессе немного поэкспериментировал, результат получился довольно забавный, в общем работает новое добавленное расширение в сборку.
А теперь нужно выкачать зависимости, что, опять? Не опять, а снова! Но сначала нужно всё включить в настройках Web UI:
Пришла пора сосать зависимости из репозиториев, только вот я думаю над одним очень сложным выбором, скачивать кривой LDSR или нет... Пожалуй не буду скачивать, всё равно он всё ломает после использования, оставлю скачивание этого хлама на усмотрение пользователя, а пока скачаю все остальное чтобы было локально доступно в сборке.
Ну вот, на 8 зависимостей меньше стало, теперь пользователю не нужно будет насиловать доступ к интернету при выборе разных методов увеличения, кроме LDSR конечно, но я уже говорил на его счёт:
Теперь нужно скачать зависимости для алгоритмов восстановления лица, сначала CodeFormer, потом в настройках выберу GFPGAN и так же скачаю, чтобы пользователю не приходилось заниматься этим мракобесием, особенно при запуске сборки с флешки на автономных ПК без интернета:
Интересно, когда у разработчиков появится извилина в мозгах, и они поймут что вот такое мракобесие как раз отпугивает абсолютное большинство пользователей от линуксоидного софта и дистрибутивов Linux в целом?
Чуть шаг в сторону, не ту кнопку нажал и привет скачивание зависимостей из репозиториев через интернет... А если у пользователя мобильный/спутниковый интернет, да еще и с трафиком, где каждый мегабайт может стоить десятки долларов? А если пользователь желает запустить приложение на втором ПК который не подключен к интернету? Банально нет сетевой инфраструктуры, а тут такой линуксоидный софт отказывается работать потому что видите ли зависимостей нет, и скачать невозможно...
Оно обычным пользователям надо? Скачивать, потом устраивать пляски с зависимостями и консолью во время установки, а после при каждом движении мышью докачивать кусочки через интернет из разных репозиториев разбросанных по всему интернету? А если репозитории исчезнут или зависимости будут испорчены обновлениями? Вот и оно...
Так или иначе сборка уже близка к завершению, осталось доработать файл ReadMe и проверить чтобы в среде Windows 10 оно работало не хуже, чем в Windows 7.
Но прежде чем проверять все в Windows 10. нужно проверить функционал сборки, и пока что меня более чем устраивает, всё основное работает как положено:
А еще нужно пройтись по настройкам и настроить всякое:
Чтобы не заставлять пользователя искать папку результатов среди файлов SD WEBUI, я настроил вывод результатов в папку _OUTPUT_ что расположена рядом с исполняемыми файлами для запуска сборки, мне и самому так удобнее:
Довожу до ума все пути сохранения результатов:
И получаю грамотную структуру каталогов до результата, вроде и мелочь, но если что-то можно сделать практичнее в использовании, это следует сделать, чтобы пользователь не ковырял все каталоги подряд в поисках нужного.
Совсем забыл, я же не проверил полную работоспособность расширения которое позволяет создавать видео из процесса генерации изображения, и вот тут опять зависимости погоняют зависимостями, видите ли ffmpeg не подали на блюдце с золотой огранкой...
Так-то можно обойтись и без функционала для создания конечного видео файла, расширение вполне работает и создает необходимые файлы, и эти файлы можно уже вручную забросить в приложение для создания видео/GIF, именно так я и предпочитаю делать, именно вручную объединять файлы нужным мне сторонним софтом:
Однако я не собираюсь оставлять пользователя наедине с проблемой, для того ведь и создаю сборку, ибо разработчики не удосужились свои творения сделать пригодными для нормального использования, в том числе разработчики дополнений.
Мне несложно добавить недостающую зависимость в свою сборку и связать её с приложением, вот так одним геморроем на голову меньше стало.
Ожидаемо всё заработало как положено, всего-то нужно было очередную зависимость подсунуть, так и хочется обложить матерными словами разработчиков, что совершенно не думают про пользователей...
Впрочем, обычными файлами мне привычнее собирать GIF анимации, так что вряд ли буду использовать функционал зависимый от FFMPEG, но другим людям он может быть полезен.
Теперь вернусь к работе над ReadMe файлом, ибо основная часть работы в принципе сделана, сборка наконец пригодна для использования.
Из забавного я отмечу тот факт, что cudart64 версии 11.x поддерживает видеокарты начиная с Kepler и заканчивая Ampere, но с поддержкой Kepler есть проблема, всякие GTX 660, 670, 770 не поддерживаются, отсюда и такой забавный список совместимости с видеокартами:
А вот как отметить RTX 4000 серию видеокарт я даже не знаю, думаю что-нибудь придумаю, но выделить эту серию необходимо, ибо не знаю как оно будет работать, или не будет вообще.
Ладно, с ReadMe файлом я можно сказать закончил работу, теперь нужно почистить сборку от мусора, итого готовая к работе сборка весит почти 10 ГБ, в целом не так уж и много вышло если учесть наличие моделей в составе:
Так как сборка уже близка к завершению, нужно её полностью запаковать в архив, получился архив на три части общим размером 5.3 ГБ, что конечно не сказать что мало, но и не особо много.
Впрочем, один неприятный нюанс всплыл уже во время копирования сборки на USB накопитель, я заметил множество jpg файлов во время копирования и нашёл откуда они взялись, сказать что я был удивлен - ничего не сказать...
Я конечно понимаю что это просто примеры для работы с инструментом от которого зависит работа Stable Diffusion web UI, но похоже мне следовало лучше поработать над чисткой сборки от лишнего... Ладно, первую версию сборки пожалуй не буду чистить от подобных примеров, оставлю чистку для будущих версий.
Во время дополнительных проверок я не обнаружил особых проблем, сборка работает в Windows 7, Windows 10, не боится переноса в другие места и переименования, даже с флешки работает без проблем:
Ещё я хотел чтобы и другие люди проверили, но как показала практика, это дело может затянуться надолго, потому было решено на этом и закончить работу над первой версией сборки.
-
--
---
Заключение
Именно таким должен быть софт, чтобы пользователь скачал, распаковал и получил готовое для работы приложение даже без доступа к интернету! Но увы, некоторые разработчики предпочитают тонуть в болоте зависимостей, и ещё имеют наглость бросать в это болото обычных пользователей...
Где это видано во времена Windows 98/XP/Vista/7 чтобы пользователи ковырялись с компиляторами и батниками для установки и запуска софта/игр? Даже "пиратские" версии софта и игр устанавливались и запускались максимально просто, ибо даже "кряки" делались максимально простыми в использовании, чтобы их могла любая "домохозяйка" использовать.
А что сейчас? Зависимость удовлетворил? А зависимость зависимости? А баг исправил руками? А команду прописал в нужном месте? Что-то пошло не так - пользователь криворукий вендусятник, но ни в коем случае не разработчик кривого софта!
Но ничего страшного, моими трудами ещё один недоразвитый софт теперь стал пригоден для нормального использования. Точно, нужно обязательно сказать что мои сборки это Open Source и доступны всем бесплатно, и чтобы мне побольше пожертвований отправляли! Ведь разработчики очень любят собирать пожертвования, даже в приложения встраивают кнопки для пожертвований!
А ведь точно, я же нигде никогда не просил пожертвования... Хм, придумал, есть же кнопка "Спасибо автору" в конце каждой статьи, пусть это и будет для вас способом меня отблагодарить если моя сборка оказалась полезна:
Найти мои сборки можно в репозитории Neuro: ( https://github.com/Shedou/Neuro ).
Ну а что до хейтеров которые уже давно опустились на уровень личных оскорблений... Надеюсь вы не станете "кривить своё мило личико" используя мои сборки совершенно бесплатно и свободно насколько это позволяют лицензии на составляющие компоненты, это относиться и к "индивидам" что ставят плюсы подобным комментаторам:
На этом пожалуй завершу статью, хотелось бы конечно больше продемонстрировать возможности сборки Stable Diffusion web UI Neuro, но объем материала уже явно не позволяет, может быть в отдельной статье это сделаю если увижу интерес к теме.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила