基于ASK轻松部署企业级Stable Diffusion
1. 计费说明
必看!!必看!!必看!!
本实验为付费体验,需要消耗账号费用。体验后若不再需要使用,请及时释放资源,避免持续产生费用。
完成本实验,将要耗费ACK Serverless Pro集群的相关云资源费用说明如下。更多信息,详情请参见ACK Serverless 集群计费说明。
产品名 |
计费类型 |
费用 |
计费链接 |
按量付费 |
0.84元/小时 |
||
限时免费 |
目前公测中,限时免费 |
||
按量付费 |
11.74元/小时~15.46元/小时 |
||
按量付费 |
0.78元/小时 |
2. 环境准备
- 开通微服务引擎MSE。
说明:如果您的阿里云账号已开通微服务引擎MSE,您可以忽略此步骤。
1.1 前往MSE管理控制台。
1.2 在微服务引擎MSE服务开通页面,单击立即授权,开通微服务引擎MSE。
1.3 在授权对话框中页面,单击确定,完成MSE访问ECI的授权。
1.4 在微服务引擎MSE服务开通页面,单击下一步。
返回如下页面,表示微服务引擎MSE开通成功。
- 前往MSE访问ECI授权页面,单击同意授权,完成MSE访问ECI的授权。
说明:此步骤必须完成,请勿跳过。
- 创建ACK Serverless Pro版集群。
2.1 前往容器服务管理控制台,在左侧导航栏选择集群。
2.2 在集群列表页面,单击页面右上角的创建集群。
2.3 在创建集群页面的集群配置中,单击ACK Serverless集群,根据如下参数说明完成相关配置,其他配置项保持默认值,然后单击下一步:组件配置。
配置项 |
说明 |
示例值 |
集群名称 |
填写集群的名称。 |
knative-sd-demo |
集群规格 |
选择集群规格,支持Pro 版和标准版 |
Pro版 |
地域 |
选择集群所在的地域。建议选择华北2(北京)地域。 |
华北2(北京) |
专有网络 |
设置集群的网络。Kubernetes集群仅支持专有网络。支持自动创建和使用已有的VPC。 |
自动创建 |
可用区 |
选择集群所在的可用区。目前华北2(北京)支持的可用区如下: 华北 2 可用区 C 华北 2 可用区 D 华北 2 可用区 G 华北 2 可用区 E 注意:请您在以上ECI支持GPU的四个可用区进行选择。 |
华北 2 可用区 G |
2.3 在组件配置中,Ingress选择MSE Ingress,并选中开启Knative,其他配置项保持默认,单击下一步:确认配置。如您无需使用日志服务功能,可以取消选中使用日志服务,避免产生相关费用。
2.4 在确认配置中,确认配置信息,仔细阅读并选中服务协议,单击创建集群。
请您耐心等待大约3~5分钟,返回如下结果表示集群创建成功。
3. 部署Stable Diffusion服务
- 在左侧导航栏中,单击集群。
- 在集群列表页面,找到您创建的ACK Serverless 集群,单击右侧操作列下的详情。
- 在左侧导航栏中,选择应用>Knative。
- 在服务管理页签,单击使用模板创建。
- 在示例模板下拉列表中,选择Resouce - Knative Service,将以下消息处理服务的YAML示例粘贴至模板,然后单击创建,默认创建一个名为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: 3
- 返回如下结果,表示创建成功,然后单击返回。
- 在服务管理页签,等待大约两分钟,刷新页面后,当knative-sd-demo的状态变为成功时,表明SD服务部署成功。
4. 访问Stable Diffusion服务并进行压测
部署压测服务portal-server,用于Stable Diffusion效果展示并发起压测。
- 在服务管理页签,单击使用模板创建。
- 在命名空间下拉列表中,选择default,在示例模板下拉列表中,选择自定义,将以下portal-server压测服务的YAML示例粘贴至模板,然后单击创建。
--- apiVersion: apps/v1 kind: Deployment metadata: labels: app: portal-server name: portal-server spec: replicas: 1 selector: matchLabels: app: portal-server template: metadata: labels: app: portal-server spec: serviceAccountName: portal-server containers: - name: portal-server image: registry-vpc.cn-beijing.aliyuncs.com/acs/sd-yunqi-server:v1.0.2 imagePullPolicy: IfNotPresent env: - name: MAX_CONCURRENT_REQUESTS value: "5" - name: POD_NAMESPACE value: "default" readinessProbe: failureThreshold: 3 periodSeconds: 1 successThreshold: 1 tcpSocket: port: 8080 timeoutSeconds: 1 --- 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: portal-server spec: externalTrafficPolicy: Local ports: - name: http-80 port: 80 protocol: TCP targetPort: 8080 - name: http-8888 port: 8888 protocol: TCP targetPort: 8888 selector: app: portal-server type: LoadBalancer --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pod-list-cluster-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["list"] - apiGroups: ["networking.k8s.io"] resources: ["ingresses"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: pod-list-cluster-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pod-list-cluster-role subjects: - kind: ServiceAccount name: portal-server namespace: default --- apiVersion: v1 kind: ServiceAccount metadata: name: portal-server namespace: default
返回如下结果,表示创建成功。
- 在左侧导航栏,选择网络 > 服务。
- 在服务页面,查看portal-server压测服务,获取访问IP为123.56.XX.XX。
- 在您的本机浏览器中输入http://123.56.XX.XX访问压测页面,然后在该页面单击Stable Diffusion,跳转至Stable Diffusion访问页面。
- Stable Diffusion访问页面如下所示。例如,在如下文本框中输入cat,然后单击Generate,将展示与输入有关的图片信息。
- 在压测访问页面,设置并发数为5,总请求数为20,然后单击开始压测,查看压测的结果。
返回结果如下,在压测期间,您可以看到创建了5个Pod,并且每个请求均会生成一个图片,图片生成后将展示到页面中。
5. 释放资源
必看!!必看!!必看!!
本实验为付费体验,需要消耗账号费用。体验后若不再需要使用,请及时释放资源,避免持续产生费用。
ACK Serverless Pro集群目前处于公测中,可免费试用。但是在使用ACK Serverless Pro集群过程中用到的其他阿里云云产品资源,您需要按照各云产品规定的计费规则,为您使用的资源付费,费用由各云产品收取。体验完成后,请参考以下场景处理集群:
- 如您需要继续使用集群,请确保账户金额不小于100.00元人民币。在使用ACK Serverless Pro版集群过程中用到的其他阿里云云产品资源,相关计费说明,请参见云产品资源计费。
- 如您不需要继续使用ACK Serverless Pro集群,请按照如下步骤释放资源,避免产生资损。
- 释放容器服务ACK Serverless Pro集群。
1.1 前往容器服务管理控制台,在集群列表页面,找到您已创建的ACK Serverless Pro集群,在右侧操作列下选择更多>删除。
1.2 在删除集群对话框中,选中同时删除集群下的ALB资源、同时删除集群下的PrivateZone资源、我已知晓以上信息并确认删除集群,然后单击确定。
说明:等待大约3~5分钟,ACK Serverless Pro集群即可删除成功。
- 释放微服务引擎MSE网关
2.1 前往MSE管理控制台。
2.2 在左侧导航栏,选择云原生网关>网关列表。
2.2 在网关列表页面,在页面顶部切换到网关所在地域华北2(北京),找到您的微服务引擎MSE网关资源,在右侧的操作列下单击 图标,然后单击释放实例。
说明:如果您无法通过实验室页面无法切换到地域华北2(北京),你可以使用本机浏览器访问https://mse.console.aliyun.com/#/microgw,然后切换地域并释放微服务引擎MSE网关实例。
2.3 在释放面板中,选中是否同时删除网关创建时代购的SLB实例,然后单击确定,微服务引擎MSE网关删除完成。
实验地址:https://developer.aliyun.com/adc/scenario/de33e7d3065949f3b81db292b2dca5ea