Dieser Artikel enthält eine Anleitung für die Bereitstellung des Stable Diffusion-Modells, eines beliebten Modells zur Bilderzeugung, auf Google Cloud mit Vertex AI. Die Anleitung umfasst die Einrichtung und den Download von Gewichten, TorchServe für die Bereitstellung, den Einsatz des TorchServe-Servers auf einem Vertex-Endpunkt und das automatische Speichern des Bildverlaufs auf GCS
Einführung
Stable Diffusion ist ein Modell zur Bilderzeugung. Es wurde 2022 als Open Source veröffentlicht und hat aufgrund seiner Fähigkeit, qualitativ hochwertige Bilder aus Textbeschreibungen zu erzeugen, an Popularität gewonnen. Wie andere Modelle zur Bilderzeugung, z.B. Dall-E, verwendet Stable Diffusion Techniken des maschinellen Lernens, um Bilder auf der Grundlage einer vorgegebenen Eingabe zu erzeugen.
Moët Hennessy, die Wein- und Spirituosenabteilung des Luxuskonglomerats LVMH, verwaltet ein Portfolio von mehr als 26 ikonischen Marken wie Moët & Chandon, Hennessy und Veuve Clicquot. Moët Hennessy hat zusammengearbeitet mit Artefact um die Einsatzmöglichkeiten von Spitzentechnologie bei der Erstellung von Marketinginhalten zu untersuchen. Mit dem Schwerpunkt auf Datenschutz und Sicherheit entschied sich das Team, den Einsatz von Stable Diffusion auf der Google Cloud Platform (GCP) zu untersuchen, um Moët Hennessy die Feinabstimmung und den Betrieb des Modells innerhalb der eigenen Infrastruktur zu ermöglichen und so eine nahtlose Erfahrung von der Feinabstimmung des Modells bis zur API-Exposition zu bieten.
Bevor Sie beginnen, sollten Sie wissen, dass dieser Artikel voraussetzt, dass Sie über Vorkenntnisse der Google Cloud Platform (GCP) und insbesondere von Vertex AI verfügen. Dazu gehören Konzepte wie die Modellregistrierung und Vertex-Endpunkte. Außerdem müssen Sie über Vorkenntnisse im Umgang mit Docker verfügen, um einige der Schritte nachvollziehen zu können. Wenn Sie mit diesen Konzepten nicht vertraut sind, empfehlen wir Ihnen, sich mit ihnen vertraut zu machen, bevor Sie fortfahren.
Um Stable Diffusion weights herunterladen zu können, benötigen Sie ein huggingface-Konto. Wenn Sie noch keines haben, können Sie es ganz einfach auf Website von huggingface.
Wenn das gesagt ist, lassen Sie uns beginnen!
Setup und Gewichte herunterladen
Ich empfehle das Klonen der github repository Ich habe mich vorbereitet, um die Schritte des Artikels zu befolgen.
Es ist immer wichtig, eine virtuelle Umgebung für die Installation der Pakete zu erstellen. Ich persönlich verwende anaconda und installiere die requirements.txt mit allen Abhängigkeiten:
conda activate stable_diffusion
pip install -r src/requirements.txt
Sie sind nun bereit, die Gewichte von Stable Diffusion herunterzuladen. In diesem Artikel verwenden wir Stabile Diffusion 1.5. Sie müssen die Lizenz auf der Modellseite akzeptieren, sonst treten beim Herunterladen der Modellgewichte Fehler auf.
Gehen Sie zu Ihrem Konto → Einstellungen → Zugriffstoken → neues Token (Lesezugriff)

