Для запуска нам понадобится Ubuntu с установленными: git, make, docker и ROCm.

Инструкция по запуску короткая и простая, поэтому дополнительно разберём пример генерации изображения для этой статьи и продеманстрируем работу Stable Diffusion на AMD Radeon. Всё нижеизложенное протестировано на AMD Radeon RX 7900 XTX.

ROCm установим по инструкции.

Краткая инструкция установки ROCm
sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/6.1.2/ubuntu/jammy/amdgpu-install_6.1.60102-1_all.deb
sudo apt install ./amdgpu-install_6.1.60102-1_all.deb

# If an error occurs, you must run:
sudo chown -Rv _apt:root /var/cache/apt/archives/partial/
sudo chmod -Rv 700 /var/cache/apt/archives/partial/

sudo apt update
sudo apt install amdgpu-dkms
sudo apt install rocm-hip-libraries
sudo reboot

Скопируем проект позволяющий настроить и запустить Stable Diffusion в docker контейнере:

git clone https://github.com/HardAndHeavy/stable-diffusion-webui-rocm-docker
cd stable-diffusion-webui-rocm-docker

Запустим Stable Diffusion с помощью команды make run. При первом запуске будет происходить длительный процесс инициализации. Когда этот процесс завершится, Stable Diffusion станет доступен по адресу http://localhost.

Модель для преобразования текста готова, и теперь можно создать обложку для статьи. Предлагаю такую идею для обложки: изображение грузовика с контейнером, на котором написано «Stable Diffusion». Грузовик стоит в порту, готовый к погрузке на контейнеровоз с именем «docker AMD».

Для упрощения процесса рисования нам потребуется расширение ControlNet. Чтобы его установить, нужно перейти на вкладку «Extensions» - «Available». Затем следует нажать кнопку «Load from». После этого откроется список доступных расширений, в котором нужно выбрать «sd-webui-controlnet» и нажать кнопку «Install». Далее необходимо перейти на вкладку «Installed» и нажать кнопку «Apply and quit». После этого контейнер остановится, и чтобы запустить его снова, нужно выполнить команду make run.

Для рисования я буду использовать модель Level4 XL. Её и другие модели можно найти на сайте civitai.com. Скаченные модели необходимо размещать в каталоге ./data/stable-diffusion/models/Stable-diffusion. Перед копированием файла модели необходимо предоставить доступ к каталогу data, так как контейнер запускался от имени пользователя root. Для этого нужно выполнить команду sudo chmod -R 777./data.

Исходя из идеи, промт будет таким: «container ship, container truck, oil painting, heavy brush strokes dominate the canvas, calm colors, pier». Негативный промт — «watercolour». Sampling method выберем DPM++ SDE, Sampling steps — 15, CFG Scale — 2. Теперь можно создать изображение, нажав на кнопку «Generate».

Результат генерации
Результат генерации

Поскольку на картине нет надписей и корабля в порту, как было задумано, нам нужно внести изменения. Для этого мы воспользуемся рисованием по контуру и ещё найдём подходящее изображение в интернете:

Подходящее изображение найденное в интернете
Подходящее изображение найденное в интернете

Для рисования по контору скачаем файл diffusers_xl_canny_full.safetensors, который необходимо разместить в каталоге ./data/stable-diffusion/models/ControlNet.

На вкладке «ControlNet» загрузим изображение, которое мы нашли в интернете. Установим флаг Pixel Perfect. Control Type выберем Canny, Preprocessor — canny, Model — diffusers_xl_canny_full, Control Weight — 0.7, Ending Control Step — 0.5. Увеличим размер холста пропорционально загруженному изображению: Width — 828, Height — 476. В результате генерации получится два изображения: рисунок и представление препроцессора для режима canny. Представление препроцессора можно отредактировать в любом графическом редакторе, удалив ненужные линии и добавив необходимые. После этого препроцессорное представление можно сразу загрузить в изображение для «ControlNet».

Результат генерации
Сгенерированное изображение
Сгенерированное изображение
Препроцессорное представление
Препроцессорное представление

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

Работа в графическом редакторе
Отредактированное препроцессорное представление
Отредактированное препроцессорное представление
Надписи
Надписи

Вместо исходного изображения загрузим отредактированный контур. Перейдём на вторую вкладку «ControlNet Unit 1» и добавим изображение надписей. Control Type выберем Canny, Preprocessor — canny, Model — diffusers_xl_canny_full, Control Weight — 1, Ending Control Step — 1. Обратите внимание, что вес и шаг остановки установлены на 1, чтобы надписи были чёткими и не исчезали.

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

Замечание

Для замены лиц рекомендую использовать ReActor. После установки ошибка исправляется докачиванием файла inswapper_128.onnx по рекомендации в каталог .data/stable-diffusion/models/insightface.

Так же лица хорошо заменяет IP-Adapter FaceID, Instant ID

Описанный здесь Canny может изменить стиль рисунка, сохранив контуры.

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


  1. von_cidevant
    15.06.2024 01:47
    +1

    А для nVidia?(((


    1. stdamit
      15.06.2024 01:47
      +1

      а как же присказка "купил амуде - страдай"?
      вот пощимитесь теперь и вы, Шреки.


    1. Soloist Автор
      15.06.2024 01:47
      +8

      Nvidia у меня нет, но наработанного материала достаточно. Вот здесь 4 готовых проекта.

      Для AMD статей мало, поэтому я стараюсь закрыть эту нишу. Поддержка у AMD слабее, но стоимость карты и возможность стать первооткрывателем подкупают.


    1. vedmak3
      15.06.2024 01:47

    1. MountainGoat
      15.06.2024 01:47
      +10

      Что - для Nvidia? На Nvidia всё просто работает.


    1. StraNNicK
      15.06.2024 01:47

      1. Soloist Автор
        15.06.2024 01:47
        +1

        Этот проект для Nvidia, всего их четыре. Вот есть похожий проект для AMD Radeon. Он основан на Python 3.10. Но мой работает на Python 3.11. Плюс мне очень сейчас важно подготовить базу для будущих задач, поэтому буду делать велосипед, но с плюшками.


        1. StraNNicK
          15.06.2024 01:47

          я это писал в ответ на "А для nVidia?(((" : )


          1. Soloist Автор
            15.06.2024 01:47

            Точно, я ошибся, думал это новая ветка.


  1. rafuck
    15.06.2024 01:47

    [deleted: случайно]