基于 ACK Serverless 解锁你家萌宠的 AI 形象
快速进入产品控制台
快速进入产品控制台
快速进入产品控制台
-
登录容器服务管理控制台,在左侧导航栏选择集群。
-
在集群列表页面,单击页面右上角的创建集群。
-
在创建集群页面,单击ACK Serverless集群页签,根据如下说明完成相关配置,其他配置项保持默认值,然后单击下一步:组件配置。
配置项 |
说明 |
配置建议 |
集群名称 |
填写集群的名称。 |
knative-sd-demo |
集群规格 |
选择集群规格,支持Pro版和标准版 |
Pro版 |
地域 |
选择集群所在的地域。建议选择华北2(北京)地域。 |
华北2(北京) |
可用区 |
选择集群所在的可用区。 目前华北2(北京)支持的可用区如下: 华北 2 可用区 C 华北 2 可用区 D 华北 2 可用区 G 华北 2 可用区 E 注意:请您在以上ECI支持GPU的四个可用区进行选择。 |
华北2 可用区G |
API Server访问 |
ACK Serverless集群默认为API Server创建一个内网SLB实例,您可修改SLB实例规格。更多信息,请参见实例规格。 您可设置是否开放使用EIP暴露API Server。 |
使用EIP暴露API Server |
-
单击下一步:组件配置,选择Ingress为MSE Ingress,并选中开启 Knative。如您无需使用监控和日志服务等功能,可以取消选中使用阿里云可观测监控 Prometheus 版和使用日志服务,避免产生相关费用。其他配置项保持默认。
-
单击下一步:确认配置,确认配置信息,仔细阅读并选中相关协议,然后单击创建集群。预计等待3分钟。
额外说明:
-
若您项目状态均为「通过」,您可忽略下方内容,直接点击文档「下一页」。
-
若您之前从未开通过 ACK 产品,以及若您是第一次使用阿里云产品,可能会出现如下2项状态「未通过」提醒。您可根据如下步骤,依次操作。
5.1 【服务开通检查】状态「未通过」
若您界面显示【服务开通检查】状态「未通过」,则点击「容器服务 ACK Pro 版」,跳转到新页面。
在新页面勾选服务协议「我已阅读并同意容器服务ACK服务协议」,并点击「立即开通」。
出现如下页面,表示容器服务 ACK Pro 开通成功。
回到容器服务控制台页面,点击「重新检查」
【服务开通检查】状态显示为「通过」
5.2 【账户状态检查】状态「未通过」
点击用户中心 ,或者点击界面右上角头像,跳转到账号中心页面。
在账号中心页面查看「实名认证」情况,若您还未实名认证,点击进行认证即可。
点击页面上方的「费用」,跳转到用户中心首页
-
待集群状态为「运行中」,在集群列表页面,单击目标集群knative-sd-demo进入集群信息页面,然后在左侧导航栏,选择运维管理 > 组件管理。
-
在组件管理页面,单击存储页签,找到csi-provisioner (托管)组件,单击卡片右下方的安装。
-
单击确定完成CSI组件的安装。
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
一、Knative 部署 Stable Diffusion 服务
-
在集群列表页面,单击目标集群knative-sd-demo进入集群信息页面,然后在左侧导航栏,选择应用 > Knative。
-
在Knative页面,单击服务管理页签,然后单击使用模板创建。
-
在示例模板下拉列表中,选择 Resouce - Knative Service,删除原有的全部内容,并将以下 YAML 粘贴至模板,然后单击创建。
将会创建一个名为knative-sd-demo的服务。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-efficiency
parameters:
type: cloud_efficiency
encrypted: "false"
provisioner: diskplugin.csi.alibabacloud.com
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sd-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-efficiency
---
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: '1'
autoscaling.knative.dev/scale-down-delay: '1800s'
autoscaling.knative.dev/scale-to-zero-pod-retention-period: '1800s'
autoscaling.knative.dev/targetUtilizationPercentage: "100"
k8s.aliyun.com/eci-extra-ephemeral-storage: 80Gi
k8s.aliyun.com/eci-use-specs: 'ecs.gn5-c4g1.xlarge,ecs.gn5i-c8g1.2xlarge,ecs.gn5-c8g1.2xlarge'
spec:
containerConcurrency: 5
initContainers:
- name: init-sd
image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v2.0.0-gpu
command:
- sh
- -c
- "cp -n /stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors /data/"
volumeMounts:
- name: sd-data
mountPath: /data
containers:
- args:
- --listen
command:
- python3
- launch.py
image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v2.0.0-gpu
imagePullPolicy: IfNotPresent
ports:
- containerPort: 7860
name: http1
protocol: TCP
name: stable-diffusion
readinessProbe:
tcpSocket:
port: 7860
initialDelaySeconds: 5
periodSeconds: 1
failureThreshold: 3
volumeMounts:
- name: sd-data
mountPath: /stable-diffusion-webui/models/Stable-diffusion
volumes:
- name: sd-data
persistentVolumeClaim:
claimName: sd-pvc
-
在服务管理页签,刷新页面后,当knative-sd-demo的状态变为成功时,表明SD服务部署成功。
二、部署 portal server 并访问 Stable Diffusion 服务
部署观测服务portal-server,用于Stable Diffusion效果展示。
-
在Knative页面,单击服务管理页签,然后单击使用模板创建。
-
在示例模板下拉列表中,选择自定义,将以下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.3
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
一、如果您电脑是Windows系统
如下方法,根据您的偏好,二选一即可。
方法一:终端使用命令行方式安装和设置(此方法适合对于 Kubernetes 较为熟悉的同学)。
单击下载和安装kubectl,并安装至对应的本地客户端机器。
方法二:界面交互方式安装和设置(此方法适合对于 Kubernetes 不太熟悉的同学)。
-
下载kubectl最新补丁版 1.28至如下目录。
-
在HOME目录下,创建不带后缀名的config文件。
-
在任务栏搜索框输入cmd,进入home目录 (例如C:\Users\用户名),输入mkdir .kube创建.kube文件夹。
-
输入cd .kube进入.kube文件夹下。
-
输入type nul >config,在.kube文件夹下创建不带后缀名的config文件。
-
设置环境变量。右键单击我的电脑,选择属性,选择高级选项卡,单击环境变量。此处定义Path变量,只需要将kubectl.exe文件放在定义的这个路径下即可。
-
在cmd命令行中输入“kubectl version”,显示版本信息,表示环境变量设置成功。
-
复制如下公网访问凭据。
-
在集群列表页面,单击目标集群knative-sd-demo进入集群信息页面。
-
在集群信息页面,单击连接信息页签,选择公网访问,并复制公网访问凭证。
-
确保config文件是没有任何后缀的文件,然后将复制的访问凭据粘贴至如下已创建的config文件中。
-
在cmd命令行中输入命令“kubectl get ns“,有预期输出说明已通过kubectl成功连接集群。
二、如果您电脑是 MacOS 系统
如下方法,根据您的偏好,二选一即可。
方法一:单击在macos系统上安装和设置kubectl,根据文档操作即可(此方法适合对于 Kubernetes 较为熟悉的同学)。
方法二:详细操作指导(此方法适合对于 Kubernetes 不太熟悉的同学)。
使用本地电脑(如个人笔记本),打开终端应用,并按下方文档操作。
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
举例
打开终端应用,复制上方命令,然后粘贴到终端,并在键盘上敲回车键,执行命令
出现下方结果,代表正在下载安装 kubectl 工具
-
如果您的电脑是苹果处理器(如 M1 ),请复制下方命令,在终端应用中粘贴,并键盘敲回车执行
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
mkdir -p ~/.kube
一、查看 Pod 名称
打开本地终端,复制以下命令并黏贴,敲键盘上回车键执行命令,可查看 Pod 名称。
kubectl get pod #获取Pod名称。
举例:
下图显示两个 pod,包含 Knative-sd-demo 的就是目标 pod,复制该 pod 名称即可(下图红框部分)
二、 确认数据集路径
在本实验第一步,即「准备您家萌宠数据集」步骤中,已指导您查看您家萌宠的数据集路径,并保存路径。请您再次确认数据集路径。如果您忘记保存路径,可以基于下方步骤操作即可。
查看本地数据集路径方法如下。
-
您可直接键盘 command+C,然后在终端 command+V
举例:
-
鼠标点击目标文件,如 Bob2,键盘同时按下 command+C
2. 打开本地终端,键盘同时按下 command+V,即可看到文件夹路径,即 /Users/XXXX/Downloads/Bob2 (如下截图)
您可右键单击文件夹,选择属性,找到目标文件bob所在的位置。例如 D:\
此时,需要先进入对应的目标文件夹下,然后再执行cp命令。
三、上传数据集
在本地终端复制以下命令并黏贴。注意:${local_data_set} 需要替换成您家萌宠的数据集路径,${pod_name}需要替换为您 Stable diffusion 的 pod 名称。
#请将下方 ${local_data_set} 替换为您的萌宠数据集路径。
#请将下方 ${local_data_set} 替换为您 Stable diffusion 的 pod 名称。
kubectl cp ${local_data_set} default/${pod_name}:/data/
举例:
下图红框中,是执行的命令,注意其中「/Users/yaxinli/Downloads/Bob」是替换后的数据集路径,「knative-sd-demo-00001-deployment-b979f7b65-d7dd4」是替换后的 pod 名称。
四、确认数据集上传成功
在本地终端复制以下命令并黏贴。注意:${pod_name}需要替换为您 Stable diffusion 的 pod 名称。
# 上传完毕后,确认上传是否完成
kubectl exec -it ${pod_name} -c stable-diffusion -- ls /data/
举例:
下图红框中,是执行的命令,注意其中「knative-sd-demo-00001-deployment-b979f7b65-d7dd4」是替换后的 pod 名
一、创建您的萌宠模型
在 Stable Diffusion 模型页面,根据图示操作步骤创建模型。Name 这里建议写您宠物名字,需要为英文,若没有英文名可以输入拼音,例如 bob 或 taozi。
模型创建耗时约1分钟,创建成功后Output如下图所示。注意:如果发现超过一分钟还没有出结果,请刷新页面,再次创建。Stable Diffusion 是开源的模型,开源 WebUI 可能会出现不稳定的情况,刷新页面即可。
二、训练您家萌宠专属模型
一、使用您家萌宠专属模型生成图片
-
在 Stable Diffusion 模型页面左上方,点击刷新按钮,之后选择刚训练出的萌宠模型,如 bob/bob_380_lora_xxxx。
-
在界面上的「txt2img」对话框中输入Prompt(即关键词)。如: bob,cat,drink a cup of coffee,very detailed
注意:开源 Stable Diffusion 仅支持英文。以及 prompt 中的「bob,cat」这里请记得替换成您家宠物的名字和物种,如 beila,dog
下方列出一些 prompt 给您参考,您也可以充分发挥您的想象力来创作。
-
bob,cat,wearing a golden crown
-
bob,cat,diving
-
bob,cat,sitting on a table,drinking coffee
-
bob,cat,being an astronaut
-
bob,cat,sitting on beach,enjoying sunset
二、下载生成的图片,并提交作品
保存图片,并访问【萌宠 AI 变身秀】页面,提交作品
-
选择已创建的模型。如 bob
-
在Settings页面,根据如下截图配置模型参数。
-
在Concepts页面,配置数据集路径Dataset Directory和一些文件关键字信息。注意:/data/是固定的,您输入即可,但是「Bob」需要替换成您自己的数据集名称,并且请注意大小写。如果您忘记了数据集名称,可以回到「上传您家萌宠数据集」步骤中,根据文档再次查看。
第3、4、5步,输入您宠物名字(拼音),以及宠物种类,如宠物叫 Bob,是猫,所以输入「bob,cat」。如您宠物叫贝拉,是狗,那就输入「beila,dog」。
-
配置完成后单击Train,开始训练。训练时间的长短,取决于图片数据集大小。一般来说,格式不是太大的图片,训练大约30-40分钟。
-
当Output区域,出现Training finished.Total lifetime steps表明训练已经完成。
特别提醒:
开源 Stable Diffusion 的 WebUI 可能会出现不稳定的情况,训练时页面有可能会卡住,您可以执行以下命令,通过日志查看训练进程。
替换以下 ${pod_name} 为您当前Pod的名称,您可以通过执行命令 kubectl get pod 获取当前 Pod 的名称。
kubectl logs ${pod_name} -c stable-diffusion
等待Steps为100%时,表明训练完成。
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
称。
执行成功后,可以看到返回结果中,包含数据集名字,如下图红色箭头所指,包含 Bob,代表 Bob 数据集已上传成功。
P.S. 「taozi」是内置的数据集,包含了一只名叫桃子的小猫的20张照片。如果您不想要准备自己的宠物数据集,但是想要体验容器化弹性部署、模型镜像加速拉取以及 Stable Diffusion 模型训练的过程,您可以直接使用 taozi 数据集来训练。
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
vi ~/.kube/config
举例
-
打开终端应用,复制上方命令,然后粘贴到终端,并在键盘上敲回车键,执行命令
-
出现以下结果,即打开空白文件
-
在集群列表页面,单击目标集群knative-sd-demo进入集群信息页面。
-
在集群信息页面,单击连接信息页签,选择公网访问,并复制公网访问凭证。
-
举例
如下图
举例
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
subjects: - kind: ServiceAccount name: portal-server namespace: default --- apiVersion: v1 kind: ServiceAccount metadata: name: portal-server namespace: default
-
在左侧导航栏,选择网络 > 服务。
-
在服务页面,查看portal-server服务,在外部端点列下获取访问IP。
-
点击您界面 portal server IP 123.56.XXXX 直接跳转,或在浏览器中输入http://123.56.XX.XX,然后在该页面单击Stable Diffusion跳转至Stable Diffusion访问页面。
注意:这个界面的 pod status 最开始是黄色,代表 pod 启动中,等变绿代表 pod 已起来。等 Ready :true 时,代表应用已启动。一般等待 1-2 分钟即可正常打开 Stable Diffusion 界面。
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
点击充值即可。由于实验涉及到的产品为后付费,要求账户余额不低于100元。若您体验完实验后,不需要使用其他产品,您也可以随时进行提现。
回到容器服务控制台页面,点击「重新检查」
【服务状态检查】显示「通过」,然后勾选服务协议,并点击创建集群。
如果您遇到任何问题,欢迎加入答疑群联系我们,钉钉群号:13440056088
注意:当您执行下操作释放全部资源,您的萌宠专属模型,以及未下载的图片,均会丢失。
当您释放资源时,请切记仔细按照文档每一步完成全部资源释放。
一、释放容器服务ACK Serverless集群
-
在集群列表页面,找到您已创建的ACK Serverless集群,在右侧操作列,选择更多 > 删除。
-
在删除集群面板中,选中同时删除集群下的ALB资源、同时删除集群下的PrivateZone资源、我已知晓以上信息并确认删除集群,然后单击确定。
-
输入手机验证码,然后单击确定,ASK Pro集群删除完成。
二、释放MSE云原生网关
-
登录MSE管理控制台。
-
在左侧导航栏,选择云原生网关 > 网关列表。
-
在网关列表页面,切换至网关所在地域华北2(北京)
-
然后在页面右侧的操作列,单击
图标,然后单击释放实例。
-
在释放面板中,选中是否同时删除网关创建时代购的SLB实例,然后单击确定,MSE云原生网关删除完成。
三、释放NAT网关
-
登录NAT网关管理控制台。
-
在左侧导航栏,选择概览,选择 NAT 网关,点击本次实验创建的华北2(北京)实例
-
点击页面更多操作,点击删除
问题1:Pod无法创建,报错NoStock
问题现象
Warning NoStock 65s EciService [eci.containergroup]Create ECI failed because the specified instance is out of stock. It is recommended to use the multi-zone creation function to avoid the risk of stockout. More info: https://help.aliyun.com/document_detail/157290.html
解决方案:
您可以通过API查询可用库存情况。具体操作,请参见DescribeAvailableResource - 查询可用ECS实例规格。
修改ECI配置,将Pod创建到资源充足的可用区。具体操作,请参见多可用区创建Pod。
问题2:训练页面刷新后无法重新进入
出现此现象,仅前端页面无法显示,后端训练还在继续。
您可以通过执行以下命令,查看训练进度。
kubectl logs stable-diffusion-0|grep "Steps:"
等待训练进度为100%时,单击模型刷新按钮,即可查看训练完成的模型。
问题3:如需重新训练新的模型,但Pod已缩容,该如何上传数据集?
30分钟如果没有请求,Pod就会自动缩容到0。此时您可以重新登录SD服务页面,触发Pod重建,然后将数据集上传到重建后的Pod中进行训练。
问题4:如果SD页面出现如下错误怎么办?
如果您训练过程中,出现如下页面提示,可等待刷新页面后,再去查看训练进度如果是100%,说明训练已完成,可直接进行下一步生成图片的操作。
如果您遇到任何
-
在删除网关面板中,选中强制删除(删除 NAT 网关及其包含资源),然后单击确定,NAT网关删除完成。
请您再次按照文档每一步检查,确认完成全部资源释放。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2022-09-01 1
2014-09-01 2014年9月1日 总结
2014-09-01 MediaRecorder test