"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

Предупреждение: впереди вас ждет короткий гайд по запуску webui в колабе после Апреля 2023, когда данное поведение стало осуждаемым со стороны google. Если вы человек принципа и осуждаете омежек, использующих дары от google в своих корыстных целях - дальше вы не увидите ничего интересного.

Производные Stable Diffusion набрали огромную популярность, что не могло обойти стороной нагрузку серверов Google Colab, которые они на бесплатной основе предоставляли энтузиастам в сфере ML.

Я владею хоть и не самой слабой картой на текущем рынке, но она принадлежит красному вендору. Это усложняет локальный способ запуска нейросетей на ней с pipeline.to("cuda") до тёмных ритуалов жертвоприношения, именуемых PlaidML. Однако я хочу войти в роль обычного потребителя, забыть про то, что скрывается за фразой "использовать нейросети" и просто написать "1girl..." "Astronaut in a ocean" - и получить изображение космонавта, тонущего в луже.

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

В общем, пару месяцев назад таки появился в правилах использования Colab пунктик об Webui`ях разных. Но мы пользователи опытные, знаем что не пойман - не вор. Однако, всевышние силы посылают всплывающие окна, тем самым даже думать на�� запрещают об нарушении правил!

hello world!
hello world!
Спасибо за предупреждение, уже отменяю!
Спасибо за предупреждение, уже отменяю!

Выражаются последствия отклонения этого Предупреждения так: Среда выполнения падает через небольшой промежуток времени после запуска.

Я пойман, полагаю как вор... Верно?

Ой! это что - банворды?
Ой! это что - банворды?

Не могла же такая крупная компания быть обманута переименованием файлов, да?

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

Закидываем сюда предварительно скачанный webui stable diffusion для колаба и она его запускает, не привлекая при этом внимания бан-машины google.

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