Sie können das Token als Umgebungsvariable hinzufügen. Ich persönlich empfehle die Verwendung einer .env-Datei und das Laden der Umgebungsvariablen mit dem Befehl python-dotenv Bibliothek.
Sie müssen zu `src/stable_diffusion` navigieren und es ausführen:
Dadurch werden die Gewichte im Inneren heruntergeladen
Torchserve Rahmen
Torchserve ist ein Framework für die Bereitstellung von PyTorch-Modellen. Es ermöglicht Ihnen die Bereitstellung von PyTorch-Modellen in einer Produktionsumgebung und bietet Funktionen wie die Modellversionierung und die Bereitstellung mehrerer Modelle. Es ist einfach zu bedienen und ermöglicht es Ihnen, sich auf die Erstellung und Bereitstellung Ihrer Modelle zu konzentrieren, anstatt sich um die Infrastruktur zu kümmern.
1. Erstellen eines Handlers, der das TorchServe-Format respektiert
Ein benutzerdefinierter Handler ist eine Python-Klasse, die definiert, wie die Eingabe data vorverarbeitet wird, wie das Modell ausgeführt wird und wie die Ausgabe nachverarbeitet wird. Um einen Custom Handler für Ihr Modell zu erstellen, müssen Sie eine Python-Klasse erstellen, die dem TorchServe-Format folgt.
Ein benutzerdefinierter Handler für Stable Diffusion ist bereits im TorchServe Repository enthalten. Der Vertex-Endpunkt erwartet jedoch ein bestimmtes Format für die Anfragen, so dass wir die preprocess()-Methode des Handlers anpassen müssen, um das Vertex-Format zu berücksichtigen. Sie können die modifizierte Version des Handlers namens `stable_diffusion_handler.py` im Github-Repository dieses Artikels angegeben.
2. Erstellen der .mar-Datei
Sobald Sie Ihren benutzerdefinierten Handler erstellt haben, müssen Sie ihn zusammen mit allen Abhängigkeiten und dem Modell selbst mit dem Model-Archiver-Tool in eine .mar-Datei packen. Das model-archiver Tool ist ein Befehlszeilen-Tool, mit dem Sie Ihr Modell, den Handler und die Abhängigkeiten in eine einzige Datei packen können.
Dadurch wird eine .mar-Datei namens output.mar erstellt, die Ihr Modell, Ihren Handler und Ihre Abhängigkeiten enthält.
Möglicherweise müssen Sie den Pfad ändern, je nachdem, wo sich die Dateien auf Ihrem Rechner befinden:
-Modell-Name stabile-Diffusion
-Version 1.0
-handler stable_diffusion/stable_diffusion_handler.py
-Export-Pfad stable_diffusion/model-store
-extra-Dateien stable_diffusion/external_files
3. Ausführen Ihres TorchServe Servers
Sobald Sie Ihre .mar-Datei erstellt haben, können Sie den TorchServe-Server mit dem Befehl torchserve starten. Dazu müssen Sie den folgenden Befehl ausführen:
- Start
- ts-config=config.properties
- models=stable-diffusion.mar
- model-store=stable_diffusion/model-store
In den config.properties können Sie die Konfigurationen Ihres TorchServe-Servers festlegen, z. B. den Port für die Inferenz, die Gesundheitsprüfungen, die Anzahl der Arbeiter usw.
WARNUNG: Alle Skripte müssen dort ausgeführt werden, wo sich die Datei befindet, um Pfadfehler zu vermeiden.
Führen Sie den TorchServe Server lokal aus
Es ist wichtig, den Code lokal zu testen, bevor wir mit der Dockerisierung unseres Einsatzes beginnen. Ich habe bereits ein Bash-Skript vorbereitet, das die .mar-Datei erstellt und den TorchServe-Server startet.
Sie können es mit :
Sie müssen ein paar Minuten warten, bis der Server initialisiert ist und der Worker das Modell geladen hat. Sie können mit der Inferenz beginnen, wenn Sie das folgende Protokoll sehen:
org.pytorch.serve.wlm.WorkerThread- W-9000-stable-diffusion_1.0
Zustandsänderung WORKER_STARTED -> WORKER_MODEL_LOADED
Sie können dann den folgenden Code verwenden, um Inferenzanforderungen an Ihr Modell zu stellen:
prompt = “ein Foto von einem Astronauten, der auf einem Pferd auf dem Mars reitet”
URL = “http://localhost:7080/predictions/stable-diffusion”
response = requests.post(URL, data=prompt)
Sie können überprüfen, ob der Server Ihre Anfrage erhalten hat, indem Sie sich die Serverprotokolle ansehen:
MODEL_LOG - Backend hat Inferenz empfangen bei: 1672929343
Stable Diffusion benötigt einen Grafikprozessor, um reibungslos zu funktionieren, so dass Sie vorerst keine Ausgabe haben. Sie können den torchserve-Server mit `torhcserve -stop` anhalten.
Dockerisieren Sie torchserve
Ihr TorchServe Server arbeitet lokal. Um Stable Diffusion auf Vertex AI einzusetzen, müssen Sie ihn andocken. Das bedeutet, dass Sie ein Docker-Image erstellen, das das Modell, den benutzerdefinierten Handler und alle erforderlichen Abhängigkeiten enthält. Dies sind einfach alle Schritte, die wir oben in einer Dockerdatei durchgeführt haben.
Zum Glück ist es hier bereits vorbereitet und einsatzbereit: Dockerdatei.
Es ist wichtig, dass Sie den Container lokal ausführen, um zu prüfen, ob er ordnungsgemäß funktioniert. Ich werde ihn lokal erstellen, aber Sie können ihn auch mit cloud build erstellen und auf Ihren Rechner ziehen.
Erstellen Sie das Image lokal (Sie benötigen einen laufenden Docker-Daemon):
Die Erstellung des Images dauert 20 bis 30 Minuten. Die Erstellungsphase ist lang, weil die Gewichte des Modells in das Image kopiert werden müssen, bevor es vom Model-Archiver verpackt wird.
Sie können einen Docker-Container starten und Port 7080 mit abhören:
Um zu überprüfen, ob alles ordnungsgemäß funktioniert, können Sie warten, bis der Worker das Modell geladen hat, und denselben Inferenzcode wie zuvor ausführen, da wir denselben Port 7080 verwenden.
Einsatz auf Vertex AI
Nun, da die Dockerdatei fertig ist und funktioniert, müssen wir:
Das ist genau das, was die deploy.sh Bash-Skript tun wird, können Sie es mit ausführen:
Die Bereitstellung dauert bei guter Internetgeschwindigkeit etwa 1 Stunde:
Nachdem das Modell erfolgreich mit dem Endpunkt verbunden wurde, können Sie den Endpunkt mit dem folgenden Code abfragen:
PROJEKT_NAME = ""
REGION = ""
ENDPOINT_ID = ""
aip.init(projekt=PROJEKT_NAME, ort=REGION)
endpoint = aip.Endpoint(endpoint_name=ENDPOINT_ID)
text_input = """Eine Flasche gereiften und exklusiven Cognac
steht auf einer spiegelnden Oberfläche, vor einer lebendigen Bar,
hyperdetailliert, 4K, Bokeh"""
def query_endpoint(endpoint, text_input):
Nutzlast =
response = endpoint.predict(instances=[payload])
Antwort zurückgeben

