Многие слышали про Midjourney, но про то, что есть локальная Stable Diffusion, которая может даже больше, знает уже куда меньше людей, или они не знают, что она локальная. И если они пробовали её онлайн, то быстро приходили к выводу, что она сильно хуже чем Midjourney и не стоит обращать на неё более внимания. И да, SD появился раньше Midjourney. Для запуска хватит и cpu или 4гб видеопамяти.

Аналогично с chatGPT, про попытку сделать его локальную версию, не требующую супер компьютер, тоже мало кто слышал и знает, несмотря на то, что выходило несколько статей.

слева stable diffusion, а справа... тоже stable diffusion
слева stable diffusion, а справа... тоже stable diffusion

Локальная генерация картинок (Stable Diffusion, на видеокартах AMD, на CPU)

Если вы просто поставите SD и попробуете что-то сгенерировать, то вы увидите в лучшем случае что-то такое:

Это совсем не похоже на уровень Midjourney. Все дело в том, что дефолтная SD модель не понимает, что именно вы от неё хотите без дополнительных правок. Поэтому требуется много ключевых слов (промтов) как позитивных, так и негативных, чтобы добиться приемлемого качества.

Для того, чтобы этим не заниматься существуют уже дотюненные модели, где выставлено чтобы пальцев было 5, а тел 1, и другие ожидаемые от модели параметры. Пример, того же запроса, но на модели Deliberate:

Еще один пример, вроде бы у SD 1.5 что-то получается, но это всё равно далеко от ожидаемого.

Локальный запуск

Итак, чтобы локально запустить Stable Diffusion понадобится не так много. Установить один из вариантов веб-интерфейсов. Например, самые интересные это вот эти:

stable-diffusion-webui - https://github.com/AUTOMATIC1111/stable-diffusion-webui

InvokeAI - https://github.com/invoke-ai/InvokeAI

SHARK - https://github.com/nod-ai/SHARK

Все они отличаются какой-то особенностью, из-за чего могут быть полезны все. И все схожи в установке, которая не отличается какой-то сложностью, достаточно просто следовать инструкции.

Для запуска будет достаточно видеокарты на 4гб. Если нет gpu, то доступен запуск на cpu - тогда генерация занимает минуты, и за счет оперативной памяти куда большие разрешения, но времени уйдет на это немыслимо. В зависимости от мощности процессора, генерация 512x512 может занять 3-4 минуты на 6 ядерном cpu.

После этого нужно найти и скачать понравившуюся модель, которые расположены на сайте https://civitai.com/

выбрать есть из чего
выбрать есть из чего

Если не хочется выбирать и сравнивать, то можете сразу взять Deliberate, она является одной из лучших моделей, у неё отлично и с анатомией, и с пальцами.

Все скачанные модели нужно размещать в папке моделей, либо вручную, для webui это будет путь: stable-diffusion-webui\models\Stable-diffusion\, либо через интерфейс добавления моделей, как у InvokeAI.

Самым продвинутым веб-интерфейсом можно назвать stable-diffusion-webui, где помимо базовых широких возможностей без плагинов, также доступны и различные полезные плагины, например, ControlNet - который позволяет делать много разного, не доступного в базовом виде.

В сочетании с плагином Posex можно делать и позы.

У webui легко возвращать забытые промпты и настройки, для этого есть панель с кнопками под кнопкой Generate. Для сгенерированной картинки достаточно перетянуть её в поле ввода, или скопировать чужие промпты, или взять инфо из PNG Info и нажать на кнопку со стрелкой, после этого все поля будут автоматически заполнены.

У sd есть проблема с повторяемостью результатов. Из-за того, что разные видяхи используют разные ускорители вычислений, то например, если кто-то сгенерировал картинку с xformers на nvidia, на amd вы не сможете повторить её один в один, и наоборот. Но при этом если вы генерируете в разных веб-интерфейсах с одинаковыми настройками на одинаковой машине, результат будет повторяться. Возможно причина в чем-то другом, но в целом такая проблема существует.

