Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Deploy a production-grade Stable Diffusion service with Knative

Dernière mise à jour :Sep 29, 2026

Lors du déploiement de Stable Diffusion dans un cluster ACK avec Knative, ce dernier permet de contrôler précisément le nombre de requêtes simultanées qu'un pod peut traiter en fonction de son débit, garantissant ainsi la stabilité du service. Knative réduit également automatiquement le nombre de pods à zéro en l'absence de trafic, ce qui diminue les coûts liés aux ressources GPU.

Prérequis

  • Un cluster ACK comprenant des nœuds GPU est créé. Le cluster doit exécuter Kubernetes 1.24 ou une version ultérieure. Pour plus d'informations, consultez la rubrique Créer un cluster ACK managé.

    Nous recommandons les types d'instance suivants : ecs.gn5-c4g1.xlarge, ecs.gn5i-c8g1,2xlarge ou ecs.gn5-c8g1,2xlarge.

  • Knative est déployé dans le cluster. Pour plus d'informations, consultez les rubriques et Déployer et gérer les composants Knative.

Fonctionnement

Important

Vous devez respecter les accords d'utilisateur, les spécifications d'utilisation ainsi que les lois et réglementations applicables au modèle tiers Stable Diffusion. Alibaba Cloud ne garantit pas la légalité, la sécurité ou l'exactitude du modèle Stable Diffusion et n'assume aucune responsabilité pour les dommages résultant de son utilisation.

Stable Diffusion génère rapidement et avec précision des scènes et des images cibles. Toutefois, les environnements de production présentent généralement les exigences suivantes :

  • Le débit d'un seul pod est limité et la gestion de plusieurs requêtes simultanées peut le surcharger. Il est donc nécessaire de contrôler précisément le nombre de requêtes simultanées par pod.

  • Les ressources GPU sont coûteuses. Il faut allouer ces ressources à la demande et les libérer rapidement pendant les heures creuses.

ACK Knative prend en charge une planification précise basée sur le nombre de requêtes simultanées et met en œuvre la mise à l'échelle automatique pour construire un service Stable Diffusion de qualité production. Le schéma suivant illustre ce processus.

image

Étape 1 : Déployer le service Stable Diffusion

Important

Assurez-vous que le service Stable Diffusion est déployé sur des nœuds GPU. Sinon, le service ne fonctionnera pas.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Applications > Knative.

  3. Déployez le service Stable Diffusion.

    ACK Knative propose des modèles d'application populaires. Vous pouvez utiliser un modèle d'application pour un déploiement rapide ou déployer le service à l'aide d'un fichier YAML.

    Modèle d'application

    Cliquez sur l'onglet Popular Apps puis sur Deploy sur la carte du service Stable Diffusion.

    Une fois le déploiement terminé, cliquez sur l'onglet Services pour afficher la progression du déploiement dans la liste des services. Le service est déployé lorsque l'état Status indique Success.

    YAML

    Cliquez sur l'onglet Services, sélectionnez default dans la liste déroulante Namespace, puis cliquez sur Create from Template. Collez l'exemple YAML suivant dans le modèle, puis cliquez sur Create pour créer un service nommé stable-diffusion.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: stable-diffusion
      annotations:
        serving.knative.dev.alibabacloud/affinity: "cookie"
        serving.knative.dev.alibabacloud/cookie-name: "sd"
        serving.knative.dev.alibabacloud/cookie-timeout: "1800"
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
            autoscaling.knative.dev/maxScale: '10'
            autoscaling.knative.dev/targetUtilizationPercentage: "100"
            k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge,ecs.gn5i-c8g1.2xlarge,ecs.gn5-c8g1.2xlarge  
        spec:
          containerConcurrency: 1
          containers:
          - args:
            - --listen
            - --skip-torch-cuda-test
            - --api
            command:
            - python3
            - launch.py
            image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion@sha256:62b3228f4b02d9e89e221abe6f1731498a894b042925ab8d4326a571b3e992bc
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 7860
              name: http1
              protocol: TCP
            name: stable-diffusion
            readinessProbe:
              tcpSocket:
                port: 7860
              initialDelaySeconds: 5
              periodSeconds: 1
              failureThreshold: 3

    Sur la page Services, le nom de domaine par défaut du service stable-diffusion est stable-diffusion.default.example.com.

