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
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.
Étape 1 : Déployer le service Stable Diffusion
Assurez-vous que le service Stable Diffusion est déployé sur des nœuds GPU. Sinon, le service ne fonctionnera pas.
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 .
-
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: 3Sur 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
-
Sur l'onglet Services, récupérez la Gateway et le Default Domain du service.
RemarqueSi le type de passerelle est ALB Gateway, vous pouvez utiliser la commande
curlpour 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.
-
Par exemple :
47.xx.xxx.xx stable-diffusion.default.example.com # Replace the placeholder with the gateway IP address. -
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
-
Utilisez l'outil de test de charge Hey pour exécuter un test de stress.
RemarquePour 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/txt2imgCette 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 responsesLa sortie indique que 50 requêtes ont été envoyées et que le taux de réussite est de 100 %.
-
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.