Содержание статьи
Как легко и быстро установить нейронную сеть на домашний ПК
⇡#Внимание: модель!
Имя Ханса «Рюди» Гигера известно немногим, однако стилистика его работ в жанре фантастического реализма знакома каждому, кто видел хотя бы пару кадров из культового фильма «Чужой», для которого именно этот художник разработал и образ ксеноморфа, и общий дизайн. Что же касается скобочек и цифр внутри, то это принятый в AUTOMATIC1111 способ изменения значимости (относительного веса) конкретной подсказки.
Ту же оценку можно видеть на фоне ползущей вправо синей полоски прогресса и в графическом веб-интерфейсе. Там же — для справки — система демонстрирует некоторые промежуточные результаты процесса диффузии: как из исходного «белого щума» постепенно проявляется ожидаемое изображение.
Чтобы загрузить эту модель, следует перейти на вкладку Files в веб-интерфейсе её странички на репозитории, чуть прокрутить вниз — и нажать на не самую приметную стрелочку с подчёркиванием, стоящую справа от букв «LFS» в строке, что начинается с «v-1-5-pruned-emaonly.safetensor». Как только при наведении на стрелочку всплывёт окошко с мелкой надписью «Download file» — можно нажимать и запасаться терпением: файл занимает несколько гигабайтов.
Но сперва слегка подкорректируем интерфейс AUTOMATIC1111. В настройках — Settings — веб-интерфейса надо открыть раздел User interface, и в нём — окошечко Quicksettings list. Это перечисление того, какие элементы управления будут вынесены на самый верх заглавной страницы интерфейса. Изначально там был единственный параметр, sd_model_checkpoint, — именно его наличие сделало доступным выпадающее меню, в котором мы поменяли model.safetensors на Deliberate_v2.safetensors.
Бесспорно, лучше прочих из сравнительно широко доступных видеокарт для машинного преобразования текста в картинки подойдут новейшие NVIDIA RTX 4080 и 4090, в первую очередь по причине внушительного объёма их VRAM — 16 и 24 Гбайт соответственно. Объём ОЗУ компьютера и производительность его ЦП принципиального значения не имеют, но лучше всё-таки ориентироваться на 8 Гбайт DRAM как минимум и хотя бы на четырёхъядерный процессор — такое «железо» позволит быстрее производить служебные вычисления, необходимые для подготовки к собственно генерации изображений.
А если вовсе отказаться от двух последних строк в поле позитивной подсказки? Пожалуй, это отсутствие заёмного стиля — само по себе стиль оригинальной Stable Diffusion 1.5 при работе с довольно развёрнутым текстовым вводом: несколько сумбурный, зато высокодетализированный.
Угрозы от подобных инцидентов зависят от того, для каких целей применяются ИИ-помощники. Если вы генерируете милые иллюстрации к сказкам собственного сочинения или просите у ChatGPT составить план трехдневной экскурсионной поездки в столицу, вряд ли утечка сможет нанести вам серьезный ущерб. Если ваша переписка с чат-ботом потенциально может содержать конфиденциальные фрагменты — персональные данные, пароли или номера банковских карт, — допускать утечку в облако уже нельзя. Но ее относительно легко предотвратить, предварительно отфильтровав данные, и об этом у нас есть отдельный пост.
Вот, к примеру, на сайте Civitai.com, открытом репозитории множества ресурсов для энтузиастов text2image-генераций, имеется LoRA под названием SteampunkAI. Она создана на основе чекпойнта, специально дообученного для рисования в соответствующем стиле, и может применяться с любым другим чекпойнтом, обеспечивая вполне узнаваемую и зрелищную стилистику. Чтобы скачать соответствующий файл в формате .safetensors, достаточно нажать на длинную синюю кнопку на правой стороне веб-страницы.
Выбор ИИ-модели и волшебство квантизации
Параметр —no-half-vae — ещё одна оптимизация, дающая системе указание не использовать формат половинной точности (16 бит для 32-разрядных компьютеров) представления данных с плавающей запятой для работы VAE (вариационного автокодировщика; смысл его в том, чтобы снижать размерность пространства задаваемых модели параметров почти без потери информации о них). Строго говоря, такой формат в полной мере поддерживают лишь наиболее новые поколения ГП NVIDIA — Pascal, Volta, Ampere, — так что пользователям более ранних видеокарт имело бы смысл применять разом две оптимизации: и указанную нами —no-half-vae, и более глобальную —no-half (относится уже не к одному только VAE, а к базовому чекпойнту в целом). Однако, как показывает практика, в отсутствие —no-half даже на сравнительно старых ГП Stable Diffusion работает вполне уверенно, тогда как без —no-half-vae частенько выдаёт чёрные прямоугольники вместо сгенерированных картинок. Речь, подчеркнём ещё раз, идёт именно о GeForce GTX 2000-й серии и более ранних: для актуальных RTX 3000-го и 4000-го семейств в аргументах командной строки внутри .bat-файла не имеет смысла указывать параметры оптимизации — разве только —xformers.
Интересно.
У меня под win7 Python выше 2.8.5 отказывается ставится (что не удивительно учитывая что на сайте разработчика указано что для win7,8 последняя версия это 2.9) ссылаясь на отсуствие библиотеки.
Батник EasyDiffusion при этом сам докачал все кроме питона и все запускается.
Единственно что после выбора люой модели после перезапуска перестает запускаться на 2 раз, если не убрать галку«запомнитьпараметры->модель» в настройках.
UPDATE переустановил питон на 2.8.10 = stable-diffusion-webui-master стал запускаться
Python 2.8.16 это последняя поддерживаемая версия под win7. Выше даже не пытайтесь.
Но тем не менее всё это — лишь начало, самые первые этапы погружения в бездонную глубину мира диффузных моделей для преобразования текста в изображения. Возможностей для дальнейшего совершенствования картинок Stable Diffusion и AUTOMATIC1111 предлагают немало: это и перерисовка отдельных фрагментов полученной картинки, и укрупнение её до других форматов (скажем, из квадратной заготовки можно сделать прямоугольную — так, что вновь сгенерированные элементы будут дополнять уже имевшиеся бесшовно), и почти неограниченное увеличение в размерах, и создание многофигурных композиций по шаблону, и ещё многое, многое другое… И, что самое главное, для освоения всего этого великолепия достаточно лишь простенького игрового ПК, минимальных навыков в установке ПО и — вот это существенный момент — титанического усердия. Но у тех, кто осилил настоящий киберпрактикум до самого конца, оно, вне всякого сомнения, имеется.
В webui нету параметра Guidance Scale, но там есть CFG Scale, вероятно это то же самое, так вот на тестовых картинках у автора там было 20-25, но у меня все равно блеклые получались. full perfect color завтра уже попробую. Я не ожидал что любое изменение параметров приводит к радикальному изменению картинки. Чуть изменил разрешение, и уже все другое, изменил еще какой-то параметр, и вот же третья картинка. Думаю мне это развлечение надоест уже через пару недель, я посмотрел некоторые представленные картинки там запросы из нескольких десятков словосочетаний, и большую часть из них я без словаря перевести не могу. Боюсь представить сколько времени автор потратил на подбирание именно такого запроса.
Я таки победил LowVRAM. Установил AUTOMATIC1111 stable diffusion webui, а там можно с помощью переменных окружения отключить проверку на достаточное количество видеопамяти. В таком виде вполне работает, иногда вылетает, зависит от выбранной модели и доп. фильтров всяких, или апскейлов, но в целом на 512х512 работает бодро, не на порядок быстрее конечно, но раза в три быстрее, чем на CPU. Но сейчас обнаружилась другая проблемка, готовые рисунки почему-то блеклые, и как-будто зернистые. Причем специально проверил, взял информацию от автора модели, на сайте есть примеры с полной информацией о параметрах, на которых эти рисунки получены. Так вот вбил эти параметры, и не получается у меня такой же рисунок. У автора цвета яркие, сочные, у меня блеклые, и некоторые детали не совпадают, но по мелочи. Вот как понять в чем проблема?
После запуска генерации картинки первым в работу вступает CLIP — построенный на трансформерах кодировщик текста в токены, которые используются в дальнейшем уже собственно диффузионной моделью, чтобы «убрать ненужный шум» с заготовки будущего изображения. Как и полагается такому кодировщику, он сам представляет собой многослойную нейросеть (для Stable Diffusion 1.5 — 12 слоёв), на каждом из которых, грубо говоря, производится дополнительная конкретизация подсказки. Скажем, невозможно изобразить «дом вообще», как концептуальную идею: модели необходимо определиться со стилистикой (будет ли это фото, реалистичный тщательный рисунок, стилизация из детской книжки, беглый набросок и т. п.), общими параметрами (этажность, форма крыши, наличие/отсутствие трубы), цветом, числом видимых окон и дверей и ещё множеством параметров. Хорошо, если подсказка детальная: «дом ведьмы» уже значительно сузит пространство выбора вариантов, но всё равно оставит значительный простор для (нет, не воображения, — у современных ИИ его всё ещё нет) псевдослучайного комбинирования вариантов, возникших на основе обучения модели. Ещё раз: это очень грубое описание, поскольку, как и всякая многослойная плотная нейросеть, работа CLIP принципиально не интерпретируема на внутреннем уровне и представляет собой по сути «чёрный ящик».
Не раз уже мы называли используемый с AUTOMATIC1111 чекпойнт «v-1-5-pruned-emaonly.safetensors» (переименованный, напомним, в «model.safetensors») базовым. Значит, должны быть и какие-то не-базовые, производные? Так и есть: на основе изначальной модели Stable Diffusion 1.5 (только в версии pruned, без emaonly) энтузиасты производят дотренировку, прогоняя через систему — тем же путём, что пропутешествовали исходные миллиарды картинок, — ещё несколько сотен, или тысяч, или на сколько у них хватит терпения и вычислительных мощностей. Картинки эти, соответствующим образом подобранные и аннотированные, расширяют горизонты восприятия, если так можно выразиться, модели: она начинает значительно чаще выдавать изображения в стимпанковской стилистике без дополнительных подсказок, или лучше начинает рисовать фэнтезийных эльфов (базовый чекпойнт в ответ на подсказку «elf» c большой вероятностью изобразит помощника Санты в зелёном колпачке, а не горделивого обитателя зачарованных лесов), или ещё каким-то образом модифицирует результаты своей генерации.
В окне «Select Components» необходимо будет удостовериться, что опция интеграции с «Проводником» Windows активна, равно как и две опции более низкого уровня — «Git Bash Here» и «Git GUI Here». Предпоследняя окажется крайне полезна как раз для удобной и быстрой загрузки с Git проекта, позволяющего запускать графический интерфейс для взаимодействия со Stable Diffusion.
Установка нейронной сети
Продолжаем знакомиться с технологиями ближайшего будущего. Ранее мне уже доводилось рассказывать о способе установки нейронной сети на личный ПК для генерации картинок по любому текстовому запросу. Однако, даже несмотря на весьма подробную инструкцию, у многих пользователей она вызывала затруднения. Всем хотелось простого решения, где всего за два клика можно было бы выполнить установку всего и вся и сразу приступить к генерации желаемых изображений. Ну что же, фанфары, гром и молния! Ваше желание исполнено.
Негативную подсказку оставим прежней. Не следует удивляться появлению ссылки на Васнецова: Stable Diffusion при обучении ознакомили с работами множества художников, так что их имена в подсказке оказывают влияние на общий стиль изображения — пусть даже сам этот реальный художник в своей практике сражающихся роботов не писал. Упоминание известного среди мастеров и поклонников цифровых художеств сайта ArtStation тоже не случайно: популярные на нём (trending) работы в целом имеют весьма определённую стилистику, и её система машинного обучения тоже вполне успешно ухватывает.
Другой вариант, тоже онлайновый, — задействовать Google Colab, бесплатную платформу, что позволяет каждому обладателю учётной записи Google разворачивать в облаке корпорации так называемые блокноты (Python notebooks) для исполнения кода, написанного на языке Python. Поскольку локальная инсталляция Stable Diffusion тоже, по сути, сводится к установке на ПК среды Python и ряда специализированных скриптов на этом языке, практически всё, что возможно проделать с этой моделью на вашем компьютере, доступно и после развёртывания её в Colab. Соответствующих инструкций в Сети имеется в избытке, однако следует помнить: только платным пользователям Colab (10 долл. США в месяц и более — причём оплата картой, да) доступно исполнение блокнота на физическом серверном ГП NVIDIA A100 с его великолепной ИИ-производительностью. В противном же случае скорость генерации изображений вряд ли будет намного выше, чем на видавшем виды локальном игровом ПК.
Общее правило в искусстве составления подсказок (promptsmithing, по аналогии со златокузнечным делом — goldsmithing) таково: всё, что точно должно присутствовать на картинке, прописывается в позитивные подсказки; всё, чего там ни при каких условиях не должно появляться, — в негативные; прочее отдаётся на откуп ИИ-художнику. При этом следует помнить, что чем ближе то или иное слово к началу подсказки, тем значительнее оно повлияет на итоговую картинку. Вообще, широта возможностей при составлении подсказок открывает огромный простор для экспериментаторства. В сообществе text2image-энтузиастов выработано уже немало схем (которые в любом случае следует подвергать конструктивному сомнению) их структурирования — например, такая:
Почему среди прочих вариантов представления Stable Diffusion лучше выбирать именно этот? Первое соображение — размер: версия без «emaonly» тянет на 7,7 Гбайт, а выбранная нами — менее чем на 4,3 Гбайт. Для дальнейшей тренировки модели (натаскивания её на новых изображениях; тех, что не вошли в исходный пул обучения в 2,3 млрд аннотированных картинок) лучше подойдёт более полный и весомый вариант, но в ходе генерации по текстовым подсказкам разница между «pruned» и «pruned-emaonly» пренебрежимо мала. Но, может быть, более крупный файл модели позволит получать, исходя из той же самой текстовой подсказки, изображения лучшего качества? Не совсем так; но, чтобы обосновать этот тезис, придётся немного углубиться в технические детали.
Основной объем памяти в любой нейросети съедают веса — числовые коэффициенты, описывающие работу каждого нейрона в сети. Изначально при обучении модели веса вычисляются и хранятся в виде дробных чисел с большой точностью. Но оказалось, что при округлении веса в обученной модели качество ее работы снижается незначительно, зато позволяет запустить ИИ-инструмент на обычных компьютерах. Этот процесс округления называется квантизацией, и благодаря ему возможно сократить размер модели в десятки раз — вместо 16 бит каждый вес занимает 8, 4 или даже 2 бита.