Come utilizzare Flux Schnell localmente su un MacBook Pro M3 Max

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

Build APIs Faster & Together in Apidog

Come utilizzare Flux Schnell localmente su un MacBook Pro M3 Max

Start for free
Inhalte
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 e width: 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:

  1. Chiudi le applicazioni non necessarie: Assicurati che altre applicazioni intensive in risorse siano chiuse per liberare RAM e risorse CPU.
  2. Regola le dimensioni dell'immagine: Se hai bisogno di tempi di generazione più veloci, puoi ridurre i parametri height e width. Al contrario, puoi aumentare le dimensioni per una qualità superiore a costo di tempi di generazione più lunghi.
  3. 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.
  4. 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à.
  5. 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:

  1. Aggiorna le dipendenze: Assicurati che tutti i pacchetti siano aggiornati, in particolare PyTorch e diffusers.
  2. 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.
  3. 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.
  4. 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!