!["1boy, brown_hair, glasses, hat, looking_at_viewer, male_focus, short_hair, solo" - Deepbooru "1boy, brown_hair, glasses, hat, looking_at_viewer, male_focus, short_hair, solo" - Deepbooru](https://habrastorage.org/getpro/habr/upload_files/aed/288/1e8/aed2881e8c70acb00301a3b436c02118.jpg)
Предупреждение: впереди вас ждет короткий гайд по запуску webui в колабе после Апреля 2023, когда данное поведение стало осуждаемым со стороны google. Если вы человек принципа и осуждаете омежек, использующих дары от google в своих корыстных целях - дальше вы не увидите ничего интересного.
Производные Stable Diffusion набрали огромную популярность, что не могло обойти стороной нагрузку серверов Google Colab, которые они на бесплатной основе предоставляли энтузиастам в сфере ML.
Я владею хоть и не самой слабой картой на текущем рынке, но она принадлежит красному вендору. Это усложняет локальный способ запуска нейросетей на ней с pipeline.to("cuda") до тёмных ритуалов жертвоприношения, именуемых PlaidML. Однако я хочу войти в роль обычного потребителя, забыть про то, что скрывается за фразой "использовать нейросети" и просто написать "1girl..." "Astronaut in a ocean" - и получить изображение космонавта, тонущего в луже.
Однако, огромный онлайн на серверах гугла, связанный с бесконечным количеством отаку, желающих бесплатно рисовать аниме персонажей на свой вкус и цвет не мог остаться незамеченным, как следствие ограничения не заставили себя долго ждать (на самом деле заставили - почти полгода).
В общем, пару месяцев назад таки появился в правилах использования Colab пунктик об Webui`ях разных. Но мы пользователи опытные, знаем что не пойман - не вор. Однако, всевышние силы посылают всплывающие окна, тем самым даже думать нам запрещают об нарушении правил!
![hello world! hello world!](https://habrastorage.org/getpro/habr/upload_files/bdf/817/d78/bdf817d787e5cf9544b4ab2bd3d580a2.png)
![Спасибо за предупреждение, уже отменяю! Спасибо за предупреждение, уже отменяю!](https://habrastorage.org/getpro/habr/upload_files/3ba/1df/0f6/3ba1df0f694760e3db3f7a63544a412e.png)
Выражаются последствия отклонения этого Предупреждения так: Среда выполнения падает через небольшой промежуток времени после запуска.
Я пойман, полагаю как вор... Верно?
![Ой! это что - банворды? Ой! это что - банворды?](https://habrastorage.org/getpro/habr/upload_files/738/679/7d0/7386797d0aa3f7cdba5a2482b45b1c1b.png)
Не могла же такая крупная компания быть обманута переименованием файлов, да?
Как вы уже поняли - да могла. И не только мы это поняли, но и авторы сборок Stable-Diffusion-webui и в корне решили проблему.
Они стали называть папки не Stable-Diffusion-webui а sd-webui
Как вы понимаете, тема проработала буквально неделю и ответственные люди из Google второй раз пресекли непотребства - они добавили sd-webui в банворды.
Время шло, а готовое решение всё не гуглилось... Казалось бы, используйте сгенерированный на ходу id, публикуйте свои сборки, хотя бы под другим именем - решений проблемы масса. Почему никто не выложил готовый блокнот? Есть подводные камни?
Спустя несколько месяцев после введения ограничений я решил сам написать желаемый функционал. И знаете - на это у меня ушло от силы 10 минут.
Обходим ограничения
Ну, если вся проверка безопасности выполняемой ячейки в colab сводится к поиску подстроки, то решение напрашивается само собой - обфускация. Это я изначально и реализовал, но есть проблема: запускать код блокнота нужно неким аналогом exec(), однако в блокноте мы пишем на Ipython (далее: .ipy), следовательно exec падает, видя первый же синтаксис из Ipy. Но Ipy не был бы таким крутым, если бы не мог переводиться в обычный .py одной библиотекой.
!pip install jupyter
!pip install nbconvert
!jupyter nbconvert "tmp.ipynb" --to python
И тут я понял - никакая обфускация мне и не нужна. можно просто запускать недопустимый код из .ipynb файла - и никто ничего не заподозрит. Остается:
закинуть в колаб нашу сборку webui в виде файла .ipynb
применить на нём переводчик .ipynb > .py
в среде Ipython прочитать и запустить .py обычным exec()
from google.colab import files
name, cont=list(files.upload().items())[0] # Загрузка недопустимого блокнота
with open("tmp.ipynb","w") as f: f.write(cont.decode()) # Запись его в файл
!pip install jupyter
!pip install nbconvert # Перевод из .ipynb файла в .py файл
!jupyter nbconvert "tmp.ipynb" --to python
with open("tmp.py","r") as f: exec(f.read()) # Чтение и запуск .py
после запуска этих 7 строк кода ячейка предлагает нам загрузить наш "недопустимый" блокнот.
![видим такой file picker видим такой file picker](https://habrastorage.org/getpro/habr/upload_files/6ee/0cb/735/6ee0cb735deab85097dad91e7475f57c.png)
Закидываем сюда предварительно скачанный webui stable diffusion для колаба и она его запускает, не привлекая при этом внимания бан-машины google.
Надеюсь кому-то поможет этот короткий гайд в запуске его любимого чекпоинта без напряга для локального железа.
Комментарии (9)
gluki
16.07.2023 11:09ComfyUI не требует даже этого, просто работает :)
//никак не могу понять, зачем все пишут эти "1girl" — ведь на просто "girl" он точно так же нарисует одну, при этом на "2girl" запросто может выдать и трёх, и четырёх. В чём смысл загрязнять промпт, если оно всё равно считать не умеет?
Opaspap
16.07.2023 11:09может есть натрейненые лоры или textual-inversion модели, которые конкретно 1girl считают кейвордом с большим весом.
CodeDroidX Автор
16.07.2023 11:09Это атавизм от первой sd, год назад запускал ее локально и пытался сделать большой промпт. Оно рисовало мутантов - жмыхнутых существ с кучей голов или сросшихся тел, которые распределяли заданные аттрибуты. Тогда было важно писать что персонаж должен быть ОДИН
acc0unt
16.07.2023 11:09Смысл в том, что "1girl" - это тэг в различных booru галереях. И если модель тюнили на массиве данных оттуда (что для заточенных под аниме моделей не редкость), то использование "родных" для модели тэгов может давать лучшие результаты чем просто набивка случайного текста.
fedorro
16.07.2023 11:09И тут я понял - никакая обфускация мне и не нужна.
Да и конвертация, по сути, не нужна т.к. в самом колабе есть сохранение блокнота в виде скрипта: File - Download -Download as .py
CodeDroidX Автор
16.07.2023 11:09Думал, написать ли про это в основном тексте, но раз такое дело... Оно качает всё тот-же .ipynb но только содержимое ячеек) весь магический синтаксис ipython останется на месте, и не прокатит в интерпретаторе ванильного.
druidus
Интересно, на сколько вы сократили себе время пользования этими инструментами, из-за популяризации темы?))
CodeDroidX Автор
Не так много людей прочитают эту статью, зато кто ищет - тот сможет найти. У меня была мысль что это великий заговор, и всё это время подобное всеми в тихую юзалось)