- Implémentation en pur C permettant de générer des images à partir de texte ou d’images avec le modèle FLUX.2-klein-4B
- Fonctionne sans dépendances externes, avec en option une accélération BLAS ou Metal pouvant offrir jusqu’à 30× plus de vitesse
- Encodeur de texte Qwen3-4B intégré, sans besoin de calcul d’embeddings séparé
- Prend en charge à la fois le text-to-image et la transformation image-to-image, avec une interface en ligne de commande et une API de bibliothèque C
- Peut s’exécuter sans runtime Python ni PyTorch, ce qui est significatif pour les environnements d’inférence légers et l’élargissement de l’accessibilité de l’IA open source
Aperçu du projet
- FLUX.2-klein-4B est un modèle de génération d’images de Black Forest Labs, capable de créer de nouvelles images à partir de prompts textuels ou d’images existantes
- L’ensemble du code est écrit uniquement avec la bibliothèque standard C, avec prise en charge optionnelle de l’accélération MPS (Apple Metal) et BLAS (OpenBLAS)
- Le modèle peut être téléchargé depuis HuggingFace pour environ 16GB et se compose de VAE (300MB), Transformer (4GB), encodeur Qwen3-4B (8GB) et Tokenizer
Principales fonctionnalités
- Zero dependencies : exécution autonome sans bibliothèques externes
- Avec BLAS, environ 30× d’accélération, avec Apple Accelerate sur macOS et OpenBLAS sur Linux
- Metal GPU acceleration : activée automatiquement sur Apple Silicon
- Text-to-image : génération d’images à partir de prompts textuels
- Image-to-image : transformation d’images existantes selon un prompt
- Integrated text encoder : encodeur Qwen3-4B intégré, sans embeddings externes
- Memory efficient : libération automatique de la mémoire de l’encodeur après l’encodage, soit environ 8GB économisés
Exemples d’utilisation
Architecture du modèle et performances
- Transformer : 5 double blocks et 20 single blocks, dimension cachée de 3072, 24 têtes d’attention
- VAE : AutoencoderKL, 128 canaux latents, compression spatiale ×8
- Text Encoder : Qwen3-4B, 36 couches, dimension cachée de 2560
- Étapes d’inférence : échantillonnage en 4 étapes pour produire des résultats de haute qualité
- Exigences mémoire
- Encodage du texte : environ 8GB
- Diffusion : environ 8GB
- Pic maximal : 16GB (avant libération de l’encodeur)
- Benchmarks de performance (Apple M3 Max, 128GB RAM)
- 512×512 : MPS 49.6s, BLAS 51.9s, PyTorch MPS 5.4s
- 256×256 : MPS 32.4s, BLAS 29.7s, PyTorch MPS 3.0s
- 64×64 : MPS 25.0s, BLAS 23.5s, PyTorch MPS 2.2s
- Le backend en pur C est très lent et convient uniquement aux tests
Compilation et exécution
API de bibliothèque C
- Chargement et libération du modèle
flux_load_dir(path) / flux_free(ctx)
- Génération et transformation d’image
flux_generate(ctx, prompt, params)
flux_img2img(ctx, prompt, input, params)
- Entrée/sortie d’image
flux_image_load(path) / flux_image_save(img, path)
- Utilitaires
flux_set_seed(seed) pour assurer la reproductibilité
flux_get_error() pour consulter les messages d’erreur
flux_release_text_encoder(ctx) pour libérer manuellement la mémoire
Licence et autres informations
- Publié sous licence MIT
- Répartition des langages du dépôt : C 93.9%, Objective-C 3.5%, Makefile 1.7%, Python 0.9%
- 446 étoiles et 20 forks, signe d’un fort intérêt de la communauté
Aucun commentaire pour le moment.