Запуск с ускорением на видеокартах AMD

Для своей работы sd использует pytorch, у которого доступны следующие варианты запуска:

На видеокартах nvidia доступно ускорение через CUDA, а на AMD через ROCm (hip). HIP - это прямой аналог cuda, но на данный момент он работает только под linux. Недавно blender для windows добавил поддержку hip, поэтому в целом работы по переносу hip на windows ведутся, но пока для пользователей windows доступны другие варианты, менее удобные, а именно враппер для Vulkan и DirectML.

Таким образом, есть следующие варианты:

  1. запускать на linux вместе с hip. Например, stable-diffusion-webui установит всё автоматически. Есть поддержка запуска в docker (под wsl2 не сработает).

  2. под windows 2 варианта:

    • использовать для ускорения vulkan - запуск на vulkan сейчас возможен только на sharp, работает почти на том же уровне что и hip, чуть медленнее. Но sharp имеет меньше возможностей и настроек.

    • использовать форк https://github.com/lshqqytiger/stable-diffusion-webui-directml с ускорением через directml. По отзывам не всегда работает стабильно и отваливается с ошибкой о нехватки памяти, там где hip или vulkan работают без проблем. Лечится добавлением ключей запуска, которые замедляют генерацию, но снижают потребление памяти.

На данный момент для видеокарт amd самый быстрый вариант это linux + hip. И с этим есть некоторые особенности. Если всё не завелось автоматически и показывается сообщение об отсутствии hip-устройства, нужно явно указать версию HSA. В консоли перед запуском надо вбить один из 3х вариантов (в зависимости от вашей модели видеокарты):

export HSA_OVERRIDE_GFX_VERSION=10.3.0
export HSA_OVERRIDE_GFX_VERSION=9.0.12
export HSA_OVERRIDE_GFX_VERSION=8.3.0

Другой вариант того же самого, например, это вводить команду запуска сразу с указанием нужного:

HSA_OVERRIDE_GFX_VERSION=10.3.0 ~/invokeai/invoke.sh

Если появляется проблема с нехваткой памяти, или видеокарта не поддерживает f16, помогут эти команды (только для webui, в других они выглядят по другому, если вообще есть):

# Если ошибка про half:
--precision full --no-half

# Если хочется генерацию больших разрешений на 8гб памяти:
--medvram 

# Если совсем мало памяти, например, 4гб:
--lowvram 

Каждый из этих параметров сильно снижает скорость генерации (только medvram не существенно). Также medvram поможет при train.

Локальный chatGPT (только CPU)

С локальным chatGPT ситуация не на столько качественная, как с картинками. Но что-то работает. Есть некоторое количество моделей, которые обучены следовать инструкциям.

