Содержание статьи
HOWTO: как установить и настроить собственный ИИ на игровом ПК
Что такое нейросеть
Итак, модель Stable Diffusion установлена и запущена. Можно уже приступать к рисованию? Почти: осталось лишь произвести тонкую настройку производительности, чтобы оптимизировать работу системы в дальнейшем. Остановим пока что работу пакета, нажав в активном терминале (открывшемся, напомним, после запуска файла webui-user.bat из «Проводника») клавиши «Ctrl» и «C» одновременно, а затем после появления подсказки введя «y» с подтверждающим «Enter». Окно терминала закроется после этого автоматически.
Скопировав прямо из терминального окна соответствующую команду (разумеется, точный путь до исполняемого файла будет зависеть от того, в какой каталог на данном ПК установлен Stable Diffusion), достаточно просто вставить её в системное поле поиска, что располагается слева на панели управления Windows 10/11, и нажать на «Enter».
Однако «лучшее» вовсе не значит «единственно возможное». Все процедуры, описанные ниже, были проделаны и все изображения сгенерированы на не самом, мягко говоря, свежем игровом ПК, повидавшем многие виды: с ЦП Intel Core i7-2600K (это не опечатка: именно 2600, а не 12600), с 16 Гбайт ОЗУ и дискретным адаптером на основе ГП NVIDIA GeForce GTX 1070 (8 Гбайт VRAM). На системном SSD была развёрнута актуальная версия Windows 10; для её идейной наследницы Windows 11 все рекомендации и указания почти наверняка можно будет использовать без изменений.
В окне «Select Components» необходимо будет удостовериться, что опция интеграции с «Проводником» Windows активна, равно как и две опции более низкого уровня — «Git Bash Here» и «Git GUI Here». Предпоследняя окажется крайне полезна как раз для удобной и быстрой загрузки с Git проекта, позволяющего запускать графический интерфейс для взаимодействия со Stable Diffusion.
AUTOMATIC1111 — это и есть название интересующего нас проекта веб-интерфейса для работы со Stable Diffusion. Это именно веб-интерфейс: доступ к нему производится через браузер; по умолчанию только с локального ПК, но при желании можно открыть его и для внешних пользователей — правда, вероятно, придётся повозиться с настройками брандмауэра на своём маршрутизаторе. Это, пожалуй, наиболее популярный на сегодня интерфейс для работы со Stable Diffusion: хотя имеются и другие подобные проекты, широта возможностей контроля над процессом генерации и множество доступных плагинов делают AUTOMATIC1111 отличным инструментом для экспериментирования.
Добавим определённости в то, какими именно нам хочется видеть изображаемых роботов. В позитивные подсказки вместо просто «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». Гораздо интереснее, не правда ли?
⇡#Подползая к роботам
Почему среди прочих вариантов представления Stable Diffusion лучше выбирать именно этот? Первое соображение — размер: версия без «emaonly» тянет на 7,7 Гбайт, а выбранная нами — менее чем на 4,3 Гбайт. Для дальнейшей тренировки модели (натаскивания её на новых изображениях; тех, что не вошли в исходный пул обучения в 2,3 млрд аннотированных картинок) лучше подойдёт более полный и весомый вариант, но в ходе генерации по текстовым подсказкам разница между «pruned» и «pruned-emaonly» пренебрежимо мала. Но, может быть, более крупный файл модели позволит получать, исходя из той же самой текстовой подсказки, изображения лучшего качества? Не совсем так; но, чтобы обосновать этот тезис, придётся немного углубиться в технические детали.
Следующий шаг — оптимизация негативной подсказки. Стандартный набор отрицаний, который мы применяли до сих пор, хорош своей относительной универсальностью, но всё же он не охватывает всего возможного круга недочётов, могущих возникнуть при преобразовании текста в изображение — особенно в ходе рисования роботов. Более универсальное решение даёт так называемая текстовая инверсия (textual inversion), ещё одна, наряду с LoRA, разновидность частной доработки генеративной модели. С уже знакомого сайта Huggingface скачаем ставшим привычным способом текстуальную инверсию Bad prompt, поместим её в файл в папку Git\stable-diffusion-webui\embeddings. Обратите внимание: не в \stable-diffusion-webui\models, где располагаются каталоги для самих моделей и LoRA, а на одном уровне с \models.
Негативную подсказку оставим прежней. Не следует удивляться появлению ссылки на Васнецова: Stable Diffusion при обучении ознакомили с работами множества художников, так что их имена в подсказке оказывают влияние на общий стиль изображения — пусть даже сам этот реальный художник в своей практике сражающихся роботов не писал. Упоминание известного среди мастеров и поклонников цифровых художеств сайта ArtStation тоже не случайно: популярные на нём (trending) работы в целом имеют весьма определённую стилистику, и её система машинного обучения тоже вполне успешно ухватывает.
Для корректной работы системы по умолчанию требуется, чтобы базовый чекпойнт — тот, что будет сразу загружаться в память при запуске Stable Diffusion, — носил название «model», однако, помимо него, в этой папке может располагаться сколько угодно чекпойнтов. Поэтому следует либо переименовать «v-1-5-pruned-emaonly.safetensors» в «model.safetensors», либо сохранить прямо здесь же его копию с таким именем.
Больше мощностей. Нейронные сети работают с матрицами, так что если нейронов много, вычисления получаются очень ресурсоемкие. Известные нейросети вроде Midjourney или ChatGPT — это сложные и «тяжелые» системы, для их работы нужны сервера с мощным «железом». Так что написать собственный DALL-E на домашнем компьютере не получится. Но есть сервисы для аренды мощностей: ими как раз пользуются инженеры машинного обучения, чтобы создавать, обучать и тестировать модели.
Не раз уже мы называли используемый с AUTOMATIC1111 чекпойнт «v-1-5-pruned-emaonly.safetensors» (переименованный, напомним, в «model.safetensors») базовым. Значит, должны быть и какие-то не-базовые, производные? Так и есть: на основе изначальной модели Stable Diffusion 1.5 (только в версии pruned, без emaonly) энтузиасты производят дотренировку, прогоняя через систему — тем же путём, что пропутешествовали исходные миллиарды картинок, — ещё несколько сотен, или тысяч, или на сколько у них хватит терпения и вычислительных мощностей. Картинки эти, соответствующим образом подобранные и аннотированные, расширяют горизонты восприятия, если так можно выразиться, модели: она начинает значительно чаще выдавать изображения в стимпанковской стилистике без дополнительных подсказок, или лучше начинает рисовать фэнтезийных эльфов (базовый чекпойнт в ответ на подсказку «elf» c большой вероятностью изобразит помощника Санты в зелёном колпачке, а не горделивого обитателя зачарованных лесов), или ещё каким-то образом модифицирует результаты своей генерации.