Comment utiliser Flux Schnell localement sur un MacBook Pro M3 Max

Vous voulez essayer FLUX en ligne sans tracas supplémentaires ? Vous pouvez exécuter FLUX.1 Pro, Schnell et Dev sur Anakin AI dès maintenant ! Flux Schnell est un modèle robuste de génération d'images à partir de texte capable de produire des images de haute qualité à partir de prompts textuels. Dans

Build APIs Faster & Together in Apidog

Comment utiliser Flux Schnell localement sur un MacBook Pro M3 Max

Start for free
Inhalte
Vous voulez essayer FLUX en ligne sans tracas supplémentaires ?

Vous pouvez exécuter FLUX.1 Pro, Schnell et Dev sur Anakin AI dès maintenant !

Flux Schnell est un modèle robuste de génération d'images à partir de texte capable de produire des images de haute qualité à partir de prompts textuels. Dans ce tutoriel, nous vous guiderons à travers les étapes pour configurer et exécuter Flux Schnell localement sur un MacBook Pro M3 Max. Cette configuration permet une génération d'images efficace en utilisant jusqu'à 40 Go de RAM, chaque image prenant environ 30 secondes à produire.

Exigences pour exécuter Flux.1 Pro sur Mac localement

Avant de commencer, assurez-vous que votre système répond aux exigences suivantes :

  • MacBook Pro avec puce M3 Max
  • macOS (dernière version recommandée)
  • Au moins 40 Go de RAM disponible
  • Anaconda ou Miniconda installé
  • Connexion Internet pour télécharger les dépendances

Tutoriel étape par étape pour exécuter Flux.1 Pro sur Mac localement

Tutoriel étape par étape pour exécuter Flux.1 Pro sur Mac localement

Étape 1 : Configurer l'environnement

Tout d'abord, nous allons créer un nouvel environnement Conda et l'activer :

conda create -n flux python=3.11
conda activate flux

Étape 2 : Installer les dépendances

Maintenant, installons les packages requis :

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

Étape 3 : Préparer le script Python

Créez un nouveau fichier Python nommé flux_schnell.py et ajoutez le code suivant :

import torch
from diffusers import FluxPipeline
import diffusers# Modifiez la fonction rope pour gérer le dispositif 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 dimension doit être paire."
   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
# Charger le modèle Flux Schnell
pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")
# Définir le prompt
prompt = "Un chat tenant une pancarte avec 'bonjour le monde'"
# Générer l'image
out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]
# Sauvegarder l'image générée
out.save("flux_image.png")

Étape 4 : Exécuter le script

Exécutez le script Python :

python flux_schnell.py

Cela générera une image basée sur le prompt “Un chat tenant une pancarte avec 'bonjour le monde'” et l'enregistrera sous le nom “flux_image.png” dans le même répertoire.

Comprendre le code

Décomposons les éléments clés du script :

Importation des dépendances

import torch
from diffusers import FluxPipeline
import diffusers

Ces lignes importent les modules nécessaires : PyTorch pour les opérations sur les tenseurs, FluxPipeline de la bibliothèque diffusers pour utiliser le modèle Flux Schnell, et le module diffusers pour des utilitaires supplémentaires.

Modification de la fonction 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 dimension doit être paire."
   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

Cette section modifie la fonction rope (Rotary Position Embedding) pour gérer le dispositif MPS (Metal Performance Shaders) utilisé dans les puces Apple Silicon. Elle garantit la compatibilité avec la puce M3 Max en déplaçant les tenseurs vers le CPU lorsque cela est nécessaire.

Chargement du modèle

pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")

Ce code charge le modèle Flux Schnell depuis le hub de modèles Hugging Face. Il spécifie la version du modèle, définit le type de données sur bfloat16 pour plus d'efficacité, et déplace le modèle vers le dispositif MPS.

Génération de l'image

prompt = "Un chat tenant une pancarte avec 'bonjour le monde'"out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]

