Замість вступного слова, хотілося б відразу звернути вашу увагу на наявну версію збірки 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/580/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-бітна версія 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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *