Stable diffusion avec un GPU AMD sous Linux

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Logiciel Mots clés : , amd, stable diffusion, rocm, python
Stable Diffusion, modèle d'apprentissage profond de génération d'images à partir de description en langage naturel, ne sait gérer par défaut que les GPU Nvidia grâce à CUDA et les CPU.

Pour qu'il puisse utiliser un GPU AMD sous Linux, il faut :
  • installer ROCM via la pile logicielle AMD
  • configurer pytorch pour l'utiliser.

Installation ROCm via amd-gpu-install

Stable Diffusion, en fait plutôt PyTorch, framework Python de machine learning, ne sait gérer que CUDA (donc Nvidia), ROCm (un framework développé par AMD pour le HPC et le machine learning) et bien sûr le CPU.
Les performances sont bien évidemment largement meilleures en utilisant un GPU : quelques dizaines de secondes pour générer une image au lieu de plusieurs minutes.

Pour pouvoir exploiter notre GPU AMD, il faut installer ROCm sur Linux, mais, uniquement Ubuntu, RHEL et SLES sont officiellement supportés.
C'est également possible avec Fedora. Par contre, impossible avec Debian, la version de noyau n'étant pas celle attendue.

Il faut d'abord commencer par installer amdgpu-install qui est l'installeur officiel d'AMD. Il permet ensuite de choisir précisément quels composants installés parmi l'ensemble de la pile logicielle fournie par AMD.

Installation sur Ubuntu 22.04

sudo apt-get update
wget https://repo.radeon.com/amdgpu-install/5.4.1/ubuntu/jammy/amdgpu-install_5.4.50401-1_all.deb
sudo apt-get install ./amdgpu-install_5.4.50401-1_all.deb

Installation sous Fedora 37

sudo dnf install https://repo.radeon.com/amdgpu-install/5.4.1/rhel/9.1/amdgpu-install-5.4.50401-1.el9.noarch.rpm 

Installation de ROCm

On sélectionne l'installation de ROCm uniquement, et on veut continuer à utiliser les modules du kernel déjà présents et fournis par la distribution :
sudo amdgpu-install --usecase=rocm --no-dkms
Il faut rajouter notre utilisateur aux groupes video et render pour pouvoir accéder aux périphériques du GPU :
sudo usermod -a -G video,render $LOGNAME
On peut vérifier avec rocminfo qu'il y a bien un CPU et un GPU utilisables via ROCm.

Installation de Stable diffusion

Pour installer Stable diffusion, on va passer par Stable Diffusion web UI, pour une installation simplifiée et avoir une interface Web pour une utilisation plus agréable.

Récupération du code source

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

Python 3.10 pour Fedora

Fedora installe par défaut Python 3.11 qui n'est pas encore supporté par PyTorch (version 3.10 au maximum). Il faut donc installer python 3.10. et également patch qui peut ne pas être installé.
sudo dnf install python3.10 patch
Pour Ubuntu, tout est déjà bon.

Création de l'environnement virtuel Python

cd stable-diffusion-webui
python3.10 -m venv venv

Mise à jour de pip et de wheel dans l'environnement virtuel

source venv/bin/activate
python -m pip install --upgrade pip wheel

Installation de PyTorch

Il ne reste plus qu'à installer PyTorch en désactivant les tests CUDA :
TORCH_COMMAND='pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.2' python launch.py --skip-torch-cuda-test
La ligne de commande peut être générée sur https://pytorch.org/get-started/locally/ en choisissant bien Linux/Pip/Python/ROCm et en rajoutant --skip-torch-cuda-test à la fin.

Il est possible que le GPU ne soit pas reconnu par PyTorch :
"hipErrorNoBinaryForGpu: Unable to find code object for all current devices!"
Par exemple, ma carte (AMD RX6600) n'est pas reconnue par PyTorch. Il faut alors déclarer une variable d'environnement compatible avant d'appeler TORCH_COMMAND :
export HSA_OVERRIDE_GFX_VERSION=10.3.0

Exécution de Stable Diffusion

Pour les prochains lancements, les étapes seront :
cd stable-diffusion-webui
source venv/bin/activate
export HSA_OVERRIDE_GFX_VERSION=10.3.0
TORCH_COMMAND='pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.2' python launch.py --skip-torch-cuda-test
A chaque démarrage de Stable Diffusion, le warning suivant apparaitra si le GPU n'est pas reconnu :
MIOpen(HIP): Warning [SQLiteBase] Missing system database file: gfx1030_40.kdb Performance may degrade. Please follow instructions to install: https://github.com/ROCmSoftwarePlatform/MIOpen#installing-miopen-kernels-package
et la 1ère génération d'image sera longue, mais ça sera bon sur les prochaines.

Sources

Exemples d'image générées :

Prompt :
a landscape by simon stalenhag of a very large realistic highly detailed imposing robotic depressing abandoned post – apocalyptic landscape, post – apocalyptic corrupted themes, artstation trending, beautiful art landscape, detailed simon stalenhag landscape


Prompt :
a highly detailed epic cinematic concept art an alien pyramid landscape , art station, landscape, concept art, illustration, highly detailed artwork cinematic, hyper realistic painting


Prompt :
higly detailed, majestic royal tall ship on a calm sea,realistic painting, by Charles Gregory Artstation and Antonio Jacobsen and Edward Moran, (long shot), clear blue sky, intricated details, 4k


Prompt :
modelshoot style, (extremely detailed 8k wallpaper),a medium shot photo of an astronaut looking at a nebula, Intricate, High Detail, dramatic ,digital art , trending on artstation , hyperdetailed , matte painting , CGSociety


Prompt :
Many friendly alien race individuals. fantasy, sharp focus, digital art, hyper realistic, 8k, unreal engine, highly detailed, hd 4k, dramatic lighting, trending on artstation


Prompt :
Wizard's tower in fantasy landscape


Prompt :
modelshoot style, (extremely detailed 8k wallpaper),a medium shot photo of Gandalf reading newspapers, Intricate, High Detail, dramatic


Prompt :
modelshoot style, (extremely detailed 8k wallpaper),a full shot body photo of Gandalf wearing black Metallica tee-shirt and playing black electric guitar, High Detail, Sauron


Prompt :
modelshoot style, (extremely detailed 8k wallpaper),a full shot body photo of gandalf making sand castles at the beach, High Detail


Prompt :
modelshoot style, (extremely detailed 8k wallpaper),a full shot body photo of a highly detailed epic cinematic concept art CG render digital painting artwork: dieselpunk steaming half man half robot. By Greg Rutkowski, Ilya Kuvshinov, WLOP, Stanley Artgerm Lau, Ruan Jia and Fenghua Zhong, trending on ArtStation, subtle muted cinematic colors, made in Maya, Blender and Photoshop, octane render, excellent composition, cinematic atmosphere, dynamic dramatic cinematic lighting, precise correct anatomy, aesthetic, very inspirational, arthouse

Les commentaires sont fermés.