Comment exécuter un serveur de diffusion stable sur Google Cloud Platform (GCP)

Un guide étape par étape pour créer et déployer une application Flask

Images générées par l’IA. À gauche : Diffusion stable . À droite : mi- parcours . Invite générée via Succinctly AI : « robot dansant sous la pluie avec du feu fabriqué à partir de barbe à papa, hyper réaliste, photoréalisme, 4k, sophistiqué, rendu octane ».
  1. Assurez-vous d’avoir suffisamment de quota GPU
  2. Créer une machine virtuelle avec un GPU attaché
  3. Télécharger Stable Diffusion et tester l’inférence
  4. Regroupez Stable Diffusion dans une application Flask
  5. Déployez et rendez votre serveur Web accessible au public

1. Assurez-vous d’avoir suffisamment de quota GPU

2. Créez une machine virtuelle avec un GPU attaché

  • Série : SélectionnerN1
  • Type de machine : Sélectionnez n1-standard-4. C’est l’option la moins chère avec suffisamment de mémoire (15 Go) pour charger Stable Diffusion. Malheureusement, la prochaine option la moins chère (7,5 Go) ne suffit pas et vous manquerez de mémoire lors du chargement du modèle et de son transfert vers le GPU.
  • Type de GPU : développez CPU PLATFORM AND GPUet cliquez sur le ADD GPUbouton. Sélectionnez NVIDIA Tesla T4– c’est le GPU le moins cher et il fait le travail (il dispose de 16 Go de VRAM, ce qui répond aux exigences de 10 Go de Stable Diffusion). Si vous êtes curieux, jetez un œil au tableau comparatif et au tableau des prix . Notez que vous pouvez rendre le GPU préemptif pour obtenir un meilleur prix (c’est-à-dire que Google le récupérera chaque fois qu’il en aura besoin pour des tâches plus prioritaires), mais je trouve personnellement cela frustrant même en jouant.
  • Image : faites défiler vers le bas Boot disket cliquez sur SWITCH IMAGE. Pour le système d’exploitation, sélectionnez Deep Learning on Linux; pour la version, sélectionnez Debian 10 based Deep Learning VM with CUDA 11.0 M95.
  • Accès : en supposant que vous souhaitiez rendre votre serveur accessible au public : (a) sous Identity and API access, sélectionnez Allow default accesset (b) sous Firewall, sélectionnez Allow HTTP trafficet Allow HTTPS traffic.
Répartition du coût mensuel d’une VM avec GPU associé sur Google Cloud (capture d’écran de la console GCP).

3. Téléchargez Stable Diffusion et testez l’inférence

gcloud compute ssh --zone <nom-zone> <nom-machine> --project <nom-projet>
Souhaitez-vous installer le pilote Nvidia ? [o/n]
# Cloner le dépôt public Github. 
git clone https://github.com/CompVis/stable-diffusion.git# Créer un environnement virtuel Python. 
cd stable-diffusion 
conda env créer -f environnement.yaml 
conda activer ldm
importer la torche 
depuis la torche importer 
la diffusion automatique depuis les diffuseurs importer StableDiffusionPipelineassert torch.cuda.is_available()pipe = StableDiffusionPipeline.from_pretrained( 
    "CompVis/stable-diffusion-v1-4", 
    use_auth_token=True 
).to("cuda") 

prompt = "une photo d'un astronaute à cheval sur mars" 
avec autocast("cuda") : 
    image = pipe(prompt)["sample"][0]   
    
image.save("astronaut_rides_horse.png")
huggingface-cli login 
# Entrez le jeton d'accès de votre compte HuggingFace.python inference.py

4. Regroupez Stable Diffusion dans une application Flask

pip install Flask 
cd ~; mkdir flask_app
depuis l'importation de la fiole Flask, request, send_file 
import io 
import torch 
from torch import autocast 
from diffusers import StableDiffusionPipelineapp = Flask(__name__) 
assert torch.cuda.is_available()pipe = StableDiffusionPipeline.from_pretrained( 
        "CompVis/stable-diffusion-v1-4", 
        use_auth_token=True 
).to("cuda")def run_inference(prompt): 
  with autocast("cuda") : 
      image = pipe(prompt)["sample"][0]   
  img_data = io.BytesIO() 
  image.save(img_data, "PNG") 
  img_data.seek(0 ) 
  renvoie img_data@app .route('/') 
def myapp() : 
    si "prompt" n'est pas dans request.args : 
        return "Veuillez spécifier un paramètre d'invite", 400    prompt = request.args["prompt"] 
    img_data = run_inference(prompt) 
    return send_file(img_data, mimetype='image/png')
export FLASK_APP=app 
export FLASK_DEBUG=true 
flask run

5. Déployez et rendez votre serveur accessible au public

gunicorn -b :5000 --timeout=20 app:app
nohup gunicorn -b :5000 --timeout=20 app:app &

Création d’une règle de pare-feu pour rendre le port accessible

  • Nom : allow-stable-diffusion-access (ou votre nom préféré)
  • Journaux : activés
  • Sens de circulation : Entrée
  • Action sur match : Autoriser
  • Cibles : Balises cibles spécifiées
  • Balises cibles : deeplearning-vm (Cette balise est automatiquement ajoutée à votre VM lorsque vous choisissez l’image « Deep Learning on Linux ». Vous pouvez ajouter manuellement une autre balise à votre VM et la référencer ici.)
  • Protocoles et ports : TCP — 5000, ou votre port choisi.

Envoi de requêtes au serveur Web à partir d’un navigateur

http://12.34.56.789:5000?prompt=robots%20dancing

Accéder à votre webservice Stable Diffusion depuis un navigateur. (Image de l’auteur)

Avis de non-responsabilité : ce serveur n’est pas prêt pour la production

Alternatives à l’exécution de votre propre serveur

  1. Pour les utilisateurs non techniques : rendez-vous sur Dreamstudio , le service officiel de Stability.ai, où vous obtenez des crédits gratuits.
  2. Pour les passionnés de ML qui veulent juste s’amuser : utilisez Google Colab . Avec le niveau gratuit, vous bénéficiez d’un accès GPU chaque fois qu’il est disponible. Pour 10 $/mois, vous pouvez passer à Colab Pro , qui promet « des GPU plus rapides et plus de mémoire ».
  3. Pour les développeurs cherchant à intégrer Stable Diffusion dans leur service : appelez l’API depuis Replicate , pour 0,0023 $/seconde. Ils garantissent que 80 % des appels se terminent en 15 secondes, de sorte que le 80e centile de coût pour une image est d’environ 0,0345 $. Replicate est similaire au plus connu HuggingFace , mais se concentre davantage sur la vision par ordinateur que sur le traitement du langage naturel. Pour l’instant, HuggingFace n’offre pas son API standard « Accelerated Inference » pour la diffusion stable, mais c’est très probablement en cours.
Retour en haut