Poradnik jak zmajstować własną dziewczynę wersja dla AMD i Linux'a
23
Witam, zachęcony wrzutą użytkownika AstreaZero: https://jbzd.com.pl/obr/2678382/poradnik-jak-zmajstrowac-sobie-wlasna-ai-witkorianska-dziewczyne
chciałem sam coś zmajstrować, niestety jako że używam karty graficznej od AMD to dany poradnik u mnie nie zadziała.
Udało mi się użyć Stable Diffusion na windowsie wykorzystując wersję direct-ml: https://github.com/lshqqytiger/stable-diffusion-webui-directml
niestety jego wydajnośc na AMD jest dość niska, na mojej karcie graficznej RX6600 XT 8GB to zaledwie: 0.2it/s.
Jeste też wersja wykorzystująca Vulkan: https://github.com/nod-ai/SHARK
Wydajnośc znacznie lepsza bo nawet 2.4it/s, niestety jest ona mocno ograniczona, tzw. brak możliwości instalacji nowych modułów(controlnet, mov2mov itd.) a sama zmiana modelu do generacji obrazków trwa dobrych 10 minut.
Okazuje się jednak że jakiś czas temu AMD zapewniło wspracie ROCM dla kart konsumenckich, coś ala CUDA od NVIDII, niestety narazie jedynie pod Linuxem. Na Linuxie udało mi się osiągnąć wydajność na poziomie 4.3-4.9it/s z zachowaniem wszystkich możliwości Stable Diffusion.
chciałem sam coś zmajstrować, niestety jako że używam karty graficznej od AMD to dany poradnik u mnie nie zadziała.
Udało mi się użyć Stable Diffusion na windowsie wykorzystując wersję direct-ml: https://github.com/lshqqytiger/stable-diffusion-webui-directml
niestety jego wydajnośc na AMD jest dość niska, na mojej karcie graficznej RX6600 XT 8GB to zaledwie: 0.2it/s.
Jeste też wersja wykorzystująca Vulkan: https://github.com/nod-ai/SHARK
Wydajnośc znacznie lepsza bo nawet 2.4it/s, niestety jest ona mocno ograniczona, tzw. brak możliwości instalacji nowych modułów(controlnet, mov2mov itd.) a sama zmiana modelu do generacji obrazków trwa dobrych 10 minut.
Okazuje się jednak że jakiś czas temu AMD zapewniło wspracie ROCM dla kart konsumenckich, coś ala CUDA od NVIDII, niestety narazie jedynie pod Linuxem. Na Linuxie udało mi się osiągnąć wydajność na poziomie 4.3-4.9it/s z zachowaniem wszystkich możliwości Stable Diffusion.
Niestety nie udało mi się to na maszynie wirtualnej więc osobiście dołożyłem stary dysk HDD 500gb z laptopa do swojego pc, dysk wymagany dla całości to przynajmniej 100gb, sam SD z 3 modelami oraz wszystkimi modelami controlnet zajmuje około 50gb.
To teraz w punktach opisze wam całą procedurę instalacji:
1. zainstalować lub posiadać Linux'a, osobiście wybrałem Linux Mint
2. Zainstalować sterowniki AMD z oficjalnej strony: https://www.amd.com/en/support/linux-drivers
3. Zaktualizować system Linux za pomocą komend terminala:
sudo apt update
sudo apt upgrade
4 Za pomocą terminala dodać swoje konto użytkownika do grup video i render:
sudo usermod -a -G render twojanazwauzytkownika
sudo usermod -a -G video twojanazwauzytkownika
5. Zainstalować ROCM:
sudo amdgpu-install --usecase=rocm –no-dkms
6. Zresetować komputer
sudo reboot
7. jeśli poprzednie komendy się udały po wpisaniu komendy rocminfo powinien wam taki tekst się pojawić:
To teraz w punktach opisze wam całą procedurę instalacji:
1. zainstalować lub posiadać Linux'a, osobiście wybrałem Linux Mint
2. Zainstalować sterowniki AMD z oficjalnej strony: https://www.amd.com/en/support/linux-drivers
3. Zaktualizować system Linux za pomocą komend terminala:
sudo apt update
sudo apt upgrade
4 Za pomocą terminala dodać swoje konto użytkownika do grup video i render:
sudo usermod -a -G render twojanazwauzytkownika
sudo usermod -a -G video twojanazwauzytkownika
5. Zainstalować ROCM:
sudo amdgpu-install --usecase=rocm –no-dkms
6. Zresetować komputer
sudo reboot
7. jeśli poprzednie komendy się udały po wpisaniu komendy rocminfo powinien wam taki tekst się pojawić:
8. Instalujemy GIT oraz klonujemy repozytorium SD webui:
sudo apt-get install git
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
9. Instalujemy venv dla pythona:
apt install python3-venv
10. Instalujemy pip
sudo apt install python3-pip
python3 -m pip install –upgrade pip wheel
11. Instalujemy ibstdc++-12-dev:
sudo apt install ibstdc++-12-dev
12. Przechodzimy do folderu z stable diffusion i w plikach requirements.txt oraz requirements_versions.txt dodajemy znak # przy torch jak na załączonym obrazku
sudo apt-get install git
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
9. Instalujemy venv dla pythona:
apt install python3-venv
10. Instalujemy pip
sudo apt install python3-pip
python3 -m pip install –upgrade pip wheel
11. Instalujemy ibstdc++-12-dev:
sudo apt install ibstdc++-12-dev
12. Przechodzimy do folderu z stable diffusion i w plikach requirements.txt oraz requirements_versions.txt dodajemy znak # przy torch jak na załączonym obrazku
13. Modyfikujemy zawartość pliku webui-user.sh:
Na samym końcu dodajemy wpis:
export HSA_OVERRIDE_GFX_VERSION=10.3.0
a 13 wiersz zmieniamy na:
export COMMANDLINE_ARGS="--opt-sub-quad-attention --medvram --disable-nan-check --always-batch-cond-uncond –opt-sdp-attention"
oczywiście możecie użyć innych argumentów jakie znajdziecie na stronach, manualu czy jakiś forach, te jak na razie dały mi największa wydajność
Na samym końcu dodajemy wpis:
export HSA_OVERRIDE_GFX_VERSION=10.3.0
a 13 wiersz zmieniamy na:
export COMMANDLINE_ARGS="--opt-sub-quad-attention --medvram --disable-nan-check --always-batch-cond-uncond –opt-sdp-attention"
oczywiście możecie użyć innych argumentów jakie znajdziecie na stronach, manualu czy jakiś forach, te jak na razie dały mi największa wydajność
14. Modyfikujemy plik webui.sh dokładnie interesuje nas 129 linijka kodu zmieniamy ją na:
export TORCH_COMMAND="pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.4.2"
export TORCH_COMMAND="pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.4.2"
15. W terminalu przechodzimy do miejsca gdzie mamy sklonowanego SD i nadajemy możliwość wykonywania pliku webui.sh:
cd stable-diffusion-webui
sudo chmod +x webui.sh
16. Pobieramy interesujący nas model do naszego SD ze strony: https://civitai.com/ i kopiujemy do katalogu stable-diffusion-webui/models/Stable-diffusion
17. Tworzymy venv jest to zabezpieczenie że to co SD potrzebuje zostanie stworzone w nim a nie zmienione w całym systemie, najlepiej obydwie linijki wkleić do terminala równocześnie za pomocą ctrl+shift+v:
python3 -m venv venv
source venv/bin/activate
jeżeli się nam powiodło powinien się pojawić napis (venv) przed naszą nazwą użytkownika:
cd stable-diffusion-webui
sudo chmod +x webui.sh
16. Pobieramy interesujący nas model do naszego SD ze strony: https://civitai.com/ i kopiujemy do katalogu stable-diffusion-webui/models/Stable-diffusion
17. Tworzymy venv jest to zabezpieczenie że to co SD potrzebuje zostanie stworzone w nim a nie zmienione w całym systemie, najlepiej obydwie linijki wkleić do terminala równocześnie za pomocą ctrl+shift+v:
python3 -m venv venv
source venv/bin/activate
jeżeli się nam powiodło powinien się pojawić napis (venv) przed naszą nazwą użytkownika:
18. Teraz zostało nam zwyczajnie uruchomienie webui co robimy za pomocą komendy:
./webui.sh
w tym momencie webui zacznie pobierać wszystkie niezbędne rzeczy do jego poprawnego działania co może chwile potrwać. Gdy w terminalu wyświetli się nam już informacja z adresem lokalnym możemy zacząć korzystać z SD webui.
./webui.sh
w tym momencie webui zacznie pobierać wszystkie niezbędne rzeczy do jego poprawnego działania co może chwile potrwać. Gdy w terminalu wyświetli się nam już informacja z adresem lokalnym możemy zacząć korzystać z SD webui.
Za każdym razem jak chcecie uruchomić SD ponownie należy wejść terminalem do foledru Sd i użyć komend:
python3 -m venv venv
source venv/bin/activate
./webui.sh
Dlatego polecam osobiście stworzyć plik w folderze SD o nazwie jakiej chcecie ja użyłem run-webui.sh i zawartości:
#!/usr/bin/bash
python3 -m venv venv
source venv/bin/activate
./webui.sh
i uruchamiać go tym skryptem, na Linux mint zwyczajnie podwójnym kliknięciem wybieracie uruchom w terminalu. Oczywiście musicie mu wcześniej nadać prawo wykonywania za pomocą komendy:
sudo chmod +x run-webui.sh
python3 -m venv venv
source venv/bin/activate
./webui.sh
Dlatego polecam osobiście stworzyć plik w folderze SD o nazwie jakiej chcecie ja użyłem run-webui.sh i zawartości:
#!/usr/bin/bash
python3 -m venv venv
source venv/bin/activate
./webui.sh
i uruchamiać go tym skryptem, na Linux mint zwyczajnie podwójnym kliknięciem wybieracie uruchom w terminalu. Oczywiście musicie mu wcześniej nadać prawo wykonywania za pomocą komendy:
sudo chmod +x run-webui.sh
Mam nadzieję że ten poradnik przyda się kilku osobom z kartami graficznymi AMD podobno powinno zadziałać na kartach od VEGI w górę gdy macie między 4-6GB ramu nalezy zmienić w webui-user.sh medvram na lowvram.
Dla użytkowników kart graficznych NVIDIi używających Linuxa też powinien być przydatny, tzw. na pewno należy pominąć instalację sterowników AMD, ROCM, modyfikacje pliku webui.sh oraz w pliku webui-user.sh nie dodawać linijki "export HSA_OVERRIDE_GFX_VERSION=10.3.0" na końcu pliku.
Dla użytkowników kart graficznych NVIDIi używających Linuxa też powinien być przydatny, tzw. na pewno należy pominąć instalację sterowników AMD, ROCM, modyfikacje pliku webui.sh oraz w pliku webui-user.sh nie dodawać linijki "export HSA_OVERRIDE_GFX_VERSION=10.3.0" na końcu pliku.
W celu stworzenia tego poradnika posiłkowałem się stroną:
https://github.com/fullopsec/stable-deffusion-AMD-LINUX-low-VRAM
https://github.com/RadeonOpenCompute/ROCm/issues/1889
oraz jakimś wątkiem na Reddicie który zgubiłem xD
https://github.com/fullopsec/stable-deffusion-AMD-LINUX-low-VRAM
https://github.com/RadeonOpenCompute/ROCm/issues/1889
oraz jakimś wątkiem na Reddicie który zgubiłem xD