Stable Diffusion的完整指南:核心基础知识、制作AI数字人视频和本地部署要求

★Stable Diffusion;stable;diffusion;SD;stablediffussion;sadtalker;PC集群;PC Farm;PC农场;GPU集群;GAN;VAE;latent;AI绘图;AI文生图;文生图;图生图;虚拟数字人;数字人;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 


在当今的数字时代,人工智能正在逐步改变人们的生活和工作方式。其中,Stable Diffusion作为一种深度学习技术,受到广泛关注。它能够通过对图像或视频进行处理,生成逼真的数字人视频,为许多领域带来创新。本文将介绍Stable Diffusion的核心基础知识、如何使用它制作AI数字人视频、本地部署的要求以及蓝海大脑PC集群解决方案的应用。


Stable Diffusion是一种扩散模型(diffusion model)的变体,叫做“潜在扩散模型”(latent diffusion model; LDM)。扩散模型是在2015年推出的,其目的是消除对训练图像的连续应用高斯噪声,可以将其视为一系列去噪自编码器。Stable Diffusion由3个部分组成:变分自编码器(VAE)、U-Net和一个文本编码器。添加和去除高斯噪声的过程被应用于这个潜在表示,然后将最终的去噪输出解码到像素空间中。在前向扩散过程中,高斯噪声被迭代地应用于压缩的潜在表征。每个去噪步骤都由一个包含残差神经网络(ResNet)中间的U-Net架构完成,通过从前向扩散往反方向去噪而获得潜在表征。最后,VAE解码器通过将表征转换回像素空间来生成输出图像。


SadTalker模型是一个使用图片与音频文件自动合成人物说话动画的开源模型。给模型一张图片以及一段音频文件,模型会根据音频文件把传递的图片进行人脸的相应动作,比如张嘴,眨眼,移动头部等动作。它从音频中生成 3DMM 的 3D 运动系数(头部姿势、表情),并隐式调制一种新颖的 3D 感知面部渲染,用于生成说话的头部运动视频。


在进行Stable Diffusion本地部署时,需要满足一定的硬件和软件要求。首先,需要具备高性能的GPU集群,以支持大规模的模型训练和推理。同时,需要安装相应的软件环境,包括深度学习框架、Python编程语言和模型库等。此外,还需要具备相应的网络带宽和稳定性,以保证模型的下载和更新。


针对本地部署的硬件和软件要求,蓝海大脑高效、可靠和经济的PC集群解决方案采用高性能GPU节点和高速网络互联,能够满足大规模模型训练和推理的需求。同时,该方案提供多种深度学习框架和模型库,方便用户进行模型的训练和推理。此外,蓝海大脑PC集群解决方案还提供全面的安全防护措施,包括数据加密、访问控制和安全审计等,以确保用户数据的安全性和隐私性。


DM_20231019144959_001.JPEG


Stable Diffusion完整核心基础知识


2022年AI图像生成领域迎来重大突破!Stable Diffusion横空出世,一举击败传统深度学习,成为开启人工智能新纪元的强力引擎。它的出现既为工业界带来革命性创新,也让投资者看到巨大商机,AI再次变得"性感"起来。下面将以通俗易懂的语言,向大家全方位讲解Stable Diffusion的原理、应用和训练技巧。


一、Stable Diffusion核心基础内容


1、Stable Diffusion模型原理


生成式模型可谓是AI界的“制假大师”,能生成看似真实的新数据。其中,GAN和Stable Diffusion可以说是翘楚级的作品。这两类模型通过不同的技巧,可以捕捉训练数据的特征分布,然后生成类似风格的新样本。比如在计算机视觉领域,可以输出样子逼真的新图片;在自然语言处理领域,可以写出语义连贯的新文字。


GAN通过对抗训练实现,让生成器和判别器互相竞争,不断逼近真实数据分布。而Stable Diffusion无需对抗,直接利用文本提示指导模型生成所需的输出。可以说,GAN和Stable Diffusion如同变色龙,可根据需求变换不同的创作形态。为人类开拓一个广阔的想象空间,任何灵感都可以通过生成式模型试验实现,将抽象概念转换为具体作品。生成式模型助力人类创造力的释放和拓展,正在引领一个前所未有的创作新时代。


DM_20231019144959_002.PNG

生成式模型的主流架构


下面主要就GAN详细描述。由于篇幅原因,VAE和Flow-based models这里就不过多介绍。GAN的训练过程可比喻为一场精妙的舞台表演。表演由两大角色联手完成——生成器与判别器。生成器扮演制作“假货”的角色,生成尽可能逼真的假数据来欺骗判别器。判别器则扮演辨别真伪的角色,判断生成器输出的数据是真是假。


