Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 29, 2026

Cuando despliega Stable Diffusion en un clúster ACK con Knative, este último le permite controlar con precisión la cantidad de solicitudes concurrentes que procesa un pod individual según su rendimiento. Esto garantiza la estabilidad del servicio. Además, Knative escala automáticamente los pods a cero cuando no hay tráfico, lo que reduce los costos de recursos de GPU.

Requisitos previos

  • Creó un clúster ACK que incluye nodos GPU. El clúster debe ejecutar Kubernetes 1.24 o una versión posterior. Para obtener más información, consulte Create an ACK managed cluster.

    Se recomiendan los siguientes tipos de instancia: ecs.gn5-c4g1.xlarge, ecs.gn5i-c8g1.2xlarge o ecs.gn5-c8g1.2xlarge.

  • Desplegó Knative en el clúster. Para obtener más información, consulte Deploy and manage Knative components.

Funcionamiento

Importante

Debe cumplir con los acuerdos de usuario, las especificaciones de uso y las leyes y normativas aplicables del modelo Stable Diffusion de terceros. Alibaba Cloud no garantiza la legalidad, seguridad ni exactitud del modelo Stable Diffusion, y no asume ninguna responsabilidad por los daños derivados de su uso.

Stable Diffusion genera escenas e imágenes objetivo de forma rápida y precisa. Sin embargo, los entornos de producción suelen tener los siguientes requisitos:

  • Un pod individual tiene un rendimiento limitado. Procesar varias solicitudes concurrentes puede sobrecargarlo. Por lo tanto, es necesario controlar con precisión la cantidad de solicitudes concurrentes por pod.

  • Los recursos de GPU son costosos. Se deben asignar bajo demanda y liberar rápidamente durante las horas de menor actividad.

ACK Knative admite la programación precisa basada en la cantidad de solicitudes concurrentes e implementa el escalado automático para construir un servicio Stable Diffusion apto para producción. La siguiente figura ilustra este proceso.

image

Paso 1: Desplegar el servicio Stable Diffusion

Importante

Asegúrese de que el servicio Stable Diffusion se despliegue en nodos GPU. De lo contrario, el servicio no funcionará.

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Applications > Knative.

  3. Despliegue el servicio Stable Diffusion.

    ACK Knative proporciona plantillas de aplicaciones populares. Utilice una plantilla de aplicación para desplegar rápidamente o despliegue el servicio mediante YAML.

    Plantilla de aplicación

    Haga clic en la pestaña Popular Apps y luego en Deploy en la tarjeta del servicio Stable Diffusion.

    Una vez completado el despliegue, haga clic en la pestaña Services para consultar el progreso en la lista de servicios. El servicio queda desplegado cuando Status muestra Success.

    YAML

    Haga clic en la pestaña Services, seleccione default en la lista desplegable Namespace y luego haga clic en Create from Template. Pegue el siguiente ejemplo de YAML en la plantilla y haga clic en Create para crear un servicio llamado 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

    En la página Services, el nombre de dominio predeterminado del servicio stable-diffusion es stable-diffusion.default.example.com.

Paso 2: Acceder al servicio

  1. En la pestaña Services, obtenga los valores de Gateway y Default Domain del servicio.

    Nota

    Si el tipo de gateway es ALB Gateway, utilice el comando curl para acceder a la dirección del servicio. El formato es el siguiente:

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

    Para acceder directamente al servicio mediante su nombre de dominio, configure a CNAME record for the ALB instance.

  2. Por ejemplo:

    47.xx.xxx.xx stable-diffusion.default.example.com # Replace the placeholder with the gateway IP address.
  3. Después de configurar la asignación del host, vaya a la pestaña Services y haga clic en el nombre de dominio predeterminado del servicio stable-diffusion.

    Ahora puede acceder a Stable Diffusion directamente mediante su nombre de dominio.

    Si el acceso es exitoso, el navegador mostrará la página txt2img de la interfaz web de Stable Diffusion y la barra de direcciones presentará el nombre de dominio del servicio Knative. Introduzca un texto en el cuadro de solicitud positiva (positive prompt), como cat, y haga clic en Generate. Si se genera la imagen de IA correspondiente, el servicio de inference de Stable Diffusion desplegado por Knative funciona correctamente.

Paso 3: Comprobar el escalado automático basado en solicitudes

  1. Ejecute una prueba de estrés con la herramienta de pruebas de carga Hey.

    Nota

    Para obtener más información sobre la herramienta de pruebas de carga Hey, consulte 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

    Este comando envía 50 solicitudes con un nivel de concurrencia de 5 y un tiempo de espera de 180 segundos.

    Resultado esperado:

    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

    El resultado muestra que se enviaron 50 solicitudes y que la tasa de éxito es del 100 %.

  2. Ejecute el siguiente comando para observar el escalado automático de pods en tiempo real:

    watch -n 1 'kubectl get po'

    Durante la prueba de estrés, la cantidad de pods se escala automáticamente a cinco y el estado de todos los pods es Running.

    Como la concurrencia máxima de un solo pod se estableció en 1 (containerConcurrency: 1), el servicio Stable Diffusion escala horizontalmente de forma automática hasta 5 pods durante la prueba de estrés.

Paso 4: Consultar los datos de monitoreo del servicio

Knative ofrece capacidades de observability listas para usarse. En la página Knative, haga clic en la pestaña Monitoring Dashboards para consultar los datos de monitoreo del servicio Stable Diffusion. Para obtener más información sobre cómo habilitar y usar el Monitoring Dashboard de Knative, consulte View the Knative Monitoring Dashboard.

Documentación relacionada

Para conocer las recomendaciones de configuración al desplegar servicios de inference de modelos de IA con Knative, consulte Best practices for deploying AI model inference services in Knative.