基於容器平臺 ACK 快速搭建 Stable Diffusion

本文介紹如何在阿里雲容器平臺 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-diffusion
  name: stable-diffusion
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stable-diffusion
  template:
    metadata:
      labels:
        app: stable-diffusion
    spec:
      containers:
      - args:
        - --listen
        - --skip-torch-cuda-test
        - --no-half
        command:
        - python3
        - launch.py
        image: zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.cpu
        imagePullPolicy: IfNotPresent
        name: stable-diffusion
        resources:
          requests:
            cpu: "2"
            memory: 2Gi
---
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: stable-diffusion
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 7860
    protocol: TCP
    targetPort: 7860
  selector:
    app: stable-diffusion
  type: 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-diffusion

NAME               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-diffusion
  name: stable-diffusion
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stable-diffusion
  template:
    metadata:
      labels:
        app: stable-diffusion
    spec:
      containers:
      - args:
        - --listen
        command:
        - python3
        - launch.py
        image: zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu
        imagePullPolicy: IfNotPresent
        name: stable-diffusion
        resources:
          requests:
            cpu: "2"
            memory: 2Gi
          limits:
            nvidia.com/gpu: 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: stable-diffusion
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 7860
    protocol: TCP
    targetPort: 7860
  selector:
    app: stable-diffusion
  type: 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-diffusion

NAME               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 日
鏡像倉庫地址:http://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

作者:子白

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章