两者之间展开一场激烈的智慧竞赛。生成器不断提升自己的造假技术,使生成的假数据更加真实。判别器也在竞相增强自身的判断能力,来识别假数据的破绽。双方都在以极快的速度成长。要取得最佳的生成效果,生成器和判别器必须同步训练。这也增加了GAN的训练难度。在训练初期,生成器制造的假数据非常容易被判别器识破。但随着训练轮数的增多,生成器的造假水平越来越高,判别器也必须不断自我革新来跟上生成器的进步。


这里可以把生成器比喻为高明的画家,不断精进绘画技巧来制作逼真的艺术品。判别器则像鉴赏家,需要提高自己的审美和识别能力,才能判断画作的真伪。两者互相促进,最终画家可以画出真假难辨的作品。GAN训练过程中充满智慧的对抗与不断深化的博弈。表面上双方合作焕然一新,实际都在暗地努力进步。最终,生成器取得决定性优势,其生成效果达到欺骗判别器的视真程度。


DM_20231019144959_003.PNG

SD文生图过程


Stable Diffusion (SD)模型在图像生成任务上有着广泛的应用。其中最典型和基础的两大应用分别是文生图和图生图。


文生图(Text-to-Image)是将文本描述转换为图像的过程。可以输入一段文字到Stable Diffusion模型中,描述想要生成的图像内容。模型会解析文本语义,经过迭代逐步生成出符合文本描述的图片。例如,输入“天堂,巨大的,海滩”等文字,模型会联想到天堂与海滩的概念,并图像化出一个美丽宽广的沙滩场景。文本描述越细致,生成的图像也会越符合预期。


DM_20231019144959_004.PNG

SD图生图过程


图生图(Image-to-Image)在文生图的基础上,额外输入一张图像,根据文本描述对图片进行修饰和丰富。例如,先输入“天堂,巨大的,海滩”,生成一张美丽沙滩的图片。然后继续输入“海盗船”,同时输入先前生成的沙滩图。模型将解析文本语义,在原图片中添加一个海盗船,输出一张融合文本描述的新图像。可以看出,图生图保留原图片的主体内容,同时根据文本提示进行图像的二次创作。


DM_20231019144959_005.PNG


感受SD模型强大的生成能力,大家可能会想到生成式领域上一个霸主模型GAN,与GAN模型不同的是,SD模型是属于扩散模型,是基于latent的扩散模型。那么扩散模型是什么呢?扩散模型是一种图像生成方法,通过逐步添加细节来生成图像。将图像的生成过程分为多个步骤,每个步骤都会对图像进行一定程度的修改和完善,这样经过20-50次“扩散”循环后,最终输出的图像就会变得更加精致。


下面是一个通过 SD 模型的推理过程, 将随机高斯噪声矩阵逐步去燥并生成一张小别墅图片的直观示例。


DM_20231019144959_006.PNG

SD模型的Inference过程


那么latent又是什么呢?基于 latent 的扩散模型在低维隐空间中进行“扩散”过程,而不是在实际像素空间中,大大降低了内存占用和计算复杂性。与常规扩散模型不同,latent 扩散模型的主要特点是在训练和推理过程中都集中在 latent 空间中。


2、Stable Diffusion模型的核心组件


SD模型主要由自动编码器(VAE),U-Net以及文本编码器三个核心组件构成。


DM_20231019144959_007.PNG

SD模型文生图流程


1)自动编码器(VAE)


在图像生成任务中,VAE的编码器可以将输入图片转换为低维的特征表示,作为后续模型的输入。这些低维特征保留原图像的主要语义信息。而VAE的解码器则可以将编码器输出的低维特征再次恢复为完整的图像。解码器实现了从压缩特征到图像空间的映射。不同的VAE结构设计,会使其在图像中的注意力区域不同,从而影响生成图片的细节与整体颜色风格。


DM_20231019144959_008.PNG

VAE的主要工作


VAE能够高效压缩图像到低维潜空间后仍实现良好重建,其关键在于自然图像具有高度规律性。例如,人脸图像中眼睛、鼻子、嘴巴遵循特定空间结构;猫身体有固定数量四肢以及特定生物学形态。这种先验知识使得VAE可以只保留图像最关键信息。即使在压缩特征损失的情况下,只要生成图像大小合适,重建后的语义内容和结构依然能够保持可识别性。


2)U-Net


在扩散模型生成流程中,需要逐步将随机噪声转化为图像隐特征。实现方式是:


- 模型预测当前噪声的残差,即需要调整的量。

- 利用调度算法(如PNDM、DDIM等)结合预测残差,重新构建并优化噪声。

