Как стать автором
Обновить

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

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров5.4K

Для запуска нам понадобится 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 может изменить стиль рисунка, сохранив контуры.

Теги:
Хабы:
+11
Комментарии11

Публикации

Истории

Ближайшие события