Вместо вводного слова, хотелось бы сразу обратить ваше внимание на используемую вами версию сборки Stable Diffusion WebUI DirectML. Если она равняется 1.8.0-RC, то добро пожаловать на страницу данного материала. В случае сборки 1.9.0 и выше, вполне возможно, что вам попросту необходимо удалить папку “venv“, после чего запустить “webui-user.bat“, чтобы перекачать в автоматическом режиме ранее удаленную папку с “правильными” файлами. Если же это не помогло, то опять таки – добро пожаловать на страницу данного материала.

Следующее, и не менее важное: ваша видеокарта AMD должна поддерживать низкоуровневый API для машинного обучения DirectML, и обладать как минимум 4 ГБ видеопамяти. Поддержкой DirectML наделены все графические адаптеры AMD основанные на архитектурах GCN 1.0, GCN 2.0 и GCN 4.0. Вот только есть нюанс в виде объема установленной VRAM. Серия Radeon HD 7000, за редкими исключениями, не выходит за рамки 3 ГБ, а этого мало для Stable Diffusion.

Если вкратце, то подойдут карты с объемом 4 ГБ+ начиная с Radeon R9 270 (проверено лично на 4-гигабайтной версии, смотрите чуть ниже)/280/285/290X/370/380/390X (6-гигабайтная HD 7970 так же подойдет, но это редкий зверек, так что…), ну и конечно же, всеми любимые RX 470/480/570/580/590/Vega 56/64. Однако следует уточнить – крайне желательно, чтобы у видеокарты было 8 ГБ VRAM и больше. Скорость генерации изображений при использовании DirectML на этом объеме ощутимо выше, и что самое важное – стабильнее.

Тем не менее, это не означает, что владельцы 4-гигабайтных карт чем-то серьезно ограничены. На подобных устройствах функционирует практически все то, что и на 8-гигабайтных графических адаптерах. Например, интеграция LoRA происходит без проблем, и генерация с ней работает более чем приемлемо.

Единственно что стоит упомянуть, так это весьма серьезные требования к объему оперативной памяти у 4-гигабайтных GPU. Тут лучше иметь более 16 ГБ ОЗУ для SD 1.5, и 32 ГБ+ для SDXL чекпоинтов/моделей, особенно если вы желаете генерировать изображения с разрешением 768×512 / 512×768 и выше.

Дисклеймер: Все нижеописанные действия и настройки помогли именно в моем случае (операционная система – Windows 11, железо – R9 270X 4 GB, RX 470 4 GB и RX 470 8 GB). Существует неиллюзорная вероятность, что мой опыт вам не поможет.

Системные требования, и необходимое ПО

Для начала, давайте убедимся что вы выполнили все соответствующие требования для дальнейшего успешно запуска Stable Diffusion WebUI, с бекендом DirectML.

Минимальные системные требования:

  • Операционная система: Windows 10/11;
  • Объем оперативной памяти: 16 ГБ и больше;
  • Процессор: 4-ядерный чип Intel Core i5-2400, или AMD FX-4300 или лучше;
  • Видеокарта: Radeon R9 270 4 ГБ, Radeon RX 470 4 ГБ или лучше;
  • Накопитель (желательно SSD, но скоростной HDD тоже подойдет): около 10 ГБ свободного места для установки, и до умопомрачительных объемов в 100 и 300 ГБ. Все зависит от того, насколько много чекпоинтов/моделей вы собираетесь использовать.

Необходимое программное обеспечение:

Актуальная сборка stable-diffusion-webui-directml из официального источника:

64-bit версия Git for Windows:

64-bit версия Python 3.10.6 (при установке ОБЯЗАТЕЛЬНО поставьте галочку на пункте Add Python 3.10 to PATH).

Установка и запуск Stable Diffusion WebUI

Все пункты успешно выполнены? Тогда распаковываем архив со Stable Diffusion WebUI в корень любого диска. В зависимости от потребностей, вы можете переименовать архив и/или папку, это ни на что не повлияет, главное, чтобы в названии папки не было пробелов. Я так и поступил, так как у меня несколько тестовых экземпляров.

Заходим в распакованную папку, и нажимаем правым кликом на файл “webui-user.bat“, далее щелкаем по пункту “изменить/открыть с помощью Code” (для редактирования можно использовать как стандартный блокнот, так и Microsoft VS Code):

Здесь вам нужно прописать аргументы для запуска нейросети.

Для первого успешного старта Stable Diffusion WebUI DirectML лучше не использовать лишних параметров, и остановиться на следующих:

Для видеокарт с 4 ГБ видеопамяти:

set COMMANDLINE_ARGS= --use-directml --lowvram

Для видеокарт с 8 ГБ видеопамяти:

set COMMANDLINE_ARGS= --use-directml --medvram

