"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.

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

Комментарии (9)


  1. druidus
    16.07.2023 11:09

    Интересно, на сколько вы сократили себе время пользования этими инструментами, из-за популяризации темы?))


    1. CodeDroidX Автор
      16.07.2023 11:09

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


  1. gluki
    16.07.2023 11:09

    ComfyUI не требует даже этого, просто работает :)


    //никак не могу понять, зачем все пишут эти "1girl" — ведь на просто "girl" он точно так же нарисует одну, при этом на "2girl" запросто может выдать и трёх, и четырёх. В чём смысл загрязнять промпт, если оно всё равно считать не умеет?


    1. Opaspap
      16.07.2023 11:09

      может есть натрейненые лоры или textual-inversion модели, которые конкретно 1girl считают кейвордом с большим весом.


      1. CodeDroidX Автор
        16.07.2023 11:09

        так и есть


    1. CodeDroidX Автор
      16.07.2023 11:09

      Это атавизм от первой sd, год назад запускал ее локально и пытался сделать большой промпт. Оно рисовало мутантов - жмыхнутых существ с кучей голов или сросшихся тел, которые распределяли заданные аттрибуты. Тогда было важно писать что персонаж должен быть ОДИН


    1. acc0unt
      16.07.2023 11:09

      Смысл в том, что "1girl" - это тэг в различных booru галереях. И если модель тюнили на массиве данных оттуда (что для заточенных под аниме моделей не редкость), то использование "родных" для модели тэгов может давать лучшие результаты чем просто набивка случайного текста.


  1. fedorro
    16.07.2023 11:09

    И тут я понял - никакая обфускация мне и не нужна.

    Да и конвертация, по сути, не нужна т.к. в самом колабе есть сохранение блокнота в виде скрипта: File - Download -Download as .py


    1. CodeDroidX Автор
      16.07.2023 11:09

      Думал, написать ли про это в основном тексте, но раз такое дело... Оно качает всё тот-же .ipynb но только содержимое ячеек) весь магический синтаксис ipython останется на месте, и не прокатит в интерпретаторе ванильного.