Запускаем Stable Diffusion на GPU AMD Radeon в Docker

c855a3865896cca48c2ff4dd048acd67.png

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

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.

Исходя из идеи, промт будет таким: «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. Перед копированием файла необходимо предоставить доступ к каталогу data, так как контейнер запускался от имени пользователя root. Для этого нужно выполнить команду sudo chmod -R 777./data.

На вкладке «ControlNet» загрузим изображение, которое мы нашли в интернете. Установим флаг Pixel Perfect. Control Type выберем Canny, Preprocessor — canny, Model — diffusers_xl_canny_full [2b69fca4], 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 [2b69fca4], Control Weight — 1, Ending Control Step — 1. Обратите внимание, что вес и шаг остановки установлены на 1, чтобы надписи были чёткими и не исчезали.

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

Замечание

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

Так же лица хорошо заменяет IP-Adapter FaceID, Instant ID и уже описанный здесь Canny.

© Habrahabr.ru