La solution Knative vous permet de déployer des applications serverless de contenu généré par l'IA (AIGC) et de gérer précisément les requêtes simultanées grâce à la mise à l'échelle automatique. Cette rubrique explique comment déployer un service Stable Diffusion dans un environnement de production avec Knative.
Table des matières
Étape 3 : Activer la mise à l'échelle automatique basée sur les requêtes
Étape 4 : Consulter les données de surveillance du service Stable Diffusion
Prérequis
Vous avez créé un cluster managé Container Service for Kubernetes (ACK). Le cluster exécute Kubernetes 1.24 ou une version ultérieure.
Contexte
Alibaba Cloud ne garantit pas la légitimité, la sécurité ni l'exactitude du modèle tiers Stable Diffusion. Alibaba Cloud décline toute responsabilité en cas de dommages résultant de l'utilisation de Stable Diffusion.
Vous devez respecter les conditions d'utilisation, les spécifications d'usage ainsi que les lois et réglementations applicables à Stable Diffusion. Vous assumez l'entière responsabilité du respect des exigences de légitimité et de conformité liées à Stable Diffusion.
Avec l'essor de l'IA générative, de nombreux développeurs cherchent à améliorer l'efficacité de leur R&D en exploitant des modèles d'IA. Projet AIGC réputé, Stable Diffusion permet aux utilisateurs de générer rapidement et avec précision les scènes et images souhaitées. Toutefois, l'utilisation de Stable Diffusion peut poser les défis suivants :
Le débit maximal d'un pod est limité. Si trop de requêtes sont acheminées vers le même pod, celui-ci sature. Pour résoudre ce problème, vous devez limiter le nombre maximal de requêtes simultanées qu'un pod peut traiter.
Les ressources GPU sont coûteuses. Vous souhaitez les utiliser à la demande et les libérer pendant les heures creuses.
Pour répondre à ces enjeux, ACK s'intègre à Knative afin de prendre en charge le traitement précis des requêtes simultanées et la mise à l'échelle automatique. Vous pouvez ainsi déployer un service Stable Diffusion en production avec Knative. La figure suivante illustre l'architecture de déploiement d'un service Stable Diffusion en production basé sur Knative.

Étape 1 : Déployer un service Stable Diffusion
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Dans l'onglet Services de la page Knative, sélectionnez default dans la liste déroulante Namespace et cliquez sur Create from Template. Copiez le modèle YAML suivant dans l'éditeur de code, puis cliquez sur Create pour créer un service nommé knative-sd-demo.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: knative-sd-demo 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: mpa.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: 3Le service knative-sd-demo est créé lorsque son état correspond à celui illustré ci-dessous.

Étape 2 : Accéder au service Stable Diffusion
-
Dans l'onglet Services, notez l'adresse IP de la passerelle et le nom de domaine par défaut du service.

-
Ajoutez les informations suivantes au fichier hosts afin de mapper le nom de domaine du service à l'adresse IP de la passerelle pour le service knative-sd-demo. Exemple :
47.xx.xxx.xx knative-sd-demo.default.example.com # Replace the IP address and domain name with the actual values. -
Après avoir modifié le fichier hosts, accédez à l'onglet Services et cliquez sur le nom de domaine par défaut du service Stable Diffusion knative-sd-demo pour y accéder.
L'accès aboutit si la page suivante s'affiche.

Étape 3 : Activer la mise à l'échelle automatique basée sur les requêtes
-
Effectuez des tests de charge avec l'outil hey.
RemarquePour en savoir plus sur hey, consultez hey.
# Send 50 requests with 5 concurrent requests in each batch and set the timeout period to 180 seconds. ./hey -n 50 -c 5 -t 180 -m POST -T "application/json" -d '{"prompt": "pretty dog"}' http://knative-sd-demo.default.example.com/sdapi/v1/txt2imgSortie 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 responsesLa sortie confirme que les 50 requêtes ont été traitées avec succès.
-
Exécutez la commande suivante pour lister les pods :
watch -n 1 'kubectl get po'
La sortie indique que cinq pods ont été créés pour le service Stable Diffusion. En effet, le paramètre
containerConcurrency: 1configure le service pour traiter au maximum une requête simultanée par pod.
Étape 4 : Consulter les données de surveillance du service Stable Diffusion
Knative propose des fonctionnalités d'observabilité prêtes à l'emploi. Vous pouvez consulter les données de surveillance du service Stable Diffusion dans les Monitoring Dashboards de la page Knative. Pour savoir comment activer les tableaux de bord Knative, consultez Consulter le tableau de bord Knative dans Managed Service for Prometheus.
-
Dans la section Overview (average over the selected time range), vous pouvez consulter le nombre de requêtes Knative (Request Volume), le taux de réussite des requêtes (Success Rate), les erreurs client (4xx), les erreurs serveur (5xx) et la tendance de mise à l'échelle des pods.

-
Dans la section Response Time, vous pouvez consulter les données de latence de réponse de Knative, notamment les latences P50, P90, P95 et P99.
