Содержание статьи
HOWTO: как установить и настроить собственный ИИ на игровом ПК
⇡#Как художник художнику
Еще есть, например, метод обратного распространения ошибки — градиентный алгоритм для многослойных нейросетей. Сигналы ошибки, рассчитанные с помощью градиента, распространяются от выхода нейронной сети к входу, то есть идут не в прямом, а в обратном направлении.
Надеемся получить обратную связь от читателей, взявших на себя труд установить и запустить Stable Diffusion на локальном ПК или в Google Colab либо поднаторевших в работе с веб-сайтами для рисования картинок по текстовым подсказкам. В планах у нас дальнейшее углубление в тему — в частности, освоение расширения изображения (outpaint), перерисовки его отдельных фрагментов (inpaint), масштабирования (upscale), выявления текстовых подсказок из готовых картинок, не содержащих метаданных (interrogate), рисования по шаблонам (ControlNet) и ещё многое другое. Интересно было бы знать, с какими затруднениями и ограничениями на тропе ИИИИ (ИИзобразительного ИИскусства) вы успели уже столкнуться. Оставляйте ваши комментарии, попытаемся разобраться вместе!
Обратите внимание, что в ходе установки система сообщает об обнаружении новой версии pip — и сразу же предлагает прямую ссылку для её установки. В принципе, это не обязательный момент, но pip — служебный пакет для управления зависимостями между пакетами (Python package manager), и как раз его — в отличие от рекомендованной версии самого Python — обновить лишним не будет.
Энтузиасты, что жаждали бы запустить на домашнем ПК большую языковую модель (large language model, LLM) современного уровня, сталкиваются с принципиальной проблемой: их машинам остро не хватает видеопамяти. Дело в том, что плотная многослойная нейронная сеть, к работе которой в конечном итоге сводится LLM, выдаёт некий результат в ходе взвешенного суммирования огромного количества — десятков и сотен миллиардов — операндов. Чтобы производить такие — сравнительно несложные, но чрезвычайно массированные — расчёты за разумное время, необходимо свести к минимуму задержки при передаче сигналов между вычислительными узлами и памятью, с которой те оперируют.
Больше нейронов. В нашей тренировочной нейросети только один нейрон. Но если нейронов будет больше — каждый из них сможет по-своему реагировать на входные данные, соответственно, на следующие нейроны будут приходить данные с разных синапсов. Значит — больше вариативность, «подумать» и передать сигнал дальше может не один нейрон, а несколько. Можно менять и формулу передачи, и связи между нейронами — так получаются разные виды нейронных сетей.
Давайте поймем почему формула имеет такой вид. Сначала нам нужно учесть то, что мы хотим скорректировать вес пропорционально размеру ошибки. Далее ошибка умножается на значение, поданное на вход нейрона, что, в нашем случае, 0 или 1. Если на вход был подан 0, то вес не корректируется. И в конце выражение умножается на градиент сигмоиды. Разберемся в последнем шаге по порядку:
Безусловно, аргумент этот чисто количественный. Законы природы не запрещают применять для эмуляции нейронной сети исключительно центральный процессор с его 4, 8 или 16 ядрами и оперативную память DRAM. Но поскольку вычисления непосредственно в памяти в рамках классической x86-архитектуры не реализуются, потери времени при переносе небольших (обработанных считаными единицами, максимум первыми десятками ядер) пакетов данных между ЦП и ОЗУ оказываются попросту несуразными. И это проблема любых подобных вычислений: к примеру, Stable Diffusion — нейросетевая модель с открытым исходным кодом для создания изображений по текстовым описаниям — при запуске на ПК без дискретного графического адаптера генерирует простейшие картинки за многие десятки минут, тогда как на компьютере даже с не самой современной видеокартой — за пару-тройку минут максимум, а с какой-нибудь NVIDIA RTX 4080 — и вовсе за секунды.
После возврата на заглавную страницу веб-интерфейса (вкладка txt2img) убеждаемся, что верхняя её часть теперь содержит два дополнительных выпадающих меню (SD-VAE, Add hypernetwork to prompt) и ползунок — собственно Clip skip. Вот его-то и следует передвинуть в позицию 2. Но с какой целью?
⇡#Внимание: модель!
В окне «Select Components» необходимо будет удостовериться, что опция интеграции с «Проводником» Windows активна, равно как и две опции более низкого уровня — «Git Bash Here» и «Git GUI Here». Предпоследняя окажется крайне полезна как раз для удобной и быстрой загрузки с Git проекта, позволяющего запускать графический интерфейс для взаимодействия со Stable Diffusion.
Как ни парадоксально, но генеративные модели, создающие привлекательные для человека изображения (Midjourney и подобные), требуют куда меньше вычислительных ресурсов, чем текстовые (такие как ChatGPT). Настолько, что подобный ИИ можно установить локально даже на не самом современном игровом ПК. В этой статье подробно рассказываем, как это сделать
В понимании рядового пользователя установка ПО на компьютер сводится к скачиванию и запуску инсталляционного файла — после чего в системе оказывается развёрнута вожделенная программа или целая платформа; как правило, уже в виде исполняемого бинарного файла (часто с рядом дополнительных файлов — служебных библиотек, конфигурационных и пр.). У программистов, особенно ориентированных на ПО с открытым исходным кодом, подход иной: если есть программа, написанная на некоем языке, и свободно доступная среда для исполнения кода на этом же языке, к чему городить огород с бинарниками? Проще запускать программы в этой же самой среде и горя не знать. Как раз такому принципу в целом и следует логика установки Stable Diffusion.
А вот то, каким именно образом модель решает, сколько шума и на каких именно участках надо оставить на картинке на каждом этапе, и определяется методом сэмплинга; говоря математическим языком — тем или иным методом градиентного спуска. Наиболее простой и быстрый (но и дающий менее выразительные с художественной точки зрения результаты) — это уже использованный нами Euler (см. схема Эйлера). Другие сэмплеры могут давать более интересные и/или более сложные результаты с бóльшим или меньшим учётом различных фрагментов подсказки — здесь нет ни единого рецепта, ни общего правила, что считать более предпочтительным. Однако, поменяв Euler на более «продвинутый», хотя и требующий большего времени на исполнение сэмплер DPM++ SDE Karras (Каррас — фамилия одного из авторов оригинальной статьи, где описан целый ряд таких методов), мы ровно с теми же самыми позитивной и негативной подсказками и с той же затравкой (seed) получим в целом более живописные изображения.
Например, на вход поступает картинка. Чтобы нейросеть могла понять, что на ней изображено, она должна выделить разные элементы из картинки, распознать их и подумать, что означает сочетание этих элементов. Примерно так работает зрительная кора в головном мозге. Это несколько задач, их не смогут решить одинаковые нейроны. Поэтому нужно несколько слоев, где каждый делает что-то свое. Для распознавания часто используют так называемые сверточные нейросети. Они состоят из комбинации сверточных и субдискретизирующих слоев, каждый из которых решает свою задачу.
Число рабочих параметров для LLM GPT-3.5, что легла в основу первого общедоступного ChatGPT, — 175 млрд. Если каждый из этих параметров кодировать 16-разрядным числом («представление с плавающей запятой половинной точности»; тип данных float16, т. е. по 2 байта на число), то только для одновременного размещения всех их в памяти — в видеопамяти, подчеркнём! — той потребуется более 320 Гбайт. Вот, собственно, и главная причина, по которой запустить ChatGPT на домашнем ПК невозможно в принципе. Да, известен целый ряд разрабатываемых энтузиастами менее требовательных к аппаратной части LLM-проектов, наиболее перспективным среди которых можно считать Alpaca — в вариантах модели с 7, 13 и 30 млрд входных параметров. Однако качество генерируемого ею текста откровенно расстроит завсегдатаев чатов с ChatGPT (и тем более GPT-4): настолько оно не соответствует успевшим уже сформироваться у них высоким стандартам, заданным свежайшими продуктами OpenAI.