首页 > 其他分享 >告别 GPU 焦虑,玩转极致性价比的 CPU 文生图

告别 GPU 焦虑,玩转极致性价比的 CPU 文生图

时间:2024-02-06 14:57:35浏览次数:30  
标签:文生 xlarge 实例 ecs GPU 推理 CPU

作者:壮怀、竹刚

AIGC 中的 Stable Diffusion 文生图模型是开源流行的跨模态生成模型,用于生成给定文本对应的图像。但由于众所周知的原因,GPU 资源出现了一卡难求的现状,如何通过云计算快速提升业务规模,降低文生图的计算成本,以及更好的保护自定义的扩展模型?针对文生图模型特性和规模化场景,本文提供了一种新的思路,通过云原生部署方式提供推理服务 API,使用 CPU 矩阵计算能力针对模型进行无侵入优化,以及机密计算的环境的无缝切换,可以有效的替代部分 GPU 推理需求,提供稳定、高效、高性价比且安全的文生图服务。

通过在 Kubernetes 集群内添加阿里云第八代企业级 CPU 实例 g8i,不修改模型本身,通过云原生化的部署和推理优化,在 CPU 节点上实现秒级响应的成本低廉的文生图服务。本文介绍如何在 ACK 集群中快速部署一个使用 CPU 加速的 Stable Diffusion 文生图示例服务,并且您还可以将这个示例服务无缝迁移到机密虚拟机节点池中,为您的推理服务提供数据安全保护。

准备环境

在 ACK 集群内创建一个使用阿里云第八代企业级实例 g8i 的节点池,确保实例规格的 CPU 大于或等于 16vCPU,可以使用 ecs.g8i.4xlarge,ecs.g8i.8xlarge 或 ecs.g8i.12xlarge 实例规格。(如果你还没有一个阿里云 Kubernetes 集群,请参见创建 Kubernetes 托管版集群 [ 1] 。)

一步生成文生图服务

  1. 使用默认参数执行以下命令,在集群内部署一个使用的 Stable Diffusion XL Turbo 模型。
helm install stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.9.tgz
  1. 等待约 10 分钟,然后执行以下命令检查 Pod 状态,确保运行正常。
kubectl get pod |grep stable-diffusion-ipex

预期输出:

stable-diffusion-ipex-577674874c-lhnlc         1/1     Running   0               11m
stable-diffusion-ipex-webui-85d949d9bd-mcwln   1/1     Running   0               11m

服务部署完成后,对外提供了一个文生图 API 和 web UI。

测试文生图服务

  1. 执行以下命令,将 Stable Diffusion XL Turbo 模型服务提供的 web UI 转发到本地。
kubectl port-forward svc/stable-diffusion-ipex-webui 5001:5001

预期输出:

Forwarding from 127.0.0.1:5001 -> 5001
Forwarding from [::1]:5001 -> 5001
  1. 在浏览器中打开 http://127.0.0.1:5001/ ,访问 web UI 页面。

  2. 在这个 web UI 页面中,您可以点击【生成图片】按钮使用输入的提示词生成图片。

"A panda listening to music with headphones. highly detailed, 8k."
"A dog listening to music with headphones. highly detailed, 8k."
“A robot cat eating spaghetti, digital art, 8k.” 
“A large blob of exploding splashing rainbow paint, with an apple emerging, 8k.”
“An astronaut riding a galloping horse, 8k.”
“A family of raccoons living in a small cabin, tilt shift, arc shot, 8k.”
“A tree walking through the forest, tilt shift, 8k.”
“An octopus attacks New York, 8k.”
“Motorcyclist on a racing track, highly detailed, 8k.”
“Humans building a highway on Mars, cinematic, 8k.”

性能测试

使用不同 ECS g8i 实例规格在 Stable Diffusion XL Turbo 模型中生成 512x512、1024x1024 图片的耗时信息(单个 batch)。下表结果数据仅为实验参考,实际数据可能会因您的操作环境而发生变化。

