云原生技术赋能AI绘图:Stable Diffusion在腾讯云的部署与应用新篇章

摘要

随着信息技术的飞速发展和数字化转型的深入推进,云原生架构已成为企业数字化转型的重要基石。Docker容器、Serverless和微服务等技术作为云原生的核心组成部分,正在不断推动着企业应用架构的革新与升级。本文旨在总结近期在云原生实践、容器技术、Serverless应用以及微服务架构等方面的最新研究成果和实践经验,为企业提供更高效、更灵活、更可靠的云原生解决方案。
在这里插入图片描述

Docker容器、Serverless和微服务等技术的作用

Docker容器技术的广泛应用为企业带来了前所未有的应用部署和管理的便利。通过容器化应用,企业可以快速构建、部署和扩展应用,同时降低运维成本和提升应用的可移植性。此外,容器技术还为企业提供了更好的资源隔离和安全性保障,有效防范了潜在的安全风险。
在这里插入图片描述

Serverless架构的兴起为企业带来了无服务器计算的全新体验。Serverless架构允许企业专注于业务逻辑的开发,而无需关心底层服务器的运维和管理。这种按需使用、自动伸缩的计算模式极大地降低了企业的运营成本,并提升了应用的响应速度和可扩展性。同时,Serverless架构还为企业提供了更加灵活的资源调度和更高效的资源利用率。
在这里插入图片描述

微服务架构的普及使得企业应用更加模块化和松耦合。通过将大型应用拆分成一系列小型、独立的服务,微服务架构提高了应用的可维护性和可扩展性。此外,微服务架构还促进了企业内部的团队协作和沟通,提高了开发效率和质量。

《2023腾讯云容器和函数计算技术实践精选集》阅读体验

《2023腾讯云容器和函数计算技术实践精选集》详细阐述了云原生实践中的具体案例和经验,内容涵盖了云监控、调度器设计、应用资源配置等多个方面。其中,Stable Diffusion腾讯云云原生容器部署实践案例集更是让我受益匪浅。在阅读这一案例集的过程中,我获得了极其深刻和丰富的体验,它不仅让我对Stable Diffusion模型有了更深入的理解,也让我对云原生架构有了更全面的认识。

AI绘图在各行业领域具有革命性作用,显著提升了工作效率和质量。它广泛应用于插画、游戏UI、平面包装、服装设计和模特拍摄以及建筑效果图等多个场景。插画师和概念艺术家可以利用AI绘图作为创作基础或灵感来源;游戏开发者通过AI生成大量UI图片和图标,节省时间和成本;平面包装设计师则利用AI的模糊方向和概念特性快速生成图案;服装设计师和模特拍摄行业也能借助AI进行创意设计和试穿效果预览;建筑领域则开始尝试使用AI生成效果图,提高设计师与客户之间的沟通效率。行业客户通常利用Stable Diffusion预训练模型结合微调插件,如LoRA和ControlNet,来输出符合业务场景需求的图片素材。

通过学习《Stable Diffusion 腾讯云云原生容器部署实践》案例,我学到了:

  • 1、使用容器服务 TKE 和文件存储 CFS 在腾讯云上的轻松部署 Stable Diffusion
  • 2、使用 qGPU,提高GPU的使用率
  • 3、通过云原生 API 网关对外提供 Stable Diffusion 服务
  • 4、优化 Stable Diffusion 推理性能
  • 5、通过 COS 内容审核能力处理 Stable Diffusion API 输出

部署 Stable Diffusion

Stable Diffusion 是一种深度学习的文本到图像模型,由 Runway 和慕尼黑大学合作构建,第一个版本于 2021 年发布。目前主流版本包含 v1.5、v2 和 v2.1。它主要用于生成基于文本描述的详细图像,也应用于其他任务,如修复图像、生成受文本提示引导的图像到图像的转换等。

部署 Stable Diffusion架构图:

在这里插入图片描述

搭建步骤

  • 准备需使用 Stable Diffusion 容器镜像