- 经过多轮扩散优化,最终得到可生成目标图像的隐特征。


实现扩散模型的网络结构通常采用U-Net架构。U-Net由多层ResNet模块串联构成,并在模块之间添加交叉注意力机制。交叉注意力可用于接收额外的文本指令,指导图像生成方向。


DM_20231019144959_009.PNG

常规U-Net结构


DM_20231019144959_010.PNG

ResNet模块与CrossAttention模块的结合


3)文本编码器


在扩散模型中,需要输入文本prompt,以指导图像生成方向。实现方式是:


- 使用文本编码器(通常是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内存少于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中的每个词转换为一个称为标记(token)的数字,符号化(Tokenization)是计算机理解单词的方式。然后通过text_encoder将每个标记转换为一个768维的向量称为嵌入(embedding),用于U-Net的condition。


DM_20231019144959_011.PNG

Tokenizer的作用


有时候在运行完pipeline后,可能会遇到生成的图片全黑情况。这是因为生成的图片可能触发了NSFW(不适宜内容)机制,导致生成一些违规的图片。为解决这个问题,建议使用自定义的seed来重新生成图片。


可以使用以下代码来设置seed,并控制生成图片的输出:

#import torch

# 设置seedtorch.manual_seed(1024)

# 创建生成器generator = torch.Generator("cuda").manual_seed(1024)

# 使用设置的seed和生成器来生成图片image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]

将pipeline的完整结构梳理好之后,再对一些核心参数进行讲解:


1)num_inference_steps表示对图片进行噪声优化的迭代次数。一般来说,该值可以选择在20到50之间,数值越大生成的图片质量越高,但同时也需要更多的计算时间。


2)guidance_scale代表文本提示对图像生成过程的影响程度。具体来说,它控制着有条件生成所使用噪声的比例。通常该值在7到8.5之间取值较好,如果取值过大,生成的图片质量可能会很高,但多样性会下降。


DM_20231019144959_012.PNG


其中代表CFG,当越大时,condition起的作用越大,即生成的图像更和输入文本一致,当被设置为时,图像生成是无条件的,文本提示会被忽略。


3)输出尺寸


除了将预训练的SD模型整体加载,还可以选择加载其不同的组件。通过以下方式实现:

从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")

单独加载调度算法:

scheduler = LMSDiscreteScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", num_train=steps)


二、Stable Diffusion经典应用场景


1、文本生成图片


输入:prompt

输入:图像


DM_20231019144959_013.PNG


Load Checkpoint模块负责初始化SD模型的主要结构(包括VAE和U-Net)。CLIP Text Encode代表文本编码器,接收prompt和negative prompt作为输入,以控制图像的生成。Empty Latent Image表示初始化的高斯噪声。KSampler负责调度算法以及与SD相关的生成参数。最后,VAE Decode利用VAE的解码器将低维度的隐空间特征转换为代表图像的像素空间。


2、图片生成图片


输入:图像 + prompt

输出:图像


DM_20231019144959_014.PNG


Load Checkpoint模块负责对SD模型的主要结构(包括VAE和U-Net)进行初始化。CLIP Text Encode代表文本编码器,接收prompt和negative prompt作为输入,以控制图像的生成。Load Image表示输入的图像。KSampler负责调度算法以及与SD相关的生成参数。


在图片生成图片的预处理阶段,首先使用VAE编码器将输入图像转换为低维度的隐空间特征。然后添加噪声到隐空间特征中,去噪强度决定加入噪声的数量。如果去噪强度为0,则不添加任何噪声;如果去噪强度为1,则会添加最大数量的噪声,使得潜像成为一个完全随机的张量。在这种情况下,图片转图像的过程就完全相当于文本转图像,因为初始潜像完全是随机的噪声。


DM_20231019144959_015.PNG

去噪强度(Denoising strength)控制噪音的加入量


3、图片inpainting


输入:图像 + mask + prompt

输出:图像


DM_20231019144959_016.PNG


Load Checkpoint模块负责初始化SD模型的主要结构(包括VAE和U-Net)。CLIP Text Encode代表文本编码器,接收prompt和negative prompt作为输入,以控制图像的生成。Load Image表示输入的图像和mask。KSampler负责调度算法以及与SD相关的生成参数。


VAE Encode使用VAE的编码器将输入的图像和mask转换成为低维度的隐空间特征。然后,VAE Decode利用VAE的解码器将低维度的隐空间特征转换为代表图像的像素空间。


下面是如何进行图像inpainting的直观过程:


DM_20231019144959_017.PNG


4、使用controlnet辅助生成图片


输入:素描图 + prompt

输出:图像


