Die jüngste Veröffentlichung des Flux-Modells von Black Forest Labs erfreute sich aufgrund seiner atemberaubenden Fähigkeit zur Bilderzeugung großer Beliebtheit. Es battle jedoch nicht portierbar und konnte daher nicht auf einem Endbenutzer- oder Free-Tier-Rechner ausgeführt werden. Dies förderte die Verwendung auf Plattformen, die API-Dienste bereitstellten, bei denen Sie das Modell nicht lokal laden müssen, sondern externe API-Aufrufe verwenden. Unternehmen, die ihre Modelle lieber lokal hosten, müssen mit hohen Kosten für GPUs rechnen. Vielen Dank an das Huggingface-Group, das die Diffusers-Bibliothek um Unterstützung für die Quantisierung mit BitsAndBytes erweitert hat. Das bedeutet, dass wir Flux-Inferenz jetzt auf einem Pc mit 8 GB GPU-RAM ausführen können.
Lernziel
- Verstehen Sie den Prozess der Konfiguration der Abhängigkeiten für die Arbeit mit FLUX in einer Colab-Umgebung.
- Demonstrieren Sie, wie Sie eine Textaufforderung mithilfe eines quantisierten 4-Bit-Textcodierers codieren, um den Speicherverbrauch zu reduzieren.
- Implementieren Sie speichereffiziente Techniken zum Laden und Ausführen von Bilderzeugungsmodellen mit gemischter Präzision auf GPUs.
- Generieren Sie Bilder aus Textaufforderungen mithilfe der FLUX-Pipeline in Colab.
Dieser Artikel wurde im Rahmen der veröffentlicht Knowledge Science-Blogathon.
Was ist Flussmittel?
Fluss ist eine Reihe fortschrittlicher Textual content-zu-Bild- und Bild-zu-Bild-Modelle, die von Black Forest Labs entwickelt wurden, dem gleichen Group hinter Secure Diffusion. Es kann als nächster Schritt in der Textual content-zu-Bild-Modellentwicklung unter Einbeziehung modernster Technologien angesehen werden. Flux ist ein Nachfolger von Stabile Verbreitungwodurch sowohl die Leistung als auch die Ausgabequalität mehrfach verbessert wurden.
Wie wir in der Einleitung erwähnt haben, kann die Ausführung von Flux auf Shopper-{Hardware} recht teuer sein. Benutzer mit geringer GPU-Leistung können jedoch Optimierungen vornehmen, um den Betrieb speicherschonender zu gestalten. In diesem Artikel werden wir sehen, wie Flux von der Quantisierung profitieren kann. Ja, wie in quantisierten gguf-Dateien mit Bits und Bytes. Sehen wir uns das Diagramm „Kreativität vs. Kosten“ aus dem Labor an.
Flux gibt es in zwei Hauptvarianten: Timestep-destilliert und Steering-destilliert, aber die Architektur basiert auf mehreren fortschrittlichen Komponenten:
- Zwei vorab trainierte Textual content-Encoder: Flux verwendet sowohl CLIP- als auch T5-Textual content-Encoder, um Textaufforderungen besser zu verstehen und in Bilder zu übersetzen. CLIP und T5 ermöglichen ein besseres Verständnis von Textansagen.
- Transformatorbasiertes DiT-Modell: Dies fungiert als Rückgrat für die Rauschunterdrückung und bietet eine qualitativ hochwertige Erzeugung mithilfe von Transformatoren für eine effizientere und genauere Rauschunterdrückung.
- Variationaler Auto-Encoder (VAE): Anstatt auf Pixelebene zu entrauschen, arbeitet Flux in einem latenten Raum, ähnlich wie Secure Diffusion, was die Rechenlast reduziert und gleichzeitig eine hohe Ausgabequalität beibehält.
Flussmittel gibt es in mehreren Varianten:
- Flux-Schnell: Eine destillierte Open-Supply-Model, verfügbar auf Hugging Face.
- Flux-Entwickler: Ein offenes Modell mit einer restriktiveren Lizenz.
- Flux-Professional: Eine Closed-Supply-Model, auf die über verschiedene APIs zugegriffen werden kann.
Diese Funktionen ermöglichen es Flux, viele seiner Vorgänger mit einem verfeinerten und flexibleren Bildgenerierungserlebnis zu übertreffen.
Warum ist Quantisierung wichtig?
Wenn Sie mit Laufen vertraut sind große Sprachmodelle (LLMs) Vor Ort sind Sie möglicherweise schon einmal auf Quantisierung gestoßen. Obwohl die Quantisierung für Bilder weniger häufig verwendet wird, handelt es sich um eine leistungsstarke Technik, die die Größe eines Modells reduziert, indem ihre Parameter in weniger Bits gespeichert werden, was zu einem geringeren Speicherbedarf ohne Leistungseinbußen führt. Typischerweise werden neuronale Netzwerkparameter in 32 Bit (volle Präzision) gespeichert, durch Quantisierung kann dies jedoch auf bis zu 4 Bit reduziert werden. Durch diese Verringerung der Präzision können große Modelle wie Flux auf {Hardware} der Verbraucherklasse ausgeführt werden.
Quantisierung mit BitsAndBytes
Eine wichtige Innovation, die die Ausführung von Flux auf einer 8-GB-GPU ermöglicht, ist die Quantisierung, die von der unterstützt wird BitsAndBytes-Bibliothek. Diese Bibliothek ermöglicht den Zugriff auf große Sprachmodelle über k-Bit-Quantisierung für PyTorchund bietet drei Hauptfunktionen, die den Speicherverbrauch für Inferenz und Coaching drastisch reduzieren.
Die Diffusers-Bibliothek, die Bilderzeugungsmodelle wie Flux unterstützt, hat kürzlich Unterstützung für diese Quantisierungstechnik hinzugefügt. Dadurch können Sie jetzt komplexe Bilder direkt auf Ihrem Laptop computer oder ähnlichen Plattformen erstellen Google Colabs Kostenloses Kontingent mit nur 8 GB GPU-RAM.
Wie funktioniert BitsAndBytes?
BitsAndBytes ist die erste Wahl für die Quantisierung von Modellen mit 8- und 4-Bit-Präzision. Der 8-Bit-Quantisierungsprozess multipliziert Ausreißer in fp16 mit Nicht-Ausreißern in int8, wandelt die Nicht-Ausreißerwerte zurück in fp16 um und addiert sie dann, um die Gewichte in fp16 zurückzugeben. Dieser Ansatz minimiert die beeinträchtigende Wirkung von Ausreißerwerten auf die Leistung eines Modells. Die 4-Bit-Quantisierung komprimiert das Modell noch weiter und wird häufig verwendet QLoRA zur Feinabstimmung quantisierter LLMs.
In dieser Anleitung zeigen wir, wie Sie Flux mit 4-Bit-Quantisierung laden und ausführen können, wodurch der Speicherbedarf drastisch reduziert wird.
Einrichten von Flux auf Shopper-{Hardware}
SCHRITT 1: Einrichten der Umgebung
Stellen Sie zunächst sicher, dass Ihr Pc in einer GPU-fähigen Umgebung läuft (z. B. einer NVIDIA T4- oder L4-GPU). Lassen Sie uns in die technischen Schritte zum Ausführen von Flux auf einem Pc mit nur 8 GB GPU-Speicher (Ihrem kostenlosen Google Colab!) eintauchen.
!pip set up -Uq git+https://github.com/huggingface/diffusers@major
!pip set up -Uq git+https://github.com/huggingface/transformers@major
!pip set up -Uq bitsandbytes
Diese Pakete bieten alle Instruments, die zum effizienten Ausführen von Flux-Speicher erforderlich sind, z. B. das Laden vorab trainierter Textual content-Encoder, das effiziente Laden von Modellen und die CPU-Entlastung sowie die Quantisierung zum Ausführen großer Modelle auf kleinerer {Hardware}. Als nächstes importieren wir Abhängigkeiten.
import diffusers
import transformers
import bitsandbytes as bnb
from diffusers import FluxPipeline, FluxTransformer2DModel
from transformers import T5EncoderModel
import torch
import gc
SCHRITT 2: Speicherverwaltung mit GPU
Wir brauchen die gesamte Erinnerung, die wir haben. Um einen reibungslosen Betrieb zu gewährleisten und Speicherverschwendung zu vermeiden, definieren wir eine Funktion, die den GPU-Speicher zwischen Modellladevorgängen löscht. Die folgende Funktion leert den Cache der GPU und setzt die Speicherstatistiken zurück, um eine optimale Ressourcennutzung im gesamten Pocket book sicherzustellen.
def flush():
gc.acquire()
torch.cuda.empty_cache()
torch.cuda.reset_max_memory_allocated()
torch.cuda.reset_peak_memory_stats()
def bytes_to_giga_bytes(bytes):
return bytes / 1024 / 1024 / 1024
flush()
SCHRITT 3: Laden des T5-Textkodierers im 4-Bit-Modus
Flux verwendet zwei vorab trainierte Textual content-Encoder: CLIP und T5. Wir laden nur den T5-Encoder, um die Speichernutzung zu minimieren, indem wir eine 4-Bit-Quantisierung verwenden. Dadurch reduziert sich der Speicherbedarf um quick 90 %.
# Checkpoints
ckpt_id = "black-forest-labs/FLUX.1-dev"
ckpt_4bit_id = "hf-internal-testing/flux.1-dev-nf4-pkg"
immediate = "a cute canine in paris photoshoot"
text_encoder_2_4bit = T5EncoderModel.from_pretrained(
ckpt_4bit_id,
subfolder="text_encoder_2",
)
Nachdem der T5-Encoder geladen ist, können wir nun mit dem nächsten Schritt fortfahren: der Generierung von Texteinbettungen. Dieser Schritt reduziert den Speicherverbrauch drastisch und ermöglicht es uns, den Encoder auf einer Maschine mit begrenzten Ressourcen zu laden.
SCHRITT 4: Texteinbettungen generieren
Nachdem wir nun den 4-Bit-quantisierten T5-Textkodierer geladen haben, können wir die Textaufforderung kodieren. Dadurch wird die Eingabeaufforderung in Einbettungen umgewandelt, die später als Leitfaden für den Bildgenerierungsprozess verwendet werden.
Jetzt laden wir die Flux-Pipeline nur mit dem T5-Encoder und aktivieren die CPU-Entlastung. Diese Technik trägt dazu bei, die Speichernutzung auszugleichen, indem große Parameter, die nicht in den GPU-Speicher passen, auf die CPU verschoben werden.
pipeline = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
text_encoder_2=text_encoder_2_4bit,
transformer=None,
vae=None,
torch_dtype=torch.float16,
)
with torch.no_grad():
prompt_embeds, pooled_prompt_embeds, text_ids = pipeline.encode_prompt(
immediate=immediate, prompt_2=None, max_sequence_length=256
)
del pipeline
flush()
Nach der Codierung werden die Eingabeaufforderungseinbettungen in prompt_embeds gespeichert, wodurch das Modell für die Generierung eines Bildes vorbereitet wird. Dieser Schritt wandelt die Eingabeaufforderung in eine Kind um, die das Modell verstehen und zur Bildgenerierung verwenden kann.
SCHRITT 5: Laden des Transformators und VAE in 4 Bits
Nachdem die Texteinbettungen fertig sind, laden wir nun die restlichen Teile des Modells: den Transformer und VAE. Beide werden außerdem in 4 Bit geladen, wodurch der Gesamtspeicherbedarf minimal bleibt.
transformer_4bit = FluxTransformer2DModel.from_pretrained(ckpt_4bit_id, subfolder="transformer")
pipeline = FluxPipeline.from_pretrained(
ckpt_id,
text_encoder=None,
text_encoder_2=None,
tokenizer=None,
tokenizer_2=None,
transformer=transformer_4bit,
torch_dtype=torch.float16,
)
pipeline.enable_model_cpu_offload()
Mit diesem Schritt ist das Laden des Modells abgeschlossen und Sie können Bilder auf einem 8-GB-Pc generieren.
SCHRITT 6: Generieren des Bildes
print("Operating denoising.")
top, width = 512, 768
pictures = pipeline(
prompt_embeds=prompt_embeds,
pooled_prompt_embeds=pooled_prompt_embeds,
num_inference_steps=50,
guidance_scale=5.5,
top=top,
width=width,
output_type="pil",
).pictures
# Show the picture
pictures(0)
Die Zukunft der Bilderzeugung auf dem Gerät
Dieser Durchbruch bei der Quantisierung und der effizienten Modellverwaltung bringt uns der Zukunft näher, in der leistungsstarke KI-Modelle direkt auf Verbraucherhardware ausgeführt werden können. Sie benötigen keinen Zugriff mehr auf Excessive-Finish-GPUs oder teure Cloud-Ressourcen oder kostenpflichtige serverlose API-Aufrufe. Mit den Verbesserungen der zugrunde liegenden Technologie und der Nutzung von Quantisierungstechniken wie BitsAndBytes sind die Möglichkeiten für eine demokratisierte KI endlos. Unabhängig davon, ob Sie Bastler, Entwickler oder Forscher sind, machen diese Fortschritte es einfacher denn je, bei der Bildgenerierung zu erstellen, zu experimentieren und Innovationen voranzutreiben.
Abschluss
Mit der Einführung von Flux und dem cleveren Einsatz der Quantisierung können Sie jetzt beeindruckende Bilder mit so bescheidener {Hardware} wie einer 8-GB-GPU erzeugen. Dies ist ein bedeutender Schritt, um fortschrittliche KI einem breiteren Publikum zugänglich zu machen, und die Technologie wird von hier aus nur noch besser werden. Schnappen Sie sich additionally Ihren Laptop computer, richten Sie Flux ein und beginnen Sie mit der Erstellung! Während Modelle mit voller Präzision mehr Speicher und Ressourcen erfordern, bieten Techniken wie die 4-Bit-Quantisierung eine praktische Lösung für den Einsatz großer Modelle auf eingeschränkten Systemen. Dieser Ansatz kann nicht nur auf Flux, sondern auch auf andere große Modelle angewendet werden und eröffnet die Möglichkeit einer hochwertigen KI-Generierung auf kleineren, günstigeren {Hardware}-Setups.
Wenn Sie on-line nach einem Generative AI-Kurs suchen, dann erkunden Sie: GenAI Pinnacle-Programm
Wichtige Erkenntnisse
- FLUX ist ein leistungsstarkes Textual content-zu-Bild-Generierungsmodell, das mithilfe von Speicheroptimierungstechniken wie 4-Bit-Quantisierung und gemischter Präzision effizient in Colab ausgeführt werden kann.
- Sie können Instruments wie Diffusoren und Transformatoren nutzen, um den Prozess der Bildgenerierung anhand von Textaufforderungen zu optimieren.
- Durch eine effektive Speicherverwaltung können große Modelle mit begrenzten Ressourcen wie Colab-GPUs ausgeführt werden.
Ressourcen
Die in diesem Artikel gezeigten Medien sind nicht Eigentum von Analytics Vidhya und werden nach Ermessen des Autors verwendet.
Häufig gestellte Fragen
Antwort. Durch die 4-Bit-Quantisierung wird der Speicherbedarf des Modells reduziert, sodass große Modelle wie FLUX effizienter auf begrenzten Ressourcen wie Colab-GPUs ausgeführt werden können.
Antwort. Ersetzen Sie einfach die Eingabeaufforderungsvariable im Skript durch eine beliebige neue Textbeschreibung, die das Modell visualisieren soll. Wenn Sie es beispielsweise in „Eine ruhige Landschaft mit Bergen“ ändern, wird ein Bild dieser Szene erstellt.
Antwort. Sie können „num_inference_steps“ (steuert die Qualität) und „guidance_scale“ (steuert, wie stark sich das Bild an die Eingabeaufforderung hält) im Pipeline-Aufruf anpassen. Höhere Werte führen zu einer besseren Qualität und detaillierteren Bildern, aber die Generierung kann auch länger dauern.
Antwort. Stellen Sie sicher, dass Sie das Pocket book auf einer GPU betreiben und das 4-Bit-Quantisierungs- und Combined-Precision-Setup verwenden. Wenn weiterhin Fehler auftreten, sollten Sie erwägen, num_inference_steps zu verringern oder das Modell im „CPU-Offload“-Modus auszuführen, um die Speichernutzung zu reduzieren.
Antwort. Ja, Sie können dieses Skript auf jedem Pc ausführen, auf dem Python und die erforderlichen Bibliotheken installiert sind. Stellen Sie sicher, dass Ihr lokaler Pc über ausreichende GPU-Ressourcen und Speicher verfügt, wenn Sie mit großen Modellen wie FLUX arbeiten.