Dit artikel biedt een handleiding voor het implementeren van het Stable Diffusion-model, een populair model voor het genereren van afbeeldingen, op Google Cloud met behulp van Vertex AI. De handleiding behandelt het downloaden van Setup en gewichten, TorchServe voor implementatie, TorchServe-server geïmplementeerd op een Vertex-eindpunt en het automatisch opslaan van de afbeeldingsgeschiedenis op GCS.
Inleiding
Stable Diffusion is een model voor het genereren van afbeeldingen. Het werd in 2022 open source gemaakt en heeft aan populariteit gewonnen dankzij zijn vermogen om afbeeldingen van hoge kwaliteit te genereren op basis van tekstbeschrijvingen. Net als andere modellen voor het genereren van afbeeldingen, zoals Dall-E, maakt Stable Diffusion gebruik van machine-learningtechnieken om afbeeldingen te genereren op basis van een gegeven invoer.
Moët Hennessy, de wijn- en gedistilleerddivisie van luxeconglomeraat LVMH, beheert een portfolio van meer dan 26 iconische merken zoals Moët & Chandon, Hennessy en Veuve Clicquot. Moët Hennessy heeft samengewerkt met Artefact om het potentiële gebruik van geavanceerde technologie bij het genereren van marketingcontent te onderzoeken. Met een focus op privacy en veiligheid besloot het team om de inzet van Stable Diffusion op Google Cloud Platform (GCP) te onderzoeken, zodat Moët Hennessy het model binnen hun eigen infrastructuur kon afstemmen en uitvoeren, wat een naadloze ervaring oplevert van het afstemmen van het model tot de API-blootstelling.
Voordat u begint, is het belangrijk op te merken dat dit artikel ervan uitgaat dat u voorkennis hebt van Google Cloud Platform (GCP) en specifiek Vertex AI. Dit omvat concepten zoals modelregistry en Vertex endpoints. Daarnaast moet u ervaring hebben met Docker om sommige stappen te kunnen volgen. Als u niet bekend bent met deze concepten, is het raadzaam om u hiermee vertrouwd te maken voordat u verder gaat.
Bovendien hebt u een huggingface-account nodig om Stable Diffusion-gewichten te downloaden. Als u er nog geen hebt, kunt u er eenvoudig een aanmaken op huggingface's website.
Dit gezegd hebbende, laten we beginnen!
Installatie en gewichten downloaden
Ik raad aan om de github archief Ik heb me voorbereid om de stappen van het artikel te volgen.
Het is altijd belangrijk om een virtuele omgeving te maken om de pakketten te installeren. Persoonlijk gebruik ik anaconda en installeer ik de requirements.txt bij elke afhankelijkheid:
conda activeert stabiele_diffusie
pip install -r src/requirements.txt
U bent nu klaar om de gewichten van Stable Diffusion te downloaden, in dit artikel gebruiken we Stabiele verspreiding 1.5. U moet de licentie accepteren op de modelpagina, anders krijgt u fouten bij het downloaden van de modelgewichten.
Ga naar uw account → instellingen → toegangstoken → nieuw token (leestoegang)