Для их локального запуска потребуется либо llama.cpp (https://github.com/ggerganov/llama.cpp), либо alpaca.cpp (https://github.com/antimatter15/alpaca.cpp) и найти нужную модель на huggingface. llama.cpp может запускать модели и от alpaca, и от gpt4all и от vicuna, поэтому можно сразу выбрать его для запуска.

Например, alpaca 30B: https://huggingface.co/Pi3141/alpaca-lora-30B-ggml/tree/main

Или 13B vicuna: https://huggingface.co/eachadea/ggml-vicuna-13b-4bit/tree/main

13B - это размер модели, 13 млрд параметров. Для запуска требуется меньше памяти, чем размер модели. Для alpaca 30B - 25гб памяти, а для vicuna 13B примерно 9.5гб памяти. Для 7B совсем мало требуется памяти, можно запускать на Raspberry Pi 4.

Серия статей на хабре про эти модели: https://habr.com/ru/users/bugman/posts/

Или даже больше, попытка энтузиастов по всему миру сделать открытый аналог chatGPT: https://habr.com/ru/articles/726584/

vicuna понимает по-русски, но не рассчитывайте, что всегда и на хорошем уровне, это всё-таки не chatGPT
vicuna понимает по-русски, но не рассчитывайте, что всегда и на хорошем уровне, это всё-таки не chatGPT

Для запуска в интерактивном режиме (как chatGPT) нужна команда:

# для llama.cpp
./main -i --interactive-first -r "### Human:" --temp 0 -c 2048 -n -1 -t 12 --ignore-eos --repeat_penalty 1.2 --instruct -m ggml-vicuna-13b-4bit.bin

# для alpaca.cpp (можно указать через --threads количество потоков процессора)
./chat -m ggml-model-q4_0.bin --threads 12

Для запуска 30B на alpaca.cpp, вам придется немного отредактировать файл chat.cpp перед компиляцией, как указано тут: https://huggingface.co/Pi3141/alpaca-lora-30B-ggml/discussions/3

13B vicuna лучше справляется и с текстом и лучше генерирует код, чем 30B alpaca за счет более качественного подхода к обучению vicuna. Но 30B - это 30B, чем больше параметров, тем "начитаннее" бот.

Итог

Нейросетей для запуска локально становится всё больше. Если вы знаете еще какие-то интересные, то делитесь ими в комментариях.

Комментарии (19)


  1. css0101
    09.04.2023 01:27

    Интересно было бы почитать про Zero-Shot Text-Guided Object Generation with Dream Fields.


  1. Kogolbok
    09.04.2023 01:27

    Все говорят про Alpaca и Llama. А их, вроде как, стырили у Цукерберга. Неужели нет СВОБОДНЫХ проектов текстового ИИ? Вот бы кто прошёлся по ним, сравнил и написал статью. Я просто мимокрокодил, но совсем не против был бы побаловаться с чем-то на своём компьютере.


    1. Evengard
      09.04.2023 01:27

      Как бы есть Gpt-j, но до Лламы она вроде не дотягивает. Не говоря уже о Gpt-4


    1. Inkor
      09.04.2023 01:27
      +1

      Ну можешь глянуть тут.

      https://arxiv.org/abs/2303.18223

      Но не от больших корпораций сеток немного BLOOM, gpt-j и т.д. Просто потому что языковые модели самые большие монстры в плане требований на компьютерные вычисления при обучении. И если не можешь себе позволить пару сотен a100 на несколько месяцев, то с нуля ты ничего не сделаешь. Поэтому языковыми моделями в основном занимаются только большие ребята.


      1. Tamul
        09.04.2023 01:27

        А как это оценить количественно? Вот скажем есть 13B-моделька Llama (или любая другая похожего уровня), и есть статья из Википедии на 1500 символов. Какие мощности, объёмы памяти и сроки нужны, чтобы обученную сетку дообучить на статье?


        1. Tamul
          09.04.2023 01:27

          (Если что, я не про конкретные цифры, а про положение между полюсами "8-ядерный процессор сможет править веса исходной сетки эквивалентно упихиванию в неё 1000 токенов минут за 5, лишь бы ОЗУ хватило" и "Нее, вам понадобятся минимум 32 штуки а100 и по паре часов времени на те же 1000 токенов)


        1. Inkor
          09.04.2023 01:27

          Тут

          https://arxiv.org/pdf/2203.15556.pdf

          это наиболее влиятельная работа по оценке оптимальной тренировки языковых моделей для заранее заданных вычислительных бюджетов.


    1. Kristaller486
      09.04.2023 01:27
      +1

      Я пытался погрузится в эту тему, у меня даже получилось что-то собрать. В итоге: моделей уровня GPT-3, кроме LLaMA, нет, но есть хорошие нейронки уровнем пониже, которые запускаются на условно-домашних компьютерах и абсолютно свободные, под Apache 2. Например, GPT-NEOX, GPT-NEOXT, Pythia. Все они выдают человеко-читаемый текст, но как чат-википедию их использовать не получится - мало знают и много врут.


  1. mm3
    09.04.2023 01:27
    +6

    открыв для себя аналог stable-diffusion-webui для текстовых моделей https://github.com/oobabooga/text-generation-webui ( который так же заявляет поддержку amd через rocm ) я так же открыл для себя глубокий мир очень больших открытых языковых моделей galactica (вплоть до galactica-120b) и OPT (вплоть до OPT-175b)


    1. Zoolander
      09.04.2023 01:27
      -1

      так, и как там на очень больших моделях с программированием? А с пониманием шуток? Галактика знает, в чем юмор "Колобок повесился"? А с объяснением анатомии Колобка - поймет?


  1. Fedorkov
    09.04.2023 01:27
    +3

    Deliberate с пустым запросом почему-то в половине случаев рисует голых баб. :)


    1. masterKub
      09.04.2023 01:27
      +4

      Звучит как реклама


    1. css0101
      09.04.2023 01:27

      Deliberate в любых непонятных случаях рисует голых баб. Иногда даже в понятных.


      1. Kenya-West
        09.04.2023 01:27

        В любой непонятной ситуации рисуй голую бабу!


    1. onegreyonewhite
      09.04.2023 01:27

      Наверное в коде прописано изучить историю браузера и предугадать ожидания.


    1. rkfg
      09.04.2023 01:27
      +2

      У любой нейросети ограниченный объём знаний. Базовая модель может рисовать всё, но плохо. Кастомные модели могут рисовать что-то сильно лучше, зато остальное хуже. Поэтому большинство таких моделей обучают на порно/эротике для улучшения понимания анатомии, ну и соответственно при денойзе без гайданса (промпта) она склоняется к тому, на чём её обучали. Негативным промптом можно отбить уклон в обнажёнку, оставив качественную анатомию в целом. Могу ещё посоветовать Liberty и RealisticVision, последний даёт хорошие сцены без голых баб.

      Ну и поскольку модель всё равно вероятностная, 100% гарантии отсутствия мутаций и странных рук никто не даст. Можно лишь эту вероятность повысить через разного рода эмбеддинги (типа Bad Hands) и генерации нескольких вариантов с последующим отбором из них наиболее удачных. В частности, проблема с руками связана с тем, что в датасетах никто не описывает их положение достаточно детально (например, вместо "holding/gripping a phone" могут написать "with a phone", так что модель связывает человека и телефон с соответствующими изображениями, но не улавливает их связь и роль руки в ней), и из-за этого сеть не привязывает изображение рук к конкретной ситуации. Остальные части тела удостаиваются большего внимания, такие как пол, взгляд, выражение лица, цвет глаз/волос и т.п., поэтому их модель распознаёт и рисует намного лучше.


      1. Fedorkov
        09.04.2023 01:27

        То есть денойз без промпта — это тест Роршаха для нейронки, по которому можно диагностировать исходный датасет.


      1. Inkor
        09.04.2023 01:27

        Поэтому большинство таких моделей обучают на порно/эротике для улучшения понимания анатомии, ну и соответственно при денойзе без гайданса (промпта) она склоняется к тому, на чём её обучали.

        Скорее потому что на это есть большой спрос и первые люди которые дообучали обнаженку неплохо так с патреона денег собирали.


  1. alekssamos
    09.04.2023 01:27
    +4

    Анатомия, пальцы...
    Недавно читал в одном TG канале:
    в Китае разоблачили организаторов роскошной вечеринки: мошенников выдали "криво" сгенерированные пальцы моделей.

    История началась с того, что внимание местных жителей из провинции Цзянсу привлекла яркая реклама вечеринки на яхте — организаторы обещали предоставить индивидуальные услуги "девушек-горничных" для VIP-клиентов.

    Стоимость "личной горничной" на целый вечер была очень демократичной: всего 3 000 юаней (около $430). При этом половину суммы организаторы требовали перевести в качестве предоплаты.

    Однако заинтересованные клиенты заподозрили неладное, когда обнаружили у девушек на фото проблемы с пальцами: они либо отсутствовали, либо были сильно деформированы.

    В итоге оказалось, что мероприятие представляет из себя банальный скам, а фотографии были сгенерированы нейросетью.