GitHub 下载 Stable Diffusion web UI(https://github.com/AUTOMATIC1111/stable-diffusion-webui) 代码,制作 Docker 镜像。也可使用以下命令获取:

docker pull gpulab.tencentcloudcr.com/ai/stable-diffusion:1.0.7

将准备好的 Stable Diffusion 容器镜像上传到容器镜像仓库 TCR

  • 准备待部署 Stable Diffusion 的 TKE 集群
  1. 开通并创建 TKE 集群,操作步骤详情可参见 创建容器服务集群(https://cloud.tencent.com/document/product/457/32189)。在创建集群时,Kubernetes 版本选择最新的1.26.1,容器网络插件选择 Global Router,其他选项默认即可。
  2. 集群选择托管类型,Worker 节点选择 GPU 计算型PNV4 - A10,安装 GPU470驱动,CUDA 版本11.4.3,cuDNN 版本 8.2.4。如下图所示:

在这里插入图片描述
3. 根据部署对 GPU 共享的需求,您可以选择开启 qGPU,如何开启qGPU接下来的步骤会讲。

  • 通过 TKE+CFS 快速部署 Stable Diffusion Web UI
  1. 创建存放模型的文件存储 CFS

    • 开通 CFS 服务,创建文件系统及挂载点时选择与集群相同的 VPC 和子网。在 CFS 远程挂载点,新建 /models/Stable-diffusion 目录。挂载点和文件操作,详情可参见 创建文件系统及挂载点(https://cloud.tencent.com/document/product/582/9132)。
    • 下载 v1-5-pruned-emaonly.safetensors 模型文件至 /models/Stable-diffusion,地址见:runwayml/stable-diffusion-v1-5(https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main)。
  2. 创建静态 PV/PVC

    • 在 容器服务控制台(https://console.cloud.tencent.com/tke2/cluster?rid=1) 中创建 CFS 类型 StorageClass,并选择共享实例。操作步骤可参见 通过控制台创建 StorageClass(https://cloud.tencent.com/document/product/457/44235#.E6.8E.A7.E5.88.B6.E5.8F.B0.E6.93.8D.E4.BD.9C.E6.8C.87.E5.BC.95)。
      在这里插入图片描述

    • 使用 CFS 中新建的 /models/Stable-diffusion 目录以及已创建的 StorageClass,静态创建 PV/PVC。
      创建 PV 如下图所示:
      在这里插入图片描述
      创建 PVC 如下图所示:
      在这里插入图片描述

    • 如果您有其他模型目录挂载的需求,同样需要在 CFS 挂载点中新建子目录,并进行 PV/PVC 的静态创建。Stable Diffusion Web UI 服务的 models 子目录结构如下:

在这里插入图片描述

  1. 创建 Stable Diffusion Web UI 工作负载

    • 在 容器服务控制台 中,选择左侧导航中的集群。

    • 在集群详情页,选择工作负载 > Deployment,单击新建,开始部署 stable-diffusion-webui 镜像。

    • 在新建 Deployment 页,填写 Deployment 基本信息,其中数据卷选择添加数据卷。

    • 在新增数据卷页,数据卷类型选择使用已有 PVC,添加 已创建的 PVC,完成后单击确认。
      在这里插入图片描述

    • 在实例内容器中,单击选择镜像,选择已保存在 TCR 中的 stable-diffusion-webui 镜像。

    • 将新建的数据卷进行挂载点配置。挂载点与 CFS 远程目录对应关系如表格所示:
      在这里插入图片描述
      在这里插入图片描述

    • 展开显示高级设置,添加运行参数–listen,将 stable-diffusion-webui 进程监听在0.0.0.0上。
      在这里插入图片描述

    • 将 GPU 资源的卡数设置为1,如果开启了 qGPU,您还可以填写0.1-1之间的数值,对 GPU 卡进行虚拟化切分。

    • 创建 Deployment 对应的 Service,并选择公网 LB 访问,对外暴露7860端口访问。
      在这里插入图片描述

    • 通过 CLB 公网 IP 地址,您就可以成功访问 Stable Diffusion Web UI 服务了。
      在这里插入图片描述

进阶教程

1、如何使用 qGPU

Stable Diffusion Web UI 服务以串行方式处理请求,如果您希望增加推理服务的并发性能,可以考虑扩展 Deployment 的 Pod 数量,以轮询的方式响应请求。在这里,我们采用 TKE qGPU 能力,将多个实例 Pod 运行在同一张 A10 卡上。在保障业务稳定性的前提下,切分显卡资源,降低部署成本。
采用 qGPU 方式,您需要先将 Pod 的资源申请方式进行修改。例如,如果您计划在单卡上部署2个 Pod,您需要在 YAML 文件中将 tke.cloud.tencent.com/qgpu-core 从100更改为50,也就是将50%的算力分配给每个 Pod。同时,您还需要将 tke.cloud.tencent.com/qgpu-memory 的数值设置为 A10 显存的一半。

resources:
  limits:
    cpu: "20"
    memory: 50Gi
    tke.cloud.tencent.com/qgpu-core: "50"
    tke.cloud.tencent.com/qgpu-memory: "10"

Deployment YAML 文件更新完成后,调整 Pod 数量为2个,即可实现负载均衡的 Stable Diffusion 轮询模式。

2、通过云原生 API 网关对外提供 Stable Diffusion 服务

  1. 开通云原生网关,选择和 TKE 集群、CFS 同 VPC 的实例。
  2. 在 腾讯云微服务引擎控制台(https://console.cloud.tencent.com/tse) 上,选择实例名称,进入实例详情页。
  3. 选择路由管理 > 服务来源,单击新建,在新建服务来源中选择容器服务,绑定 TKE 集群。
  4. 选择路由管理 > 服务,单击新建,新建网关服务。选择服务列表时,选择部署 Deployment 时启用的 Service 进行映射。云原生网关会自动拉取 TKE Service 关联的 Pod IP。当 Pod IP 变化时,动态更新网关服务里的 Upstream 配置项。
  5. 单击服务名,新建访问路由。在基本信息配置中,将请求方法设置为 ANY,Host 填写云原生网关的公网 IP。如果后期绑定域名使用,Host 还需要加上域名地址。如下图所示:

在这里插入图片描述

  1. 根据资源用量和计划访问请求数,您可以选择配置网关限流策略,并自定义限流响应内容。
  2. Stable Diffusion Web UI 出图时会进行多轮请求,将 Deployment 的 Pod 副本数量修改为大于1时,您还需要配置 Session 会话保持,以保证同一 IP 的客户请求落在相同的 Pod 里。选择路由管理 > Konga 控制台,找到 Konga 公网访问地址,在 Konga 控制台里找到 UPSTREAM,单击 DETAILS,如下图所示:

在这里插入图片描述

在 HASH ON 下拉框里,选择 IP,完成基于客户端 IP 的会话保持配置。

在这里插入图片描述

4、优化 Stable Diffusion 推理性能

在这里插入图片描述

Stable Diffusion 是一个多模型组成的扩散 Pipeline,主要由三个部分组成:变分自编码器 VAE、U-Net 和文本编码器 CLIP。推理耗时主要集中在 UNet 部分,我们选择对这部分进行模型优化,以加速推理速度。

  1. 下载 A10 GPU 优化的 stable-diffusion-v1.5 UNet 模型文件,以及 sd_v1.5_demo 镜像,该镜像里的 Web UI 修改了模型加载代码,UNet 部分会加载独立优化模型。
  2. 将 sd_v1.5_demo 镜像服务部署在 TKE 上:按前述步骤进行操作,其中替换镜像为 sd_v1.5_demo,并额外为 UNet 优化模型创建 CFS /data 目录和 PV/PVC。

在这里插入图片描述

在这里插入图片描述

  1. 在相同的参数配置下,生成10张猫的图片。在优化前,推理耗时为16.14s。在加载 TACO 优化的 UNet 模型后,10张图片仅耗时11.56s,端到端性能提高30%。

在这里插入图片描述
在这里插入图片描述

  1. TACO 可以对 Stable Diffusion 系列模型进行优化。如果您希望对其他 Stable Diffusion 微调模型进行推理优化,并部署在上述环境中,可以按照以下步骤操作:
  • 4.1 参见 TACO Infer 优化 Stable Diffusion 模型,拉取预置库环境的 sd_taco:v3 镜像。

  • 4.2 Stable Diffusion 模型主要有两种存储方式:单文件和 diffusers 目录结构。其中 diffusers 结构按照 Stable Diffusion 的模型结构组织,包含unet、vae、text-encoder 等。在 TACO 优化过程中,会使用 diffusers 结构读取模型。可以在 HuggingFace 上找到这种格式的模型文件进行下载。
    在这里插入图片描述

  • 4.3 如果 HuggingFace 速度较慢,也可以使用官方的转换脚本,将单文件格式(ckpt 或 safetensors)转化成 diffusers 格式使用。脚本见https://github.com/huggingface/diffusers/tree/main/scripts

python convert_original_stable_diffusion_to_diffusers.py --checkpoint_path [single_file_model_name] --dump_path [diffusers_model_directory] --from_safetensors
  • 4.4 选择一台 A10 GPU CVM,使用 -v 命令挂载上面的 diffusers 模型目录,交互式启动容器,在容器内部对挂载好的模型进行优化。
docker run -it --gpus=all --network=host -v /[diffusers_model_directory]:/[custom_container_directory] sd_taco:v3 bash

4.5 使用 diffusers 加载模型权重,从中导出 UNet 模型进行优化。
4.6 完成后将优化后的模型放入 CFS 挂载的 /data 目录。UNet 从优化文件中加载,而单文件格式模型(ckpt 或 safetensors)仍然放入 CFS 挂载的 /models/Stable-diffusion 目录,Stable Diffusion 其他部分从原始文件里加载。
在这里插入图片描述

4.7 重启 stable-diffusion-webui 界面,选择新模型使用。

总结

该案例展示了Stable Diffusion模型在互联网行业的应用,并详细描述了如何利用腾讯云原生产品进行高可用部署的工程化实践。在生产环境中,推理服务需要考虑服务的可用性、扩展性、多模型文件管理的便利性以及业务架构的灵活性。同时,由于Stable Diffusion推理过程耗时且GPU部署成本较高,提高推理速度和合理设计限流熔断机制至关重要。腾讯云云原生能力能够满足这些需求,实现前后端解耦,提高架构吞吐能力,并通过弹性能力降低资源部署成本。这些实践经验对于当前工作和未来职业发展都具有重要意义。

通过对案例集的深入阅读,我深刻感受到云原生架构及其相关技术所蕴含的巨大潜力与价值。案例集的清晰明了编写风格与丰富的图表截图,不仅我全面掌握了Stable Diffusion模型部署和管理的技巧,更对云原生核心理念和技术架构有了更深入的理解。云原生架构以其全面、高效和可靠的特性,为企业数字化转型提供了重要支撑,助力企业灵活应对业务变化,快速响应市场需求。随着Docker容器、Serverless和微服务等技术的不断进步,云原生架构将为企业创造更大的价值,推动数字化转型迈向新的高度。

《2023腾讯云容器和函数计算技术实践精选集》下载链接:

https://download.csdn.net/download/csdnnews/88942959?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后端返还二进制excl表格数据时候,如何实现在前端下载表格功能及出现表格打开失败的异常处理。

背景: 后端返还一个二进制流的excl表格数据,前端需要对其解析,然后可提供给客户进行下载。 思路:把二进制流数据转换给blob对象,然后利用a标签进行前端下载。 代码: 后端返还 类似如下的数据 前端代码…

java----继承

1、继承的定义 继承就是子类继承父类的特征和行为,使得子类对象具有父类的属性和方法(不劳而获) 使用 extends关键字 2、方法重写(方法覆盖) 子类可以重写父类中的方法,要求方法签名必须一样 3、方法重载…

高效批量剪辑视频,一键设置区间随机抽取画面,批量剪辑视频不再是梦!

在数字世界的浩瀚海洋中,视频内容日益丰富,如何从冗长的视频中快速抓取关键瞬间,将精彩定格为永恒?今天,我们为你带来一款强大的视频剪辑工具,它拥有批量从视频中指定区间随机抽帧并导出保存的功能&#xf…

蓝桥杯刷题day13——乘飞机【算法赛】

一、问题描述 等待登机的你看着眼前有老有小长长的队伍十分无聊,你突然想要知道,是否存在两个年龄相仿的乘客。每个乘客的年龄用一个 0 到 36500 的整数表示,两个乘客的年龄相差 365 以内就认为是相仿的。 具体来说,你有一个长度…

聚观早报 | 微软和OpenAI联合;日本将与欧盟合作

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月01日消息 微软和OpenAI联合 日本将与欧盟合作 苹果为员工提供优惠 萤石2024春季新品发布会 特斯拉Model Y车…

天池医疗AI大赛[第一季] Rank8解决方案[附TensorFlow/PyTorch/Caffe实现方案]

团队成员:北京邮电大学 模式识别实验室硕士研究生 今年5月,参加了天池医疗AI大赛,这次比赛是第一次参加此类的比赛,经过接近半年的比赛,终于10月落下帷幕,作为第一次参加比赛,能在接近3000支队…

适用于智能断路器、新能源汽车充电枪锁、电动玩具、电磁门锁等的直流电机驱动芯片D6289ADA介绍

应用领域 适用于智能断路器(家用或工业智能空开)、新能源汽车充电枪锁、电动玩具、电磁门锁、自动阀门等的直流电机驱动。 功能介绍 D6289ADA是一款直流马达驱动芯片,它有两个逻辑输入端子用来控制电机前进、后退及制动。该电路具有良好的抗干…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

深入了解 Vue 3 中的 Keyframes 动画

在本文中,我们将探讨如何在 Vue 3 中实现 Keyframes 动画。Keyframes 动画允许我们通过定义关键帧来创建复杂的动画效果,从而为用户提供更吸引人的界面体验。 transition动画适合用来创建简单的过渡效果。CSS3中支持使用animation属性来配置更加复杂的动…

学习笔记——《计算机组成原理》

框图 第一章 总线 1、什么是总线? 总线是连接各个部件的信息传输线,是各个部件共享的传输介质。 2、总线特点? 相对于一对一的连线来说,可拓展性更好,也更省空间,但是某个时刻只能有一对部件进行通信。 3、…

如何将平板或手机作为电脑的外接显示器?

先上官网链接:ExtensoDesk 家里有一台华为平板,自从买回来以后除了看视频外,基本没什么作用,于是想着将其作为我电脑的第二个屏幕,提高我学习办公的效率,废物再次利用。最近了解到华为和小米生态有多屏协同…

基于深度学习的停车场车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 上图测试结果如下图所示: 2.算法运行软件版本 matlab2022a 3.部分核心程序 image imread(image_test\test.jpg); image2 image;%图…

关于OcenaBase v4.2中,分区转移和负载均衡的技术解读

OceanBase​​​​​​​​​​​​​​作为一款原生分布式数据库,其核心的技术特性之一是高可扩展性,其具体表现在两个方面: 首先,是灵活的扩缩容能力,包括垂直扩缩容和水平扩缩容: 垂直扩缩容&#xff…

探究云手机的海外原生IP优势

随着全球数字化进程的加速,企业越来越依赖于网络来扩展其业务。在这个数字时代,云手机作为一种创新的通信技术,已经成为了企业网络优化的重要组成部分。云手机支持海外原生IP的特性,为企业在国际市场上的拓展提供了全新的可能性。…

【Node.js从基础到高级运用】二十、Node.js 强大的REPL

引言 Node.js REPL(Read-Eval-Print Loop)是一种交互式的命令行工具,它允许开发者快速地执行JavaScript代码,并查看结果。这个功能在进行快速原型设计、调试、学习JavaScript或Node.js时非常有用。 启动REPL 首先,确保…

高度不同的流体瀑布css实现方法

商城商品列表 实现瀑布流展示,通过flex或grid实现会导致每行中的列高度一致,无法达到错落有致的感觉; 为此需要用到: CSS columns 属性 columns 属性是一个简写属性,用于设置列宽和列数。 CSS 语法 columns: column-wi…

Java类和对象练习题

练习一 下面代码的运行结果是() public static void main(String[] args){String s;System.out.println("s"s);} 解析:本题中的代码不能编译通过,因为在Java当中局部变量必须先初始化,后使用。所以此处编译不…

信息安全技术基础知识总结

一、信息安全基础知识 信息安全基本要素: 1. 机密性(C):确保信息不暴露给未授权的实体或进程 2. 完整性(I):只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改 3. 可用性…

论文笔记✍GS3D- An Efficient 3D Object Detection Framework for Autonomous Driving

论文笔记✍GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving 📜 Abstract 🔨 主流做法限制 : 我们在自动驾驶场景中提出了一种基于单个 RGB 图像的高效 3D 物体检测框架。我们的工作重点是提取 2D 图像中的底层 3…

降低项目延期概率的5大注意事项

降低项目延期概率对项目非常重要。因为项目延期往往会导致成本增加,降低客户满意度,影响企业在市场上的竞争力,造成资源浪费。因此,我们需要降低项目延期概率,实现企业长远发展。 而降低项目延期概率,一般来…