基于ACK Serverless集群快速部署Stable Diffusion应用

本文介绍如何基于ACK Serverless集群快速部署Stable Diffusion应用。本教程中,您可以通过控制台或kubectl两种方式来部署应用,并在部署完成后通过外部端点访问Stable Diffusion,开启AIGC文生图体验。

前提条件

已创建ACK Serverless集群,且集群所在地域为华北2(北京)、华东1(杭州)、华东2(上海)、华南1(深圳)。具体操作,请参见创建ACK Serverless集群

Stable Diffusion介绍

Stable Diffusion WebUI是Github上一个热门项目,可以通过文本生成图像。Stable Diffusion分为文字理解和图片生成两个部分。文字理解部分使用CLIP模型对文本进行Encoding,图片生成采用Diffusion模型。

重要
  • 阿里云不对第三方模型“Stable Diffusion”的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。

  • 您应自觉遵守第三方模型“Stable Diffusion”的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

步骤一:部署Stable Diffusion应用

您可以通过控制台部署Stable Diffusion应用,也可以通过kubectl连接Kubernetes集群,然后创建YAML文件部署应用。

通过控制台部署

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 在无状态页面,单击使用镜像创建image.png

  4. 应用基本信息页签,设置应用名称,例如stable-diffusion,然后单击下一步创建服务.png

  5. 容器配置页签,按照页面内容依次设置基本配置健康检查生命周期相关的配置项然后单击下一步

    配置大类

    配置项

    示例值

    配置页面

    基本配置

    镜像名称

    公网:yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.2.0

    内网访问时,请根据不同地域集群选择不同的内网地址

    内网:

    华北2(北京): registry-vpc.cn-beijing.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    华东2(上海):registry-vpc.cn-shanghai.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    华东1(杭州):registry-vpc.cn-hangzhou.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    华南1(深圳):registry-vpc.cn-shenzhen.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    image

    所需资源

    • CPU:8Core

    • 内存:16GB

    健康检查

    就绪检查

    • 就绪检查:开启

    • 选择TCP连接

    • 端口:7860

    就绪检查..png

    生命周期

    启动执行

    • 命令:["python3", "launch.py"]

    • 参数: ["--listen", "--skip-torch-cuda-test", "--no-half"]

    生命周期..png

  6. 高级配置页签,单击服务(Service)右侧的创建

    创建服务..png

  7. 创建服务对话框中,设置服务相关的参数,然后单击创建

    通过该服务公开Stable Diffusion应用。

    创建服务..png

  8. 返回在高级配置页面,单击创建

    返回如下页面,表明应用创建成功,您可以单击查看应用详情,查看应用的容器组访问方式事件容器伸缩历史版本日志触发器等信息。

    完成.png

    等待Pod状态变为Running,Stable Diffusion应用部署完成。

通过kubectl部署

  1. 通过kubectl连接ACK Serverless集群。具体操作,请参见通过kubectl连接Kubernetes集群

  2. 复制以下示例代码,创建Stable Diffusion应用的stable-diffusion.yaml文件。

    以下示例代码中image为公网访问的镜像地址,如需通过内网访问,需根据集群地域替换为如下image地址。

    • 华北2(北京): registry-vpc.cn-beijing.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    • 华东2(上海):registry-vpc.cn-shanghai.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    • 华东1(杭州):registry-vpc.cn-hangzhou.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    • 华南1(深圳):registry-vpc.cn-shenzhen.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: stable-diffusion
      name: stable-diffusion
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: stable-diffusion
      template:
        metadata:
          labels:
            app: stable-diffusion
        spec:
          containers:
          - args:
            - --listen
            - --skip-torch-cuda-test
            - --no-half
            command:
            - python3
            - launch.py
            image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.2.0
            imagePullPolicy: IfNotPresent
            name: stable-diffusion
            ports:
            - containerPort: 7860
              protocol: TCP
            readinessProbe:
              tcpSocket:
                port: 7860
            resources:
              limits:
                cpu: "8"
                memory: 16Gi
                ephemeral-storage: 50Gi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
      name: stable-diffusion-svc
      namespace: default
    spec:
      externalTrafficPolicy: Local
      ports:
      - port: 7860
        protocol: TCP
        targetPort: 7860
      selector:
        app: stable-diffusion
      type: LoadBalancer
  3. 执行以下命令,部署Stable Diffusion应用。

    kubectl apply -f stable-diffusion.yaml 
  4. 执行以下命令,确认应用状态正常。

    kubectl get deployment stable-diffusion

    预期输出:

    NAME              READY   UP-TO-DATE   AVAILABLE    AGE
    stable-diffusion   1/1     1            1           103m

步骤二:访问服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

  3. 服务页面,单击目标服务名称,进入服务详情页面,在基本信息区域,单击该服务的外部端点的,例如47.111.XX.XX:7860,开始访问体验Stable Diffusion应用。

    例如,通过输入Black and white photo of a beautiful city,然后单击Generate,即可查看Stable Diffusion生成的图片。生成图片.png

步骤三:释放资源

实践教程完成后,请务必注意及时删除资源,避免额外资损。

删除已创建的应用和服务

  1. 容器服务管理控制台集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态,找到已创建的stable-diffusion应用,在页面右侧操作列,选择更多 > 删除删除应用.png

  2. 确认面板中,选中移除关联的服务(Service)stable-diffusion-svc,然后单击确定

删除集群

ACK Serverless集群目前处于公测中,可免费试用。但是在使用ACK Serverless集群过程中用到的其他阿里云云产品资源,您需要按照各云产品规定的计费规则,为您使用的资源付费,费用由各云产品收取。完成教程后,请参考以下场景处理集群:

  • 如果无需继续使用集群,请登录容器服务管理控制台,在集群列表页面的操作列,单击目标集群对应的更多 > 删除。在删除集群页面,选中同时删除集群下的ALB资源同时删除集群下的PrivateZone资源我已知晓以上信息并确认删除集群,然后单击确定。关于删除ACK Serverless集群的更多信息,请参见删除集群

  • 如果需要继续使用集群,请至少在试用期到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。在使用ACK Serverless集群Pro版过程中用到的其他阿里云云产品资源,相关计费说明,请参见云产品资源计费

联系我们

如果您在ACK AIGC教程实践过程中有任何疑问或建议,欢迎您加入钉群(钉群号:31850017754)交流。