DM_20231019144959_018.PNG


Load Checkpoint模块负责对SD模型的主要结构(包括VAE和U-Net)进行初始化。CLIP Text Encode代表文本编码器,接收prompt和negative prompt作为输入,以控制图像的生成。Load Image表示输入的ControlNet需要的预处理图。Empty Latent Image表示初始化的高斯噪声。Load ControlNet Model负责对ControlNet进行初始化。KSampler负责调度算法以及与SD相关的生成参数。最后,VAE Decode利用VAE的解码器将低维度的隐空间特征转换为代表图像的像素空间。


DM_20231019144959_019.PNG

使用ControlNet辅助生成图片


5、超分辨率重建


输入:prompt/(图像 + prompt)

输入:图像


DM_20231019144959_020.PNG


Load Checkpoint模块负责对SD模型的主要结构(包括VAE和U-Net)进行初始化。CLIP Text Encode代表文本编码器,接收prompt和negative prompt作为输入,以控制图像的生成。Empty Latent Image表示初始化的高斯噪声。Load Upscale Model负责对超分辨率重建模型进行初始化。KSampler负责调度算法以及与SD相关的生成参数。VAE Decode利用VAE的解码器将低维度的隐空间特征转换为代表图像的像素空间。最后,Upscale Image将生成的图像进行超分辨率重建,提高其分辨率。


三、Stable Diffusion训练过程


Stable Diffusion的训练过程可以被视为在最高维度上添加噪声和去除噪声的过程,并在对噪声的“对抗与攻防”中学习生成图像的能力。具体地说,在训练过程中首先对干净的样本添加噪声进行处理,采用多次逐步增加噪声的方式,直到干净的样本变成纯噪声。


DM_20231019144959_021.PNG

SD训练时的加噪过程


接下来,让SD模型学习去噪过程,并最终抽象出一个高维函数,这个函数能够在纯噪声中“优化”噪声,从而得到一个干净的样本。具体来说,将去噪过程具象化为使用U-Net来预测噪声,并结合调度算法逐步去噪的过程。


DM_20231019144959_022.PNG

SD训练时的去噪过程


在添加噪声的时候,Stable Diffusion采用的是逐步增加的策略,每一步只增加一小部分噪声,实现“小步快跑”的稳定加噪过程。这类似于移动互联网产品设计中的迭代与快速推出原则。


另一方面,每次增加的噪声量级也可以不同,例如可以设定5个不同量级的噪声,每次随机选择一种量级增加到样本图片中。这进一步增加了噪声的多样性。在去噪过程中,同样采用逐步减少噪声的策略,每一步预测并去除一部分噪声,实现稳定的去噪。


DM_20231019144959_023.PNG

多量级噪声


为了使网络能够知道当前处于k步的哪个阶段,需要使用位置编码。通过将步数作为输入传递给网络,位置编码能够让网络知道当前所处的阶段。这种操作与Transformer中的操作类似。


DM_20231019144959_024.PNG

使用Positional embeddings对训练迭代的步数进行编码


四、Stable Diffusion性能优化


1、使用TF32精度


导入PyTorch并启用TF32支持,实现性能和精度的平衡。TF32精度具有以下作用和优势:


1)加速训练速度:使用TF32精度可以在保持相对较高的模型精度的同时,加快模型训练的速度。

2)减少内存需求:TF32精度相对于传统的浮点数计算(如FP32)需要更少的内存存储。这对于训练大规模的深度学习模型尤为重要,可以减少内存的占用。

3)可接受的模型精度损失:使用TF32精度会导致一定程度的模型精度损失,因为低精度计算可能无法精确表示一些小的数值变化。然而,对于大多数深度学习应用,TF32精度仍然可以提供足够的模型精度。


2、使用FP16半精度


导入PyTorch库,并从diffusers库中导入DiffusionPipeline。使用"runwayml/stable-diffusion-v1-5"预训练模型创建一个DiffusionPipeline对象pipe,同时设置torch_dtype为torch.float16,以使用FP16半精度进行训练。


使用FP16半精度训练的优势在于可以减少一半的内存占用,进一步将批次大小翻倍,同时将训练时间减半。一些GPU,如V100和2080Ti等,针对16位计算进行优化,可以实现3-8倍的自动加速。


3、对注意力模块进行切片


当所使用的模型中的注意力模块包含多个注意力头时,可以采用切片注意力操作,以便每个注意力头依次计算注意力矩阵。这种做法可以显著降低内存占用,但随之而来的是推理时间大约增加10%。


