Запуск блокнотов, запрещённых Google Colab TOS или SD webui в колабе без ограничений
»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!
Спасибо за предупреждение, уже отменяю!
Выражаются последствия отклонения этого Предупреждения так: Среда выполнения падает через небольшой промежуток времени после запуска.
Я пойман, полагаю как вор… Верно?
Ой! это что — банворды?
Не могла же такая крупная компания быть обманута переименованием файлов, да?
Как вы уже поняли — да могла. И не только мы это поняли, но и авторы сборок 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
Закидываем сюда предварительно скачанный webui stable diffusion для колаба и она его запускает, не привлекая при этом внимания бан-машины google.
Надеюсь кому-то поможет этот короткий гайд в запуске его любимого чекпоинта без напряга для локального железа.