Risponderemo a tutte le tue domande!

Applicazioni e Guide

Stable Diffusion WebUI

Le reti neurali generative sembrano magiche. Rispondono a domande, creano immagini e scrivono persino codice in vari linguaggi di programmazione. Il successo di queste reti è dovuto a due componenti: modelli pre-addestrati e acceleratori hardware. Certo, è possibile utilizzare i core della CPU per questo carico di lavoro, ma sarebbe come una corsa di lumache. La generazione di una piccola immagine può richiedere una quantità di tempo significativa, decine di minuti. La generazione della stessa immagine su una GPU richiederebbe centinaia di volte meno.

Il primo segreto sta nel numero di core. I core delle CPU sono universali e possono gestire istruzioni complesse. Tuttavia, i processori dei server tradizionali hanno un massimo di 64 core. Persino nei sistemi multiprocessore, il numero di core raramente supera i 256. I core delle GPU sono più semplici, ma di conseguenza se ne possono inserire molti di più nel chip. Ad esempio, una NVIDIA® RTX™ 4090 ha 16.384 core.

Il secondo segreto è che il carico di lavoro può essere suddiviso in molti compiti semplici, che possono essere eseguiti in thread paralleli su core GPU dedicati. Questo trucco accelera notevolmente l'elaborazione dei dati. Oggi vedremo come funziona e distribuiremo una rete neurale generativa Stable Diffusion Web UI sull'infrastruttura LeaderGPU. Prendiamo ad esempio un server con una NVIDIA® RTX™ 4090 che ha 16.384 core GPU. Come sistema operativo, abbiamo scelto l"attuale versione LTS di Ubuntu 22.04 e abbiamo scelto l'opzione "Installa i driver NVIDIA® e CUDA® 11.8".

Preparazione del sistema

Stable Diffusion WebUI system prepare

Prima di iniziare, consideriamo la memoria. Stable Diffusion è un sistema di grandi dimensioni che può occupare fino a 13G sul disco rigido. Il disco virtuale standard in un'installazione di LeaderGPU è di 100G. Il sistema operativo occupa 25G. Se distribuiamo Stable Diffusion senza estendere la partizione home, esauriremo tutta la memoria libera e incontreremo l'errore "No space left on device". È una buona idea estendere la nostra directory home.

Estendere la directory home

Per prima cosa, dobbiamo controllare tutti i dischi disponibili.

sudo fdisk -l
Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: INTEL SSDSC2KB48
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
Disk model: VIRTUAL-DISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9D4C1F0C-D4A7-406E-AECB-BF57E4726437

Poi dobbiamo creare una nuova partizione Linux sul nostro disco SSD fisico, /dev/sda:

sudo fdisk /dev/sda

Premete i seguenti tasti, uno alla volta: g → n → Enter → Enter → Enter → w. Si otterrà così una nuova partizione /dev/sda1 senza filesystem. A questo punto, creare un filesystem ext4 su di essa:

sudo mkfs.ext4 /dev/sda1

Quando il processo è terminato, si passa al passo successivo.

Attenzione! Procedere con la massima cautela. Qualsiasi errore commesso durante la modifica del file fstab può comportare l'impossibilità di avviare normalmente il server e può richiedere il ripristino completo del sistema operativo.

sudo blkid
/dev/sdb2: UUID="6b17e542-0934-4dba-99ca-a00bd260c247" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="70030755-75d8-4339-a4e0-26a97f1d1c5d"
/dev/loop1: TYPE="squashfs"
/dev/sdb1: PARTUUID="63ff1714-bd29-4062-be04-21af32423c0a"
/dev/loop4: TYPE="squashfs"
/dev/loop0: TYPE="squashfs"
/dev/sda1: UUID="fb2ba455-2b8d-4da0-8719-ce327d0026bc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="6e0108df-b000-5848-8328-b187daf37a4f"
/dev/loop5: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"