首先,导入PyTorch库,并从diffusers库中导入DiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"预训练模型创建一个DiffusionPipeline对象pipe,同时设置torch_dtype为torch.float16,以使用FP16半精度进行训练。接下来,将pipe转移到CUDA设备上,以便在GPU上运行。


为启用切片注意力操作,需要调用pipe对象的enable_attention_slicing()方法。通过采用切片注意力操作,可以减少内存占用,但需要付出一些推理时间的代价,大约增加10%。


4、对VAE进行切片


与注意力模块切片类似,也可以对VAE进行切片,让VAE每次只处理Batch(32)中的一张图片,从而大幅减少内存占用。


首先,导入PyTorch库,并从diffusers库中导入StableDiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"预训练模型创建一个StableDiffusionPipeline对象pipe,同时设置torch_dtype为torch.float16,以使用FP16半精度进行训练。接下来,将pipe转移到CUDA设备上,以便在GPU上运行。为启用VAE切片操作,调用pipe对象的enable_vae_slicing()方法。然后,使用prompt作为输入,将一批32张图片通过pipe进行生成,并将生成的图片存储在images变量中。


5、大图像切块


当需要生成4K或更高分辨率的图像,但内存资源有限时,可以采用图像切块的技术。通过对图像进行切块,让VAE的编码器和解码器逐一处理每个切块后的图像,最后将拼接在一起生成最终的大图像。


首先,导入PyTorch库,并从diffusers库中导入StableDiffusionPipeline。然后,使用"runwayml/stable-diffusion-v1-5"预训练模型创建一个StableDiffusionPipeline对象pipe,同时设置torch_dtype为torch.float16,以使用FP16半精度进行训练。接下来,将pipe转移到CUDA设备上,以便在GPU上运行。为启用图像切块操作,调用pipe对象的enable_vae_tiling()方法。然后,使用prompt作为输入,并指定图像的宽度为3840像素,高度为2224像素,以及生成步骤的数量为20。通过调用pipe对象的生成方法,可以得到生成的图像。最后,从生成的图像中获取第一张图像并将其存储在image变量中。


6、CPU <-> GPU切换


可将整个SD模型或SD模型的部分模块的权重加载到CPU中,并在推理时再将所需的权重加载到GPU。以下是如何使用PyTorch和Stable Diffusion Pipeline实现的代码:

import torch

from diffusers import StableDiffusionPipeline

# 将整个SD模型加载到CPU  

pipe = StableDiffusionPipeline.from_pretrained(

"runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)

# 开启子模块的CPU offload功能,即可以在CPU上执行某些子模块的计算 

pipe.enable_sequential_cpu_offload()

# 开启整个SD模型的CPU offload功能,即可以在CPU上执行整个SD模型的计算

pipe.enable_model_cpu_offload()


这段代码将整个SD模型或SD模型的部分模块的权重加载到CPU中,并在推理时再将所需的权重加载到GPU,以实现更好的性能和灵活性。


7、变换Memory Format


在计算机视觉领域,有两种常见的内存格式,分别是channels first(NCHW)和channels last(NHWC)。将channels first转换为channels last可能会提高推理速度,但需要依赖于特定的AI框架和硬件。


在channels last内存格式中,张量的维度顺序为(batch_size,height,width,channels)。其中,batch_size表示批处理大小,height和width表示图像或特征图的高度和宽度,channels表示通道数。


相比之下,channels first是另一种内存布局,其中通道维度被放置在张量的第二个维度上。在channels first内存格式中,张量的维度顺序为(batch_size,channels,height,width)。


选择channels last或channels first内存格式通常取决于硬件和软件平台以及所使用的深度学习框架。不同的平台和框架可能对内存格式有不同的偏好和支持程度。


在一些情况下,channels last内存格式具有以下优势:


1)内存访问效率:在一些硬件架构中,如CPU和GPU,channels last内存格式能够更好地利用内存的连续性,从而提高数据访问的效率。


2)硬件加速器支持:一些硬件加速器(如NVIDIA的Tensor Cores)对于channels last内存格式具有特定的优化支持,可以提高计算性能。


3)跨平台兼容性:某些深度学习框架和工具更倾向于支持channels last内存格式,使得在不同的平台和框架之间迁移模型更加容易。


需要注意的是,选择内存格式需要根据具体的硬件、软件和深度学习框架来进行评估。某些特定的操作、模型结构或框架要求可能会对内存格式有特定的要求或限制。因此,建议在特定环境和需求下进行测试和选择,以获得最佳的性能和兼容性。


8、使用xFormers


使用xFormers插件能够优化注意力模块的计算,提升约20%的运算速度。

导入PyTorch库

创建一个名为"pipe"的StableDiffusionPipeline对象,使用预训练模型"runwayml/stable-diffusion-v1-5",数据类型为torch.float16,并将模型迁移到"cuda"设备上。