Eine Flasche gealterten und exklusiven Cognacs steht auf einer spiegelnden Oberfläche, vor einer lebendigen Bar, hyperdetailliert, 4K, Bokeh - Stable Diffusion 1.5
Die Inferenz sollte auf einem T4-GPU zwischen 10 und 15 Sekunden dauern. Sie können die Geschwindigkeit verbessern, indem Sie einen besseren Grafikprozessor wählen. Sie können die Variable ACCELERATOR_TYPE in deploy.sh.
Optional: Wenn die Bildgröße für den Endpunkt zu groß ist oder Sie den Bildverlauf speichern möchten.
Vielleicht möchten Sie die Historie der Bilder verfolgen oder es treten Fehler auf, weil die Endpunktantwort nur 1,5 MB groß ist. In diesem Fall empfehle ich, die Nachbearbeitungsmethode des Handlers zu verwenden, um das Bild in GCS zu speichern und nur den GCS-Pfad des Bildes zurückzugeben.
Glücklicherweise habe ich bereits einen Handler vorbereitet, der genau dies für Sie erledigt. Wechseln Sie von stable_diffusion_handler.py zu stable_diffusion_handler_gcs.py sollte den Zweck erfüllen.
WARNUNG: Bevor Sie die Bereitstellung mit dem neuen Handler ausführen, müssen Sie:
Fazit
In diesem Artikel finden Sie eine umfassende Anleitung für die Bereitstellung des Stable Diffusion-Modells auf Google Cloud Platform mit Vertex AI.
Der Leitfaden enthält wichtige Schritte wie:
Es ist wichtig, daran zu denken, dass der Vertex-Endpunkt zwar eine effektive Lösung sein kann, aber keine Skalierung auf 0 Instanzen unterstützt, was zu höheren Kosten führen könnte, da die GPU weiterhin in Gebrauch bleibt.
Nachdem die Einführung des Stable Diffusion Modells abgeschlossen ist, untersuchen wir derzeit weitere Möglichkeiten, wie z.B. die Feinabstimmung des Modells auf bestimmte Moet Hennessy Produkte, um die Fähigkeiten des Modells noch weiter zu verbessern.

BLOG







