Содержание статьи
HOWTO: как установить и настроить собственный ИИ на игровом ПК
Делаем несколько вариантов готового фото в Stable Diffusion
Практическое отступление: после перезагрузки интерфейса пропали все наши подсказки и настройки во вкладке txt2img. Можно, конечно, восстановить их вручную по предыдущим записям — но зачем, если AUTOMATIC1111 помещает все важнейшие данные прямо в генерируемые картинки; в поля текстовых комментариев, предусмотренные стандартами PNG и JPEG?
Вот, к примеру, на сайте Civitai.com, открытом репозитории множества ресурсов для энтузиастов text2image-генераций, имеется LoRA под названием SteampunkAI. Она создана на основе чекпойнта, специально дообученного для рисования в соответствующем стиле, и может применяться с любым другим чекпойнтом, обеспечивая вполне узнаваемую и зрелищную стилистику. Чтобы скачать соответствующий файл в формате .safetensors, достаточно нажать на длинную синюю кнопку на правой стороне веб-страницы.
Негативную подсказку оставим прежней. Не следует удивляться появлению ссылки на Васнецова: Stable Diffusion при обучении ознакомили с работами множества художников, так что их имена в подсказке оказывают влияние на общий стиль изображения — пусть даже сам этот реальный художник в своей практике сражающихся роботов не писал. Упоминание известного среди мастеров и поклонников цифровых художеств сайта ArtStation тоже не случайно: популярные на нём (trending) работы в целом имеют весьма определённую стилистику, и её система машинного обучения тоже вполне успешно ухватывает.
AUTOMATIC1111 — это и есть название интересующего нас проекта веб-интерфейса для работы со Stable Diffusion. Это именно веб-интерфейс: доступ к нему производится через браузер; по умолчанию только с локального ПК, но при желании можно открыть его и для внешних пользователей — правда, вероятно, придётся повозиться с настройками брандмауэра на своём маршрутизаторе. Это, пожалуй, наиболее популярный на сегодня интерфейс для работы со Stable Diffusion: хотя имеются и другие подобные проекты, широта возможностей контроля над процессом генерации и множество доступных плагинов делают AUTOMATIC1111 отличным инструментом для экспериментирования.
А для более комфортной и быстрой работы нужны более производительные видеокарты с объёмом памяти от 8 (а лучше от 12) гигабайт. Например, GeForce RTX 3050 на 8GB или GeForce RTX 4070Ti на 12GB. Что касается ноутбуков, то на ноутбуке Lenovo Legion 5 с видеокартой RTX3060 на 6GB Stable Diffusion должна работать довольно шустро (правда, 6 Гб может не хватить для сильного увеличения готовых картинок). А вот MSI Stealth GS77 точно справится с чем угодно: в нём стоит RTX3080Ti 16Gb.
Существует немало разных сборок Stable Diffusion, отличающихся друг от друга интерфейсом и степенью сложностей, с которыми придётся столкнуться при установке. Самыми удобным для начинающего пользователя можно считать Easy Stable Diffusion. Скачать сборки можно с github.com: вот ссылка на Easy Stable Diffusion.
Для начала сам термин pruned (англ. «обрезанный», «упрощённый») указывает на некоторую потерю информации в этой версии модели по сравнению с полной, полученной в Stability.ai после обработки тех самых 2,3 млрд изображений. По сути, итог обучения нейросети — это определённый набор весов на входах каждого перцептрона каждого из её слоёв. Некоторые из этих весов могут оказаться с высокой точностью равными нулю, а поскольку нейросеть высчитывает взвешенные суммы (произведение текущего значения аргумента и веса на данном входе данного перцептрона), умножение на почти ноль тоже даст в результате почти ноль. Иными словами, в pruned-версии все «почти нули» ниже некоторого порога величины заменены самыми обычными нулями, так что при формировании картинки по готовой модели разница между «урезанным» и полным вариантами практически неприметна.
Интерфейс установлен, пользователь перед компьютером есть, — самое время загрузить собственно Stable Diffusion, т. е. модель на основе машинного обучения для преобразования текста в графический образ (text-to-image model), написанную на языке Python. К ней впервые предоставил свободный доступ 22 августа 2022 г. сам же её разработчик — компания Stability.ai, специализирующаяся на развитии генеративных ИИ с открытым кодом.
⇡#Предварительные замечания
Число рабочих параметров для LLM GPT-3.5, что легла в основу первого общедоступного ChatGPT, — 175 млрд. Если каждый из этих параметров кодировать 16-разрядным числом («представление с плавающей запятой половинной точности»; тип данных float16, т. е. по 2 байта на число), то только для одновременного размещения всех их в памяти — в видеопамяти, подчеркнём! — той потребуется более 320 Гбайт. Вот, собственно, и главная причина, по которой запустить ChatGPT на домашнем ПК невозможно в принципе. Да, известен целый ряд разрабатываемых энтузиастами менее требовательных к аппаратной части LLM-проектов, наиболее перспективным среди которых можно считать Alpaca — в вариантах модели с 7, 13 и 30 млрд входных параметров. Однако качество генерируемого ею текста откровенно расстроит завсегдатаев чатов с ChatGPT (и тем более GPT-4): настолько оно не соответствует успевшим уже сформироваться у них высоким стандартам, заданным свежайшими продуктами OpenAI.
Чекпойнт в формате файла сериализации для структуры объектов Python есть — а как же сам язык программирования Python? В Windows 10 его исходно, разумеется, нет, но он свободно доступен для загрузки с официального сайта. Главное — обращать пристальное внимание на выбираемую версию, а именно 3.10.6: следует загружать файл установщика для 64-битных систем — python-3.10.6-amd64.exe (проще всего найти «3.10.6» на странице через Ctrl+F). Дело в том, что разработка Stable Diffusion 1.5 (и, в меньшей степени, AUTOMATIC1111) велась именно на этой версии языка с поддержкой PyTorch — фреймворка, специально созданного для ускорения расчётов по части задач машинного обучения на современных графических адаптерах. И в целом следует помнить, что программы на Python не лучшим образом исполняются на любых иных (включая более свежие) его версиях, чем те, которыми пользовались их разработчики.
Обратите внимание на вкладку PNG Info в веб-интерфейсе: при переходе на неё появляется область для загрузки изображений. Поместим туда (просто перетащив мышкой) из окна «Проводника» Windows, в котором открыта папка txt2img-grids, последнюю из сгенерированных картинок в формате PNG — и справа появится вся информация, сохранённая в её метаданных. Теперь достаточно нажать на «Send to txt2img», чтобы все использованные для генерации данной картинки подсказки и параметры, вплоть до Seed, оказались на своих местах. Надо лишь только вернуть Batch size значение 8 — иначе будет сгенерирована не подборка, как всё время до сих пор, а только единичная картинка с исходной затравкой. В подборке же у каждой последующей картинки затравка (seed), напомним, отличается от предыдущей на единицу.
По умолчанию любая из них имеет условный вес 1; если просто заключить подсказку в круглые скобки, это будет соответствовать приданию ей веса 1,1 (т. е. она станет более значимой для генерации данного изображения, чем соседние), а если нужно установить какой-то иной вес, его указывают явно после двоеточия. Обычно стоит избегать весов менее 0,5 (по причине пренебрежимо малого влияния таких подсказок на итоговую картинку) и более 1,5 (результат может оказаться графически непредсказуемым), но в любом случае это ещё одна степень свободы опосредованного искусственным интеллектом творчества — которой энтузиасты охотно пользуются. Выставив для стилей обоих этих художников невысокие веса, мы избежим чрезмерного влияния их на итоговую картинку (роботизированный Чужой в сарафане уж точно не появится здесь), но живости и индивидуальности ей, безусловно, прибавим.
Для начала на локальном ПК необходимо развернуть клиент Git. Git — это распределённая система контроля версий (version control system, VCS); платформа не безусловно необходимая, но до чрезвычайности полезная для множества независимых программистов, совместно и исключительно добровольно трудящихся над многочисленными проектами ПО с открытым кодом. Главное достоинство VCS — в том, что никакая информация из неё бесследно не исчезает (если не прикладывать к тому особых усилий), т. е. любое внесённое в код исправление не затирает прежнего состояния соответствующего фрагмента листинга программы. Более того, Git не отслеживает такие изменения и не ведёт им тщательный учёт по отдельности (в отличие от других популярных VCS, таких как Subversion, Bazaar, CVS и пр.), но после каждого коммита (отправки пользователем со своего локального ПК исправленной версии кода в облако Git) создаёт моментальную копию — снэпшот (snapshot) — всех файлов данного проекта.
Работает она не на удалённом облачном сервере, как Midjourney или DALL-E, а прямо на компьютере пользователя. В этом есть плюсы: не надо оплачивать подписку, не надо ждать в очереди, пока нейросеть создаст картинки для других клиентов и займётся твоим запросом. Есть и минусы: не каждый компьютер подойдёт для запуска и стабильной работы Stable Diffusion. Нужна мощная видеокарта и несколько десятков гигабайт свободного места на диске. Разработчики рекомендуют использовать видеокарту Nvidia серии RTX 3xxx с объёмом видеопамяти не менее 6 Гб.
⇡#Подползая к роботам
В окне «Select Components» необходимо будет удостовериться, что опция интеграции с «Проводником» Windows активна, равно как и две опции более низкого уровня — «Git Bash Here» и «Git GUI Here». Предпоследняя окажется крайне полезна как раз для удобной и быстрой загрузки с Git проекта, позволяющего запускать графический интерфейс для взаимодействия со Stable Diffusion.
Попробуем сделать формат нашего изображения менее квадратным. Ставим ширину изображения (Width) 1024 пикс, а высоту (Height) — 768. Считается, что наилучший результат нейросеть выдает лучший результат при генерации квадратных картинок 512х512 пикселей, так как обучалась именно на таком размере. Если же нужно сделать прямоугольные картинки, рекомендуется делать одну из сторон либо равной 512 пикселей, либо уменьшить или увеличить это значение в два раза, до 256 или 1024 точек соответственно.
Смысл —lowvram куда более очевиден: это указание системе на то, что видеопамяти в её распоряжении немного. В перечне доступных оптимизаций AUTOMATIC1111 указаны и этот параметр, и не так сильно сказывающийся на производительности (но зато и более требовательный к объёму памяти) —medvram. В отношении —lowvram приговор разработчиков лаконичен: «Devastating for performance». При использовании —medvram модель не загружается в видеопамять вся, а разбивается на три блока, каждый из которых подтягивается в VRAM последовательно, по мере необходимости, но целиком; —lowvram же дробит наиболее объёмистый из этих модулей на ещё более мелкие фрагменты, тем самым позволяя (теоретически; лично не проверялось) трансформировать текстовые подсказки в изображения даже на ГП с 2 Гбайт видеопамяти, — но ценой заметного увеличения времени работы.
Так вот, на финальном шаге CLIP должна передать диффузионной модели достаточно подробные указания (в виде набора токенов), какая именно картинка должна скрываться в очередном заполненном «белым шумом» прямоугольнике. И чем лучше система натренирована на сравнительно узком наборе изображений — а как раз этим нередко страдают «авторские» чекпойнты, — тем более однотипные картинки она станет выдавать при различных затравках (seed). Что, собственно, хорошо иллюстрирует только что полученная нами галерея практически паспортных фотокарточек квазистимпанковских роботов. Да, каждая из них детально проработана, но именно все разом они явно демонстрируют некую перетренированность используемой диффузионной модели.
Не раз уже мы называли используемый с AUTOMATIC1111 чекпойнт «v-1-5-pruned-emaonly.safetensors» (переименованный, напомним, в «model.safetensors») базовым. Значит, должны быть и какие-то не-базовые, производные? Так и есть: на основе изначальной модели Stable Diffusion 1.5 (только в версии pruned, без emaonly) энтузиасты производят дотренировку, прогоняя через систему — тем же путём, что пропутешествовали исходные миллиарды картинок, — ещё несколько сотен, или тысяч, или на сколько у них хватит терпения и вычислительных мощностей. Картинки эти, соответствующим образом подобранные и аннотированные, расширяют горизонты восприятия, если так можно выразиться, модели: она начинает значительно чаще выдавать изображения в стимпанковской стилистике без дополнительных подсказок, или лучше начинает рисовать фэнтезийных эльфов (базовый чекпойнт в ответ на подсказку «elf» c большой вероятностью изобразит помощника Санты в зелёном колпачке, а не горделивого обитателя зачарованных лесов), или ещё каким-то образом модифицирует результаты своей генерации.
В процессе генерации попадались котики, у которых на месте глаз жёлтые круги без зрачков или с плохо проработанными зрачками. Чтобы повысить качество глаз и избавиться от плохих вариантов, в поле Negative prompt добавили пункты bad eyes, ugly eyes, чтобы исключить варианты с плохими уродливыми глазами.