通过调用.enable_xformers_memory_efficient_attention()方法,使用xFormers插件来优化注意力模块的计算,从而 提升约20%的运算速度。


如何使用Stable Diffusion制作AI数字人视频


下面介绍如何安装SadTalker插件。

首先,需要确保已经成功安装Stable Diffusion WebUI。然后,从Github上获取SadTalker的开源代码,其地址为:

https://github.com/OpenTalker/SadTalker.git。


一、SadTalker安装方法


1、安装方法一


适合访问Github或外网较流畅的用户,因为需要自动下载大量文件。在SD WebUI的扩展插件页面中进行安装,如下图所示:


DM_20231019144959_025.PNG


这个插件需要下载许多文件,有些文件体积较大,需耐心等待。如果不确定是否出现了问题,可以查看控制台输出的内容,查找是否有错误。安装完成后,不要忘记重启Stable Diffusion,需要完全重启,而不仅仅是重启WebUI。


2、安装方法二


对于访问外网不太方便的用户,可以提前下载所需文件,例如使用迅雷等下载工具。只要将下载的文件上传到指定的目录即可。


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


为了方便使用这种方式部署,我们已经将相关文件打包好,大家无需单独下载。只需联系我们,即可获得下载地址。


4)安装


首先,将文件下载到本地或云环境中。以AutoDL为例,将文件保存到/root目录中。


DM_20231019144959_026.PNG


然后解压文件到 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/

看到下边的结果,就基本上差不多了。


DM_20231019144959_027.PNG

SD models 目录下有这几个文件:

DM_20231019144959_028.PNG


部署完毕,不要忘了重启。


二、使用方法


在SD WebUI的Tab菜单中找到SadTalker,按照下边的顺序进行设置。


DM_20231019144959_029.PNG


1、上传人物照片。

2、上传语音文件。

3、选择视频人物的姿势。实际上,这指的是在人物说话时头部的动作。可以通过尝试不同的数字来选择合适的动作。

4、分辨率。512的视频分辨率比256的大。

5、图片处理方法:corp是从图片截取头部做视频,resize适合大头照或者证件照,full就是全身照做视频。

6、Still Model:这个选项可以让头部动作不要过大,以避免头部与身体偏离的情况。然而,这样可能会导致头部动作不太明显。

7、GFPGAN:这个选项可以修整脸部,有助于改善说话时嘴部和眼部可能出现的变形现象,从而使脸部看起来更加自然。

最后,点击“生成”。根据硬件的运行速度以及设置,生成过程可能需要几分钟的时间。请耐心等待。


三、常见问题


1、 启动的时候报错:SadTalker will not support download...


DM_20231019144959_030.PNG


这个提示意味模型无法成功下载。可以执行以下命令来触发下载(请注意将cd后的路径替换为SadTalker安装路径):

cd stable-diffusion-webui/extensions/SadTalker
chmod 755 scripts/download_models.sh
scripts/download_models.sh


2、合成视频时报错:No module named 'xxx'


DM_20231019144959_031.PNG


可以使用pip install命令来安装xxx。但请注意,如果使用Python虚拟环境,需要先激活。例如,这里需要先执行source xxx命令。然后,可以运行以下命令来安装

librosa:

source /root/stable-diffusion-webui/venv/bin/activate

pip install librosa

这些命令将激活虚拟环境并安装librosa库。


3、合成视频时报错:在合成视频时,可能会遇到一个错误:No such file or directory: '/tmp/gradio/xxx'。这意味着系统无法找到该文件或目录。为了解决这个问题,可以创建一个目录。使用以下命令可以轻松地创建该目录:mkdir -p /tmp/gradio


4、如果遇到提示找不到ffmpeg的情况,尝试先下载并安装ffmpeg。通过以下链接下载安装程序:http://ffmpeg.org/download.html


Stable Diffusion本地部署要求


随着Stable Diffusion在AI艺术生成领域的不断发展和普及,越来越多的用户希望能够在自己的本地机器上部署SD模型,以获得更好的性能表现和使用体验。然而,部署一个大规模的生成模型如SD需要强大的计算资源和硬件配置。那么,究竟需要怎样的计算机配置才能流畅地运行SD模型呢?


一、GPU


GPU最好使用NVIDIA的RTX系列,如RTX 3070,RTX 4070和RTX4060。老一代的RTX 2000系列也可考虑,但性能较新卡略低,且显存略小。不推荐使用专业级显卡如NVIDIA A6000,其拥有大量视频内存,非常适合预算充足的情况。不要使用笔记本等移动GPU,因为其显存和功耗都有限,难以进行高效的模型训练。如果条件允许,可以使用多张GPU进行多卡训练,以提高训练速度。