U kunt het token als omgevingsvariabele toevoegen. Persoonlijk raad ik aan om een .env bestand te gebruiken en de omgevingsvariabele te laden met de python-dotenv bibliotheek.
U moet naar `src/stable_diffusion` navigeren en uitvoeren:
Dit zal de gewichten binnenin
Torchserve kader
Fakkelserve is een framework voor het serveren van PyTorch-modellen. Hiermee kunt u PyTorch-modellen in een productieomgeving implementeren en het biedt functies zoals modelversiebeheer en het serveren van meerdere modellen. Het is ontworpen om gemakkelijk te gebruiken te zijn en stelt u in staat om u te concentreren op het bouwen en implementeren van uw modellen, in plaats van u zorgen te maken over de infrastructuur.
1. Een handler maken die het TorchServe-formaat respecteert
Een aangepaste handler is een Python-klasse die definieert hoe de invoer data moet worden voorbewerkt, hoe het model moet worden uitgevoerd en hoe de uitvoer moet worden nabewerkt. Om een aangepaste handler voor uw model te maken, moet u een Python-klasse maken die het TorchServe-formaat volgt.
Een aangepaste handler voor Stable Diffusion is al gegeven in de TorchServe-repository. Maar het Vertex eindpunt verwacht een specifiek formaat voor de verzoeken, dus we moeten de preprocess() methode van de handler aanpassen om rekening te houden met het Vertex formaat. U kunt de aangepaste versie van de handler met de naam ` gebruiken.stabiele_diffusie_handler.py` gegeven in de github repository van dit artikel.
2. Het .mar-bestand maken
Nadat u uw aangepaste handler hebt gemaakt, moet u deze samen met eventuele afhankelijkheden en het model zelf verpakken in een .mar-bestand met behulp van het hulpprogramma model-archiver. Het modelarchiver-gereedschap is een opdrachtregel-gereedschap waarmee u uw model, handler en afhankelijkheden in een enkel bestand kunt verpakken.
Dit maakt een .mar-bestand aan met de naam output.mar dat uw model, handler en afhankelijkheden bevat.
Mogelijk moet u het pad bewerken op basis van waar de bestanden zich op uw computer bevinden:
-model-naam stabiele-diffusie
-versie 1.0
-handler stable_diffusion/stable_diffusion_handler.py
-export-pad stable_diffusion/model-store
-extra-bestanden stable_diffusion/external_files
3. Uw TorchServe-server uitvoeren
Nadat u uw .mar-bestand hebt gemaakt, kunt u de TorchServe-server starten met de opdracht torchserve. Hiervoor moet u de volgende opdracht uitvoeren:
- beginnen
- ts-config=config.properties
- modellen=stabiele-diffusie.mar
- model-store=stable_diffusion/model-store
Met de config.properties kunt u de configuraties van uw TorchServe server opgeven, zoals poort voor inferentie, gezondheidscontroles, aantal werknemers, enz.
WAARSCHUWING: Alle scripts moeten worden uitgevoerd waar het bestand zich bevindt om padfouten te voorkomen.
Voer de TorchServe-server lokaal uit
Het is belangrijk om de code lokaal te testen voordat we beginnen met het dockeriseren van onze implementatie, ik heb al een bash-script voorbereid dat het .mar-bestand aanmaakt en de TorchServe-server start.
U kunt het uitvoeren met :
U moet een paar minuten wachten tot de server geïnitialiseerd is en de worker het model geladen heeft. U kunt beginnen met de inferentie als u het volgende logboek ziet:
org.pytorch.serve.wlm.WorkerThread- W-9000-stable-diffusion_1.0
Wijziging status WORKER_STARTED -> WORKER_MODEL_LOADED
U kunt dan de volgende code gebruiken om inferentieverzoeken aan uw model te doen:
prompt = “een foto van een astronaut te paard op mars”.”
URL = “http://localhost:7080/predictions/stable-diffusion”
antwoord = requests.post(URL, data=prompt)
U kunt controleren of de server uw aanvraag heeft ontvangen door in de serverlogboeken te kijken:
MODEL_LOG - Backend inferentie ontvangen op: 1672929343
Stable Diffusion vereist een GPU om soepel te kunnen werken, dus u zult op dit moment geen uitvoer hebben. U kunt de torchserve-server stoppen met `torhcserve -stop`.
Torchserve Dockeriseren
Uw TorchServe-server werkt lokaal, om Stable Diffusion op Vertex AI te implementeren, moet u het dockeriseren. Dit betekent dat u een Docker image moet maken die het model, de aangepaste handler en alle benodigde afhankelijkheden bevat. Dit zijn simpelweg alle stappen die we hierboven hebben gedaan in een Dockerfile.
Gelukkig is het hier al voorbereid en klaar voor gebruik: Dockerbestand.
Het is belangrijk om de container lokaal te draaien om te controleren of hij goed werkt. Ik ga het lokaal bouwen, maar u kunt het bouwen met cloud build en het op uw machine trekken.
Bouw de image lokaal (Docker daemon moet draaien):
Het bouwen van het image duurt 20 tot 30 minuten, de bouwfase duurt lang omdat de gewichten van het model in het image moeten worden gekopieerd voordat ze door de model-archiver worden ingepakt.
U kunt een docker container draaien en luisteren op poort 7080 met:
Om te controleren of alles goed werkt, kunt u wachten tot de worker het model geladen heeft en dezelfde inferentiecode uitvoeren als voorheen, aangezien we dezelfde poort 7080 gebruiken.
Inzet op Vertex AI
Nu het Dockerbestand klaar is en werkt, moeten we:
Dit is precies wat de deploy.sh bash script gaat doen, kunt u het uitvoeren met:
De installatie duurt ongeveer 1 uur met een goede internetsnelheid:
Nadat het model met succes aan het eindpunt is gekoppeld, kunt u het eindpunt met de volgende code bevragen:
PROJECT_NAAM = ""
REGIO = ""
ENDPOINT_ID = ""
aip.init(project=PROJECT_NAME, location=REGION)
endpoint = aip.Endpoint(endpoint_name=ENDPOINT_ID)
text_input = """Een fles gerijpte en exclusieve cognac
staat op een reflecterend oppervlak, voor een levendige bar,
hyper gedetailleerd, 4K, bokeh"""
def query_endpoint(endpoint, text_input):
payload =
antwoord = endpoint.predict(instances=[payload])
antwoord terugsturen

Een fles gerijpte en exclusieve cognac staat op een reflecterend oppervlak, voor een levendige bar, hypergedetailleerd, 4K, bokeh - Stable Diffusion 1.5
De inferentie zou tussen de 10 en 15 seconden moeten duren op een T4 GPU. U kunt de snelheid verbeteren door een betere GPU te kiezen, u kunt de ACCELERATOR_TYPE variabele in deploy.sh.
Optioneel: Als de afbeeldingsgrootte te groot is voor het eindpunt, of als u de afbeeldingsgeschiedenis wilt opslaan.
Misschien wilt u de geschiedenis van de afbeeldingen bijhouden, of krijgt u fouten door de limiet van 1,5 MB voor de respons van het eindpunt. In dit geval raad ik aan om de post-process methode van de handler te gebruiken om de afbeelding in GCS op te slaan en alleen het GCS-pad van de afbeelding terug te sturen.
Gelukkig heb ik al een handler voorbereid die precies dit voor u doet. U kunt overschakelen van stable_diffusion_handler.py naar stabiele_diffusie_handler_gcs.py zou moeten werken.
WAARSCHUWING: Voordat u de implementatie met de nieuwe handler uitvoert, moet u:
Conclusie
In dit artikel wordt een uitgebreide handleiding gegeven voor het implementeren van het Stable Diffusion-model op Google Cloud Platform met behulp van Vertex AI.
De gids bevat essentiële stappen zoals:
Het is belangrijk om te onthouden dat Vertex endpoint weliswaar een effectieve oplossing kan zijn, maar geen ondersteuning biedt voor het terugschalen naar 0 instanties, wat kan leiden tot hogere kosten omdat de GPU in gebruik blijft.
Nu het Stable Diffusion-model is geïmplementeerd, onderzoeken we verdere mogelijkheden, zoals het verfijnen van het model op specifieke Moet Hennessy-producten om de mogelijkheden van het model nog verder te verbeteren.

BLOG







