Vuoi provare FLUX online senza ulteriori complicazioni?
Puoi eseguire FLUX.1 Pro, Schnell e Dev su Anakin AI Now!



Flux Schnell è un modello robusto di generazione di immagini da testo in grado di produrre immagini di alta qualità a partire da prompt testuali. In questo tutorial, ti guideremo attraverso i passi per configurare ed eseguire Flux Schnell localmente su un MacBook Pro M3 Max. Questa configurazione consente una generazione di immagini efficiente sfruttando fino a 40 GB di RAM, con ogni immagine che richiede circa 30 secondi per essere prodotta.
Requisiti per Eseguire Flux.1 Pro su Mac Localmente
Prima di iniziare, assicurati che il tuo sistema soddisfi i seguenti requisiti:
- MacBook Pro con chip M3 Max
- macOS (versione più recente consigliata)
- Almeno 40 GB di RAM disponibile
- Anaconda o Miniconda installati
- Connessione Internet per scaricare le dipendenze
Tutorial Passo-Passo per Eseguire Flux.1 Pro su Mac Localmente
Tutorial Passo-Passo per Eseguire Flux.1 Pro su Mac Localmente
Passo 1: Configura l'Ambiente
Per prima cosa, creeremo un nuovo ambiente Conda e lo attiveremo:
conda create -n flux python=3.11
conda activate flux
Passo 2: Installa le Dipendenze
Ora, installiamo i pacchetti richiesti:
pip install torch==2.3.1
pip install git+https://github.com/huggingface/diffusers.git
pip install transformers==4.43.3 sentencepiece==0.2.0 accelerate==0.33.0 protobuf==5.27.3
Passo 3: Prepara lo Script Python
Crea un nuovo file Python chiamato flux_schnell.py
e aggiungi il seguente codice:
import torch
from diffusers import FluxPipeline
import diffusers# Modifica la funzione rope per gestire il dispositivo MPS
_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
assert dim % 2 == 0, "La dimensione deve essere pari."
if pos.device.type == "mps":
return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
else:
return _flux_rope(pos, dim, theta)
diffusers.models.transformers.transformer_flux.rope = new_flux_rope
# Carica il modello Flux Schnell
pipe = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-schnell",
revision='refs/pr/1',
torch_dtype=torch.bfloat16
).to("mps")
# Definisci il prompt
prompt = "Un gatto che tiene un cartello con scritto ciao mondo"
# Genera l'immagine
out = pipe(
prompt=prompt,
guidance_scale=0.,
height=1024,
width=1024,
num_inference_steps=4,
max_sequence_length=256,
).images[0]
# Salva l'immagine generata
out.save("flux_image.png")
Passo 4: Esegui lo Script
Esegui lo script Python:
python flux_schnell.py
Questo genererà un'immagine basata sul prompt "Un gatto che tiene un cartello con scritto ciao mondo" e la salverà come "flux_image.png" nella stessa directory.
Comprendere il Codice
Analizziamo i componenti chiave dello script:
Importazione delle Dipendenze
import torch
from diffusers import FluxPipeline
import diffusers
Queste righe importano i moduli necessari: PyTorch per le operazioni sui tensori, FluxPipeline dalla libreria diffusers per utilizzare il modello Flux Schnell e il modulo diffusers per ulteriori utility.
Modifica della Funzione Rope
_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
assert dim % 2 == 0, "La dimensione deve essere pari."
if pos.device.type == "mps":
return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
else:
return _flux_rope(pos, dim, theta)diffusers.models.transformers.transformer_flux.rope = new_flux_rope
Questa sezione modifica la funzione rope (Rotary Position Embedding) per gestire il dispositivo MPS (Metal Performance Shaders) utilizzato nei chip Apple Silicon. Garantisce la compatibilità con il chip M3 Max spostando i tensori sulla CPU quando necessario.
Caricamento del Modello
pipe = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-schnell",
revision='refs/pr/1',
torch_dtype=torch.bfloat16
).to("mps")
Questo codice carica il modello Flux Schnell dal repository modelli di Hugging Face. Specifica la versione del modello, imposta il tipo di dati su bfloat16 per efficienza e sposta il modello sul dispositivo MPS.
Generazione dell'Immagine
prompt = "Un gatto che tiene un cartello con scritto ciao mondo"out = pipe(
prompt=prompt,
guidance_scale=0.,
height=1024,
width=1024,
num_inference_steps=4,
max_sequence_length=256,
).images[0]
Qui, definiamo il prompt e utilizziamo il modello caricato per generare un'immagine. I parametri controllano vari aspetti del processo di generazione:
guidance_scale
: Impostato a 0 per generazione incondizionata.height
ewidth
: Impostano le dimensioni dell'immagine di output a 1024x1024 pixel.num_inference_steps
: Controlla il numero di passaggi di denoising (4 in questo caso per una generazione più veloce).max_sequence_length
: Limita la lunghezza massima della sequenza di input.
Salvataggio dell'Immagine
out.save("flux_image.png")
Infine, questa riga salva l'immagine generata come file PNG denominato "flux_image.png" nella directory corrente.
Ottimizzazione delle Prestazioni
Per sfruttare al meglio il tuo MacBook Pro M3 Max e raggiungere un tempo di generazione di circa 30 secondi con un utilizzo di RAM fino a 40 GB, considera i seguenti suggerimenti:
- Chiudi le applicazioni non necessarie: Assicurati che altre applicazioni intensive in risorse siano chiuse per liberare RAM e risorse CPU.
- Regola le dimensioni dell'immagine: Se hai bisogno di tempi di generazione più veloci, puoi ridurre i parametri
height
ewidth
. Al contrario, puoi aumentare le dimensioni per una qualità superiore a costo di tempi di generazione più lunghi. - Sperimenta con
num_inference_steps
: Aumentare questo valore può portare a immagini di qualità superiore, ma aumenterà il tempo di generazione. Diminuirlo accelera il processo, ma potrebbe ridurre la qualità dell'immagine. - Utilizza la precisione bfloat16: Come già implementato nello script, utilizzare il tipo di dati
torch.bfloat16
aiuta a ridurre l'uso della memoria e potenzialmente aumentare la velocità senza perdita significativa di qualità. - Elaborazione in batch: Se hai bisogno di generare più immagini, considera di implementare l'elaborazione in batch per utilizzare in modo più efficiente la GPU.
Risoluzione dei Problemi
Se riscontri problemi durante l'esecuzione di Flux Schnell sul tuo MacBook Pro M3 Max, prova quanto segue:
- Aggiorna le dipendenze: Assicurati che tutti i pacchetti siano aggiornati, in particolare PyTorch e diffusers.
- Controlla la compatibilità CUDA: Anche se l'M3 Max utilizza MPS, potrebbero verificarsi alcuni errori legati a CUDA. Assicurati di utilizzare le versioni corrette di PyTorch e delle librerie correlate per il tuo sistema.
- Monitora l'uso delle risorse: Usa Monitoraggio Attività per tenere d'occhio l'utilizzo di RAM e CPU. Se stai costantemente colpendo i limiti, potresti dover regolare i parametri del modello o liberare ulteriori risorse di sistema.
- Pulisci la cache: Se riscontri errori relativi alla memoria, prova a svuotare la cache di PyTorch:
torch.cuda.empty_cache()
5. Riavvia il kernel: Se stai utilizzando un notebook Jupyter o un ambiente simile, prova a riavviare il kernel se riscontri errori persistenti.
Conclusione
Eseguire Flux Schnell localmente sul tuo MacBook Pro M3 Max offre potenti capacità di generazione di immagini da testo. Con la configurazione delineata in questo tutorial, puoi creare immagini di alta qualità da descrizioni testuali in circa 30 secondi, utilizzando fino a 40 GB di RAM. Tieni presente che le prestazioni possono variare a seconda dell'hardware e della complessità dei prompt.
Sperimenta liberamente con diversi parametri per ottenere il miglior equilibrio tra velocità e qualità dell'immagine per le tue esigenze. Man mano che i modelli di intelligenza artificiale e l'hardware continuano a progredire, risultati ancora più impressionanti sono all'orizzonte. Buona generazione!