Étape 2 : Accéder au service

  1. Sur l'onglet Services, récupérez la Gateway et le Default Domain du service.

    Remarque

    Si le type de passerelle est ALB Gateway, vous pouvez utiliser la commande curl pour accéder à l'adresse du service. Le format est le suivant :

    curl -H "Host: stable-diffusion.default.example.com" http://alb-XXX.cn-hangzhou.alb.aliyuncsslb.com # Replace the placeholder with your ALB Gateway address.

    Pour accéder directement au service via son nom de domaine, configurez un enregistrement CNAME pour l'instance ALB.

  2. Par exemple :

    47.xx.xxx.xx stable-diffusion.default.example.com # Replace the placeholder with the gateway IP address.
  3. Après avoir configuré le mappage d'hôte, sur l'onglet Services, cliquez sur le nom de domaine par défaut du service stable-diffusion.

    Vous pouvez désormais accéder directement à Stable Diffusion en utilisant son nom de domaine.

    Si l'accès aboutit, votre navigateur affiche la page txt2img de l'interface web Stable Diffusion et la barre d'adresse indique le nom de domaine du service Knative. Dans la zone de saisie Positive prompt, entrez du texte, par exemple cat, puis cliquez sur Generate. Si l'image IA correspondante est générée, cela signifie que le service d'inférence Stable Diffusion déployé par Knative fonctionne correctement.

Étape 3 : Vérifier la mise à l'échelle automatique basée sur les requêtes

  1. Utilisez l'outil de test de charge Hey pour exécuter un test de stress.

    Remarque

    Pour plus d'informations sur l'outil de test de charge Hey, consultez la page Hey.

    hey -n 50 -c 5 -t 180 -m POST -H "Content-Type: application/json" -d '{"prompt": "pretty dog"}' http://stable-diffusion.default.example.com/sdapi/v1/txt2img

    Cette commande envoie 50 requêtes avec un niveau de simultanéité de 5 et un délai d'expiration de 180 secondes.

    Sortie attendue :

    Summary:
      Total:    252.1749 secs
      Slowest:    62.4155 secs
      Fastest:    9.9399 secs
      Average:    23.9748 secs
      Requests/sec:    0.1983
    Response time histogram:
      9.940 [1]    |■■
      15.187 [17]    |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      20.435 [9]    |■■■■■■■■■■■■■■■■■■■■■
      25.683 [11]    |■■■■■■■■■■■■■■■■■■■■■■■■■■
      30.930 [1]    |■■
      36.178 [1]    |■■
      41.425 [3]    |■■■■■■■
      46.673 [1]    |■■
      51.920 [2]    |■■■■■
      57.168 [1]    |■■
      62.415 [3]    |■■■■■■■
    Latency distribution:
      10% in 10.4695 secs
      25% in 14.8245 secs
      50% in 20.0772 secs
      75% in 30.5207 secs
      90% in 50.7006 secs
      95% in 61.5010 secs
      0% in 0.0000 secs
    Details (average, fastest, slowest):
      DNS+dialup:    0.0424 secs, 9.9399 secs, 62.4155 secs
      DNS-lookup:    0.0385 secs, 0.0000 secs, 0.3855 secs
      req write:    0.0000 secs, 0.0000 secs, 0.0004 secs
      resp wait:    23.8850 secs, 9.9089 secs, 62.3562 secs
      resp read:    0.0471 secs, 0.0166 secs, 0.1834 secs
    Status code distribution:
      [200]    50 responses

    La sortie indique que 50 requêtes ont été envoyées et que le taux de réussite est de 100 %.

  2. Exécutez la commande suivante pour observer la mise à l'échelle automatique des pods en temps réel :

    watch -n 1 'kubectl get po'

    Pendant le test de stress, le nombre de pods s'ajuste automatiquement à cinq et l'état de tous les pods est Running.

    Étant donné que la simultanéité maximale pour un seul pod est définie sur 1 (containerConcurrency: 1), le service Stable Diffusion effectue automatiquement un scale out vers 5 pods pendant le test de stress.

Étape 4 : Afficher les données de surveillance du service

Knative offre une observabilité prête à l'emploi. Sur la page Knative, cliquez sur l'onglet Monitoring Dashboards pour afficher les données de surveillance du service Stable Diffusion. Pour plus d'informations sur l'activation et l'utilisation du tableau de bord de surveillance Knative, consultez la rubrique Afficher le tableau de bord de surveillance Knative.

Documentation connexe

Pour obtenir des suggestions de configuration concernant le déploiement de services d'inférence de modèles d'IA avec Knative, consultez la rubrique Bonnes pratiques pour le déploiement de services d'inférence de modèles d'IA dans Knative.