Для запуска нам понадобится 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 может изменить стиль рисунка, сохранив контуры.
von_cidevant
А для nVidia?(((
stdamit
а как же присказка "купил амуде - страдай"?
вот пощимитесь теперь и вы, Шреки.
Soloist Автор
Nvidia у меня нет, но наработанного материала достаточно. Вот здесь 4 готовых проекта.
Для AMD статей мало, поэтому я стараюсь закрыть эту нишу. Поддержка у AMD слабее, но стоимость карты и возможность стать первооткрывателем подкупают.
vedmak3
ComfyUI
MountainGoat
Что - для Nvidia? На Nvidia всё просто работает.
StraNNicK
https://github.com/AbdBarho/stable-diffusion-webui-docker
Soloist Автор
Этот проект для Nvidia, всего их четыре. Вот есть похожий проект для AMD Radeon. Он основан на Python 3.10. Но мой работает на Python 3.11. Плюс мне очень сейчас важно подготовить базу для будущих задач, поэтому буду делать велосипед, но с плюшками.
StraNNicK
я это писал в ответ на "А для nVidia?(((" : )
Soloist Автор
Точно, я ошибся, думал это новая ветка.