一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)化 Stable Diffusion 在 GKE 上的啟動(dòng)體驗(yàn)

谷歌開發(fā)者 ? 來源:未知 ? 2023-06-03 08:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下文章來源于谷歌云服務(wù),作者 Google Cloud

背景


現(xiàn)如今隨著 AIGC 這個(gè)話題越來越熱,越來越多優(yōu)秀的開源項(xiàng)目基于文生圖的 AI 模型如 MidJourney,Stable Diffusion 等應(yīng)運(yùn)而生。Stable Diffusion 是一個(gè)文字生成圖像的 Diffusion 模型,它能夠根據(jù)給定任何文本輸入生成逼真的圖像。我們?cè)?GitHub Repo 中提供了三種不同的解決方案 (可參考https://github.com/nonokangwei/Stable-Diffusion-on-GCP),可以快速地分別在 GCP Vertex AI,GKE,和基于 Agones 的平臺(tái)上部署 Stable Diffusion,以提供彈性的基礎(chǔ)設(shè)施保證 Stable Diffusion 提供穩(wěn)定的服務(wù)。本文將重點(diǎn)討論 Stable Diffusion 模型在 GKE 上的實(shí)踐。


提出問題


在實(shí)踐中,我們也遇到了一些問題,例如 Stable Diffusion 的容器鏡像較大,大約達(dá)到 10-20GB,導(dǎo)致容器在啟動(dòng)過程中拉取鏡像的速度變慢,從而影響了啟動(dòng)時(shí)間。在需要快速擴(kuò)容的場(chǎng)景下,啟動(dòng)新的容器副本需要超過 10 分鐘的時(shí)間,嚴(yán)重影響了用戶體驗(yàn)。



我們看到容器的啟動(dòng)過程,按時(shí)序排列:

觸發(fā) Cluster Autoscaler 擴(kuò)容 + Node 啟動(dòng)并調(diào)度 Pod: 225s

啟動(dòng) Pull Image:4s

拉取鏡像: 5m 23s

啟動(dòng) Pod:1s

能夠提供 sd-webui 的服務(wù) (大約): > 2m


在這段時(shí)序分析中,我們可以看到,在 Stable Diffusion WebUI 運(yùn)行在容器上啟動(dòng)慢主要面臨的問題是由于整個(gè) runtime 依賴較多,導(dǎo)致容器鏡像太大從而花費(fèi)了很長(zhǎng)時(shí)間拉取下載、也造成了 pod 啟動(dòng)初始化加載時(shí)間過長(zhǎng)。于是,我們考慮優(yōu)化啟動(dòng)時(shí)間從以下三個(gè)方面入手:

優(yōu)化 Dockerfile,選擇正確的 base image,精簡(jiǎn) runtime 的依賴安裝,減小鏡像大小。

借助基礎(chǔ)環(huán)境與 runtime 依賴分離方式,通過磁盤復(fù)制方式加速運(yùn)行環(huán)境的創(chuàng)建。

通過 GKE Image Streaming 優(yōu)化鏡像加載時(shí)間,利用 Cluster Autoscaler 提升彈性擴(kuò)縮容速度。


本文著重為大家介紹通過基礎(chǔ)環(huán)境與 runtime 依賴分離方式,借助磁盤復(fù)制的高性能來優(yōu)化 Stable Diffusion WebUI 容器啟動(dòng)時(shí)間的方案。


優(yōu)化 Dockerfile


首先,我們可以參考官方 Stable Diffusion WebUI 安裝說明,生成其 Dockerfile。在這里給大家一個(gè)參考: https://github.com/nonokangwei/Stable-Diffusion-on-GCP/blob/main/Stable-Diffusion-UI-Agones/sd-webui/Dockerfile


在初始構(gòu)建的 Stable Diffusion 的容器鏡像中,我們發(fā)現(xiàn)除了基礎(chǔ)鏡像 nvidia runtime 之外,還安裝了大量的庫(kù)和擴(kuò)展等。


▲調(diào)優(yōu)之前容器鏡像大小為 16.3GB


在 Dockerfile 優(yōu)化方面,我們對(duì) Dockerfile 進(jìn)行分析后,發(fā)現(xiàn) nvidia runtime 約占 2GB,而 PyTorch 庫(kù)是一個(gè)非常大的包,約占 5GB。另外 Stable Diffusion 及其擴(kuò)展等也占據(jù)了一定的空間。因此,我們按照最小可用環(huán)境為原則,去除環(huán)境中不必要的依賴。將 nvidia runtime 作為基礎(chǔ)鏡像,然后把 PyTorch、Stable Diffusion 的庫(kù)和擴(kuò)展等從原始鏡像中分離出來,單獨(dú)存放在文件系統(tǒng)中。


以下是初始的 Dockerfile 的片段。


# Base image

FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04


RUN set -ex &&

apt update &&

apt install -y wget git python3 python3-venv python3-pip libglib2.0-0 pkg-config libcairo2-dev &&

rm -rf /var/lib/apt/lists/*


# Pytorch

RUN python3 -m pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117



# Stable Diffusion

RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

RUN git clone https://github.com/Stability-AI/stablediffusion.git /stable-diffusion-webui/repositories/stable-diffusion-stability-ai

RUN git -C /stable-diffusion-webui/repositories/stable-diffusion-stability-ai checkout cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf



# Stable Diffusion extensions

RUN set -ex && cd stable-diffusion-webui

&& git clone https://gitcode.net/ranting8323/sd-webui-additional-networks.git extensions/sd-webui-additional-networks

&& git clone https://gitcode.net/ranting8323/sd-webui-cutoff extensions/sd-webui-cutoff

&& git clone https://ghproxy.com/https://github.com/toshiaki1729/stable-diffusion-webui-dataset-tag-editor.git extensions/stable-diffusion-webui-dataset-tag-editor


我們?cè)谝瞥?Pytorch 的庫(kù)和 Stable Diffusion 之后,我們只保留了基礎(chǔ)鏡像 nvidia runtime 在新的 Dockerfile 中。


FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04

RUN set -ex &&

apt update &&

apt install -y wget git python3 python3-venv python3-pip libglib2.0-0 &&

rm -rf /var/lib/apt/lists/*


▲基礎(chǔ)鏡像變成了 2GB


其余的運(yùn)行時(shí)類庫(kù)和 extension 等存放在磁盤鏡像中,磁盤鏡像的大小為 6.77GB。采用磁盤鏡像的好處是,它可以最多支持同時(shí)恢復(fù) 1,000 塊磁盤,完全能滿足大規(guī)模擴(kuò)縮容的使用場(chǎng)景。



掛載磁盤到 GKE 節(jié)點(diǎn)


然而,問題來了,如何將這個(gè)單獨(dú)的文件系統(tǒng)掛載到容器運(yùn)行時(shí)中呢?一種想法是使用 Persistent VolumeClaim (PVC) 進(jìn)行掛載,但由于 Stable Diffusion WebUI 在運(yùn)行時(shí)既需要讀取又需要寫入磁盤,而 GKE 的 PD CSI 驅(qū)動(dòng)程序目前不支持多寫入 ReadWriteMany,只有像 Filestore 這樣的 NFS 文件系統(tǒng)才能支持,但是通過網(wǎng)絡(luò)掛載的 Filestore 就延遲來說仍然無法達(dá)到快速啟動(dòng)的效果。同時(shí),由于 GKE 目前不支持在創(chuàng)建或更新 Nodepool 時(shí)掛載磁盤,所以我們考慮使用 DaemonSet 在 GKE 節(jié)點(diǎn)啟動(dòng)時(shí)掛載磁盤。具體做法如下:



那么如何將磁盤掛載到 GKE 的節(jié)點(diǎn)上呢?可以直接調(diào)用 Cloud SDK,創(chuàng)建基于磁盤鏡像的磁盤。


gcloud compute disks create sd-lib-disk-$NOW --type=pd-balanced --size=30GB --zone=$ZONE --image=$IMAGE_NAME


gcloud compute instances attach-disk ${MY_NODE_NAME} --disk=projects/$PROJECT_ID/zones/$ZONE/disks/sd-lib-disk-$NOW --zone=$ZONE


利用 GKE Image Streaming

和 Cluster Autoscaler


另外,正如我們前面提到的那樣,在優(yōu)化鏡像下載和加載時(shí)間方面,我們還啟用了 GKE Image Streaming 來加速鏡像的拉取速度。它的工作原理是使用網(wǎng)絡(luò)掛載將容器數(shù)據(jù)層掛載到 containerd 中,并在網(wǎng)絡(luò)、內(nèi)存和磁盤上使用多個(gè)緩存層對(duì)其進(jìn)行支持。一旦我們準(zhǔn)備好 Image Streaming 掛載,您的容器就會(huì)在幾秒鐘內(nèi)從 ImagePulling 狀態(tài)轉(zhuǎn)換為 Running (無論容器大小);這有效地將應(yīng)用程序啟動(dòng)與容器映像中所需數(shù)據(jù)的數(shù)據(jù)傳輸并行化。因此,您可以看到更快的容器啟動(dòng)時(shí)間和更快速的自動(dòng)縮放。


我們開啟了 Cluster Autoscaler 功能,讓有更多的請(qǐng)求到來時(shí),GKE 節(jié)點(diǎn)自動(dòng)進(jìn)行彈性擴(kuò)展。通過 Cluster Autoscaler 觸發(fā)并決定擴(kuò)展到多少個(gè)節(jié)點(diǎn)來接收新增的請(qǐng)求。當(dāng) CA 觸發(fā)了新的一輪擴(kuò)容,新的 GKE 節(jié)點(diǎn)注冊(cè)到集群以后,Daemonset 就會(huì)開始工作,幫助掛載存儲(chǔ)了 runtime 依賴的磁盤鏡像,而 Stable Diffusion Deployment 則會(huì)通過 HostPath 來訪問這個(gè)掛載在節(jié)點(diǎn)上的磁盤。


我們還使用了 Cluster Autoscaler 的 Optimization Utilization Profile 來縮短擴(kuò)縮容時(shí)間、節(jié)省成本并提高機(jī)器利用率。


最后的啟動(dòng)效果如下:



按時(shí)序排列

觸發(fā) Cluster Autoscaler 擴(kuò)容:38s

Node 啟動(dòng)并調(diào)度 Pod:89s

掛載 PVC:4s

啟動(dòng) Pull Image:10s

拉取鏡像:1s

啟動(dòng) Pod:1s

能夠提供 sd-webui 的服務(wù) (大約): 65s


總共經(jīng)歷了大約 3 分鐘的時(shí)間,就完成了啟動(dòng)一個(gè)新的 Stale Diffusion 容器實(shí)例,并在一個(gè)新的 GKE 節(jié)點(diǎn)上進(jìn)行正常服務(wù)的過程。相比于之前的 12 分鐘,可以看見,明顯的提升啟動(dòng)速度改善了用戶體驗(yàn)。


完整代碼: https://github.com/nonokangwei/Stable-Diffusion-on-GCP/tree/main/Stable-Diffusion-UI-Agones/optimizated-init


通過 VolumeSnapshot


除了掛載 Disk 到 GKE 節(jié)點(diǎn)上,還有一種嘗試,我們可以使用 StatefulSet 來掛載 PVC。


具體做法如下:先定義一個(gè) storageclass,注意我們使用DiskImageType: images來指定 PVC從 Disk Image 來恢復(fù),而不是 Snapshot。


Snapshot 每 10 分鐘只能恢復(fù)一次,一小時(shí)以內(nèi)恢復(fù) 6 次 Disk 的限制。

而 Image 可以支持每 30 秒恢復(fù)一次,最多 1,000 個(gè) Disk。

apiVersion: snapshot.storage.k8s.io/v1

kind: VolumeSnapshotClass

metadata:

name: image-class

driver: pd.csi.storage.gke.io

deletionPolicy: Delete

parameters:

DiskImageType: images

再定義一個(gè) VoluemSnapShotContent,它指定了 source 為一個(gè) Disk Image sd-image


apiVersion: snapshot.storage.k8s.io/v1

kind: VolumeSnapshotContent

metadata:

name: test-snapshotcontent-from-image

spec:

deletionPolicy: Retain

driver: pd.csi.storage.gke.io

volumeSnapshotClassName: image-class

source:

snapshotHandle:projects/flius-vpc-2/global/images/sd-image

volumeSnapshotRef:

name: test-snapshot

namespace: default


接下來,我們?cè)賱?chuàng)建一個(gè) VolumeSnapShot,指定它的 source 是剛剛定義的VoluemSnapShotContent。


apiVersion: snapshot.storage.k8s.io/v1

kind: VolumeSnapshot

metadata:

name: test-snapshot

namespace: default

spec:

source:

volumeSnapshotContentName:test-snapshotcontent-from-image


最后,我們創(chuàng)建一個(gè) StatefulSet 來掛載這個(gè) VolumeSnapShot。


apiVersion: apps/v1

kind: StatefulSet

metadata:

name: stable-diffusion-statefulset-image

labels:

app: stable-diffusion

spec:

podManagementPolicy: "Parallel"

replicas: 1

selector:

matchLabels:

app: stable-diffusion

template:

metadata:

labels:

app: stable-diffusion

spec:

containers:

- name: stable-diffusion-webui

image: us-central1-docker.pkg.dev/flius-vpc-2/stable-diffusion-repo/sd-webui-final:0.1

command: ["/bin/bash"]

args: ["-c", "source /runtime-lib/bin/activate; cp/user-watch.py /runtime-lib/stable-diffusion-webui/user-watch.py;cp/start.sh /runtime-lib/stable-diffusion-webui/start.sh; cd /runtime-lib/stable-diffusion-webui; python3 launch.py --listen --xformers --enable-insecure-extension-access--no-gradio-queue" ]

volumeMounts:

- mountPath: "/runtime-lib"

name: runtime-lib

resources:

limits:

nvidia.com/gpu: 1

ports:

- containerPort: 7860

volumeClaimTemplates:

- metadata:

name: runtime-lib

spec:

dataSource:

name: test-snapshot

kind: VolumeSnapshot

apiGroup: snapshot.storage.k8s.io

accessModes: [ "ReadWriteOnce" ]

storageClassName: "standard-rwo"

resources:

requests:

storage: 30Gi


我們嘗試擴(kuò)容更多的副本。


kubectl scale statefulset stable-diffusion-statefulset-image --replicas=15


可見 GKE 可以支持并行的啟動(dòng)這些 Pod,并且分別掛載相應(yīng)的磁盤。



PersistentVolumeClaims



完整代碼:

https://github.com/Leisureroad/volumesnapshot-from-diskimage


最終,我們可以看見如下的 Stable Diffusion 的 WebUI。






?點(diǎn)擊屏末||了解更多 Google Cloud 技術(shù)趨勢(shì)與最新解讀


原文標(biāo)題:優(yōu)化 Stable Diffusion 在 GKE 上的啟動(dòng)體驗(yàn)

文章出處:【微信公眾號(hào):谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6231

    瀏覽量

    108160

原文標(biāo)題:優(yōu)化 Stable Diffusion 在 GKE 上的啟動(dòng)體驗(yàn)

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    無法NPU推理OpenVINO?優(yōu)化的 TinyLlama 模型怎么解決?

    NPU 推斷 OpenVINO?優(yōu)化的 TinyLlama 模型。 遇到的錯(cuò)誤: get_shape was called on a descriptor::Tensor with dynamic shape
    發(fā)表于 07-11 06:58

    鴻蒙5開發(fā)寶藏案例分享---冷啟動(dòng)優(yōu)化案例分享

    程 ?非必要資源延遲加載 ?首屏數(shù)據(jù)本地緩存優(yōu)先 優(yōu)化后我們的應(yīng)用冷啟動(dòng)速度提升300%+!這些寶藏案例都在官方性能優(yōu)化文檔中,強(qiáng)烈建議大家仔細(xì)研究。 最后送大家一句話 :性能優(yōu)化不是
    發(fā)表于 06-12 17:22

    系統(tǒng)啟動(dòng)時(shí)間優(yōu)化方案--基于米爾MYD-YG2LX開發(fā)板

    設(shè)接口,工業(yè)、醫(yī)療、電力等行業(yè)都得到廣泛的應(yīng)用。 米爾基于瑞薩RZ/G2L開發(fā)板本文主要介紹基于MYD-YG2LX開發(fā)板進(jìn)行系統(tǒng)啟動(dòng)時(shí)間優(yōu)化的調(diào)試案例,一般啟動(dòng)方式有去掉常規(guī)uboo
    發(fā)表于 05-09 18:03

    ?Diffusion生成式動(dòng)作引擎技術(shù)解析

    Diffusion生成式動(dòng)作引擎 Diffusion生成式動(dòng)作引擎是一種基于擴(kuò)散模型(Diffusion Models)的生成式人工智能技術(shù),專注于生成連續(xù)、逼真的人類動(dòng)作或動(dòng)畫序列。這類引擎
    的頭像 發(fā)表于 03-17 15:14 ?1841次閱讀

    優(yōu)化模式下低啟動(dòng)低消耗的充電器ic U6018

    可能會(huì)對(duì)電路中的其他組件造成損害,而過小的啟動(dòng)電流則可能導(dǎo)致電路無法正常啟動(dòng)。來看看這顆優(yōu)化模式下低消耗的充電器icU6018!集成電路開始工作之前,充電器icU
    的頭像 發(fā)表于 03-13 16:15 ?349次閱讀
    <b class='flag-5'>優(yōu)化</b>模式下低<b class='flag-5'>啟動(dòng)</b>低消耗的充電器ic U6018

    使用OpenVINO GenAI和LoRA適配器進(jìn)行圖像生成

    借助生成式 AI 模型(如 Stable Diffusion 和 FLUX.1),用戶可以將平平無奇的文本提示詞轉(zhuǎn)換為令人驚艷的視覺效果。
    的頭像 發(fā)表于 03-12 13:49 ?867次閱讀
    使用OpenVINO GenAI和LoRA適配器進(jìn)行圖像生成

    使用OpenVINO?進(jìn)行優(yōu)化后,為什么DETR模型不同的硬件測(cè)試時(shí)顯示不同的結(jié)果?

    通過模型優(yōu)化優(yōu)化了 DETR 模型。 SPR 計(jì)算機(jī)上使用優(yōu)化模型(DETR 模型)運(yùn)行了benchmark_app,并節(jié)省了延遲和吞吐量。
    發(fā)表于 03-05 10:27

    安裝OpenVINO?工具包穩(wěn)定擴(kuò)散后報(bào)錯(cuò),怎么解決?

    :\\stable-openvino2\\stable-diffusion-webui-master\\venv\\lib\\site-packages\\diffusers\\models
    發(fā)表于 03-05 06:56

    EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化

    電子發(fā)燒友網(wǎng)站提供《EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 16:33 ?0次下載
    EE-359:ADSP-CM40x<b class='flag-5'>啟動(dòng)</b>時(shí)間<b class='flag-5'>優(yōu)化</b>和器件初始化

    如何開啟Stable Diffusion WebUI模型推理部署

    如何開啟Stable Diffusion WebUI模型推理部署
    的頭像 發(fā)表于 12-11 20:13 ?563次閱讀
    如何開啟<b class='flag-5'>Stable</b> <b class='flag-5'>Diffusion</b> WebUI模型推理部署

    主板優(yōu)化PCIe通道設(shè)置

    主板優(yōu)化PCIe通道設(shè)置是提升系統(tǒng)性能的重要步驟,以下是具體的優(yōu)化建議: 一、了解主板和PCIe規(guī)格 查閱主板手冊(cè) :首先,需要了解主板支持的PCIe版本(如PCIe 3.0、PC
    的頭像 發(fā)表于 11-06 09:30 ?1.1w次閱讀

    DRA7xx器件的Android啟動(dòng)優(yōu)化

    電子發(fā)燒友網(wǎng)站提供《DRA7xx器件的Android啟動(dòng)優(yōu)化.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 09:41 ?0次下載
    DRA7xx器件<b class='flag-5'>上</b>的Android<b class='flag-5'>啟動(dòng)</b><b class='flag-5'>優(yōu)化</b>

    使用TPS61178x優(yōu)化啟動(dòng)的環(huán)路補(bǔ)償

    電子發(fā)燒友網(wǎng)站提供《使用TPS61178x優(yōu)化啟動(dòng)的環(huán)路補(bǔ)償.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 09:58 ?0次下載
    使用TPS61178x<b class='flag-5'>優(yōu)化</b><b class='flag-5'>啟動(dòng)</b>的環(huán)路補(bǔ)償

    優(yōu)化 FPGA HLS 設(shè)計(jì)

    其他設(shè)計(jì)經(jīng)驗(yàn)的推薦策略列表。 單擊“Start Recipe”開始優(yōu)化。如果在云運(yùn)行,則應(yīng)同時(shí)運(yùn)行多個(gè)編譯以減少時(shí)間。 優(yōu)化過程和結(jié)果 第一輪(“熱
    發(fā)表于 08-16 19:56

    實(shí)操: 如何在AirBoxStable Diffusion 3

    StableDiffusion3Medium是一種多模態(tài)擴(kuò)散變換器(MMDiT)文本到圖像模型,圖像質(zhì)量、排版、復(fù)雜提示理解和資源效率方面具有顯著提升的性能。目前瑞莎團(tuán)隊(duì)
    的頭像 發(fā)表于 07-23 08:34 ?595次閱讀
    實(shí)操: 如何在AirBox<b class='flag-5'>上</b>跑<b class='flag-5'>Stable</b> <b class='flag-5'>Diffusion</b> 3