HOWTO: как установить и настроить собственный ИИ на игровом ПК
Содержание
ToggleЭнтузиасты, что жаждали бы запустить на домашнем ПК большую языковую модель (large language model, LLM) современного уровня, сталкиваются с принципиальной проблемой: их машинам остро не хватает видеопамяти. Дело в том, что плотная многослойная нейронная сеть, к работе которой в конечном итоге сводится LLM, выдаёт некий результат в ходе взвешенного суммирования огромного количества — десятков и сотен миллиардов — операндов. Чтобы производить такие — сравнительно несложные, но чрезвычайно массированные — расчёты за разумное время, необходимо свести к минимуму задержки при передаче сигналов между вычислительными узлами и памятью, с которой те оперируют.
Безусловно, аргумент этот чисто количественный. Законы природы не запрещают применять для эмуляции нейронной сети исключительно центральный процессор с его 4, 8 или 16 ядрами и оперативную память DRAM. Но поскольку вычисления непосредственно в памяти в рамках классической x86-архитектуры не реализуются, потери времени при переносе небольших (обработанных считанными единицами, максимум первыми десятками ядер) пакетов данных между ЦП и ОЗУ оказываются попросту несуразными. И это проблема любых подобных вычислений: к примеру, Stable Diffusion — нейросетевая модель с открытым исходным кодом для создания изображений по текстовым описаниям — при запуске на ПК без дискретного графического адаптера генерирует простейшие картинки за многие десятки минут, тогда как на компьютере даже с не самой современной видеокартой — за пару-тройку минут максимум, а с какой-нибудь NVIDIA RTX 4080 — и вовсе за секунды. LLM ещё более требовательны как к доступному числу физических вычислителей, способных автономно и параллельно производить взвешенные суммирования (для чего почти идеально подходят ядра CUDA) так и к объёму напрямую связанной с ними памяти; при использовании дискретного графического адаптера — видеопамяти. Для запуска и эксплуатации больших языковых моделей активно применяются специализированные видеокарты — с гигантскими объёмами VRAM в десятки Гбайт на каждой, объединённые сверхскоростными мостами (NVLink, если речь идёт о продуктах NVIDIA) в кластеры из 4 или 8 единиц.
Бесспорно лучше прочих из сравнительно широко доступных видеокарт для машинного преобразования текста в картинки подойдут новейшие NVIDIA RTX 4080 и 4090; в первую очередь по причине внушительного объёма их VRAM, — 16 и 24 Гбайт соответственно. Объём ОЗУ компьютера и производительность его ЦП принципиального значения не имеют, но лучше всё-таки ориентироваться на 8 Гбайт DRAM как минимум и на хотя бы четырёхъядерный процессор — такое «железо» позволит быстрее производить служебные вычисления, необходимые для подготовки к собственно генерации изображений. Однако «лучшее» вовсе не значит «единственно возможное». Все процедуры, описанные ниже, были проделаны и все изображения сгенерированы на не самом, мягко говоря, свежем игровом ПК, повидавшем многие виды: с ЦП Intel Core i7-2600K (это не опечатка: именно 2600, а не 12600), с 16 Гбайт ОЗУ и дискретным адаптером на основе ГП NVIDIA GeForce GTX 1070 (8 Гбайт VRAM). На системном SSD была развёрнута актуальная версия Windows 10; для её идейной наследницы Windows 11 все рекомендации и указания почти наверняка можно будет использовать без изменений.
А можно ли генерировать изображения со Stable Diffusion вообще в отсутствие подходящего ПК под рукой? Да, разумеется! Онлайн совершенно бесплатно (а порой, хотя бы в ограниченных пределах, и анонимно, т. е. без требования непременной предварительной регистрации) доступен целый ряд действующих инсталляций: Stable Diffusion Playground, mage.space, Stable Diffusion Online, Dezgo и ещё множество, обнаружить которые через любой поисковик не составит труда (едва ли не единственная отечественная разработка среди них — модель Kandinsky 2.1). Понятно, что на пользователя, в особенности не имеющего возможности заплатить за визуализацию своих текстовых описаний, такие сайты накладывают немало ограничений: это и скудость выбора параметров генерации, и невозможность совершенствовать полученную базовую картинку, и кое-где даже принудительное наложение метки сайта (watermark) на готовое изображение. Кроме того, очереди на бесплатную генерацию на популярных сайтах могут быть довольно длинными. Но если очень-очень надо получить хоть какой-то визуальный образ на основе возникшего в голове сочетания слов, доступные онлайн модели — неплохое начало. Другой вариант, тоже онлайновый, — задействовать Google Colab, бесплатную платформу, что позволяет каждому обладателю учётной записи Google разворачивать в облаке корпорации так называемые блокноты (Python notebooks) для исполнения кода, написанного на языке Python. Поскольку локальная инсталляция Stable Diffusion тоже, по сути, сводится к установке на ПК среды Python и ряда специализированных скриптов на этом языке, практически всё, что возможно проделать с этой моделью на вашем компьютере, доступно и после развёртывания её в Colab. Соответствующих инструкций в Сети имеется в избытке, однако следует помнить: только платным пользователям Colab (10 долл. США в месяц и более — причём оплата картой, да) доступно исполнение блокнота на физическом серверном ГП NVIDIA A100 с его великолепной ИИ-производительностью. В противном же случае скорость генерации изображений вряд ли будет сильно выше, чем на видавшем виды локальном игровом ПК.
…но Git установить обязан
В понимании рядового пользователя установка ПО на компьютер сводится к скачиванию и запуску инсталляционного файла — после чего в системе оказывается развёрнута вожделенная программа или целая платформа; как правило, уже в виде исполняемого бинарного файла (часто с рядом дополнительных файлов — служебных библиотек, конфигурационных и пр.). У программистов, особенно ориентированных на ПО с открытым исходным кодом, подход иной: если есть программа, написанная на некоем языке, и свободно доступная среда для исполнения кода на этом же языке, к чему городить огород с бинарниками? Проще запускать программы в этой же самой среде и горя не знать. Как раз такому принципу в целом и следует логика установки Stable Diffusion.
По завершении закачки инсталлятора надо его запустить — и пройти стандартную процедуру установки, раз за разом нажимая кнопку Next. Практически повсеместно достаточно будет лишь подтвердить параметры, предлагаемые инсталлятором по умолчанию. Возможно, для начала вам захочется поменять целевой каталог установки (самое первое окно)
В окне «Select Components» необходимо будет удостовериться, что опция интеграции с «Проводником» Windows активна, равно как и две опции более никого уровня — «Git Bash Here» и «Git GUI Here». Предпоследняя окажется крайне полезна как раз для удобной и быстрой загрузки с Git проекта, позволяющего запускать графический интерфейс для взаимодействия со Stable Diffusion.
Программисты-олдфаги оценят изощрённый юмор разработчиков платформы: в окне «Choosing the default editor used by Git» по умолчанию выбран Vim — известный и заслуженный, но крайне противоречивый текстовый редактор; из мира не Linux даже, а стародавнего ещё UNIX (точнее, BSD). Не ввязываясь в дискуссию о плюсах и минусах различных редакторов эпохи исключительно текстовых компьютерных терминалов, отметим, что далёкому от этих материй пользователю (особенно пользователю Windows) имеет смысл выбрать в этом окне что-то менее остросюжетное, хотя бы банальный Notepad.
Ещё один момент: в окне «Configuring the terminal emulator to use with Git Bash» из предлагаемых опций лучше выбрать MiniTTY. Это не принципиальный вопрос, и консольное окно Windows по умолчанию тут вполне сгодится, — но из соображений лучшей совместимости (с Unicode-шрифтами, прежде всего) MiniTTY всё-таки предпочтительнее.
По завершении инсталляции в «Проводнике» Windows следует открыть папку, в которую Git был установлен, и удерживая курсор мыши в пределах этого окна (не имеет значения, на каком именно файле), нажать на правую кнопку. Откроется меню, в котором — благодаря тому, что напротив опций «Git Bash Here» и «Git GUI Here» в ходе инсталляции были проставлены галочки — появятся две новых соответствующих строчки. Нужно навести курсор на «Git Bash Here» и нажатием теперь уже левой кнопки мыши запустить тот самый терминал Mini-TTY, о котором шла речь буквально только что.
Именно из этого терминала пользователь и отдаёт команды Git — в частности, на закачку интересующих его проектов. «Закачка» в терминах этой платформы — «клонирование», т. е. создание локальной копии расположенного онлайн кода, поэтому требуемая команда выглядит следующим образом:
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
AUTOMATIC1111 — и есть название интересующего нас проекта веб-интерфейса для работы со Stable Diffusion. Это именно веб-интерфейс: доступ к нему производится через браузер; по умолчанию только с локального ПК, но при желании можно открыть его и для внешних пользователей — правда, вероятно, придётся повозиться с настройками брандмауэра на своём маршрутизаторе. Это, пожалуй, наиболее популярный на сегодня интерфейс для работы со Stable Diffusion: хотя имеются и другие подобные проекты, широта возможностей контроля над процессом генерации и множество доступных плагинов делают AUTOMATIC1111 отличным инструментом для экспериментирования.
Внимание, модель!
Интерфейс установлен, пользователь перед компьютером есть, — самое время загрузить собственно Stable Diffusion, т. е. модель на основе машинного обучения для преобразования текста в графический образ (text-to-image model), написанную на языке Python. К ней впервые предоставил свободный доступ 22-го августа 2022 г. сам же её разработчик — компания Stability.ai, специализирующаяся на развитии генеративных ИИ с открытым кодом. В основе Stable Diffusion лежит латентная диффузия: изначально в качестве базы для каждого нового изображения генерируется мешанина разноцветных точек на основе достаточно большого целого числа — «затравочного зерна» (seed) или попросту затравки, на основе которой работает псевдослучайный алгоритм такой генерации и которая в дальнейшем, совместно с текстом подсказки и другими параметрами, определяет конечный вид готового изображения.
Загруженный файл модели v-1-5-pruned-emaonly.safetensors надо поместить в специально предназначенную для моделей папку внутри установочного каталога Stable Diffusion: /models/Stable-diffusion. Изначально она пуста, если не считать текстового файла нулевой длины с говорящим наименованием «Put Stable Diffusion checkpoints here» — «чекпойнтами» как раз и называют файлы с натренированными на определённым наборе картинок весами для данной нейросети.
Для корректной работы системы по умолчанию требуется, чтобы базовый чекпойнт — тот, что будет сразу загружаться в память при запуске Stable Diffusion, — носил название «model», однако помимо него, в этой папке может располагаться сколько угодно чекпойнтов. Поэтому следует либо переименовать «v-1-5-pruned-emaonly.safetensors» в «model.safetensors», либо сохранить прямо здесь же его копию с таким именем.
В ходе установки Python 3.10.6 на самом первом экране инсталляции потребуется поставить галочку напротив строки «Add Python 3.10 to PATH» — чтобы у Windows не возникало проблем с поиском соответствующих исполняемых файлов. Прочие опции в последующих окнах можно оставить нетронутыми.
Да, и кстати: хорошо бы на всякий случай установить самые свежие из доступных драйверов для используемого графического адаптера, а заодно и CUDA Toolkit с сайта NVIDIA. Лишним не будет, поскольку обеспечиваемая этим пакетом поддержка инструкций xFormers позволяет Stable Diffusion и схожим text2image-моделям эффективнее использовать видеопамять. Чтобы узнать, имеется ли уже в системе CUDA Toolkit, и какова текущая версия драйверов, следует выполнить из командной строки Windows команду
nvidia-smi
И если позиция «CUDA Version» в выдаче отсутствует, либо номер этой версии меньше 11.7, имеет смысл скачать и проинсталлировать новую.
И вот, собственно, волнительный момент: первый запуск Stable Diffusion 1.5 с базовым чекпойнтом на вашем локальном ПК! Для этого теперь, когда всё необходимое ПО закачано и подготовлено, в «Проводнике», где открыт каталог stable-duffusion-webui, нужно дважды щёлкнуть левой кнопкой мыши по файлу webui-user.bat. Откроется окно терминала, в котором будут появляться служебные сообщения о производимых системой операциях. Сперва ей потребуется произвести ряд донастроек программного окружения, так что первый запуск может потребовать 5-10 минут, — но в дальнейшем всё будет происходить значительно быстрее.
Обратите внимание, что в ходе установки система сообщает об обнаружении новой версии pip — и сразу же предлагает прямую ссылку для её установки. В принципе, это не обязательный момент, но pip — служебный пакет для управления зависимостями между пакетами (Python package manager), и как раз его — в отличие от рекомендованной версии самого Python — обновить лишним не будет.
Скопировав прямо из терминального окна соответствующую команду (разумеется, точный путь до исполняемого файла будет зависеть от того, в какой каталог на данном ПК установлен Stable Diffusion), достаточно просто вставить её в системное поле поиска, что располагается слева на панели управления Windows 10/11, и нажать на «Enter».
Итак, модель Stable Diffusion установлена и запущена. Можно уже приступать к рисованию? Почти: осталось лишь произвести тонкую настройку производительности, чтобы оптимизировать работу системы в дальнейшем. Остановим пока что работу пакета, нажав в активном терминале (открывшемся, напомним, после запуска файла webui-user.bat из «Проводника») клавиши «Ctrl» и «C» одновременно, а затем после появления подсказки введя «y» с подтверждающим «Enter». Окно терминала закроется после этого автоматически.
Обратимся снова к «Проводнику» и откроем уже знакомый файл с параметрами запуска webui-user.bat для редактирования: для этого нужно, подведя к нему курсор, нажать на правую кнопку мыши, а в появившемся меню выбрать опцию «Изменить».
Вот так должен выглядеть webui-user.bat после редактирования. Здесь добавлены аргументы командной строки
—xformers —lowvram —no-half-vae ,
а также установлено значение переменной
SAFETENSORS_FAST_GPU=1 .
Кратко поясним, что здесь к чему. Xformers — точнее, xFormers — это инструментарий для ускорения ИИ-вычислений, производимых с участием трансформеров, что применяются практически во всех современных диффузионных моделях — преобразователях текстовых подсказок в изображения, не исключая и Stable Diffusion. Навскидку, на GTX 1070 указание аргумента —xformers при запуске системы ускоряет при прочих равных получение результата едва ли не вдвое. Правда, имеются основания утверждать, что xFormers добавляют изрядно стохастики в генеративный процесс, так что воспроизвести однажды полученную картинку с теми же стартовыми параметрами (затравка-seed, чекпойнт, CFG, подсказки и пр.) со стопроцентной точностью уже не удастся. В любом случае, владельцам графических адаптеров с менее чем 12 Гбайт видеопамяти применять xFormers, скорее всего, придётся, поскольку этот инструментарий за счёт оптимизации вычислений ощутимо снижает объём используемой VRAM — и тем самым делает возможной дальнейшую ИИ-обработку полученных картинок внутри Stable Diffusion, включая до- и перерисовку, увеличение масштаба с наращиванием детализации и т. п.
Смысл —lowvram куда более очевиден: это указание системе на то, что видеопамяти в её распоряжении немного. В перечне доступных оптимизаций AUTOMATIC1111 указаны и этот параметр, и не так сильно сказывающийся на производительности (но зато и более требовательный к объёму памяти) —medvram. В отношении —lowvram приговор разработчиков лаконичен: «Devastating for performance». При использовании —medvram модель не загружается в видеопамять вся, а разбивается на три блока, каждый из которых подтягивается в VRAM последовательно, по мере необходимости, но целиком; —lowvram же дробит наиболее объёмистый из этих модулей на ещё более мелкие фрагменты, там самым позволяя (теоретически; лично не проверялось) трансформировать текстовые подсказки в изображения даже на ГП с 2 Гбайт видеопамяти, — но ценой заметного увеличения времени работы.
Ещё одна дописанная нами в этот файл строка
SAFETENSORS_FAST_GPU=1
тоже направлена на ускорение работы системы. Здесь использована та особенность формата .safetensors, что представленные в нём веса модели возможно оказывается загрузить напрямую в видеопамять, минуя этап первоначальной подгрузки в основное ОЗУ.
Собственно, всё: сохранив изменения в webui-user.bat и закрыв его, снова запускаем этот файл двойным щелчком — и наблюдаем, как система (уже с оптимизированными параметрами) приходит в рабочее состояние. После появления надписи «Running on local URL» самое время открыть в браузере новую вкладку и набрать в ней адрес, по которому доступен веб-интерфейс AUTOMATIC1111, — http://127.0.0.1:7860 .
Вот примерно так он и выглядит изначально. Наконец-то пришла пора приниматься за творчество! Точнее, за побуждение ИИ к изобразительному действию путём выдачи ему текстовых подсказок.
Как художник художнику
Нет ничего проще: в основное поле для ввода (Prompt) впишем для начала одно-единственное слово «robot».
Оставим поле Negative prompt пустым, не будем трогать другие параметры, только ползунок Batch size (размер пакета) передвинем вправо до упора — чтобы получать сразу восемь картинок с различными затравками (seed) одновременно: так проще будет выбирать достойную дальнейшей обработки заготовку. Дальше следует нажать на огромную оранжевую кнопку Generate — и, если всё было сделано должным образом, через некоторое время Stable Diffusion визуализирует полученную подсказку.
За ходом процесса можно наблюдать в терминальном окне, где запущена сама система, — там будет появляться детальная информация о времени, затраченном на загрузку рабочих параметров, и даваться оценка продолжительности работы.
Ту же оценку можно видеть на фоне ползущей вправо синей полоски прогресса и в графическом веб-интерфейсе. Там же — для справки — система демонстрирует некоторые промежуточные результаты процесса диффузии: как из исходного «белого щума» постепенно проявляется ожидаемое изображение.
М-да. Результаты не то чтобы разочаровывают, — скорее, не впечатляют. Роботы в этих фигурках вполне угадываются, но какие-то они… невыразительные, что ли. Нельзя ли как-нибудь повысить качество выдачи?
Можно, и даже нужно: вся прелесть ИИ-преобразования текста в картинки заключается как раз не в самом рисовании роботом неких образов по заданной подсказке, а в том, насколько разнообразными и порой неожиданными могут быть плоды его трудов — в зависимости от приложенных оператором мыслительных усилий. Для начала задействуем поле Negative prompt, вписав туда то, чего не хочется видеть в итоговой картинке, а именно — low quality. Далее нажмём на зелёный треугольник из стрелочек, напоминающий условное обозначение вторичной переработки: это позволит зафиксировать случайно подобранную системой затравку (seed; в данном случае — 3423357652) для последующих генераций, что сделает оценку влияния вводимых нами параметров на итоговую картинку более наглядным.
Кстати, в домашнем каталоге Stable Diffusion есть теперь папка output, в которой хранятся результаты: сами картинки по отдельности (txt2img-images) и обзорные сборки пакетных генераций (txt2img-grids). Внутри этих папок изображения помещаются в помеченные текущей датой подкаталоги.
Как можно видеть, уже простейшая негативная подсказка сделала изображения более выразительными. Обратите внимание, как система именует их по умолчанию: сперва идёт сквозной номер генерации за текущую дату, далее через дефис — использованная для создания данной картинки затравка (seed). То есть здесь первому изображению в первом пакете (00000-3423357652) соответствует первое во втором (00008-3423357652) и т. д.
Добавим определённости в то, какими именно нам хочется видеть изображаемых роботов. В позитивные подсказки вместо просто «robot» напишем «fighting robot, shiny steel», а в негативные — один из стандартных нежелательных наборов контекстуальных терминов (undesired content prompt): «lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name». Гораздо интереснее, не правда ли?
Общее правило в искусстве составления подсказок (promptsmithing, по аналогии со златокузнечным делом — goldsmithing) таково: всё, что точно должно присутствовать на картинке, прописывается в позитивные подсказки; всё, чего там ни при каких условиях не должно появляться — в негативные; прочее отдаётся на откуп ИИ-художнику. При этом следует помнить, что чем ближе то или иное слово к началу подсказки, тем значительнее оно повлияет на итоговую картинку. Вообще, широта возможностей при составлении подсказок открывает огромный простор для экспериментаторства. В сообществе text2image-энтузиастов выработано уже немало схем (которые в любом случае следует подвергать конструктивному сомнению) их структурирования — например, такая:
Subject, Medium, Style, Artist, Website, Resolution, Additional details, Color, Lighting
(т. е. объект, среда, стиль, художник, веб-сайт, разрешение, дополнительные детали, цветовая палитра, освещение)
Попробуем обогатить нюансами нашу исходную подсказку, выстроив слова в ней следующим образом (перевод строки в интерфейсе AUTOMATIC1111 просто игнорируется обработчиком текста, что позволяет использовать его для пущей наглядности):
fighting robot,
digital painting,
hyperrealistic,
by Viktor Vasnetsov,
trending on ArtStation,
extremely high details, sharp focus, depth of field,
futuristic, stunningly beautiful, dystopian,
iridescent shiny steel,
cinematic lighting, dynamic lighting, sparks and flashes
Негативную подсказку оставим прежней. Не следует удивляться появлению ссылки на Васнецова: Stable Diffusion при обучении ознакомили с работами множества художников, так что их имена в подсказке оказывают влияние на общий стиль изображения — пусть даже сам этот реальный художник в своей практике сражающихся роботов не писал. Упоминание известного среди мастеров и поклонников цифровых художеств сайта ArtStation тоже не случайно: популярные на нём (trending) работы в целом имеют весьма определённую стилистику, и её система машинного обучения тоже вполне успешно ухватывает. Ещё одна деталь: квадратные изображения Stable Diffusion 1.5 генерирует лучше всего (в том смысле, что генерация эта порождает минимум артефактов вроде искажённых пропорций человеческих тел или нарушений перспективы), поскольку обучалась на картинках с разрешением 256х256 и 512х512 пикселов. Однако AUTOMATIC1111 позволяет на страх и риск пользователя менять эти размеры, в том числе получая изображения альбомной или книжной ориентации, а не только квадратные. Базовая модель Stable Diffusion 1.5 не очень уверенно справляется с прямоугольниками (другие чекпойнты делают это лучше, плюс есть ещё целый ряд трюков, но об этом позже), но всё же в размере 512х768 пикселов должна выдавать более или менее приемлемый результат. Сдвинем поэтому ползунок «Height» на позицию 768 (или можно просто набрать это число вручную в соответствующем окошке) — и насладимся уже более впечатляющим результатом.
Продолжим изучать органы управления AUTOMATIC1111, обратив внимание на выпадающее меню Sampling method, где по умолчанию выбрано «Euler a». Как уже упоминалось, работа диффузионной генеративной модели заключается в поэтапном вычитании из исходного образа (квадрата или прямоугольника, заполненного «белым шумом») другого шума, уже упорядоченного (predicted noise), — специальным образом сгенерированного на основе текстовой подсказки. Собственно процесс снижения уровня шума (denoising) называется также сэмплингом (sampling), поскольку на каждом этапе последовательного снижения зашумлённости картинки получается новый её образчик (sample) — и, собственно, сколько именно шагов на этом пути будет пройдено, контролирует параметр Sampling steps. Для большинства чекпойнтов достаточно 20-30 шагов.
А вот то, каким именно образом модель решает, сколько шума и на каких именно участках надо оставить на картинке на каждом этапе, и определяется методом сэмплинга; говоря математическим языком — тем или иным методом градиентного спуска. Наиболее простой и быстрый (но и дающий менее выразительные с художественной точки зрения результаты) — это уже использованный нами Euler (см. схема Эйлера). Другие сэмплеры могут давать более интересные и/или более сложные результаты с бóльшим или меньшим учётом различных фрагментов подсказки, — здесь нет ни единого рецепта, ни общего правила, что считать более предпочтительным. Однако поменяв Euler на более «продвинутый», хотя и требующий большего времени на исполнение сэмплер DPM++ SDE Karras (Каррас — фамилия одного из авторов оригинальной статьи, где описан целый ряд таких методов), мы ровно с теми же самыми позитивной и негативной подсказками и с той же затравкой (seed) получим в целом более живописные изображения.
Продолжаем усложнять позитивную подсказку: уж слишком получающиеся роботы трансформерообразны, — добавим здравый элемент стимпанка:
fighting robot,
in ancient alien ruins,
digital painting,
hyperrealistic,
by Viktor Vasnetsov,
trending on ArtStation,
extremely high details, sharp focus, depth of field,
steampunk, stunningly beautiful, retrofuturistic,
iridescent shiny brass,
cinematic lighting, dynamic lighting, sparks and flashes
Разве не хорошо? Особенно вон те двое, что играют в чехарду (как раз здесь проявляется самотворчество цифрового художника: в заданной нами подсказке ничего ни про двух роботов, ни про их взаимное расположение не говорилось). Правда, становятся очевидными артефакты вертикальной композиции; прежде всего — отъединённые конечности. Чтобы бороться с этим, есть разные способы.
Попробуем для начала переставить стили (указание на художника и сайт) в конец, а заодно убрать «ретрофутуризм» как термин из подсказок — слишком уж невнятно определён, может сбивать модель с толку, — и добавим больше подразумеваемых им деталей: янтарно светящиеся лампы, бронзовые трубки, медные зубчатые колёса, хромированные цепи, циферблаты слоновой кости, вентили эбенового дерева:
fighting robot,
in ancient alien ruins,
digital painting,
hyperrealistic,
extremely high details, sharp focus, depth of field,
steampunk, stunningly beautiful,
iridescent shiny metal, amber neon tubes, brass pipes, copper gears, chrome chains, ivory dials, ebony valves
cinematic lighting, dynamic lighting, sparks and flashes,
by Viktor Vasnetsov,
trending on ArtStation
Вот это поворот! Деталей стало явно больше.
А если вовсе отказаться от двух последних строк в поле позитивной подсказки? Пожалуй, это отсутствие заёмного стиля — само по себе стиль оригинальной Stable Diffusion 1.5 при работе с довольно развёрнутым текстовым вводом: несколько сумбурный, зато высокодетализированный.
Комбинируя комбинатора
Не раз уже мы называли используемый с AUTOMATIC1111 чекпойнт «v-1-5-pruned-emaonly.safetensors» (переименованный, напомним, в «model.safetensors») базовым. Значит, должны быть и какие-то не-базовые, производные? Так и есть: на основе изначальной модели Stable Diffusion 1.5 (только в версии pruned, без emaonly) энтузиасты производят дотренировку, прогоняя через систему — тем же путём, что пропутешествовали исходные миллиарды картинок — ещё несколько сотен, или тысяч, или на сколько у них хватит терпения и вычислительных мощностей. Картинки эти, соответствующим образом подобранные и аннотированные, расширяют горизонты восприятия, если так можно выразиться, модели: она начинает значимо чаще выдавать изображения в стимпанковской стилистике без дополнительных подсказок, или лучше начинает рисовать фэнтезийных эльфов (базовый чекпойнт в ответ на подсказку «elf» c большой вероятностью изобразит помощника Санты в зелёном колпачке, а не горделивого обитателя зачарованных лесов), или ещё каким-то образом модифицирует результаты своей генерации.
Чего ради стоит возиться с чекпойнтами, мы покажем на примере одной из наиболее популярных сегодня доработок Stable Diffusion 1.5 под названием Deliberate v.2. Загрузить этот файл в формате .safetensors логичнее всего со страницы данного проекта на уже знакомом нам репозитории Hugging Face, после чего надо поместить дотренированную модель в ту же папку, где уже находится базовая — model.safetensors. На сей раз переименовывать ничего не требуется.
Перезапускать систему целиком (закрывать окно терминала и стартовать webui-user.bat заново) не надо: достаточно нажать на синюю кнопку с белыми полукруглыми стрелочками у выпадающего меню Stable Diffusion checkpoint, затем открыть это меню, активировать появившуюся опцию Deliberate_v2.safetensors — и снова нажать на Generate.
Небо и земля! Фигуры роботов стали куда более статичными, но проработка и взаимосогласованность деталей определённо улучшились. В этом сила производных (от базовой модели) чекпойнтов: они позволяют с меньшими усилиями — со стороны конечного пользователя — получать более эстетически привлекательные изображения с теми же подсказками и затравками, чем ванильная Stable Diffusion 1.5.
А теперь попробуем вернуть художников (сайт пока всё-таки упоминать не станем: понятие стиля для него в целом более размыто, чем для индивидуальных живописцев). Самой последней строкой в поле позитивных подсказок укажем:
(by Viktor Vasnetsov:0.7), (by H. R. Giger:0.9)
Кстати, если забыть закрыть одну из скобок, система предупредит о возможной ошибке: число параметров генерации (в правом верхнем углу соответствующего окошка; в данном примере — 86/150) окажется обведено тревожной красноватой рамочкой.
Имя Ханса «Рюди» Гигера известно немногим, однако стилистика его работ в жанре фантастического реализма знакома каждому, кто видел хотя бы пару кадров из культового фильма «Чужой», — для которого именно этот художник разработал и образ ксеноморфа, и общий дизайн. Что же касается скобочек и цифр внутри, то это принятый в AUTOMATIC1111 способ изменения значимости (относительного веса) конкретной подсказки. По умолчанию любая из них имеет условный вес 1; если просто заключить подсказку в круглые скобки, это будет соответствовать приданию ей веса 1,1 (т. е. она станет более значимой для генерации данного изображения, чем соседние), а если нужно установить какой-то иной вес, его указывают явно после двоеточия. Обычно стоит избегать весов менее 0,5 (по причине пренебрежимой малости влияния таких подсказок на итоговую картинку) и более 1,5 (результат может оказаться графически непредсказуемым), но в любом случае это ещё одна степень свободы опосредованного искусственным интеллектом творчества — которой энтузиасты охотно пользуются. Выставив для стилей обоих этих художников невысокие веса, мы избежим чрезмерного влияния их на итоговую картинку (роботизированный Чужой в сарафане уж точно не появится здесь), но живости и индивидуальности ей безусловно прибавим.
Помимо полноценных дотренированных чекпойнтов, известны и другие методы обучения генеративной модели text2image определённой стилистике или рисованию новых объектов, не входивших в первичную тренировочную базу. Один из таких методов — LoRA (low-rank adaptation of large language models, низкоуровневая адаптация LLM), что подразумевает внедрение дополнительных обучаемых нейронных слоёв в уже готовые (натренированные в ходе создания базовой модели) блоки трансформеров. Как это реализуется математически — для нас в данном случае принципиального значения не имеет; важно понимать, как эти пользоваться. Вот, к примеру, на сайте Civitai.com, открытом репозитории множества ресурсов для энтузиастов text2image-генераций, имеется LoRA под названием SteampunkAI. Она создана на основе чекпойнта, специально дообученного для рисования в соответствующем стиле, и может применяться с любым другим чекпойнтом, обеспечивая вполне узнаваемую и зрелищную стилистику. Чтобы скачать соответствующий файл в формате .safetensors, достаточно нажать на длинную синюю кнопку на правой стороне веб-страницы.
А поместить полученный файл, steampunkAI10MBLora_10mb (да, он занимает всего около 10 Мбайт, — разительный контраст с чекпойнтом!) нужно будет в специально для того предназначенный каталог models\Lora.
Для активации LoRA служит особая команда в треугольных скобках с указанием точного её наименования и условного веса (который в зависимости от желания оператора может быть и меньше, и больше единицы):
<lora:steampunkai10MBLora_10mb:1> steampunkai,
fighting robot,
in ancient alien ruins,
digital painting,
hyperrealistic,
extremely high details, sharp focus, depth of field,
steampunk, stunningly beautiful,
iridescent shiny metal, amber neon tubes, brass pipes, copper gears, chrome chains, ivory dials, ebony valves
cinematic lighting, dynamic lighting, sparks and flashes,
(by Viktor Vasnetsov:0.7), (by H. R. Giger:0.9)
Негативная подсказка по-прежнему неизменна.
В целом результат очень хорош, проработка деталей фантастическая, но какими-то эти роботы враз стали… статичными, что ли? И резко однотипными. Однако и с этой напастью ИИ-энтузиасты научились бороться, применяя такое сильнейшее шаманство, как clip skip. Сейчас поясним, что это значит.
Но сперва слегка подкорректируем интерфейс AUTOMATIC1111. В настройках — Settings — веб-интерфеса надо открыть раздел User interface, и в нём — окошечко Quicksettings list. Это перечисление того, какие элементы управления будут вынесены на самый верх заглавной странницы интерфейса. Изначально там был единственный параметр, sd_model_checkpoint, — именно его наличие сделало доступным выпадающее меню, в котором мы заменили model.safetensors на Deliberate_v2.safetensors.
Добавим туда через запятую sd_vae, sd_hypernetwork, CLIP_stop_at_last_layers, sd_hypernetwork_strength (начиная с версии 1.2.0 AUTOMATIC1111 добавление это производится из выпадающего меню: достаточно начать набирать наименование желаемого параметра, и список предлагаемых опций будет автоматически сужаться).
Прописав нужные параметры, вернёмся прокруткой в начало страницы и нажмём огромную оранжевую кнопку Apply settings, а затем — соседнюю с ней Reload UI.
После возврата на заглавную страницу веб-интерфейса (вкладка txt2img) убеждаемся, что верхняя её часть теперь содержит два дополнительных выпадающих меню (SD-VAE, Add hypernetwork to prompt) и ползунок — собственно, Clip skip. Вот его-то и следует передвинуть в позицию 2. Но с какой целью?
После запуска генерации картинки первым в работу вступает CLIP — построенный на трансформерах кодировщик текста в токены, используемые в дальнейшем уже собственно диффузионной моделью, чтобы «убрать ненужный шум» с заготовки будущего изображения. Как и полагается такому кодировщику, он сам представляет собой многослойную нейросеть (для Stable Diffusion 1.5 — 12 слоёв), на каждом из которых, грубо говоря, производится дополнительная конкретизация подсказки. Скажем, невозможно изобразить «дом вообще», как концептуальную идею: модели необходимо определиться со стилистикой (будет ли это фото, реалистичный тщательный рисунок, стилизация из детской книжки, беглый набросок и т. п.), общими параметрами (этажность, форма крыши, наличие/отсутствие трубы), цветом, числом видимых окон и дверей и ещё множеством параметров. Хорошо, если подсказка детальная: «дом ведьмы» уже значительно сузит пространство выбора вариантов, но всё равно оставит значительный простор для (нет, не воображения, — у современных ИИ его всё ещё нет) псевдослучайного комбинирования вариантов, возникших на основе обучения модели. Ещё раз: это очень грубое описание, поскольку, как и всякая многослойная плотная нейросеть, работа CLIP принципиально не интерпретируема на внутреннем уровне и представляет собой по сути «чёрный ящик». Так вот, на финальном шаге CLIP должна передать диффузионной модели достаточно подробные указания (в виде набора токенов), какая именно картинка должна скрываться в очередном заполненным «белым шумом» прямоугольнике. И чем лучше система натренирована на сравнительно узком наборе изображений — а как раз этим нередко страдают «авторские» чекпойнты, — тем более однотипные картинки она станет выдавать при различных затравках (seed). Что, собственно, хорошо иллюстрирует только что полученная нами галерея практически паспортных фотокарточек квазистимпанковских роботов. Да, каждая из них детально проработана, но именно все разом они явно демонстрируют некую перетренированность используемой диффузионной модели. Скорее всего, это вина не чекпойнта Deliberate, а узкотематической LoRA, так что поиграв с её значимостью (заменив «:1» внутри треугольных скобок на «:0.7» для начала), можно было бы сгладить негативный эффект. Но мы поступим иначе, задав Clip skip = 2, т. е. заставив систему прерывать формирование структуры инструкций для диффузионной модели за шаг до исходно намеченного финала. Это словно бы несколько собьёт генератор токенов с толку — и во множестве случаев как раз предпоследний, а не финально вылизанный, набор инструкций для ИИ-рисования и породит подлинно привлекательную на человеческий взгляд картинку. В качестве самостоятельного упражнения попробуйте и другие варианты Clip skip, вплоть до максимально возможного, — результат вас не на шутку удивит.
Практическое отступление: после перезагрузки интерфейса пропали все наши подсказки и настройки во вкладке txt2img. Можно, конечно, восстановить их вручную по предыдущим записям, — но зачем, если AUTOMATIC1111 помещает все важнейшие данные прямо в генерируемые картинки; в поля текстовых комментариев, предусмотренные стандартами PNG и JPEG? Обратите внимание на вкладку PNG Info в веб-интерфейсе: при переходе на неё появляется область для загрузки изображений, Поместим туда (просто перетащив мышкой) из окна «Проводника» Windows, в котором открыта папка txt2img-grids, последнюю из сгенерированных картинок а формате PNG, — и справа появится вся информация, сохранённая в её метаданных. Теперь достаточно нажать на «Send to txt2img», чтобы все использованные для генерации данной картинки подсказки и параметры, вплоть до Seed, оказались на своих местах. Надо лишь только вернуть Batch size значение 8, — иначе будет сгенерирована не подборка, как всё время до сих пор, а только единичная картинка с исходной затравкой. В подборке же у каждой последующей картинки затравка (seed), напомним, отличается от предыдущей на единицу.
Итак, запускаем генерацию вновь с прежними параметрами (восстановленными через PNG Info), но с clip skip = 2. Ну вот, разительный контраст! Разнообразие явно увеличилось, а где-то даже и динамика появляется.
А что если перевести изображение из книжного формата в альбомный? Вертикальная композиция человекоподобной сущности всё-таки подразумевает некую портретность, соседствующую со статичностью, тогда как растянутая по ширине картинка может предоставить больше простора для динамики. Для простой перемены местами размерностей (чтобы вместо 512х768 пикселей стало 768х512) достаточно нажать на кнопку со стрелочками вверх и вниз рядом с ползунками Height и Width. Попробуем сгенерировать так.
Очень неплохо! Но простор для улучшения всё ещё есть.
Поиграем снова с порядком расположения подсказок:
<lora:steampunkai10MBLora_10mb:1> steampunkai,
fighting robot,
in ancient alien ruins,
iridescent shiny metal, amber neon tubes, brass pipes, copper gears, chrome chains, ivory dials, ebony valves
steampunk, stunningly beautiful,
digital painting,
hyperrealistic,
extremely high details, sharp focus, depth of field,
cinematic lighting, dynamic lighting, sparks and flashes,
(by Viktor Vasnetsov:0.7), (by H. R. Giger:0.9)
Выходит вполне достойно.
Следующий шаг — оптимизация негативной подсказки. Стандартный набор отрицаний, который мы применяли до сих пор, хорош своей относительной универсальностью, но всё же он не охватывает всего возможного круга недочётов, могущих возникнуть при преобразовании текста в изображение — особенно в ходе рисования роботов. Более универсальное решение даёт так называемая текстовая инверсия (textual inversion), ещё одна, наряду с LoRA, разновидность частной доработки генеративной модели. С уже знакомого сайта Huggingface скачаем ставшим привычным способом текстуальную инверсию Bad prompt, поместим её в файл в папку Git\stable-diffusion-webui\embeddings . Обратите внимание: не в \stable-diffusion-webui\models, где располагаются каталоги для самих моделей и LoRA, а на одном уровне с \models.
А в поле негативной подсказки вместо всего того, что там было, поместим теперь вызов текстовой инверсии с параметром значимости 0,8:
(bad_prompt:0.8)
И вот это уже совершенно другое дело!
Но тем не менее всё это — лишь начало; самые первые этапы погружения в бездонную глубину мира диффузных моделей для преобразования текста в изображения. Возможностей для дальнейшего совершенствования картинок Stable Diffusion и AUTOMATIC1111 предлагают немало: это и перерисовка отдельных фрагментов полученной картинки, и укрупнение её до других форматов (скажем, из квадратной заготовки можно сделать прямоугольную — так, что вновь сгенерированные элементы будут дополнять уже имевшиеся бесшовно), и почти неограниченное увеличение в размерах, и создание многофигурных композиций по шаблону, и ещё многое, многое другое… И, что самое главное, для освоения всего этого великолепия достаточно лишь простенького игрового ПК, минимальных навыков в установке ПО и — вот это существенный момент — титанического усердия. Но у тех, кто осилил настоящий киберпрактикум до самого конца, оно вне всякого сомнения имеется. Надеемся получить обратную связь от читателей, взявших на себя труд установить и запустить Stable Diffusion на локальном ПК или в Google Colab, либо поднаторевших в работе с веб-сайтами для рисования картинок по текстовым подсказкам. В планах у нас дальнейшее углубление в тему — в частности, освоение расширения изображения (outpaint), перерисовки его отдельных фрагментов (inpaint), масштабирования (upscale), выявления текстовых подсказок из готовых картинок, не содержащих метаданных (interrogate), рисования по шаблонам (ControlNet) и ещё многое другое. Интересно было бы знать, с какими затруднениями и ограничениями на тропе ИИИИ (ИИзобразительного ИИскусства) вы успели уже столкнуться. Оставляйте ваши комментарии, попытаемся разобраться вместе!
Источник: