基于容器平台 ACK 快速搭建 Stable Diffusion

news/2024/10/22 9:31:21/

作者:子白

本文介绍如何在阿里云容器平台 ACK 上快速搭建一套可对外提供服务的 Stable Diffusion。

CPU 版本

前提条件

  • 已创建 Kubernetes 托管版集群。具体操作,请参见创建 Kubernetes 托管版集群[1]。

📍无需 GPU,节点需要 8c16g 以上

  • 已通过 kubectl 连接 kubernetes 集群。具体操作,请参见**通过 Kubectl 连接 Kubernetes 集群 [ 2] **。

使用控制台创建

  1. 登录容器服务管理控制台[3],在左侧导航栏选择集群。
  2. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
  3. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
  4. 无状态页面中,单击使用镜像创建
  5. 应用基本信息配置向导页面中,设置应用的基本信息。

在这里插入图片描述

在这里插入图片描述

zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.cpu

在这里插入图片描述

["python3", "launch.py"]
["--listen", "--skip-torch-cuda-test", "--no-half"]

等待 pod ready

📍镜像大小为 12.7GB,内网下载约 10min

在这里插入图片描述

  1. 在集群管理页左侧导航栏中,选择网络 > 服务

新建服务,选择负载均衡类型。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

等待约 1min 后,刷新页面可以看到 External IP 列有具体 IP

在这里插入图片描述

在浏览器中访问上一步获取到的 http://xxx.xxx.xxx.xxx:7860,即可看到如下页面。

Prompt:Black and white photo of a beautiful city

Sampling method:DPM++ SDE

在这里插入图片描述

使用 kubectl 创建

stable-diffusion.yaml

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: stable-diffusionname: stable-diffusionnamespace: default
spec:replicas: 1selector:matchLabels:app: stable-diffusiontemplate:metadata:labels:app: stable-diffusionspec:containers:- args:- --listen- --skip-torch-cuda-test- --no-halfcommand:- python3- launch.pyimage: zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.cpuimagePullPolicy: IfNotPresentname: stable-diffusionresources:requests:cpu: "2"memory: 2Gi
---
apiVersion: v1
kind: Service
metadata:annotations:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internetservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCUname: stable-diffusionnamespace: default
spec:externalTrafficPolicy: Localports:- port: 7860protocol: TCPtargetPort: 7860selector:app: stable-diffusiontype: LoadBalancer
kubectl apply -f stable-diffusion.yaml

等待 pod ready

📍镜像大小为 12.7GB,内网下载约 10min

# 查看pod状态,等待pod running
kubectl get po |grep stable-diffusion# 查看CLB IP
kubectl get svc stable-diffusionNAME               TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
stable-diffusion   LoadBalancer   192.168.x.x     xx.xx.xx.xxx   7860:32320/TCP   12m

在浏览器中访问上一步获取到的 http://xxx.xxx.xxx.xxx:7860,即可看到如下页面。

Prompt:Black and white photo of a beautiful city

Sampling method:DPM++ SDE

在这里插入图片描述

GPU 版本

前提条件

  • 已创建 Kubernetes 异构集群集群。具体操作,请参见创建托管 GPU 集群[4]。

📍需要 GPU 节点,磁盘剩余容量需大于 40G

  • 已通过 kubectl 连接kubernetes集群。具体操作,请参见通过 Kubectl 连接 Kubernetes 集群。

使用 kubectl 创建

stable-diffusion.yaml

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: stable-diffusionname: stable-diffusionnamespace: default
spec:replicas: 1selector:matchLabels:app: stable-diffusiontemplate:metadata:labels:app: stable-diffusionspec:containers:- args:- --listencommand:- python3- launch.pyimage: zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpuimagePullPolicy: IfNotPresentname: stable-diffusionresources:requests:cpu: "2"memory: 2Gilimits:nvidia.com/gpu: 1
---
apiVersion: v1
kind: Service
metadata:annotations:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internetservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCUname: stable-diffusionnamespace: default
spec:externalTrafficPolicy: Localports:- port: 7860protocol: TCPtargetPort: 7860selector:app: stable-diffusiontype: LoadBalancer
kubectl apply -f stable-diffusion.yaml

等待 pod ready

📍镜像大小为 15.1GB,内网下载约 15min

# 查看pod状态,等待pod running
kubectl get po |grep stable-diffusion# 查看CLB IP
kubectl get svc stable-diffusionNAME               TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
stable-diffusion   LoadBalancer   192.168.x.x     xx.xx.xx.xxx   7860:32320/TCP   12m

在浏览器中访问上一步获取到的 http://xxx.xxx.xxx.xxx:7860,即可看到如下页面。

Prompt:Black and white photo of a beautiful city

Sampling method:DPM++ SDE

在这里插入图片描述

GPU 版本的图片生成速度明显优于 CPU 版本。

注:镜像可拉取时间截止至 2023 年 5 月 17 日

镜像仓库地址:zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion

相关链接:

https://github.com/AUTOMATIC1111/stable-diffusion-webui

[1] 创建 Kubernetes 托管版集群

https://help.aliyun.com/document_detail/95108.htm#task-skz-qwk-qfb

[2] 通过 Kubectl 连接 Kubernetes 集群

https://help.aliyun.com/document_detail/86494.htm#task-ubf-lhg-vdb

[3] 容器服务管理控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2F

[4] 创建托管 GPU 集群

https://help.aliyun.com/document_detail/171074.html?spm=a2c4g.171073.0.0.7989f95acmbnoT

点击此处即可查看容器服务 ACK 产品详情


http://www.ppmy.cn/news/49141.html

相关文章

你最想知道的APP自动化测试项目实战详解

目录 一、引言 二、APP自动化测试的基本概念 三、APP自动化测试的流程 四、APP自动化测试的最佳实践 五、常见的APP自动化测试工具 六、APP自动化测试的挑战和解决方案 七、结论 一、引言 随着移动设备的普及和应用市场的繁荣,越来越多的企业开始开发和发布移…

版本升级|Co-Project V3.1智能项目管理平台——新增三大调整板块 提高自动估算精准度

大家好,CoCode开发云旗下Co-Project V3.1智能项目管理平台正式发布,需求分析工具全新升级,新增功能点调整类型、工作量调整因子和费用调整因子三大板块,全面提高自动估算项目精准度。 一、调整功能点数 要提高项目估算精准度&…

【PWN刷题__ret2text】——CTFHub之 简单的 ret2text

萌新第一阶段自然是了解做题的套路、流程,简单题要多做滴 目录 前言 一、checksec查看 二、IDA反汇编 三、exp编写 前言 经典的ret2text流程 一、checksec查看 64位程序,什么保护都没有,No canary found——可以栈溢出控制返回 二、IDA反汇…

C# 中的单元测试,如何使用单元测试进行程序测试和调试?

单元测试是一种软件测试方法,用于测试单个功能或方法是否按预期工作。在 C# 中,可以使用 .NET 框架中的单元测试工具来编写和运行单元测试。 下面是使用 Visual Studio 内置的单元测试框架来创建一个简单的单元测试的步骤: 在 Visual Studi…

Java 实现数据脱敏的详细讲解

数据脱敏是一种数据保护技术,它通过对敏感数据进行修改或替换,使得数据无法被识别或关联到个人身份,从而保护个人隐私。在Java中,可以通过各种技术来实现数据脱敏,本文将详细讲解Java实现数据脱敏的方法和技术。 一、…

Linux搭建GitLab私有仓库,并内网穿透实现公网访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具&#xf…

家用洗地机有什么优缺点?平价洗地机推荐

随着社会经济的发展和人们生活水平的提高,对于清洁卫生的要求也越来越高。洗地机作为一种集高效、节能、环保、卫生等多重优点于一身的清洁设备,可以有效提高清洁效率和清洁质量,并且可以减少对环境的污染。不仅如此,洗地机的还有…

OpenCV 安卓编程示例:1~6 全

原文:OpenCV Android Programming By Example 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…