★Stable Diffusion;stable;diffusion;SD;stablediffussion;sadtalker;PC集群;PC Farm;PC農(nóng)場;GPU集群;GAN;VAE;latent;AI繪圖;AI文生圖;文生圖;圖生圖;虛擬數(shù)字人;數(shù)字人;PNDM;DDIM;U-Net;prompt;CLIP;diffusers;pipeline;NVIDIA RTX GeForce 3070;NVIDIA RTX GeForce 3080;NVIDIA RTX GeForce 4070;NVIDIA RTX GeForce 4060;i9-13900;i7-13700;i5 13400;i3 12100;i7 12700 ;i9 12900
在當今的數(shù)字時代,人工智能正在逐步改變?nèi)藗兊纳詈凸ぷ鞣绞?。其?Stable Diffusion作為一種深度學習技術,受到廣泛關注。它能夠通過對圖像或視頻進行處理,生成逼真的數(shù)字人視頻,為許多領域帶來創(chuàng)新。本文將介紹Stable Diffusion的核心基礎知識、如何使用它制作AI數(shù)字人視頻、本地部署的要求以及藍海大腦PC集群解決方案的應用。
Stable Diffusion是一種擴散模型(diffusion model)的變體,叫做“潛在擴散模型”(latent diffusion model; LDM)。擴散模型是在2015年推出的,其目的是消除對訓練圖像的連續(xù)應用高斯噪聲,可以將其視為一系列去噪自編碼器。Stable Diffusion由3個部分組成:變分自編碼器(VAE)、U-Net和一個文本編碼器。添加和去除高斯噪聲的過程被應用于這個潛在表示,然后將最終的去噪輸出解碼到像素空間中。在前向擴散過程中,高斯噪聲被迭代地應用于壓縮的潛在表征。每個去噪步驟都由一個包含殘差神經(jīng)網(wǎng)絡(ResNet)中間的U-Net架構完成,通過從前向擴散往反方向去噪而獲得潛在表征。最后,VAE解碼器通過將表征轉(zhuǎn)換回像素空間來生成輸出圖像。
SadTalker模型是一個使用圖片與音頻文件自動合成人物說話動畫的開源模型。給模型一張圖片以及一段音頻文件,模型會根據(jù)音頻文件把傳遞的圖片進行人臉的相應動作,比如張嘴,眨眼,移動頭部等動作。它從音頻中生成 3DMM 的 3D 運動系數(shù)(頭部姿勢、表情),并隱式調(diào)制一種新穎的 3D 感知面部渲染,用于生成說話的頭部運動視頻。
在進行Stable Diffusion本地部署時,需要滿足一定的硬件和軟件要求。首先,需要具備高性能的GPU集群,以支持大規(guī)模的模型訓練和推理。同時,需要安裝相應的軟件環(huán)境,包括深度學習框架、Python編程語言和模型庫等。此外,還需要具備相應的網(wǎng)絡帶寬和穩(wěn)定性,以保證模型的下載和更新。
針對本地部署的硬件和軟件要求,藍海大腦高效、可靠和經(jīng)濟的PC集群解決方案采用高性能GPU節(jié)點和高速網(wǎng)絡互聯(lián),能夠滿足大規(guī)模模型訓練和推理的需求。同時,該方案提供多種深度學習框架和模型庫,方便用戶進行模型的訓練和推理。此外,藍海大腦PC集群解決方案還提供全面的安全防護措施,包括數(shù)據(jù)加密、訪問控制和安全審計等,以確保用戶數(shù)據(jù)的安全性和隱私性。
Stable Diffusion完整核心基礎知識
2022年AI圖像生成領域迎來重大突破!Stable Diffusion橫空出世,一舉擊敗傳統(tǒng)深度學習,成為開啟人工智能新紀元的強力引擎。它的出現(xiàn)既為工業(yè)界帶來革命性創(chuàng)新,也讓投資者看到巨大商機,AI再次變得"性感"起來。下面將以通俗易懂的語言,向大家全方位講解Stable Diffusion的原理、應用和訓練技巧。
一、Stable Diffusion核心基礎內(nèi)容
1、Stable Diffusion模型原理
生成式模型可謂是AI界的“制假大師”,能生成看似真實的新數(shù)據(jù)。其中,GAN和Stable Diffusion可以說是翹楚級的作品。這兩類模型通過不同的技巧,可以捕捉訓練數(shù)據(jù)的特征分布,然后生成類似風格的新樣本。比如在計算機視覺領域,可以輸出樣子逼真的新圖片;在自然語言處理領域,可以寫出語義連貫的新文字。
GAN通過對抗訓練實現(xiàn),讓生成器和判別器互相競爭,不斷逼近真實數(shù)據(jù)分布。而Stable Diffusion無需對抗,直接利用文本提示指導模型生成所需的輸出。可以說,GAN和Stable Diffusion如同變色龍,可根據(jù)需求變換不同的創(chuàng)作形態(tài)。為人類開拓一個廣闊的想象空間,任何靈感都可以通過生成式模型試驗實現(xiàn),將抽象概念轉(zhuǎn)換為具體作品。生成式模型助力人類創(chuàng)造力的釋放和拓展,正在引領一個前所未有的創(chuàng)作新時代。
生成式模型的主流架構
下面主要就GAN詳細描述。由于篇幅原因,VAE和Flow-based models這里就不過多介紹。GAN的訓練過程可比喻為一場精妙的舞臺表演。表演由兩大角色聯(lián)手完成——生成器與判別器。生成器扮演制作“假貨”的角色,生成盡可能逼真的假數(shù)據(jù)來欺騙判別器。判別器則扮演辨別真?zhèn)蔚慕巧?判斷生成器輸出的數(shù)據(jù)是真是假。
兩者之間展開一場激烈的智慧競賽。生成器不斷提升自己的造假技術,使生成的假數(shù)據(jù)更加真實。判別器也在競相增強自身的判斷能力,來識別假數(shù)據(jù)的破綻。雙方都在以極快的速度成長。要取得最佳的生成效果,生成器和判別器必須同步訓練。這也增加了GAN的訓練難度。在訓練初期,生成器制造的假數(shù)據(jù)非常容易被判別器識破。但隨著訓練輪數(shù)的增多,生成器的造假水平越來越高,判別器也必須不斷自我革新來跟上生成器的進步。
這里可以把生成器比喻為高明的畫家,不斷精進繪畫技巧來制作逼真的藝術品。判別器則像鑒賞家,需要提高自己的審美和識別能力,才能判斷畫作的真?zhèn)?。兩者互相促進,最終畫家可以畫出真假難辨的作品。GAN訓練過程中充滿智慧的對抗與不斷深化的博弈。表面上雙方合作煥然一新,實際都在暗地努力進步。最終,生成器取得決定性優(yōu)勢,其生成效果達到欺騙判別器的視真程度。
SD文生圖過程
Stable Diffusion (SD)模型在圖像生成任務上有著廣泛的應用。其中最典型和基礎的兩大應用分別是文生圖和圖生圖。
文生圖(Text-to-Image)是將文本描述轉(zhuǎn)換為圖像的過程。可以輸入一段文字到Stable Diffusion模型中,描述想要生成的圖像內(nèi)容。模型會解析文本語義,經(jīng)過迭代逐步生成出符合文本描述的圖片。例如,輸入“天堂,巨大的,海灘”等文字,模型會聯(lián)想到天堂與海灘的概念,并圖像化出一個美麗寬廣的沙灘場景。文本描述越細致,生成的圖像也會越符合預期。
SD圖生圖過程
圖生圖(Image-to-Image)在文生圖的基礎上,額外輸入一張圖像,根據(jù)文本描述對圖片進行修飾和豐富。例如,先輸入“天堂,巨大的,海灘”,生成一張美麗沙灘的圖片。然后繼續(xù)輸入“海盜船”,同時輸入先前生成的沙灘圖。模型將解析文本語義,在原圖片中添加一個海盜船,輸出一張融合文本描述的新圖像??梢钥闯?圖生圖保留原圖片的主體內(nèi)容,同時根據(jù)文本提示進行圖像的二次創(chuàng)作。
感受SD模型強大的生成能力,大家可能會想到生成式領域上一個霸主模型GAN,與GAN模型不同的是,SD模型是屬于擴散模型,是基于latent的擴散模型。那么擴散模型是什么呢?擴散模型是一種圖像生成方法,通過逐步添加細節(jié)來生成圖像。將圖像的生成過程分為多個步驟,每個步驟都會對圖像進行一定程度的修改和完善,這樣經(jīng)過20-50次“擴散”循環(huán)后,最終輸出的圖像就會變得更加精致。
下面是一個通過 SD 模型的推理過程, 將隨機高斯噪聲矩陣逐步去燥并生成一張小別墅圖片的直觀示例。
SD模型的Inference過程
那么latent又是什么呢?基于 latent 的擴散模型在低維隱空間中進行“擴散”過程,而不是在實際像素空間中,大大降低了內(nèi)存占用和計算復雜性。與常規(guī)擴散模型不同,latent 擴散模型的主要特點是在訓練和推理過程中都集中在 latent 空間中。
2、Stable Diffusion模型的核心組件
SD模型主要由自動編碼器(VAE),U-Net以及文本編碼器三個核心組件構成。
SD模型文生圖流程
1)自動編碼器(VAE)
在圖像生成任務中,VAE的編碼器可以將輸入圖片轉(zhuǎn)換為低維的特征表示,作為后續(xù)模型的輸入。這些低維特征保留原圖像的主要語義信息。而VAE的解碼器則可以將編碼器輸出的低維特征再次恢復為完整的圖像。解碼器實現(xiàn)了從壓縮特征到圖像空間的映射。不同的VAE結構設計,會使其在圖像中的注意力區(qū)域不同,從而影響生成圖片的細節(jié)與整體顏色風格。
VAE的主要工作
VAE能夠高效壓縮圖像到低維潛空間后仍實現(xiàn)良好重建,其關鍵在于自然圖像具有高度規(guī)律性。例如,人臉圖像中眼睛、鼻子、嘴巴遵循特定空間結構;貓身體有固定數(shù)量四肢以及特定生物學形態(tài)。這種先驗知識使得VAE可以只保留圖像最關鍵信息。即使在壓縮特征損失的情況下,只要生成圖像大小合適,重建后的語義內(nèi)容和結構依然能夠保持可識別性。
2)U-Net
在擴散模型生成流程中,需要逐步將隨機噪聲轉(zhuǎn)化為圖像隱特征。實現(xiàn)方式是:
- 模型預測當前噪聲的殘差,即需要調(diào)整的量。
- 利用調(diào)度算法(如PNDM、DDIM等)結合預測殘差,重新構建并優(yōu)化噪聲。
- 經(jīng)過多輪擴散優(yōu)化,最終得到可生成目標圖像的隱特征。
實現(xiàn)擴散模型的網(wǎng)絡結構通常采用U-Net架構。U-Net由多層ResNet模塊串聯(lián)構成,并在模塊之間添加交叉注意力機制。交叉注意力可用于接收額外的文本指令,指導圖像生成方向。
常規(guī)U-Net結構
3)文本編碼器
在擴散模型中,需要輸入文本prompt,以指導圖像生成方向。實現(xiàn)方式是:
- 使用文本編碼器(通常是CLIP等預訓練模型),對prompt進行編碼,得到表示其語義信息的詞向量。
- 將文本詞向量通過交叉注意力機制,輸入到擴散模型的U-Net中。
- 文本詞向量作為條件信息,引導U-Net的圖像生成過程,以輸出符合文本意圖的圖片。
默認的文本編碼器是CLIP模型,可以輸出跟圖像語義相關的稠密詞向量。
3、Stable Diffusion推理流程
要運行Stable Diffusion(SD),可以直接使用diffusers庫中的完整pipeline流程。
需要安裝相關依賴,使用以下命令進行安裝:
pip install diffusers transformers scipy ftfy accelerate
導入diffusers庫:
from diffusers import StableDiffusionPipeline
初始化SD模型并加載預訓練權重:
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5"
如果想使用GPU加速,可以使用以下命令將模型加載到GPU上:
pipe.to("cuda")
如果GPU內(nèi)存少于10GB,可以加載float16精度的SD模型:
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", revision="fp16", torch_dtype=torch.float16)
使用pipeline來運行SD模型。例如,給定一個prompt和一張圖片,可以使用以下代碼生成一張新的圖片:
prompt = "a photograph of an astronaut riding a horse"image = pipe(prompt).images[0]
由于沒有固定seed,每次運行代碼都會得到一個不同的圖片。預訓練文件夾中的模型主要由以下幾個部分組成:text_encoder和tokenizer,scheduler,unet,vae。其中text_encoder,scheduler,unet,vae分別代表SD模型的核心結構。此外,還有一個名為Tokenizer的文件夾表示標記器。標記器將Prompt中的每個詞轉(zhuǎn)換為一個稱為標記(token)的數(shù)字,符號化(Tokenization)是計算機理解單詞的方式。然后通過text_encoder將每個標記轉(zhuǎn)換為一個768維的向量稱為嵌入(embedding),用于U-Net的condition。
Tokenizer的作用
有時候在運行完pipeline后,可能會遇到生成的圖片全黑情況。這是因為生成的圖片可能觸發(fā)了NSFW(不適宜內(nèi)容)機制,導致生成一些違規(guī)的圖片。為解決這個問題,建議使用自定義的seed來重新生成圖片。
可以使用以下代碼來設置seed,并控制生成圖片的輸出:
#import torch
# 設置seedtorch.manual_seed(1024)
# 創(chuàng)建生成器generator = torch.Generator("cuda").manual_seed(1024)
# 使用設置的seed和生成器來生成圖片image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]
將pipeline的完整結構梳理好之后,再對一些核心參數(shù)進行講解:
1)num_inference_steps表示對圖片進行噪聲優(yōu)化的迭代次數(shù)。一般來說,該值可以選擇在20到50之間,數(shù)值越大生成的圖片質(zhì)量越高,但同時也需要更多的計算時間。
2)guidance_scale代表文本提示對圖像生成過程的影響程度。具體來說,它控制著有條件生成所使用噪聲的比例。通常該值在7到8.5之間取值較好,如果取值過大,生成的圖片質(zhì)量可能會很高,但多樣性會下降。
其中代表CFG,當越大時,condition起的作用越大,即生成的圖像更和輸入文本一致,當被設置為時,圖像生成是無條件的,文本提示會被忽略。
3)輸出尺寸
除了將預訓練的SD模型整體加載,還可以選擇加載其不同的組件。通過以下方式實現(xiàn):
從transformers庫中加載CLIPTextModel和CLIPTokenizer:
from transformers import CLIPTextModel, CLIPTokenizer
從diffusers庫中加載AutoencoderKL、UNet2DConditionModel和PNDMScheduler:
from diffusers import AutoencoderKL, UNet2DConditionModel, PNDMScheduler
還需要加載LMSDiscreteScheduler:
from diffusers import LMSDiscreteScheduler
可以單獨加載VAE模型:
vae = AutoencoderKL.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="vae")
加載CLIP模型和tokenizer:
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-vit-large-patch14")
單獨加載U-Net模型:
unet = UNet2DConditionModel.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="unet")
單獨加載調(diào)度算法:
scheduler = LMSDiscreteScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", num_train=steps)
二、Stable Diffusion經(jīng)典應用場景
1、文本生成圖片
輸入:prompt
輸入:圖像
Load Checkpoint模塊負責初始化SD模型的主要結構(包括VAE和U-Net)。CLIP Text Encode代表文本編碼器,接收prompt和negative prompt作為輸入,以控制圖像的生成。Empty Latent Image表示初始化的高斯噪聲。KSampler負責調(diào)度算法以及與SD相關的生成參數(shù)。最后,VAE Decode利用VAE的解碼器將低維度的隱空間特征轉(zhuǎn)換為代表圖像的像素空間。
2、圖片生成圖片
輸入:圖像+ prompt
輸出:圖像
Load Checkpoint模塊負責對SD模型的主要結構(包括VAE和U-Net)進行初始化。CLIP Text Encode代表文本編碼器,接收prompt和negative prompt作為輸入,以控制圖像的生成。Load Image表示輸入的圖像。KSampler負責調(diào)度算法以及與SD相關的生成參數(shù)。
在圖片生成圖片的預處理階段,首先使用VAE編碼器將輸入圖像轉(zhuǎn)換為低維度的隱空間特征。然后添加噪聲到隱空間特征中,去噪強度決定加入噪聲的數(shù)量。如果去噪強度為0,則不添加任何噪聲;如果去噪強度為1,則會添加最大數(shù)量的噪聲,使得潛像成為一個完全隨機的張量。在這種情況下,圖片轉(zhuǎn)圖像的過程就完全相當于文本轉(zhuǎn)圖像,因為初始潛像完全是隨機的噪聲。
去噪強度(Denoising strength)控制噪音的加入量
3、圖片inpainting
輸入:圖像+ mask + prompt
輸出:圖像
Load Checkpoint模塊負責初始化SD模型的主要結構(包括VAE和U-Net)。CLIP Text Encode代表文本編碼器,接收prompt和negative prompt作為輸入,以控制圖像的生成。Load Image表示輸入的圖像和mask。KSampler負責調(diào)度算法以及與SD相關的生成參數(shù)。
VAE Encode使用VAE的編碼器將輸入的圖像和mask轉(zhuǎn)換成為低維度的隱空間特征。然后,VAE Decode利用VAE的解碼器將低維度的隱空間特征轉(zhuǎn)換為代表圖像的像素空間。
下面是如何進行圖像inpainting的直觀過程:
4、使用controlnet輔助生成圖片
輸入:素描圖+ prompt
輸出:圖像
Load Checkpoint模塊負責對SD模型的主要結構(包括VAE和U-Net)進行初始化。CLIP Text Encode代表文本編碼器,接收prompt和negative prompt作為輸入,以控制圖像的生成。Load Image表示輸入的ControlNet需要的預處理圖。Empty Latent Image表示初始化的高斯噪聲。Load ControlNet Model負責對ControlNet進行初始化。KSampler負責調(diào)度算法以及與SD相關的生成參數(shù)。最后,VAE Decode利用VAE的解碼器將低維度的隱空間特征轉(zhuǎn)換為代表圖像的像素空間。
使用ControlNet輔助生成圖片
5、超分辨率重建
輸入:prompt/(圖像+ prompt)
輸入:圖像
Load Checkpoint模塊負責對SD模型的主要結構(包括VAE和U-Net)進行初始化。CLIP Text Encode代表文本編碼器,接收prompt和negative prompt作為輸入,以控制圖像的生成。Empty Latent Image表示初始化的高斯噪聲。Load Upscale Model負責對超分辨率重建模型進行初始化。KSampler負責調(diào)度算法以及與SD相關的生成參數(shù)。VAE Decode利用VAE的解碼器將低維度的隱空間特征轉(zhuǎn)換為代表圖像的像素空間。最后,Upscale Image將生成的圖像進行超分辨率重建,提高其分辨率。
三、Stable Diffusion訓練過程
Stable Diffusion的訓練過程可以被視為在最高維度上添加噪聲和去除噪聲的過程,并在對噪聲的“對抗與攻防”中學習生成圖像的能力。具體地說,在訓練過程中首先對干凈的樣本添加噪聲進行處理,采用多次逐步增加噪聲的方式,直到干凈的樣本變成純噪聲。
SD訓練時的加噪過程
接下來,讓SD模型學習去噪過程,并最終抽象出一個高維函數(shù),這個函數(shù)能夠在純噪聲中“優(yōu)化”噪聲,從而得到一個干凈的樣本。具體來說,將去噪過程具象化為使用U-Net來預測噪聲,并結合調(diào)度算法逐步去噪的過程。
SD訓練時的去噪過程
在添加噪聲的時候,Stable Diffusion采用的是逐步增加的策略,每一步只增加一小部分噪聲,實現(xiàn)“小步快跑”的穩(wěn)定加噪過程。這類似于移動互聯(lián)網(wǎng)產(chǎn)品設計中的迭代與快速推出原則。
另一方面,每次增加的噪聲量級也可以不同,例如可以設定5個不同量級的噪聲,每次隨機選擇一種量級增加到樣本圖片中。這進一步增加了噪聲的多樣性。在去噪過程中,同樣采用逐步減少噪聲的策略,每一步預測并去除一部分噪聲,實現(xiàn)穩(wěn)定的去噪。
多量級噪聲
為了使網(wǎng)絡能夠知道當前處于k步的哪個階段,需要使用位置編碼。通過將步數(shù)作為輸入傳遞給網(wǎng)絡,位置編碼能夠讓網(wǎng)絡知道當前所處的階段。這種操作與Transformer中的操作類似。
使用Positional embeddings對訓練迭代的步數(shù)進行編碼
四、Stable Diffusion性能優(yōu)化
1、使用TF32精度
導入PyTorch并啟用TF32支持,實現(xiàn)性能和精度的平衡。TF32精度具有以下作用和優(yōu)勢:
1)加速訓練速度:使用TF32精度可以在保持相對較高的模型精度的同時,加快模型訓練的速度。
2)減少內(nèi)存需求:TF32精度相對于傳統(tǒng)的浮點數(shù)計算(如FP32)需要更少的內(nèi)存存儲。這對于訓練大規(guī)模的深度學習模型尤為重要,可以減少內(nèi)存的占用。
3)可接受的模型精度損失:使用TF32精度會導致一定程度的模型精度損失,因為低精度計算可能無法精確表示一些小的數(shù)值變化。然而,對于大多數(shù)深度學習應用,TF32精度仍然可以提供足夠的模型精度。
2、使用FP16半精度
導入PyTorch庫,并從diffusers庫中導入DiffusionPipeline。使用"runwayml/stable-diffusion-v1-5"預訓練模型創(chuàng)建一個DiffusionPipeline對象pipe,同時設置torch_dtype為torch.float16,以使用FP16半精度進行訓練。
使用FP16半精度訓練的優(yōu)勢在于可以減少一半的內(nèi)存占用,進一步將批次大小翻倍,同時將訓練時間減半。一些GPU,如V100和2080Ti等,針對16位計算進行優(yōu)化,可以實現(xiàn)3-8倍的自動加速。
3、對注意力模塊進行切片
當所使用的模型中的注意力模塊包含多個注意力頭時,可以采用切片注意力操作,以便每個注意力頭依次計算注意力矩陣。這種做法可以顯著降低內(nèi)存占用,但隨之而來的是推理時間大約增加10%。
首先,導入PyTorch庫,并從diffusers庫中導入DiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"預訓練模型創(chuàng)建一個DiffusionPipeline對象pipe,同時設置torch_dtype為torch.float16,以使用FP16半精度進行訓練。接下來,將pipe轉(zhuǎn)移到CUDA設備上,以便在GPU上運行。
為啟用切片注意力操作,需要調(diào)用pipe對象的enable_attention_slicing()方法。通過采用切片注意力操作,可以減少內(nèi)存占用,但需要付出一些推理時間的代價,大約增加10%。
4、對VAE進行切片
與注意力模塊切片類似,也可以對VAE進行切片,讓VAE每次只處理Batch(32)中的一張圖片,從而大幅減少內(nèi)存占用。
首先,導入PyTorch庫,并從diffusers庫中導入StableDiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"預訓練模型創(chuàng)建一個StableDiffusionPipeline對象pipe,同時設置torch_dtype為torch.float16,以使用FP16半精度進行訓練。接下來,將pipe轉(zhuǎn)移到CUDA設備上,以便在GPU上運行。為啟用VAE切片操作,調(diào)用pipe對象的enable_vae_slicing()方法。然后,使用prompt作為輸入,將一批32張圖片通過pipe進行生成,并將生成的圖片存儲在images變量中。
5、大圖像切塊
當需要生成4K或更高分辨率的圖像,但內(nèi)存資源有限時,可以采用圖像切塊的技術。通過對圖像進行切塊,讓VAE的編碼器和解碼器逐一處理每個切塊后的圖像,最后將拼接在一起生成最終的大圖像。
首先,導入PyTorch庫,并從diffusers庫中導入StableDiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"預訓練模型創(chuàng)建一個StableDiffusionPipeline對象pipe,同時設置torch_dtype為torch.float16,以使用FP16半精度進行訓練。接下來,將pipe轉(zhuǎn)移到CUDA設備上,以便在GPU上運行。為啟用圖像切塊操作,調(diào)用pipe對象的enable_vae_tiling()方法。然后,使用prompt作為輸入,并指定圖像的寬度為3840像素,高度為2224像素,以及生成步驟的數(shù)量為20。通過調(diào)用pipe對象的生成方法,可以得到生成的圖像。最后,從生成的圖像中獲取第一張圖像并將其存儲在image變量中。
6、CPU <-> GPU切換
可將整個SD模型或SD模型的部分模塊的權重加載到CPU中,并在推理時再將所需的權重加載到GPU。以下是如何使用PyTorch和Stable Diffusion Pipeline實現(xiàn)的代碼:
import torch
from diffusers import StableDiffusionPipeline
# 將整個SD模型加載到CPU
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
# 開啟子模塊的CPU offload功能,即可以在CPU上執(zhí)行某些子模塊的計算
pipe.enable_sequential_cpu_offload()
# 開啟整個SD模型的CPU offload功能,即可以在CPU上執(zhí)行整個SD模型的計算
pipe.enable_model_cpu_offload()
這段代碼將整個SD模型或SD模型的部分模塊的權重加載到CPU中,并在推理時再將所需的權重加載到GPU,以實現(xiàn)更好的性能和靈活性。
7、變換Memory Format
在計算機視覺領域,有兩種常見的內(nèi)存格式,分別是channels first(NCHW)和channels last(NHWC)。將channels first轉(zhuǎn)換為channels last可能會提高推理速度,但需要依賴于特定的AI框架和硬件。
在channels last內(nèi)存格式中,張量的維度順序為(batch_size,height,width,channels)。其中,batch_size表示批處理大小,height和width表示圖像或特征圖的高度和寬度,channels表示通道數(shù)。
相比之下,channels first是另一種內(nèi)存布局,其中通道維度被放置在張量的第二個維度上。在channels first內(nèi)存格式中,張量的維度順序為(batch_size,channels,height,width)。
選擇channels last或channels first內(nèi)存格式通常取決于硬件和軟件平臺以及所使用的深度學習框架。不同的平臺和框架可能對內(nèi)存格式有不同的偏好和支持程度。
在一些情況下,channels last內(nèi)存格式具有以下優(yōu)勢:
1)內(nèi)存訪問效率:在一些硬件架構中,如CPU和GPU,channels last內(nèi)存格式能夠更好地利用內(nèi)存的連續(xù)性,從而提高數(shù)據(jù)訪問的效率。
2)硬件加速器支持:一些硬件加速器(如NVIDIA的Tensor Cores)對于channels last內(nèi)存格式具有特定的優(yōu)化支持,可以提高計算性能。
3)跨平臺兼容性:某些深度學習框架和工具更傾向于支持channels last內(nèi)存格式,使得在不同的平臺和框架之間遷移模型更加容易。
需要注意的是,選擇內(nèi)存格式需要根據(jù)具體的硬件、軟件和深度學習框架來進行評估。某些特定的操作、模型結構或框架要求可能會對內(nèi)存格式有特定的要求或限制。因此,建議在特定環(huán)境和需求下進行測試和選擇,以獲得最佳的性能和兼容性。
8、使用xFormers
使用xFormers插件能夠優(yōu)化注意力模塊的計算,提升約20%的運算速度。
導入PyTorch庫
創(chuàng)建一個名為"pipe"的StableDiffusionPipeline對象,使用預訓練模型"runwayml/stable-diffusion-v1-5",數(shù)據(jù)類型為torch.float16,并將模型遷移到"cuda"設備上。
通過調(diào)用.enable_xformers_memory_efficient_attention()方法,使用xFormers插件來優(yōu)化注意力模塊的計算,從而 提升約20%的運算速度。
如何使用Stable Diffusion制作AI數(shù)字人視頻
下面介紹如何安裝SadTalker插件。
首先,需要確保已經(jīng)成功安裝Stable Diffusion WebUI。然后,從Github上獲取SadTalker的開源代碼,其地址為:
https://github.com/OpenTalker/SadTalker.git。
一、SadTalker安裝方法
1、安裝方法一
適合訪問Github或外網(wǎng)較流暢的用戶,因為需要自動下載大量文件。在SD WebUI的擴展插件頁面中進行安裝,如下圖所示:
這個插件需要下載許多文件,有些文件體積較大,需耐心等待。如果不確定是否出現(xiàn)了問題,可以查看控制臺輸出的內(nèi)容,查找是否有錯誤。安裝完成后,不要忘記重啟Stable Diffusion,需要完全重啟,而不僅僅是重啟WebUI。
2、安裝方法二
對于訪問外網(wǎng)不太方便的用戶,可以提前下載所需文件,例如使用迅雷等下載工具。只要將下載的文件上傳到指定的目錄即可。
1)主程序
需要放到以下位置:stable-diffusion-webui/extensions/SadTalker
https://github.com/OpenTalker/SadTalker/archive/refs/heads/main.zip
2)視頻模型
可以從以下鏈接下載:stable-diffusion-webui/extensions/SadTalker/checkpoints
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00109-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00229-model.pth.tar
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_256.safetensors
https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_512.safetensors
3)修臉模型
需要放到以下位置:stable-diffusion-webui/extensions/SadTalker/gfpgan/weights 和 stable-diffusion-webui/models/GFPGAN
您可以從以下鏈接下載:
https://github.com/xinntao/facexlib/releases/download/v0.1.0/alignment_WFLW_4HG.pth
https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth
https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth
為了方便使用這種方式部署,我們已經(jīng)將相關文件打包好,大家無需單獨下載。只需聯(lián)系我們,即可獲得下載地址。
4)安裝
首先,將文件下載到本地或云環(huán)境中。以AutoDL為例,將文件保存到/root目錄中。
然后解壓文件到 stable diffusion webui的擴展目錄,并拷貝幾個文件到SD模型目錄:
tar -xvf /root/SadTalker.tar -C /root/stable-diffusion-webui/extensions cp -r /root/stable-diffusion-webui/extensions/SadTalker/gfpgan/weights/* /root/stable-diffusion-webui/models/GFPGAN/
看到下邊的結果,就基本上差不多了。
SD models 目錄下有這幾個文件:
部署完畢,不要忘了重啟。
二、使用方法
在SD WebUI的Tab菜單中找到SadTalker,按照下邊的順序進行設置。
1、上傳人物照片。
2、上傳語音文件。
3、選擇視頻人物的姿勢。實際上,這指的是在人物說話時頭部的動作??梢酝ㄟ^嘗試不同的數(shù)字來選擇合適的動作。
4、分辨率。512的視頻分辨率比256的大。
5、圖片處理方法:corp是從圖片截取頭部做視頻,resize適合大頭照或者證件照,full就是全身照做視頻。
6、Still Model:這個選項可以讓頭部動作不要過大,以避免頭部與身體偏離的情況。然而,這樣可能會導致頭部動作不太明顯。
7、GFPGAN:這個選項可以修整臉部,有助于改善說話時嘴部和眼部可能出現(xiàn)的變形現(xiàn)象,從而使臉部看起來更加自然。
最后,點擊“生成”。根據(jù)硬件的運行速度以及設置,生成過程可能需要幾分鐘的時間。請耐心等待。
三、常見問題
1、啟動的時候報錯:SadTalker will not support download...
這個提示意味模型無法成功下載??梢詧?zhí)行以下命令來觸發(fā)下載(請注意將cd后的路徑替換為SadTalker安裝路徑):
cd stable-diffusion-webui/extensions/SadTalker
chmod 755 scripts/download_models.sh
scripts/download_models.sh
2、合成視頻時報錯:No module named 'xxx'
可以使用pip install命令來安裝xxx。但請注意,如果使用Python虛擬環(huán)境,需要先激活。例如,這里需要先執(zhí)行source xxx命令。然后,可以運行以下命令來安裝
librosa:
source /root/stable-diffusion-webui/venv/bin/activate
pip install librosa
這些命令將激活虛擬環(huán)境并安裝librosa庫。
3、合成視頻時報錯:在合成視頻時,可能會遇到一個錯誤:No such file or directory: '/tmp/gradio/xxx'。這意味著系統(tǒng)無法找到該文件或目錄。為了解決這個問題,可以創(chuàng)建一個目錄。使用以下命令可以輕松地創(chuàng)建該目錄:mkdir -p /tmp/gradio
4、如果遇到提示找不到ffmpeg的情況,嘗試先下載并安裝ffmpeg。通過以下鏈接下載安裝程序:http://ffmpeg.org/download.html
Stable Diffusion本地部署要求
隨著Stable Diffusion在AI藝術生成領域的不斷發(fā)展和普及,越來越多的用戶希望能夠在自己的本地機器上部署SD模型,以獲得更好的性能表現(xiàn)和使用體驗。然而,部署一個大規(guī)模的生成模型如SD需要強大的計算資源和硬件配置。那么,究竟需要怎樣的計算機配置才能流暢地運行SD模型呢?
一、GPU
GPU最好使用NVIDIA的RTX系列,如RTX 3070,RTX 4070和RTX4060。老一代的RTX 2000系列也可考慮,但性能較新卡略低,且顯存略小。不推薦使用專業(yè)級顯卡如NVIDIA A6000,其擁有大量視頻內(nèi)存,非常適合預算充足的情況。不要使用筆記本等移動GPU,因為其顯存和功耗都有限,難以進行高效的模型訓練。如果條件允許,可以使用多張GPU進行多卡訓練,以提高訓練速度。
二、CPU
除了GPU之外,具有高核心數(shù)的CPU也是必不可少的。Stable Diffusion的訓練和推理過程需要進行大量的矩陣計算,對CPU的并行計算能力有很高的要求。一般來說,至少需要8核心或更多的CPU,如i9-13900;i7-13700;i5 13400;i3 12100;i7 12700 ;i9 12900 等。
三、RAM內(nèi)存
大量的RAM內(nèi)存同樣不可或缺。本地部署SD時,系統(tǒng)內(nèi)存最好在32GB以上。這可以顯著加速數(shù)據(jù)交換與傳輸速度。與GPU類似,更多的GPU卡也會需要更多的系統(tǒng)內(nèi)存配合。
四、存儲方面
系統(tǒng)盤無特殊要求,需要1TB甚至更大的磁盤空間來存儲大規(guī)模的模型文件、數(shù)據(jù)集和生成結果。使用RAID 0可以獲得更高的讀取速度。
五、網(wǎng)絡方面
網(wǎng)絡對于Stable Diffusion的部署和使用都非常關鍵,需要準備以下幾方面:
1、帶寬需求
初始部署需要下載模型文件,通常數(shù)十GB甚至上百GB,需要具備穩(wěn)定的大帶寬來支持。訓練過程中也需要大量的數(shù)據(jù)流量,務必確認網(wǎng)絡帶寬足夠,例如千兆寬帶。如果使用云訓練平臺,還需要考慮上傳訓練結果的流量。
2、網(wǎng)絡速度
部署時的下載速度直接影響部署進度,需要盡可能高的網(wǎng)絡速度。訓練時網(wǎng)絡速度影響同步效率。內(nèi)網(wǎng)訓練可以做到更低延遲。公網(wǎng)環(huán)境下,光纖寬帶的低延遲有利于分布式訓練。
3、網(wǎng)絡穩(wěn)定性
訓練過程需要持續(xù)不間斷的連接,斷網(wǎng)會造成失敗。部署和使用期間應盡量避免網(wǎng)絡抖動現(xiàn)象的發(fā)生。
4、代理和緩存
可以使用本地代理做緩存,加速模型和數(shù)據(jù)的下載。代理同時還可以提供一定的數(shù)據(jù)安全性和隱私保護。
5、數(shù)據(jù)安全
如果涉及敏感數(shù)據(jù),要注意加密傳輸和訪問控制。遵守相關的數(shù)據(jù)隱私規(guī)范,謹慎上傳或共享數(shù)據(jù)。
六、軟件方面
操作系統(tǒng)需要Windows 10/11或者較新版本的Linux發(fā)行版,如Ubuntu 20.04+。Python版本需要在3.7以上,主要的深度學習框架如PyTorch、TensorFlow也需要相應安裝,并確認版本與硬件兼容??赡苓€需要安裝許多Python庫來支持不同的數(shù)據(jù)加載和圖像處理功能。使用Docker等虛擬化技術可以簡化軟件環(huán)境配置。
藍海大腦集成SD的PC集群解決方案
AIGC和ChatGPT4技術的爆燃和狂飆,讓文字生成、音頻生成、圖像生成、視頻生成、策略生成、GAMEAI、虛擬人等生成領域得到了極大的提升。不僅可以提高創(chuàng)作質(zhì)量,還能降低成本,增加效率。同時,對GPU和算力的需求也越來越高,因此GPU服務器廠商開始涌向該賽道,為這一領域提供更好的支持。在許多領域,如科學計算、金融分析、天氣預報、深度學習、高性能計算、大模型構建等領域,需要大量的計算資源來支持。為了滿足這些需求,藍海大腦PC集群解決方案應運而生。
PC集群是一種由多臺計算機組成的系統(tǒng),這些計算機通過網(wǎng)絡連接在一起,共同完成計算任務。PC集群解決方案是指在PC集群上運行的軟件和硬件系統(tǒng),用于管理和優(yōu)化計算資源,提高計算效率和可靠性。
藍海大腦PC集群解決方案提供高密度部署的服務器和PC節(jié)點,采用4U機架式設計,每個機架可插拔4個PC節(jié)點。融合了PC的高主頻和高性價比以及服務器的穩(wěn)定性的設計,實現(xiàn)了遠程集中化部署和管理運維。同時,采用模塊化可插拔設計,使維護和升級變得更加容易。
同時,集成Stable Diffusion AI模型,可以輕松地安裝和使用,無需進行任何額外的配置或設置。與傳統(tǒng)的人工創(chuàng)作方式相比,Stable Diffusion Al模型可以更快地生成高品質(zhì)的創(chuàng)作內(nèi)容。通過集成這個模型,可以使創(chuàng)作者利用人工智能技術來優(yōu)化創(chuàng)作流程。另外,藍海大腦PC集群解決方案還具有開箱即用的特點,不僅易于安裝和使用,而且能夠快速適應各種創(chuàng)作工作流程。這意味著用戶可以在短時間內(nèi)開始創(chuàng)作,并且在整個創(chuàng)作過程中得到更好的體驗。
一、主要技術指標
1、支持遠程開關機和硬重啟PC節(jié)點
2、集成的供電和管理背板,每個節(jié)點750W峰值供電功率
3、機箱管理單元支持節(jié)點遠程上下電
4、每個PC節(jié)點支持熱插拔,單個節(jié)點故障不影響其他節(jié)點工作
5、獨立的管理網(wǎng)口和串口
6、每個節(jié)點配置2個可插拔8038高功率服務器風扇,提供智能溫控
二、客戶收益
Stable Diffusion技術對游戲產(chǎn)業(yè)帶來了極大的影響和改變。它提升了游戲圖像的質(zhì)量和真實感、增強了游戲體驗和沉浸感、優(yōu)化了游戲制作流程、擴展了游戲應用領域,并推動了游戲產(chǎn)業(yè)的發(fā)展和創(chuàng)新。這些都表明,Stable Diffusion技術在游戲產(chǎn)業(yè)中的應用前景十分廣闊,有助于進一步推動游戲行業(yè)的發(fā)展,提高用戶體驗和娛樂價值。
1、提升游戲圖像質(zhì)量和真實感
Stable Diffusion可以在保證渲染速度的前提下,提高游戲圖像的細節(jié)和真實感。傳統(tǒng)的光線追蹤方法需要檢查和模擬每條光線,這樣會消耗大量計算資源,并放緩渲染速度。而Stable Diffusion則利用深度學習技術對光線的擴散過程進行建模,使得處理數(shù)百萬條光線所需的計算時間更短,同時還能夠生成更為精準的光線路徑。這意味著,Stable Diffusion可以讓計算機產(chǎn)生更加逼真的景觀、人物、物品等元素,在視覺效果上得到質(zhì)的飛躍。
2、增強游戲體驗和沉浸感
游戲是一個交互式體驗,它的目標是盡可能地讓玩家沉浸到虛構的世界中。Stable Diffusion可以使游戲環(huán)境變得更加真實,并增添一些更具有交互性和觀賞性的場景。例如,利用Stable Diffusion技術,游戲可以在水面上添加波紋、落葉,或者使搖曳的草叢更逼真。這些改善能夠讓玩家更好地感受游戲中所處的環(huán)境,增強沉浸感。
3、優(yōu)化游戲制作流程
Stable Diffusion的應用可以提高游戲開發(fā)的效率和質(zhì)量,減少手動制作和修改的工作量。渲染過程的快速執(zhí)行還可以加速開發(fā)周期,甚至使一些在過去被看做是計算機圖形學難題的事情變得可能。例如,在模擬復雜的自然現(xiàn)象或在大范圍內(nèi)生成游戲元素時,使用Stable Diffusion可有效降低游戲開發(fā)的成本和時間,讓開發(fā)者有更多的精力關注其他方面的設計和創(chuàng)意。
4、擴展游戲的應用領域
Stable Diffusion的應用使得游戲在更多的領域得到應用。例如,在心理治療、教育、文化傳播等領域中,人工智能游戲可以根據(jù)用戶的情緒和行為變化來調(diào)整游戲內(nèi)容和策略,為用戶提供更符合需求和娛樂性的游戲體驗。此外,利用Stable Diffusion技術,游戲可以生成不同類型的場景,包括虛擬現(xiàn)實和增強現(xiàn)實等體驗,開發(fā)出更豐富更多變的游戲內(nèi)容。
5、推動游戲產(chǎn)業(yè)的發(fā)展和創(chuàng)新
Stable Diffusion作為先進的計算機圖形學技術之一,進一步推動了游戲產(chǎn)業(yè)的發(fā)展和創(chuàng)新。利用人工智能技術渲染的游戲?qū)a(chǎn)生更高品質(zhì)、更廣泛的游戲類別,從而吸引更多領域的玩家參與,并且會推動相關行業(yè)的發(fā)展,如文化傳媒行業(yè)、數(shù)字娛樂業(yè)等。同時,穩(wěn)定性更好、性能更高的Stable Diffusion技術還具有在未來制造更復雜的虛擬世界的潛力,例如更多樣化、更逼真、更具交互性的虛擬現(xiàn)實環(huán)境和游戲。
三、PC集群解決方案的優(yōu)勢
1、高性能
PC集群解決方案可將多臺計算機的計算能力整合起來,形成一個高性能的計算系統(tǒng)??芍С衷诙虝r間內(nèi)完成大量的計算任務,提高計算效率。
2、可擴展性
可以根據(jù)需要進行擴展,增加計算節(jié)點,提高計算能力。這種擴展可以是硬件的,也可以是軟件的,非常靈活。
3、可靠性
PC集群可以通過冗余設計和備份策略來提高系統(tǒng)的可靠性。當某個節(jié)點出現(xiàn)故障時,其他節(jié)點可以接管其任務,保證計算任務的順利進行。
4、低成本
相比于傳統(tǒng)的超級計算機,PC集群的成本更低。這是因為PC集群采用的是普通的PC硬件,而不是專門的高性能計算硬件。
四、PC集群解決方案的應用領域有哪些?
PC集群是指將多臺個人電腦連接在一起,通過網(wǎng)絡協(xié)同工作,實現(xiàn)高性能計算的一種方式。它的應用領域非常廣泛,以下是一些常見的應用領域:
1、科學計算
PC集群可以用于各種科學計算,如天文學、生物學、物理學、化學等領域的計算模擬和數(shù)據(jù)分析。
2、工程計算
PC集群可以用于工程領域的計算,如飛機設計、汽車設計、建筑結構分析等。
3、金融計算
PC集群可以用于金融領域的計算,如股票交易、風險評估、投資組合優(yōu)化等。
4、大數(shù)據(jù)處理
PC集群可以用于大數(shù)據(jù)處理,如數(shù)據(jù)挖掘、機器學習、人工智能等領域的數(shù)據(jù)處理和分析。
5、圖像處理
PC集群可以用于圖像處理,如視頻編碼、圖像識別、虛擬現(xiàn)實等領域的圖像處理和渲染。
五、常用配置推薦
1、處理器,CPU:
i9-13900 24C/32T/2.00GHz/32MB/65W/Up to DDR5 5600 MT/s / Up to DDR4 3200 MT/s
i7-13700 16C/24T/2.10GHz/30MB/65W/Up to DDR5 5600 MT/s / Up to DDR4 3200 MT/s
i5 13400 10C/16T/1.80GHz/20MB/65W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
i3 13100 4C/8T/3.40GHz/12MB/60W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
G6900 2C/2T/3.40GHz/4MB/46W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
G7400 2C/4T/3.70GHz/6MB/46W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
i3 12100 4C/8T/3.30GHz/12MB/60W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
i5 12400 6C/12T/2.50GHz/18MB/65W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
i7 12700 12C/20T/2.10GHz/25MB/65W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
i9 12900 16C/24T/2.40GHz/30MB/65W/Up to DDR5 4800 MT/s /Up to DDR4 3200 MT/s
2、顯卡GPU:
NVIDIA RTX GeForce 3070 8GB
NVIDIA RTX GeForce 3080 10GB
NVIDIA RTX GeForce 4070 12GB
NVIDIA RTX GeForce 4060Ti 8GB or 16GB
3、內(nèi)存:
32GB×2
4、系統(tǒng)盤:
M.2 500GB
5、數(shù)據(jù)盤:
500GB 7200K
審核編輯 黃宇
-
AI
+關注
關注
87文章
30728瀏覽量
268892 -
人工智能
+關注
關注
1791文章
47183瀏覽量
238264
發(fā)布評論請先 登錄
相關推薦
評論