Pull to refresh

Запуск блокнотов, запрещённых Google Colab TOS или SD webui в колабе без ограничений

Level of difficultyEasy
Reading time3 min
Views9.1K
"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.

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

Tags:
Hubs:
Total votes 6: ↑5 and ↓1+7
Comments10

Articles