
Запуск Stable Diffusion WebUI DirectML на старих AMD RX 400/500/Vega, R9 200/300 (Windows). Вимоги, встановлення, усунення проблем з 4ГБ+ VRAM.
Замість вступного слова, хотілося б одразу звернути вашу увагу на версію збірки 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 чекпоінтів/моделей, особливо якщо ви бажаєте генерувати зображення з роздільною здатністю 768x512 / 512x768 і вище.
Дисклеймер:Усі нижчеописані дії та налаштування допомогли саме в моєму випадку (операційна система – 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 версія Python 3.10.6(під час встановленняОБОВ'ЯЗКОВОпоставте галочку на пунктіAdd Python 3.10 to PATH).
⤢ ВІДКРИТИУсі пункти успішно виконано? Тоді розпаковуємо архів зі 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 завантажений практично під зав'язку:
⤢ ВІДКРИТИ
⤢ ВІДКРИТИНавіть на відеокарті зі скромним об'ємом VRAM, швидкість генерації істотно вища, ніж на класичному центральному процесорі.
До речі, ось і генерація заголовного зображення для цього матеріалу силами 4-гігабайтної RX 470. Тут я вже використовую сторонній чекпоінт CyberRealistic v4.2, на додачу з двома LoRA:
⤢ ВІДКРИТИЗа підсумком, я лише трохи підкоригував контрастність і замінив логотип на AMD у растровому редакторі зображень.
Загалом, це все. Сервер працює, інтерфейс доступний, можете сміливо приступати до генерації потенційних шедеврів! А от якщо у вас виникли проблеми із запуском, або генерація стопориться через помилки – тоді ласкаво просимо до наступного розділу цього матеріалу.
У разі виникнення різноманітних помилок під час запуску (на кшталт злощасної "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.
У цьому розділі я опишу свій досвід роботи з нейромережею на слабких відеокартах 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.
Періодично, при генерації зображень з роздільною здатністю 512x768 / 768x512 (високою для карт 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 на червоних графічних адаптерах – не соромтеся ділитися своїм досвідом у коментарях до цього матеріалу!