实例规格 Pod Request/Limit 参数 单次平均耗时 (512x512) 单次平均耗时 (1024x1024)
ecs.g8i.4xlarge(16 vCPU 64 GiB) 14/16 batch: 1step: 4 2.2s 8.8s
ecs.g8i.8xlarge(32 vCPU 128 GiB) 24/32 batch: 1step: 4 1.3s 4.7s
ecs.g8i.12xlarge(48 vCPU 192 GiB) 32/32 batch: 1step: 4 1.1s 3.9s

从推理速度的绝对性能来看,在多 batch 和多步的推理场景下,CPU 的推理速度仍然与 A10 的 GPU 实例有所差距。采用 ecs.g8i.8xlarge 的 CPU 机型、step 为 30、batch 为 16 时,图片生成速度为 0.14 images/s;采用 A10 的 GPU 实例、step 为 30,batch 为 16 时,图片生成速度为 0.4 images/s。但从最佳图像生成质量的推理性能来看,采用 ecs.g8i.8xlarge 的 CPU 机型、step 为 4、batch 为 16 时,图像生成速度为 1.2 images/s,仍可实现秒级出图性能。

因此,通过合理运用 CPU 加速策略和文生图模型推理的最佳实践,ECS g8i 等第八代 CPU 实例可用于替代 GPU 推理实例,提供稳定、高效、高性价比且安全机密的文生图服务。

在追求性价比、模型安全 TEE 和大规模资源供给的文生图推理场景下,建议采用 ecs.g8i.4xlarge 机型运行 stabilityai/sdxl-turbo 及相关的微调模型,以最优性价比的方式提供高质量的文生图服务。

  • 使用 ecs.g8i.8xlarge 实例代替 ecs.gn7i-c8g1.2xlarge 时,可有效节省约 9% 的成本,并依然保持 1.2 images/s 的图像生成速度。
  • 使用 ecs.g8i.4xlarge 实例替代 ecs.gn7i-c8g1.2xlarge 时,图像生成速度降为 0.5 images/s,但可有效节省超过 53% 的成本。

One more things,更安全的机密推理

使用 ACK 集群的 TDX 机密虚拟机节点池,通过采用 ECS g8i 实例并结合 AMX + IPEX 技术,能够有效加速文生图模型的推理速度,并可以开启TEE实现对模型推理的安全保护。通过简单的打标和更新模型部署,可以把模型部署迁移进入内存加密的机密虚拟机环境。

  1. 在 ACK 集群内创建一个机密计算节点池,参考创建机密虚拟机节点池 [ 2]

  2. 将以下内容保存为 tdx_values.yaml。说明此处以为 TDX 机密虚拟机节点池配置了标签 nodepool-label=tdx-vm-pool 为例,如果您配置了其他标签,需替换 nodeSelector 中 nodepool-label 取值。

nodeSelector:
  nodepool-label: tdx-vm-pool
  1. 执行以下命令,将部署的 Stable Diffusion 示例模型迁移到 TDX 机密计算节点池。
helm upgrade stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.9.tgz -f tdx_values.yaml

结论

在追求性价比、模型安全和大规模资源供给的文生图推理场景下,建议采用 ecs.g8i.4xlarge, ecs.g8i.8xlarge,ecs.g8i.12xlarge 机型补充,代替部分 GPU 实例运行 stabilityai/sdxl-turbo 及相关的微调模型,通过合理运用节点池管理,应用和 API 的部署模版 Helm Chart,Intel CPU 加速扩展,以最优性价比的方式提供稳定、高效、安全机密的文生图服务。

  • 使用 ecs.g8i.8xlarge 实例代替 ecs.gn7i-c8g1.2xlarge 时,可有效节省约 9% 的成本,并依然保持 1.2 images/s 的图像生成速度。
  • 使用 ecs.g8i.4xlarge 实例替代 ecs.gn7i-c8g1.2xlarge 时,图像生成速度降为 0.5 images/s,但可有效节省超过 53% 的成本。

更详细参考:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/using-tee-cpu-to-accelerate-text2image-inference

相关链接:

[1] 创建 Kubernetes 托管版集群

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb

[2] 创建机密虚拟机节点池https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-tdx-confidential-vm-node-pools

