Запускаем Stable Diffusion на GPU AMD Radeon в Docker
Для запуска нам понадобится 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.