Ici, nous définissons le prompt et utilisons le modèle chargé pour générer une image. Les paramètres contrôlent divers aspects du processus de génération :

  • guidance_scale : Défini à 0 pour une génération inconditionnelle.
  • height et width : Définissent les dimensions de l'image de sortie à 1024x1024 pixels.
  • num_inference_steps : Contrôle le nombre d'étapes de débruitage (4 dans ce cas pour une génération plus rapide).
  • max_sequence_length : Limite la longueur maximale de la séquence d'entrée.

Sauvegarde de l'image

out.save("flux_image.png")

Enfin, cette ligne sauvegarde l'image générée sous forme de fichier PNG nommé “flux_image.png” dans le répertoire courant.

Optimisation de la performance

Pour tirer le meilleur parti de votre MacBook Pro M3 Max et atteindre un temps de génération d'environ 30 secondes avec jusqu'à 40 Go d'utilisation de RAM, envisagez les conseils suivants :

  1. Fermez les applications inutiles : Assurez-vous que d'autres applications gourmandes en ressources sont fermées pour libérer de la RAM et des ressources CPU.
  2. Ajustez les dimensions de l'image : Si vous avez besoin de temps de génération plus rapides, vous pouvez réduire les paramètres height et width. Inversement, vous pouvez les augmenter pour une meilleure qualité au prix de temps de génération plus longs.
  3. Expérimentez avec num_inference_steps : Augmenter cette valeur peut conduire à des images de meilleure qualité, mais augmentera le temps de génération. La diminuer accélérera le processus mais peut réduire la qualité de l'image.
  4. Utilisez la précision bfloat16 : Comme déjà implémenté dans le script, utiliser le type de données torch.bfloat16 aide à réduire l'utilisation de mémoire et potentiellement à augmenter la vitesse sans perte significative de qualité.
  5. Traitement par lots : Si vous devez générer plusieurs images, envisagez d'implémenter un traitement par lots pour utiliser plus efficacement le GPU.

Dépannage

Si vous rencontrez des problèmes lors de l'exécution de Flux Schnell sur votre MacBook Pro M3 Max, essayez les choses suivantes :

  1. Mettez à jour les dépendances : Assurez-vous que tous les packages sont à jour, en particulier PyTorch et diffusers.
  2. Vérifiez la compatibilité CUDA : Bien que le M3 Max utilise MPS, certaines erreurs liées à CUDA peuvent survenir. Assurez-vous d'utiliser les bonnes versions de PyTorch et des bibliothèques associées pour votre système.
  3. Surveillez l'utilisation des ressources : Utilisez le Moniteur d'activité pour surveiller l'utilisation de la RAM et du CPU. Si vous atteignez constamment les limites, vous devrez peut-être ajuster les paramètres du modèle ou libérer plus de ressources système.
  4. Videz le cache : Si vous rencontrez des erreurs liées à la mémoire, essayez de vider le cache de PyTorch :

torch.cuda.empty_cache()

5. Redémarrez le noyau : Si vous utilisez un notebook Jupyter ou un environnement similaire, essayez de redémarrer le noyau si vous rencontrez des erreurs persistantes.

Conclusion

Exécuter Flux Schnell localement sur votre MacBook Pro M3 Max offre des capacités puissantes de génération d'images à partir de texte. Avec la configuration décrite dans ce tutoriel, vous pouvez créer des images de haute qualité à partir de descriptions textuelles en environ 30 secondes, utilisant jusqu'à 40 Go de RAM. Gardez à l'esprit que les performances peuvent varier en fonction de votre matériel et de la complexité des prompts.

N'hésitez pas à expérimenter avec différents paramètres pour obtenir le meilleur équilibre entre vitesse et qualité d'image selon vos besoins. Alors que les modèles AI et le matériel continuent d'évoluer, des résultats encore plus impressionnants sont à l'horizon. Bonne génération !