二、CPU


除了GPU之外,具有高核心数的CPU也是必不可少的。Stable Diffusion的训练和推理过程需要进行大量的矩阵计算,对CPU的并行计算能力有很高的要求。一般来说,至少需要8核心或更多的CPU,如i9-13900;i7-13700;i5 13400;i3 12100;i7 12700 ;i9 12900 等。


三、RAM内存


大量的RAM内存同样不可或缺。本地部署SD时,系统内存最好在32GB以上。这可以显著加速数据交换与传输速度。与GPU类似,更多的GPU卡也会需要更多的系统内存配合。


四、存储方面


系统盘无特殊要求,需要1TB甚至更大的磁盘空间来存储大规模的模型文件、数据集和生成结果。使用RAID 0可以获得更高的读取速度。


五、网络方面


网络对于Stable Diffusion的部署和使用都非常关键,需要准备以下几方面:


1、带宽需求


初始部署需要下载模型文件,通常数十GB甚至上百GB,需要具备稳定的大带宽来支持。训练过程中也需要大量的数据流量,务必确认网络带宽足够,例如千兆宽带。如果使用云训练平台,还需要考虑上传训练结果的流量。


2、网络速度


部署时的下载速度直接影响部署进度,需要尽可能高的网络速度。训练时网络速度影响同步效率。内网训练可以做到更低延迟。公网环境下,光纤宽带的低延迟有利于分布式训练。


3、网络稳定性


训练过程需要持续不间断的连接,断网会造成失败。部署和使用期间应尽量避免网络抖动现象的发生。


4、代理和缓存


可以使用本地代理做缓存,加速模型和数据的下载。代理同时还可以提供一定的数据安全性和隐私保护。


5、数据安全


如果涉及敏感数据,要注意加密传输和访问控制。遵守相关的数据隐私规范,谨慎上传或共享数据。


六、软件方面


操作系统需要Windows 10/11或者较新版本的Linux发行版,如Ubuntu 20.04+。Python版本需要在3.7以上,主要的深度学习框架如PyTorch、TensorFlow也需要相应安装,并确认版本与硬件兼容。可能还需要安装许多Python库来支持不同的数据加载和图像处理功能。使用Docker等虚拟化技术可以简化软件环境配置。


蓝海大脑集成SD的PC集群解决方案


AIGC和ChatGPT4技术的爆燃和狂飙,让文字生成、音频生成、图像生成、视频生成、策略生成、GAMEAI、虚拟人等生成领域得到了极大的提升。不仅可以提高创作质量,还能降低成本,增加效率。同时,对GPU和算力的需求也越来越高,因此GPU服务器厂商开始涌向该赛道,为这一领域提供更好的支持。在许多领域,如科学计算、金融分析、天气预报、深度学习、高性能计算、大模型构建等领域,需要大量的计算资源来支持。为了满足这些需求,蓝海大脑PC集群解决方案应运而生。


PC集群是一种由多台计算机组成的系统,这些计算机通过网络连接在一起,共同完成计算任务。PC集群解决方案是指在PC集群上运行的软件和硬件系统,用于管理和优化计算资源,提高计算效率和可靠性。


蓝海大脑PC集群解决方案提供高密度部署的服务器和PC节点,采用4U机架式设计,每个机架可插拔4个PC节点。融合了PC的高主频和高性价比以及服务器的稳定性的设计,实现了远程集中化部署和管理运维。同时,采用模块化可插拔设计,使维护和升级变得更加容易。


同时,集成Stable Diffusion AI模型,可以轻松地安装和使用,无需进行任何额外的配置或设置。与传统的人工创作方式相比,Stable Diffusion Al模型可以更快地生成高品质的创作内容。通过集成这个模型,可以使创作者利用人工智能技术来优化创作流程。另外,蓝海大脑PC集群解决方案还具有开箱即用的特点,不仅易于安装和使用,而且能够快速适应各种创作工作流程。这意味着用户可以在短时间内开始创作,并且在整个创作过程中得到更好的体验。


DM_20231019144959_032.PNG


一、主要技术指标


1、支持远程开关机和硬重启PC节点

2、集成的供电和管理背板,每个节点750W峰值供电功率

3、机箱管理单元支持节点远程上下电

4、每个PC节点支持热插拔,单个节点故障不影响其他节点工作

5、独立的管理网口和串口

6、每个节点配置2个可插拔8038高功率服务器风扇,提供智能温控


二、客户收益