Copiare UUID (fb2ba455-2b8d-4da0-8719-ce327d0026bc nell'esempio) della partizione /dev/sda1. Successivamente, si indicherà al sistema di montare automaticamente questa unità con il suo UUID all'avvio:

sudo nano /etc/fstab

Inserire questa riga prima di /swap.img... stringa:

/dev/disk/by-uuid/ /home/usergpu ext4 defaults defaults

Esempio:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sdb2 during curtin installation
/dev/disk/by-uuid/6b17e542-0934-4dba-99ca-a00bd260c247 / ext4 defaults,_netdev 0 1
/dev/disk/by-uuid/fb2ba455-2b8d-4da0-8719-ce327d0026bc /home/usergpu ext4 defaults defaults
/swap.img       none    swap    sw      0       0

Uscire con la scorciatoia da tastiera Ctrl + X e confermare il salvataggio del file premendo Enter. Le nuove impostazioni saranno applicate al successivo avvio del sistema. Riavviamo il server:

sudo shutdown -r now

Dopo il riavvio, possiamo controllare tutte le directory montate con il seguente comando:

df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           6.3G  1.7M  6.3G   1% /run
/dev/sdb2        49G   23G   24G  50% /
tmpfs            32G     0   32G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda1       440G   28K  417G   1% /home/usergpu
tmpfs           6.3G  4.0K  6.3G   1% /run/user/1000

Superbo! Ma ora non abbiamo accesso a scrivere qualcosa nella nostra home directory perché è stata modificata dal file di configurazione fstab. È ora di recuperare la proprietà della directory:

sudo chown -R usergpu /home/usergpu

Ottimo lavoro! Passiamo al passo successivo.

Installare i pacchetti di base

Aggiornate la cache del software dai repository ufficiali di Ubuntu e aggiornate alcuni pacchetti:

sudo apt update && sudo apt -y upgrade

Il sistema ha informato che è stato installato un nuovo kernel che sarà operativo dopo il riavvio del sistema. Selezionate due volte OK.

Successivamente, è necessario risolvere le dipendenze, che richiedono una diffusione stabile. Il primo pacchetto aggiunge la funzionalità di ambiente virtuale Python:

sudo apt install python3-venv

Il secondo pacchetto aggiunge un'implementazione della funzione malloc() del linguaggio di programmazione C, personalizzata da Google. Previene l'errore “Cannot locate TCMalloc” e migliora l'utilizzo della memoria della CPU.

sudo apt install -y --no-install-recommends google-perftools

Infine, riavviare nuovamente il server:

sudo shutdown -r now

Diffusione stabile automatica 1111: installare lo script

Stable Diffusion WebUI install script

Il modo più semplice per installare Stable Diffusion con WebUI è utilizzare lo script preconfezionato scritto dall'utente GitHub AUTOMATIC1111. Questo script scarica e configura queste due parti e risolve tutte le dipendenze necessarie.

Scarichiamo lo script:

wget https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh

Quindi, diamogli accesso ai dati di modifica ed eseguiamolo come programma:

chmod a+x webui.sh

Eseguire lo script scaricato:

./webui.sh 

Questo processo può richiedere un paio di minuti. Tutto è pronto per creare immagini perfette con Stable Diffusion.

Risoluzione dei problemi

Se si verifica l'errore "Torch non è in grado di utilizzare la GPU", è possibile risolvere il problema reinstallando il programma tramite apt:

sudo apt -y install nvidia-driver-535

È necessario riavviare il sistema operativo per abilitare il driver:

sudo shutdown -r now

Generare

Stable Diffusion WebUI run script

Lo script di installazione ./webui.sh ha un'altra funzione. Serve contemporaneamente la parte server di Stable Diffusion e la WebUI. Tuttavia, se lo si usa senza argomenti, il server sarà disponibile come demone locale all'indirizzo http://127.0.0.1:7860. Questo problema può essere risolto in due modi: con un port forwarding attraverso un tunnel SSH o consentendo connessioni da IP esterni.

Il secondo modo è più semplice: basta aggiungere l'opzione --listen e ci si può connettere all'interfaccia web all'indirizzo http://[YOUR_LEADERGPU_SERVER_IP_ADDRESS]:7860. Tuttavia, questo è completamente insicuro, poiché ogni utente di Internet avrà accesso. Per evitare un uso non autorizzato, aggiungere l'opzione --gradio-auth accanto al nome utente e alla password, separati da due punti:

./webui.sh --listen --gradio-auth user:password

Lo script scaricherà per la prima Volta™ i modelli di base e le dipendenze necessarie:

Stable Diffusion WebUI Gradio

Potete godervi il risultato. È sufficiente inserire alcune richieste, separate da virgole, e fare clic sul pulsante Genera. Dopo qualche secondo, verrà visualizzata un'immagine generata dalla rete neurale.

Conclusione

Siamo passati da un server LeaderGPU vuoto con solo un sistema operativo preinstallato a un'istanza pronta con Stable Diffusion e un'interfaccia WebUI. La prossima Volta™ impareremo di più sulla regolazione delle prestazioni del software e su come potenziare correttamente la vostra istanza Stable Diffusion con nuove versioni di driver e pacchetti.

Vedi anche:



Aggiornato: 28.03.2025

Pubblicato: 25.11.2024