Для видеокарт с 16 ГБ видеопамяти и больше:

set COMMANDLINE_ARGS= --use-directml

Аргумент --use-directml указывает сборке принудительно переключиться на соответствующий бекенд, и загрузить на ваш ПК совместимые библиотеки. --lowvram призван снизить потребление видеопамяти, в ущерб скорости генерации (в том числе за счет ОЗУ). --medvram так же немного снижает скорость генерации, но уже не так существенно как --lowvram.

Сохраняем файл (файл>сохранить, либо сочетанием клавиш CTRL + S) и запускаем измененный батник. Откроется окно командной строки. Далее вас ждет весьма продолжительная установка всех необходимых ассетов и библиотек (в зависимости от мощности вашего ПК и скорости интернета – от 10 минут до 1 часа). В какой-то момент может показаться что установка зависла, но вероятнее всего это не так. Просто подождите еще немного.

После завершения установки консоль автоматически запустит браузер, в котором откроется вкладка с адресом http://127.0.0.1:7860/. Если этого не произошло, то просто скопируйте ранее упомянутую ссылку и вставьте в адресную строку браузера.

Крайне важно: ни в коем случае не закрывайте консоль! Это и есть ваш личный сервер с нейросетью, а вкладка в браузере – просто графический интерфейс взаимодействия с ним.

Теперь давайте проверим, работает ли наша нейросеть. На данном этапе я не загружал никаких дополнительных моделей, поэтому буду использовать базовую SD 1.5. Впишем простенький prompt “knight” и вуаля, генерируя наше изображение, графический процессор 4-гигабайтной видеокарты RX 470 загружен практически под завязку:

Какой prompt – такой и результат.

Даже на видеокарте со скромным объемом VRAM, скорость генерации существенно выше, чем на классическом центральном процессоре.

К слову, а вот и генерация заглавного изображения для данного материала силами 4-гигабайтной RX 470. Здесь я уже использую сторонний чекпоинт CyberRealistic v4.2, вдобавок с двумя LoRA:

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

В целом, это все. Сервер работает, интерфейс доступен, можете смело приступать к генерации потенциальных шедевров! А вот если у вас возникли проблемы с запуском, или генерация стопориться из-за ошибок – то добро пожаловать в следующий раздел данного материала.

Решение потенциальных проблем после установки Stable Diffusion WebUI

В случае возникновения разнообразных ошибок при запуске (вроде злосчастной “Torch is not able to use GPU”), или попытке генерации изображений в Stable Diffusion WebUI DirectML, вам стоит попробовать проделать следующие действия:

Зайдите в директорию с нейросетью, и удалите папку venv:

Далее, в директории с нейросетью найдите файл requirements_versions.txt и нажмите на него правой кнопкой мыши, после чего щелкните по пункту “изменить/открыть с помощью Code”.

В этом файле вам нужно найти запись о необходимой библиотеке torch, она расположена примерно на 29-33 строке, в зависимости от сборки WebUI:

Эту запись вам нужно изменить на torch-directml:

Сохраняемся и закрываем данный файл. Следом за этим, нажимаем правой кнопкой мыши на файл “webui-user.bat“, далее щелкаем по пункту “изменить/открыть с помощью Code”. Здесь вам нужно к уже прописанным ранее параметрам добавить следующий аргумент --reinstall-torch:

Сохраняемся и запускаем этот же файл. Таким образом мы переустанавливаем библиотеки torch исключительно под DirectML (и CPU, но нам это не интересно).

После того, как консоль вновь загрузит необходимые файлы и откроется веб-интерфейс Stable Diffusion, аргумент --reinstall-torch из батника webui-user.bat можно удалять.

В моем случае это помогло с решением ошибки “Torch is not able to use GPU” на одной из сборок Stable Diffusion WebUI DirectML. На другой сборке избавило от проблемы использования процессора вместо видеокарты AMD.

Дополнительные настройки и примеры работы Stable Diffusion WebUI на 4 и 8 ГБ видеокартах AMD

В данном разделе я опишу свой опыт работы с нейросетью на слабых видеокартах AMD, а так же приведу несколько примеров генерации изображений на графических адаптерах R9 270X и RX 470.

Согласно моим исследованиям, лишь два аргумента позволяют получить существенный прирост производительности на видеокартах AMD. Первый это --opt-sdp-attention, который, если не вдаваться в подробности, является аналогом xFormers для карт NVIDIA, но в отличии от последнего, работает и на красных графических адаптерах. --opt-sdp-attention действительно ускоряет генерацию изображений, однако это далеко не бесплатно. Ценой за повышенную скорость становится видеопамять, которой, с бекендом DirectML и так постоянно не хватает.

Второй аргумент – это --upcast-sampling. Генерацию он ускоряет он незначительно, но при этом слегка уменьшает потребление видеопамяти, что весьма уместно.

Параметры запуска Stable Diffusion WebUI для 4-гигабайтных карт R9 270X и RX 470:

set COMMANDLINE_ARGS= --use-directml --lowvram

По какой-то причине, параметр --upcast-sampling лишь вредит картам с малым объемом видеопамяти. При использовании этого аргумента, скорость генерации падает в два-три раза. Хотя, судя по описанию в документации, он вроде как призван слегка оптимизировать потребление той самой видеопамяти, и немного ускорить генерацию.

Использовать --opt-sdp-attention на 4 ГБ видеокартах вообще невозможно. Генерация даже не запускается, вываливаясь с ошибкой о критической нехватке памяти практически при любом разрешении.

Увы, но в моем случае эти параметры не помогли 4-гигабайтным картам. Тем не менее, вы вполне можете провести соответствующие эксперименты на своем ПО и оборудовании. Возможно в вашем случае вышеупомянутые параметры адекватно заработают на картах со скромным объемом VRAM.

Процесс генерации одного из изображений на Radeon R9 270X в разрешении 512 на 768 пикселей:

Финальный результат:

Время генерации – чуть больше 5 минут, при 20 sampling steps, а так же одной подключенной LoRA. Для столь старой видеокарты – достойнейший результат.

Еще один финальный результат:

А теперь давайте посмотрим, за сколько справится RX 470 4GB с аналогичными настройками и разрешением:

Уже лучше – 3 минуты 23 секунды.

Ну и самое интересное я оставил под конец. В тестовом стенде RX 470 на 8 ГБ.

Параметры запуска Stable Diffusion WebUI для 8-гигабайтных карт:

set COMMANDLINE_ARGS= --use-directml --medvram --opt-sdp-attention --upcast-sampling

В случае относительно достаточного объема видеопамяти, параметры --opt-sdp-attention и --upcast-sampling работают как прописано в документации, и действительно существенно ускоряют генерацию изображений, а так же немного снижают потребление VRAM.

Без --opt-sdp-attention и --upcast-sampling:

Генерация продлилась 2 минуты 53 секунды. Прирост относительно 4-гигабайтной версии совсем несущественный.

С --opt-sdp-attention и --upcast-sampling:

А вот это уже другое дело – всего 44 секунды! Ровно как я и писал в начале материала, 8-гигабайтные версии RX 470/480/570/580/590 будут генерировать изображения гораздо быстрее своих 4-гигабайтных сородичей.

Давайте попробуем немного увеличить разрешение до 512 на 900:

53 секунды – отменный результат! Но тут мы достигли предела 8-гигабайтных видеокарт. Если вы желаете генерировать изображения в более высоком разрешении, вам необходимо использовать аргумент --lowvram и для подобного объема VRAM.

Теперь немного про несущественные ошибки, которые в целом не мешают работе Stable Diffusion.

Периодически, при генерации изображений в разрешении 512×768 / 768×512 (высоком для карт AMD), может выскакивать ошибка “RuntimeError: Could not allocate tensor with 1207959552 bytes (или любое другое количество байт). There is not enough GPU video memory available!”. Вероятно, это нормально для ветки Stable Diffusion WebUI с бекендом DirectML, настройки и/или разрешение менять не имеет особого смысла, так как после повторного запуска генерация может начаться как ни в чем не бывало, и сделать хоть 50 изображений подряд (в батче или без него, значения не имеет), а потом снова на первом вывалиться в “RuntimeError”.

Похоже на проблемы с “утечкой видеопамяти”, но ручаться за это я не могу, так как выяснить причину подобного поведения WebUI DirectML мне не удалось.

Итог

Безусловно, скорость генерации на видеокартах AMD, по сравнению с графическим адаптерами NVIDIA оставляет желать лучшего. Тем не менее, если в вашем системном блоке установлена карта от красного гиганта – это далеко не приговор. Согласно моим исследованиям, GPU от AMD (особенно с относительно большим объемом видеопамяти), способны достаточно быстро генерировать изображения даже с использованием нескольких LoRA. А если вы счастливый обладатель карты с 16, или 24 гигабайтами VRAM, то вам открывается доступ к созданию изображений с более высоким разрешением, вплоть до FullHD. Возможно даже выше. Видеокарт AMD с подобным объем видеопамяти в наличии у меня сейчас нет.

Было бы приятно оценить ваши результаты генерации изображения на видеокартах AMD. Кроме этого, если у вас есть информация о дополнительных настройках, или библиотеках, которые могут ускорить работу Stable Diffusion на красных графических адаптерах – не стесняйтесь делиться своим опытом в комментариях к этому материалу!

Leave a Reply

Your email address will not be published. Required fields are marked *