Stable Diffusion技术对游戏产业带来了极大的影响和改变。它提升了游戏图像的质量和真实感、增强了游戏体验和沉浸感、优化了游戏制作流程、扩展了游戏应用领域,并推动了游戏产业的发展和创新。这些都表明,Stable Diffusion技术在游戏产业中的应用前景十分广阔,有助于进一步推动游戏行业的发展,提高用户体验和娱乐价值。


1、提升游戏图像质量和真实感


Stable Diffusion可以在保证渲染速度的前提下,提高游戏图像的细节和真实感。传统的光线追踪方法需要检查和模拟每条光线,这样会消耗大量计算资源,并放缓渲染速度。而Stable Diffusion则利用深度学习技术对光线的扩散过程进行建模,使得处理数百万条光线所需的计算时间更短,同时还能够生成更为精准的光线路径。这意味着,Stable Diffusion可以让计算机产生更加逼真的景观、人物、物品等元素,在视觉效果上得到质的飞跃。


2、增强游戏体验和沉浸感


游戏是一个交互式体验,它的目标是尽可能地让玩家沉浸到虚构的世界中。Stable Diffusion可以使游戏环境变得更加真实,并增添一些更具有交互性和观赏性的场景。例如,利用Stable Diffusion技术,游戏可以在水面上添加波纹、落叶,或者使摇曳的草丛更逼真。这些改善能够让玩家更好地感受游戏中所处的环境,增强沉浸感。


3、优化游戏制作流程


Stable Diffusion的应用可以提高游戏开发的效率和质量,减少手动制作和修改的工作量。渲染过程的快速执行还可以加速开发周期,甚至使一些在过去被看做是计算机图形学难题的事情变得可能。例如,在模拟复杂的自然现象或在大范围内生成游戏元素时,使用Stable Diffusion可有效降低游戏开发的成本和时间,让开发者有更多的精力关注其他方面的设计和创意。


4、扩展游戏的应用领域


Stable Diffusion的应用使得游戏在更多的领域得到应用。例如,在心理治疗、教育、文化传播等领域中,人工智能游戏可以根据用户的情绪和行为变化来调整游戏内容和策略,为用户提供更符合需求和娱乐性的游戏体验。此外,利用Stable Diffusion技术,游戏可以生成不同类型的场景,包括虚拟现实和增强现实等体验,开发出更丰富更多变的游戏内容。


5、推动游戏产业的发展和创新


Stable Diffusion作为先进的计算机图形学技术之一,进一步推动了游戏产业的发展和创新。利用人工智能技术渲染的游戏将会产生更高品质、更广泛的游戏类别,从而吸引更多领域的玩家参与,并且会推动相关行业的发展,如文化传媒行业、数字娱乐业等。同时,稳定性更好、性能更高的Stable Diffusion技术还具有在未来制造更复杂的虚拟世界的潜力,例如更多样化、更逼真、更具交互性的虚拟现实环境和游戏。


三、PC集群解决方案的优势


1、高性能


PC集群解决方案可将多台计算机的计算能力整合起来,形成一个高性能的计算系统。可支持在短时间内完成大量的计算任务,提高计算效率。


2、可扩展性


可以根据需要进行扩展,增加计算节点,提高计算能力。这种扩展可以是硬件的,也可以是软件的,非常灵活。


3、可靠性


PC集群可以通过冗余设计和备份策略来提高系统的可靠性。当某个节点出现故障时,其他节点可以接管其任务,保证计算任务的顺利进行。


4、低成本


相比于传统的超级计算机,PC集群的成本更低。这是因为PC集群采用的是普通的PC硬件,而不是专门的高性能计算硬件。


四、PC集群解决方案的应用领域有哪些?


PC集群是指将多台个人电脑连接在一起,通过网络协同工作,实现高性能计算的一种方式。它的应用领域非常广泛,以下是一些常见的应用领域:


1、科学计算


PC集群可以用于各种科学计算,如天文学、生物学、物理学、化学等领域的计算模拟和数据分析。


2、工程计算


PC集群可以用于工程领域的计算,如飞机设计、汽车设计、建筑结构分析等。


3、金融计算


PC集群可以用于金融领域的计算,如股票交易、风险评估、投资组合优化等。


4、大数据处理


PC集群可以用于大数据处理,如数据挖掘、机器学习、人工智能等领域的数据处理和分析。


5、图像处理


PC集群可以用于图像处理,如视频编码、图像识别、虚拟现实等领域的图像处理和渲染。


五、常用配置推荐


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、内存:


32GB×2


4、系统盘:


M.2 500GB


5、数据盘:


500GB 7200K


DM_20231019144959_033.JPEG


蓝海大脑 京ICP备18017748号-1