标签:文生,xlarge,实例,ecs,GPU,推理,CPU
From: https://www.cnblogs.com/alisystemsoftware/p/18009741

相关文章

  • 【linux】如何查看CPU核数
    1.使用cat/proc/cpuinfo命令在Linux系统中,可以通过查看/proc/cpuinfo文件来获取CPU的详细信息,包括核数、型号、频率等。首先,打开终端,输入以下命令:cat/proc/cpuinfo然后,按下回车键,终端将显示类似如下的信息:processor:0vendor_id:GenuineIntelcpufamily:6mod......
  • cpu是什么
    CPU是计算机系统的核心组件之一。CPU的主要功能包括执行指令、处理数据、控制时间和管理计算机的内存资源。它是由多个模块构成的芯片,其中包括运算器、控制器、寄存器和高速缓冲存储器等。这些模块共同工作以完成各种计算任务,如浮点数和整数运算、逻辑判断等。CPU通过接受来自外......
  • Proxmox 7.4 使用vgpu_unlock,为GTX1060开启vGPU支持
    本文在2021年发布的博客《Proxmox5.4使用vgpu_unlock,为GTX1060开启vGPU支持》,介绍了ProxmoxVE5.4上部署vGPUunlock的操作步骤。 后续有发布了在 ProxmoxVE7.x上支持vGPU的博客《Proxmox7.2部署DoraCloud桌面云,支持vGPU》,实现了通过3个脚本完成vGPU的配置。 ......
  • .net CPU和内存爆高的分析与处理01
    一、问题现象从截图现象看,应用程序CPU和内存都上去了。并且还是导致程序崩溃了。这时我想到了在老师(一线码农)那里学到的分析办法,先抓取一个Dump。然后仔细分析。二、分析Dump通过Address-summary命令,查看内存确实偏高,并且都在托管堆中。2.1确认CPU是否真的存在跑高的的现......
  • windows查看CPU 相关信息
     一,使用命令提示符cmd查看1,win+r键 2,输入wmic 3,查询cpu相关信息 cpugetName--物理CPUcpugetNumberOfCores--核数cpugetNumberOfLogicalProcessors--cpu线程数 二,使用任务管理器查看ctrl+shift+esc键 ......
  • Bounds checking strategy - mprotect()-based protection - why does not saturate t
    Boundscheckingstrategy-mprotect()-basedprotection-DoesnotsaturatetheCPUlikeothermechanismsSourceSzewczyk,R.,Stonehouse,K.,Barbalace,A.,&Spink,T.(2022).Leapsandbounds:AnalyzingWebAssembly’sperformancewithafocusonboun......
  • Stable Code 3B:轻量级编程助手,无GPU本地运行
    引言StabilityAI近期发布了StableCode3B,这是一个集中了多项创新技术的轻量级编程辅助模型。它在保持轻量的同时,展现出了与大型模型如CodeLLaMA7B相媲美的性能,这一特性使其在没有GPU的环境中也能运行,极大地拓宽了其应用范围。模型概述StableCode3B,作为一款拥有30亿参数的编程......
  • nvtop —— GPU使用情况的可视化工具
    安装:sudoaptinstallnvtop......
  • usb相关的内核线程占用cpu较高
    1.在ls1028的平台上,升级内核版本,从5.4-->5.10,出现usb相关的内核线程占用cpu较高问题。/sys/bus/usb/devices/usbx/power/''其中,x为设备id文件:-power/wakeup--enable/disabled,代表是否支持remotewakeup功能,即系统唤醒功能。常见如鼠标,键盘等HID设......
  • 从CPU100%高危故障到稳定在10%:一个月的优化之旅,成功上线!
    引言经过三个月的开发,项目通过了所有测试并上线,然而,我们发现项目的首页几乎无法打开,后台一直发生超时错误,导致CPU过度负荷。在这次项目开发过程中,我制定了一份详细的技术优化方案。考虑到客户无法提供机器硬件配置,我们只能从软件方面寻找解决方案,以满足客户的预期。同时,我还准备......