K8S
基础
示例
推理
运行 StableSwarmUI 文生图推理服务

运行 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。