Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Distribuisci una diffusione stabile Automatic1111 sulle GPU Oracle Cloud Infrastructure
Nel panorama in continua evoluzione dell'intelligenza artificiale (AI) e del machine learning (ML), ricercatori e ingegneri stanno costantemente spingendo i confini di ciò che è possibile. Uno sviluppo notevole che ha guadagnato slancio negli ultimi anni è il modello di diffusione stabile. Questa tecnologia all'avanguardia offre vantaggi significativi, promette una vasta gamma di casi d'uso e continua a vedere sviluppi entusiasmanti. In questo tutorial, approfondiamo il mondo dei modelli AI / ML a diffusione stabile, esplorandone i vantaggi, esplorando i loro casi d'uso e discutendo gli ultimi sviluppi in questo affascinante campo.
Introduzione
Diffusione stabile: la diffusione stabile è un approccio relativamente nuovo e innovativo nel mondo dell'intelligenza artificiale e del machine learning. È un modello generativo probabilistico che ha guadagnato importanza grazie alla sua capacità di generare campioni di dati di alta qualità e alla sua robustezza in varie condizioni di allenamento. Il modello di diffusione stabile, spesso basato sul processo di diffusione, consente la generazione e la manipolazione controllate dei dati. Ecco una breve panoramica dei suoi componenti chiave:
Processo di diffusione: l'idea di base del modello di diffusione stabile è il processo di diffusione, che modella l'evoluzione di una distribuzione dei dati nel tempo. Implica l'applicazione iterativa di un processo di disturbo ai dati fino a quando non converge nella distribuzione desiderata.
Denoising Autoencoder: all'interno del processo di diffusione, viene utilizzato un autoencoder di denoising per recuperare i dati originali dai campioni rumorosi. Questo processo consente al modello di apprendere e acquisire funzionalità significative dei dati.
Obiettivo
Automatic1111 Stable Diffusion è uno strumento rivoluzionario nell'ambito delle immagini generate dall'intelligenza artificiale. Questo innovativo WebUI offre una piattaforma user-friendly, rimodellando lo scenario della creazione di immagini generate dall'intelligenza artificiale. Con esso, gli utenti possono gestire e supervisionare senza problemi i loro modelli AI dedicati alla generazione di immagini. Verrà distribuito Automatic1111 e i relativi prerequisiti per derivare il modello di diffusione stabile preferito in Oracle Linux 8.
Prerequisiti
-
Tenancy Oracle Cloud Infrastructure (OCI) con limiti GPU A10. È necessario almeno 1 A10.
-
Una rete cloud virtuale (VCN) OCI esistente con almeno una subnet pubblica e limiti per l'IP pubblico.
-
Un checkpoint del modello di diffusione stabile dal tuo creatore di Huggingface preferito. Limitare il modello a v1-5 e v2-1. La diffusione stabile XL è difficile da caricare su una singola GPU A10. Vedere Stable Diffusion Model - Hugging Face.
Task 1: eseguire il provisioning di un'istanza di computazione GPU su OCI
-
Avvia un'istanza di computazione su OCI con la VCN esistente con la subnet pubblica. Per ulteriori informazioni, vedere Avvia istanza di computazione.
-
Scegliere una singola istanza GPU A10 tra le forme GPU.A10 disponibili.
VM.GPU.A10.1
-
Quando si avvia un'istanza di computazione, modificare la forma in una delle forme riportate sopra. Per avviare la VM GPU.A10, fare clic su Specialità e generazione precedente e selezionare le forme VM.GPU.A10.1.
-
Se la tenancy non dispone di un limite di servizio impostato per GPU.A10, queste forme non saranno nella lista di forme.
-
Per controllare i limiti della tenancy nella console OCI, impostare l'area in cui eseguire il provisioning di un'istanza di computazione GPU.A10, aprire il menu di navigazione e fare clic su Governance e amministrazione.
-
In Gestione tenancy selezionare Limiti, quote e uso.
-
Impostare il servizio su Compute, selezionare uno dei domini di disponibilità nel campo dell'ambito e digitare GPU.A10 nel campo della risorsa.
-
Selezionare GPU per le istanze VM basate su A10 e BM.
-
-
I limiti di computazione si riferiscono al dominio di disponibilità. Controlla se il limite è impostato in uno qualsiasi dei domini di disponibilità dell'area. Se il limite del servizio è impostato su 0 per tutti i domini di disponibilità, è possibile fare clic sul collegamento "Richiedi un aumento del limite del servizio" e sottomettere una richiesta di aumento del limite per questa risorsa.
Nota: per accedere a Limiti, quote e uso, è necessario essere membri del gruppo Amministratori della tenancy oppure disporre di un criterio assegnato per leggere LimitsAndUsageViewers.
- Per ulteriori informazioni, vedere limiti del servizio.
-
Attualmente le forme di computazione GPU.A10 OCI supportano Oracle Linux, Ubuntu e Rocky Linux. Windows è supportato solo dalle forme VM.
Nota: Rocky Linux non è ufficialmente supportato da NVIDIA.
-
Quando si esegue il provisioning di un'istanza di computazione su OCI, utilizzare un'immagine del sistema operativo Oracle Linux 8 standard o un'immagine abilitata per la GPU Oracle Linux 8. Se si utilizza un'immagine del sistema operativo Oracle Linux standard, è necessario installare il driver NVIDIA vGPU. Per il nostro tutorial stiamo andando con l'immagine della GPU Oracle Linux 8.
-
Espandere la sezione Volume di avvio per aumentare il volume di avvio ad almeno 250 GB e aumentare la VPU a prestazioni più elevate per ottenere una lettura/scrittura decente per una migliore inferenza.
-
Avviare l'istanza con i parametri sopra riportati.
Task 2: Installare i prerequisiti per Automatic1111
-
Poiché i driver NVIDIA sono inclusi nell'immagine di build della GPU Oracle Linux, possiamo semplicemente verificare la loro presenza e funzionalità eseguendo il comando nvidia-smi. Ciò garantirà che tutto sia configurato correttamente e che i driver GPU funzionino come previsto.
-
Crescere FileSystem La memoria di sistema delle istanze OCI viene fornita con l'impostazione predefinita 46.6GB. Da quando abbiamo aumentato il volume di avvio a 300 GB, facciamo crescere il nostro file system con il comando OCI integrato di OCI Util.
Per espandere il file system nell'istanza OCI dopo aver aumentato il volume di avvio a 300 GB, è possibile utilizzare il comando OCI (Oracle Cloud Infrastructure) integrato. Ecco come puoi farlo:
-
Controllare l'uso corrente del disco: prima di ridimensionare il file system, è consigliabile controllare l'uso corrente del disco per assicurarsi che rifletta l'aumento della dimensione del volume di avvio. Per questo scopo è possibile utilizzare il comando
df
:df -h
Verificare che lo spazio disponibile corrisponda alla nuova dimensione del volume di avvio (300 GB).
-
Ridimensiona il file system: utilizzare il comando della utility OCI per ridimensionare il file system in modo da utilizzare lo storage aumentato. Il comando esatto può variare a seconda del sistema operativo e del file system specifici in uso. Di seguito viene usato per Oracle Linux 8.
sudo /usr/libexec/oci-growfs
Immettere 's' per confermare l'estensione della partizione.
-
Verifica dell'espansione del file system: dopo aver eseguito il comando di ridimensionamento, controllare di nuovo l'uso del disco per verificare che il file system sia stato espanso correttamente:
df -h
Ora dovrebbe riflettere l'aumento della dimensione del file system.
Seguendo questi passi, dovresti essere in grado di espandere il tuo file system sull'istanza OCI per utilizzare lo spazio di storage aggiuntivo fornito dal volume di avvio aumentato.
-
-
Installare Python 3.10.6 in Oracle Linux 8.
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
Ora che abbiamo Python3.10.6 installato, installare git per clonare Git repository.
sudo dnf install git
-
Clonare Automatic1111.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Dovresti avere il repo stable-diffusion-webui nella tua directory clonata.
-
Scarica il tuo modello di diffusione stabile preferito nella directory
stable-diffusion-webui/models/Stable-Diffusion
.- Per la nostra procedura d'uso, qui ho scaricato v1-5-pruned.ckpt da stable-diffusion-v1-5.
-
Aggiornare le regole firewall per consentire il traffico 7860 della porta.
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
Task 3: eseguire AUTOMATIC1111
-
Con Python 3.10.6 installato con successo, il software AUTOMATIC1111 e i modelli di diffusione stabili essenziali scaricati, siamo pronti ad andare avanti con l'esecuzione di AUTOMATIC1111. Tuttavia, prima di procedere, perfezioniamo la nostra configurazione per ottimizzare la velocità e la qualità complessiva della generazione di immagini a diffusione stabile.
-
Modificare il file
webui-user.sh
e apportare le seguenti modifiche. Questo file si trova nella directorystable-diffusion-webui
. Questo script è responsabile della configurazione degli argomenti per AUTOMATIC1111 ed è fondamentale per comprendere e aggiornare i parametri disponibili.-
Modificare il parametro come segue: aggiungere
listen
per eseguire questa operazione come server sulla porta 7860, abilitare l'accesso all'estensione per l'installazione delle estensioni di diffusione stabile preferite e impostare la precisione su Completa.# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
Il parametro seguente per assicurarsi che venga utilizzato Python3.10.
# python3 executable python_cmd="python3.10"
-
Il parametro riportato di seguito installa l'ultima versione PyTorch2 anziché l'impostazione predefinita PyTorch. Ciò ha dimostrato di essere migliore nell'inferenza e nelle velocità di iterazione delle immagini.
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
Dopo aver verificato l'assenza di errori di sintassi, eseguire lo script webui.sh (da non confondere con webui-user.sh, il file modificato in precedenza).
bash webui.sh
Il risultato di questo processo dovrebbe includere l'installazione di tutti i pacchetti richiesti per AUTOMATIC1111, incluso l'ultimo PyTorch2. Caricherà anche i modelli essenziali e avvierà il server di inferenza sulla porta 7860. Se necessario, è possibile personalizzare la porta modificando il file webui-user.sh.
-
Dopo aver confermato una distribuzione riuscita con il server in esecuzione sulla porta 7860, come dimostrato in precedenza, procedere per accedere all'applicazione Stable Diffusion. Aprire il browser Web e immettere il seguente indirizzo:
http://<PublicIP>:7860
, sostituendo"<PublicIP>"
con l'indirizzo IP pubblico dell'istanza.
Una volta fatto questo, l'applicazione dovrebbe caricarsi e apparire come illustrato di seguito. I modelli desiderati si trovano comodamente nell'angolo in alto a destra, come evidenziato.
Task 4: distribuire AUTOMATIC1111 tramite service manager systemctl
-
Creare un file
stable-diffusion.service
nel percorso/etc/systemd/system
E immettere il seguente nel filestable-diffusion.service
.[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
Assicurarsi di modificare la directory di lavoro in base alle esigenze.
-
Eseguire i comandi riportati di seguito per ricaricare e abilitare/avviare il servizio.
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
Eseguire il comando riportato di seguito per controllare lo stato del servizio.
sudo systemctl start stable-diffusion.service
Cose da sapere e miglioramenti
- I modelli di diffusione stabile sono disponibili in una gamma di dimensioni e versioni, tra cui v1.1, v1.2, v1.3, v1.4, v1.5, v2.0, v2.1 e vSDXL. Queste versioni sono elencate in ordine crescente delle loro capacità e cosa possono realizzare. Ad esempio, tutti i modelli v1 sono in grado di generare immagini 512x512 native. v2 può generare in modo nativo immagini 768x768 senza richiedere la massima precisione. Le dimensioni dei file per i modelli v1 in genere rientrano nell'intervallo da 6 a 8 GB per modello di checkpoint, mentre i modelli v2 tendono ad avere dimensioni dei file intorno a 5.5GB per modello di checkpoint.
Caricamento modello
-
Il modello multi-gigabyte viene caricato sulla GPU VRAM all'inizio dell'esecuzione, mentre i numerosi core CUDA lo elaborano meticolosamente centinaia di volte al secondo. I tassi di trasferimento dei dati coinvolti operano ai limiti assoluti definiti dalle leggi della fisica. All'interno della scheda grafica, non sono da sottovalutare fattori come il tempo necessario per un segnale elettrico per attraversare il chip alla velocità della luce.
-
La GPU elabora un set di calcoli, quindi segnala alla CPU di fornire più dati per l'elaborazione. Successivamente, attende mentre la CPU accede alla memoria di sistema per recuperare un altro batch di dati e lo invia alla GPU tramite PCI-E. Una volta che la GPU ha i dati, li elabora e poi segnala nuovamente la CPU, entrando in un'altra fase di attesa.
-
Ecco perché la VRAM svolge un ruolo fondamentale nelle attività AI. Se puoi precaricare tutti i dati e le istruzioni necessari sulla scheda grafica all'inizio dell'operazione, consentendole di elaborarli alle sue velocità interne incandescenti e semplicemente raccogliere i risultati alla conclusione, puoi ridurre significativamente i tempi di attesa e ridurre al minimo le risorse sprecate.
-
Nel nostro caso d'uso, utilizziamo VM.GPU.A10.1, che vanta una GPU NVIDIA A10 con 24 GB di RAM. Una singola GPU NVIDIA A10 è più che sufficiente per il corretto funzionamento della v1.5. Tuttavia, man mano che la complessità del prompt aumenta, il tempo di generazione si allunga e la velocità di iterazione diminuisce. Esistono versioni potate dei modelli di diffusione stabile v2 che possono eseguire le operazioni in modo più rapido e fluido rispetto alle loro controparti v2 di dimensioni originali, principalmente a causa dei loro ridotti requisiti di spazio. Sebbene tutte le versioni dei modelli Stable Diffusion possano essere ospitate all'interno di una singola GPU NVIDIA A10 da 24 GB, il ritmo di iterazione e il tempo di generazione delle immagini dipende da vari fattori, tra cui il modello specifico, le sue dimensioni, la complessità rapida, i passaggi di campionamento, le dimensioni delle immagini, le regolazioni ad alta risoluzione, le dimensioni dei batch e altro ancora.
-
Nel prossimo tutorial, esploreremo come partizionare il modello, distribuirlo su più GPU ed eseguire la diffusione stabile utilizzando più GPU all'interno di una singola macchina. Esploreremo anche la messa a punto di un modello base di diffusione stabile esistente.
Collegamenti correlati
Conferme
Autore - Abhiram Ampabathina (architetto cloud senior)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.