运行 StableSwarmUI 文生图推理服务
本文演示如何使用k8s方式来部署一个文生图应用,从而帮助熟悉相关步骤。
应用概述
本应用是基于StableSwarmUI (opens in a new tab)来进行部署的,为了方便部署,适当做了些改动。主要分几个部分来进行介绍:docker镜像制作、k8s部署和运用配置。
docker镜像制作
源代码修改
launchtools/docker.sh
#!/usr/bin/env bash
# added by zjg begin
mkdir -p ./src/bin/live_release
touch ./src/bin/must_rebuild
# added by zjg end
# Launch as normal, just ensure launch mode is off and host is global (to expose it out of the container)
bash ./launch-linux.sh --launch_mode none --host 0.0.0.0
launchtools/comfy-install-linux.sh
主要改动如下:
- 增加pip的国内镜像
#!/bin/bash
mkdir dlbackend
cd dlbackend
git clone https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
python=`which python3`
if [ "$python" == "" ]; then
>&2 echo ERROR: cannot find python3
>&2 echo Please follow the install instructions in the readme!
exit 1
fi
venv=`python3 -m venv 2>&1`
case $venv in
*usage*)
:
;;
*)
>&2 echo ERROR: python venv is not installed
>&2 echo Please follow the install instructions in the readme!
>&2 echo If on Ubuntu/Debian, you may need: sudo apt install python3-venv
exit 1
;;
esac
if [ -z "${SWARM_NO_VENV}" ]; then
python3 -s -m venv venv
. venv/bin/activate
fi
python3 -s -m pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
python3 -s -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
镜像制作
docker build --no-cache -t para-stableswarmui .
# 推送到镜像私服
docker tag para-stableswarmui cr.zw1.paratera.com/zhoujg/para-stableswarmui
docker push cr.zw1.paratera.com/zhoujg/para-stableswarmui
k8s部署
配置pvc
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: t2i-pvc
spec:
storageClassName: shared-nvme
accessModes:
- ReadWriteMany
resources:
requests:
storage: 60Gi
配置deployment
生成的图片可被file-browser看到
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: t2i
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: t2i
replicas: 1
template:
metadata:
labels:
app: t2i
spec:
containers:
- name: t2i
image: cr.zw1.paratera.com/zhoujg/para-stableswarmui
ports:
- containerPort: 7801
resources:
limits:
cpu: 8
memory: 24Gi
nvidia.com/gpu: 1
volumeMounts:
- name: t2i-model
subPath: model
mountPath: "/Models"
readOnly: false
- name: data
subPath: t2i
mountPath: "/Output"
volumes:
- name: t2i-model
persistentVolumeClaim:
claimName: t2i-pvc
- name: data
persistentVolumeClaim:
claimName: jupyter
tolerations:
- key: nvidia.com/gpu
operator: Exists
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia.com/gpu
operator: In
values:
- rtx-3090
配置service
service.yaml
apiVersion: v1
kind: Service
metadata:
name: t2i
spec:
selector:
app: t2i
type: ClusterIP
ports:
- protocol: TCP
name: http-work
port: 80
targetPort: 7801
配置ingress
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: t2i
spec:
ingressClassName: nginx
rules:
- host: t2i.poc1-be9e3e9b62c8.ing.zw1.paratera.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: t2i
port:
number: 80
配置kustomize
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# namespace: bds
resources:
- pvc.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
部署运用
kubectl apply -k ./
应用配置
等pod启动成功后,将sd_xl_turbo_1.0_fp16.safetensors模型放入pod里的/Models/Stable-Diffusion/stabilityai/sdxl-turbo目录下。然后通过浏览器打开应用地址,第一次启动时,要进行配置,选择自定义配置,如下图
然后各步选择默认值。模型不选下载,前面已上传。
点击 "Install Now" 按钮进行安装
如出现"ComfyUI install failed!"提示,多试几次,即再点"Install Now"按钮即可。配置成功后,即出现如下界面
如顶部出现黄色的提示条,显示backend没有启动成功,请到Server-->Backends的选项里,点击按钮"Restart All Backends", 如下图显示"running backend"即OK。