1、Stable Diffusion 基本原理介绍目录 MenuDiffusion model 运行机制Stable Diffusion model 模块分析什么是 Stable Diffusion文生图:根据文本提示作为输入来生成的图像(输入为文本)图生图:对图像根据文字描述进行修改(输入为文本+图像)Stable Diffusion 系统架构图每张图片都满足一定的规律分布,利用文本中包含的分布信息作为指导,将纯噪声的图片逐步去噪,生成一张跟文本信息匹配的图片Stable Diffusion 是一个组合系统,包含了多个模型子模块,组成扩散Pipeline我们需要什么一种生成图片的神经网络训练方法
2、 寻找分布的方法一种连接文字和图片的方法 多模态连接的方法一种压缩和解压缩图片的方法 加速训练的方法Diffusion model 运行机制扩散模型Diffusion1.寻找分布的方法前向扩散过程(Forward Diffusion Process)向图片中逐渐引入噪声来破坏图像,直到图像变成完全随机的噪声后向扩散过程(Backward Diffusion Process)使用一系列马尔可夫链逐步去除预测噪声,从高斯噪声中生成图片扩散过程由 Unet 网络和 采样器(scheduler 算法)共同完成,在 Unet 网络中一步步执行生成过程,其中采样器控制去噪方法和强度数据集生成不断地向图片中
3、添加不同强度的噪音(强度由 采样器 timestep 控制),为数据集中每一个图片都生成N个训练示例模型训练使用上一步的数据集,对Unet模型进行训练,使用真实噪声标签作比较来反向传播更新,训练出“噪声预测器”加入文本条件将文本信息作为附加控制向量,加入到模型向量中,通过注意力机制得到一个具有丰富语义信息的隐空间向量,引导图像往文本向量(Prompt)方向生成降噪绘图利用随机种子产出固定维度的噪声,使用训练好的Unet模型结合采样器,从每一步输出的样本中去掉噪音,得到具有文本信息的图像表征Unet 网络Unet 模型输入包括三部分a.图像潜空间向量【batchsize,隐空间通道,图片高度/8
4、,图片宽度/8】b.timesteps【batchsize】c.文本信息向量【batchsize,文本最大编码长度,向量大小】Stable Diffusion 里的 Unet 模型采用 Encoder-Decoder 结构来预估噪声使用 DownSample 和 UpSample 进行样本的下上采样,采样模块之间的 ResBlock 和 SpatialTransformer,分别接收 timesteps(采样器使用)和文本信息作为输入ResBlock不直接处理文本向量,由SpatialTransformer混合进潜空间向量,在下一层得以应用Stable Diffusion 模块分析Stable
5、 Diffusion为Unet模型添加条件控制机制(text、images、inpainting)在潜空间进行diffusion过程,而不是像素空间CLIP 模型CLIP是图像 Encoder 和文本 Encoder 的组合,CLIP训练时分别对图像和文本进行编码,使用余弦相似度进行对比,反向更新两个 Encoder 的参数完成训练后,输入配对的图片和文字,两个 encoder 就可以输出相似的 embedding 向量,输入不匹配的图片和文字,两个 encoder 输出向量的余弦相似度就会接近于 0推理时,输入文字通过 CLIP 转化为 embedding,映射进 Unet 注意力层,和图片
6、相互作用2.多模态连接的方法变分自编码器 VAE为了加快图像生成过程,Stable Diffusion 没有在像素图像上进行运行,而是在图像的压缩版本(潜空间)上运行。模型学习时,将图像的尺寸先减小再恢复到原始尺寸。使用解码器从压缩数据中重建图像时,会同时学习之前的所有相关信息。3.加速训练的方法Thank you感谢观看!Stable Diffusion 腾讯云云原生容器部署实践分享大纲云原生网关AI推理容器GPU计算集群HCCGPU计算集群HCCGPU计算集群AI推理容器(TACO加速)qGPU算力/显存切分TKECFS并行文件系统SD模型文件TCR容器镜像1.使用腾讯云TKE+CFS部署
7、Stable Diffusion 2.通过腾讯云云原生 API 网关对外提供 SD服务3.通过qGPU提升推理服务并发性能4.通过TACO优化推理速度使用腾讯云TKE+CFS部署Stable DiffusionTKE:基于原生 K8S提供以容器为核心的解决方案User Zone AUser Zone A超级节点轻量虚拟机POD轻量虚拟机POD轻量虚拟机POD轻量虚拟机PODUser Zone B超级节点轻量虚拟机POD轻量虚拟机POD轻量虚拟机POD轻量虚拟机PODUser Zone A超级节点轻量虚拟机POD轻量虚拟机POD轻量虚拟机POD轻量虚拟机PODTKE 托管集群TKE Server
8、less 集群按照Pod资源付费无需运维集群节点、极致弹性容器独立内核虚拟机级别隔离性按照集群资源付费需要运维集群节点容器共享OS内核安全隔离性弱CVM 普通节点CVM 原生节点PODPODPODPODPODPODPODPODPODPODPODPOD容器存储方案块存储CBS-CSI 支持 TKE 集群通过控制台快捷选择存储类型,并创建对应块存储云硬盘类型的 PV 和 PVC。支持拓扑感知、在线扩容、快照和恢复。适合 POD 单挂,低延迟,高 IOPS 场景。网络文件系统CFS-CSI 通过 CFS-CSI 扩展组件,您可以快速在容器集群中通过标准原生 Kubernetes使用 CFS。支持标准
9、存储和性能存储。适合 POD 多挂,CVM 和 POD 共享文件,无需扩容。对象存储COS-CSI 通过 COS-CSI 扩展组件,您可以快速的 在 容 器 集 群 中 通 过 标 准 原 生 Kubernetes 以 COSFS 的形式使用 COS。适合程序使用文件系统访问 cos 里面的文件。准备待部署 SD的 TKE 集群1.开通并创建 TKE 集群2.集群选择托管类型,Worker节点选择【GPU计算型PNV4】-A10,安装 GPU470 驱动,CUDA 版本11.4.3,cuDNN 版本 8.2.4,见下图。3.根据部署对 GPU 共享的需求,可选择开启 qGPU。使用CFS 保存
10、SD模型文件1.创建存放模型的文件存储 CFS2.选择与集群相同的 VPC 和子网,开通 CFS 服务。3.在 CFS 远程挂载点,新建/models/Stable-diffusion 目录。下载 v1-5-pruned-emaonly.safetensors 模型文件至/models/Stable-diffusion通过TKE挂载CFS1.在 TKE 控制台上,创建 CFS 类型 StorageClass,选择共享实例2.使用CFS里新建的/models/Stable-diffusion目录,以及上面的StorageClass,静态创建 PV&PVC创建 SD Web UI 工作负载1.在T
11、KE控制台上,选择【工作负载】-【Deployment】-【新建】,部署SD-webui 镜像2.在部署页面里,【数据卷】选择【添加数据卷】。【使用已有PVC】方式,添加前面创建的 PVC3.【实例内容器】-【镜像】部分,选择已保存在 TCR 里的 stable-diffusion-webui 镜像4.将 GPU 资源的卡数设置为 1,如果开启了 qGPU,这里还可以填写0.1-1之间的数值5.创建 Deployment 对应的 Service,选择【公网LB访问】,对外暴露7860端口访问6.通过 CLB 公网 IP 地址,访问SDWeb UI 服务。如果有限流或访问控制需求,推荐选择云原生
12、网关通过腾讯云云原生 API 网关对外提供 SD服务云原生API网关:云上微服务架构的流量入口云原生API网关(Cloud-Native APIGateway)是腾讯云基于开源网关推出的一款高性能高可用的API生命周期管理产品,100%完美兼容开源网关Kong的API,减少用户自建网关的开发及运维成本。客户端调用者开发者响应请求转发请求后端响应Web浏览器第三方合作伙伴客户端手机APP小程序微服务平台TSF业务后端云主机CVM容器集群TKE其他公网URL/IP弹性容器服务EKS路由转发参数转换认证鉴权日志监控限流、缓存插件通过云原生 API 网关对外提供 SD服务1.开通云原生网关,选择和 T
13、KE 集群、CFS 同 VPC 的实例2.在网关控制台上,选择【路由管理】-【服务来源】,绑定TKE集群3.选择【路由管理】-【服务】,新建网关服务。在【服务列表】中,选择部署Deployment 时启用的 Service 进行映射4.点击服务名,新建访问路由。将请求方法设置为【ANY】,Host 填写云原生网关的公网 IP5.Stable Diffusion Web UI 出图时会进行多轮请求,将 Deployment 的 Pod 副本数量修改为大于1时,还需要配置 Session 会话保持,保证同一IP的客户请求落在相同的Pod里。选择【路由管理】-【Konga控制台】,找到Konga公网
14、访问地址,在Konga控制台里找到【UPSTREAM】,点击【DETAILS】,在【HASH ON】下拉框里,选择【IP】,完成基于客户端IP的会话保持配置通过qGPU提升推理服务并发性能qGPU:GPU共享技术灵活性:自由配置 GPU 显存大小和算力占比云原生:支持标准 Kubernetes 和 NVIDIA Docker兼容性:业务不重编、CUDA 库不替换、业务无感高性能:GPU 设备底层虚拟化,高效收敛,吞吐接近0损耗强隔离:支持显存和算力的严格隔离qGPU 是腾讯云推出的 GPU 共享技术,支持在多个容器间共享 GPU 卡并提供容器间显存、算力强隔离的能力,从而在更小粒度的使用 GP
15、U 卡的基础上,保证业务安全,达到提高 GPU 使用率、降低客户成本的目的。Stable Diffusion 使用 qGPUStable Diffusion Web UI 服务以串行方式处理请求,如果希望增加推理服务并发性能,可以考虑扩展Deployment的Pod数量,以轮询的方式响应请求。这里我们采用TKE qGPU能力,将多个实例 Pod 运行在同一张 A10 卡上,在保障业务稳定性的前提下,切分显卡资源,降低部署成本。采用 qGPU 方式,需要先将 Pod 的资源申请方式进行修改。如果计划单卡上部署2个 Pod,将卡数改为50%的算力分配,显存设置为 A10 显存的一半。Deploym
16、ent YAML更新完成后,调整 Pod 数量为2个,即可实现负载均衡的 Stable Diffusion 轮询模式通过TACO优化推理速度TACO:优化 Stable Diffusion 推理性能腾讯云计算加速套件 TACO Kit(TencentCloud Accelerated Computing Optimization Kit)是一种异构计算加速软件服务,具备领先的 GPU 共享技术和业界唯一的 GPU 在离线混部能力,搭配腾讯自研的软硬件协同优化组件和硬件厂商特有优化方案,支持物理机、云服务器、容器等产品的计算加速、图形渲染、视频转码各个应用场景,帮助用户实现全方位全场景的降本增效
17、。在 Stable Diffuison 场景中,可以实现模型的前向推理能力提升,出图由原来的约 2 秒缩短到 1 秒Stable Diffusion 是一个多模型组成的扩散 Pipeline,主要由三个部分组成:变分自编码器 VAE、U-Net 和文本编码器 CLIP。推理耗时主要集中在 UNet 部分,我们选择对这部分进行模型优化,加速推理速度TACO:优化 Stable Diffusion 推理性能1.下载 A10 GPU 优化的 stable-diffusion-v1.5 UNet 模型文件到CFS2.下载 sd_v1.5_demo 镜像并上传到TCR,该镜像里的 Web UI 修改了模
18、型加载代码,UNet 部分会加载独立优化模型。3.将 sd_v1.5_demo 镜像服务部署在 TKE 上:按前述步骤进行操作,其中替换镜像为sd_v1.5_demo,并额外为 UNet 优化模型创建 CFS/data 目录和PV&PVC4.同样参数配置下,生成10张猫的图片,优化前推理耗时16.14s。加载 TACO 优化的 UNet 模型后,10张图片仅耗时11.56s,端到端性能提高30%基于TI-ONE平台的SD推理加速实践目录 MenuSD应用场景及挑战TI-ONE一键部署Stable Diffusion模型服务SD+Controlnet推理加速实战利用TI-ONE部署弹性伸缩SD推
19、理服务孔波十余年云计算从业经验,擅长云原生架构,混合云架构等,主要为腾讯云SaaS客户提供解决方案设计与落地咨询,目前关注AIGC等新技术推广落地讲师介绍腾讯云资深解决方案架构师SD应用场景及挑战应用场景挑战SD基础模型Controlnet控制模型图像编辑去水印,提高分辨率,特定滤镜文字生成图像根据文字prompt生成创意图像功能图像生成根据指定要求生成营销类海报,模特图,LOGO,建筑风格设计等文字生成图像根据文字prompt生成特定要求和风格的图片 模型版本多开源模型多,同时需要根据业务做场景微调 生成速度慢SD基础模型往往生成一张高清图需要十几秒,加上Controlnet模型后,生成时长
20、或达几十秒 业务流量不稳定业务经常受营销活动推广影响,无法预测准确流量,GPU资源本身较贵TI-ONE平台介绍腾讯云TI平台数据中心数据集管理个人标注任务式建模Tikit多模式训练任务创建训练过程可视化资源监控可视化训练指标可视化Notebook预置框架(含TI-ACC训练加速)本地调试TI-Kit任务提交生命周期配置训练工坊模型服务模型管理模型仓库模型导入模型管理腾讯云 IaaS 服务(计算+网络)云容器平台日志持久化对接云原生cos对象存储cbs云硬盘CAM访问管理云APIcls日志服务TCR容器镜像服务 cm云监控模型优化优化任务管理推理优化(含TI-ACC推理加速)Git存储库管理场景
21、化自动学习作业配置训练监控一键发布模型评测自动学习在线服务热更新手动/自动扩缩容模型/镜像服务化流量分配在线测试资源/调用数据监控批量预测任务管理COS对接TI-ONE一键部署Stable Diffusion模型服务1.TI-ONE-模型管理-模型仓库模块导入模型2.TI-ONE-模型服务-在线服务-新建服务,选择刚导入的模型3.耐心等待几分钟,TI-ONE-在线服务TI-ONE一键部署Stable Diffusion模型服务3.TI-ONE-在线服务-选择服务-调用TI-ACC-Inference加速推理介绍功能概述TI-ACC推理加速在CV、NLP、推荐等模型推理场景中,用户仅需新建一个优
22、化任务即可进行推理加速优化,可帮助客户模型推理时,显著节省推理时间和计算成本。适用客户广泛集中在泛互VIP、KA以及在线教育等领域有算法研究员储备,业务需要高精度AI模型赋能AI模型部署规模在10卡-数百卡无专门研究AI加速的团队模型优化(TI-ACC-Inference)启动在线服务生产环境调用填写模型信息,新建优化任务即可推理加速模型导入来自自动学习来自训练任务来自COS(第三方模型)TI-ACC-Inference加速推理介绍常量折叠离线常量折叠,对常量部分进行预计算,降低运行时计算量。QAT 分阶段量化策略逐层增加量化操作,解决深层神经网络梯度失真问题针对架构深层性能优化图优化 细致K
23、ernel设计,提高GPU Occupancy Precompute Offset通过GPU Const Memory提高访存效率 Double Buffering掩盖延迟 ILP,外积累加的方式实现指令级并行显存高速缓存寄存器基于原生框架,通过子图切分替换将加速能力嵌入原生框架,保证了接口与原生接口一致,同时保证了加速能力的通用性。子图切分Conv Kernel:3x3Stride:1Element WiseConv Kernel:1x1Stride:1Conv Kernel:1x1Stride:2Conv Kernel:1x1Stride:256x5656x5656x5656x5628x2
24、828x28原始Residual Block28x2828x2828x2828x28优化后Residual BlockConv Kernel:3x3Stride:2Element WiseConv Kernel:1x1Stride:1Conv Kernel:1x1Stride:1Conv Kernel:1x1Stride:156x5628x2828x28Pooling Kernel:1x1Stride:2Post Train基于小量样本数据,统计数值分布,迭代求解各层最优量化区间SD+Controlnet推理加速实战1.TI-ONE-模型管理-模型仓库-优化模型SD+Controlnet推理加
25、速实战2.TI-ONE-模型管理-模型优化-保存模型仓库3.TI-ONE-模型管理-模型仓库-优化模型列表-发布在线服务SD+Controlnet推理加速实战4.TI-ONE-在线服务-选择服务-调用原始图像生成图像利用TI-ONE部署弹性伸缩SD推理服务提供了从数据标注、模型部署、模型仓库等功能。且为了使得部署后的模型可以更方便地给应用调用,支持将算法服务发布成API;也为了使得部署后的模型可以更容易地被调度,支持将算法服务发布成AI组件,被AI工作室的调度引擎进行调度。服务资源手动/自动扩缩变更算力资源变更服务化参数配置变更灰度更新更新调用服务访问流量分配多版本灵活流量策略,模型版本平滑升级调用服务不停服滚动更新实例滚动更新,客户端无感知HTTPHTTP 支持服务不停服滚动更新,确保服务持续在线可用 支持服务多版本管理与流量分配,支撑灰度测试等服务运营管理场景 支持实例级别的手动/自动算力资源扩缩容,高效利用集群算力 支持服务算力资源使用情况、服务调用情况的数据监控能力 支持服务在线调用测试利用TI-ONE部署弹性伸缩SD推理服务TI-ONE-在线服务-选择服务-扩缩容Thank you感谢观看!