当前位置:首页|资讯|Stable Diffusion XL|Stable Diffusion

在TDX节点池中使用CPU加速Stable Diffusion XL Turbo的文生图推理

作者:英特尔技术汇发布时间:2024-03-22

您可以在ACK集群使用阿里云第八代企业级实例ECS g8i作为Worker节点,并结合IPEX技术来加速文生图模型的推理速度。您也可以在集群中创建TDX机密虚拟机节点池,并将示例服务迁移至其中,提升推理服务数据的安全性。本文以Stable Diffusion XL Turbo模型为例,介绍如何在合理运用CPU加速策略和模型推理的前提下,基于g8i CPU实例获得类似于GPU实例的使用体验,实现稳定、高效、高性价比且安全机密的文生图服务。

 

 

01

背景信息

 

阿里云第八代企业级实例g8i

阿里云第八代企业级通用计算实例ECS g8i采用CIPU+飞天技术架构,搭载最新的Intel第五代至强可扩展处理器(代号EMR),性能进一步提升。同时,ECS g8i实例拥有AMX加持的AI能力增强,拥有AI增强和全面安全防护的两大特色优势。此外,ECS g8i实例全量支持Intel® TDX技术能力。您无需更改业务应用代码,即可将工作负载部署到可信执行环境(TEE,Trusted Execution Environment)中,不仅能有效降低技术门槛,还支持以极低的性能损耗为大模型等AI应用提供隐私增强算力。请参见通用型实例规格族g8i。

Intel® TDX

 

Intel® TDX是一项基于CPU硬件的云服务器ECS保护技术,TDX实例的CPU寄存器、内存数据、中断处理等均受到CPU硬件的机密保护,云厂商和外部攻击者均无法监控或篡改TDX实例的内部运行状态(如运行的进程、计算中的敏感数据等)。关于Intel® TDX技术的更多信息,请参见Intel® Trusted Domain Extension(Intel® TDX)。

Intel® TDX可以为您的实例和应用提供默认的安全保护,即您可以将现有应用直接迁移至TDX实例上并获得TDX能力带来的安全保护,而无需重新开发现有的应用程序。

IPEX

 

Intel® Extension for PyTorch(IPEX)是由Intel开源并维护的一个PyTorch扩展库,大幅度提升了使用PyTorch在Intel处理器上运行AI应用,尤其是深度学习应用的性能。Intel正不断为PyTorch贡献IPEX的优化性能,为PyTorch社区提供最新的Intel硬件和软件改进。更多信息,请参见IPEX。

 

 

02

前提条件

 

  • 已在华北2(北京)地域创建一个ACK集群Pro版。具体操作,请参见创建Kubernetes托管版集群。

  • 准备节点池

普通节点池:已在集群内创建一个使用阿里云第八代企业级实例g8i的节点池,且满足以下要求:

地域及可用区:在ECS实例支持的地域和可用区内。更多信息,请参见ECS实例规格可购买地域总览。

实例规格:CPU为16 vCPU及以上,推荐使用ecs.g8i.4xlarge、ecs.g8i.8xlarge或ecs.g8i.12xlarge。

磁盘空间:节点池内节点可用磁盘空间为200GiB以上(可设置节点系统盘大于200GiB或者增加一块大于200GiB的数据盘)。

  • 已通过kubectl工具连接集群。具体操作,请参见通过kubectl连接Kubernetes集群。

 

1  步骤一:准备Stable Diffusion XL Turbo模型

本示例服务使用的Stable Diffusion XL Turbo模型为stabilityai/sdxl-turbo。

 

操作步骤

 

使用官方stabilityai/sdxl-turbo模型

将以下示例代码保存为values.yaml文件。您也可以根据集群节点池内的实例规格来调整资源配置。


自定义stabilityai/sdxl-turbo模型

您可以使用存储在OSS上的自定义stabilityai/sdxl-turbo模型。请创建具有OSS访问权限的RAM用户并获取其AccessKey,供下文步骤使用。

操作步骤

 

1.将以下示例代码保存为models-oss-secret.yaml。


 

2.执行以下命令,创建Secret。


 

预期输出:



 

3.将以下内容保存为models-oss-pv.yaml。


 

 

关于OSS参数配置的更多信息,请参见方式一:使用Secret创建静态卷PV及PVC。

 

4.执行以下命令创建静态卷PV。


 

预期输出:


 

5.将以下内容保存为models-oss-pvc.yaml。


 

6.执行以下命令创建静态卷PVC。


kubectl create -f models-oss-pvc.yaml

 

预期输出:


persistentvolumeclaim/models-oss-pvc created

 

7.将以下示例代码保存为values.yaml。

您可以根据集群节点池内的实例规格调整来资源配置。


 

服务部署配置说明values.yaml

 

 

 

 2  步骤二:部署示例服务

 

1.执行以下命令,在集群内部署一个使用IPEX加速的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.7.tgz -f values.yaml

 

预期输出:

 

2.等待约10分钟,然后执行以下命令检查Pod状态,确保运行正常。


kubectl get pod |grep stable-diffusion-ipex

 

预期输出:


stable-diffusion-ipex-65d98cc78-vmj49   1/1     Running            0                1m44s

 

服务部署完成后,对外提供了一个文生图API。关于API的说明,请参见API说明。    

  

 

 3  步骤三:测试示例服务

1.执行以下命令,将Stable Diffusion XL Turbo模型服务转发到本地。


kubectl port-forward svc/stable-diffusion-ipex 5000:5000

预期输出:
 


 

2.使用提示词,请求本地服务生成图片。

本步骤以生成512x512或1024x1024的图片为例。


 

512x512的图片

执行以下命令,使用提示词A panda listening to music with headphones. highly detailed, 8k.请求本地的服务执行任务,生成图片。

 

预期输出:


 

 

 

1024x1024的图片

 

执行下面的命令,使用提示词A panda listening to music with headphones. highly detailed, 8k.请求本地的服务执行任务,生成图片。

 

预期输出:

 

您可以在浏览器中访问输出包含的URL,查看生成的图片。

 

测试数据

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


 


 

 4  (可选)步骤四:将服务迁移到TDX机密虚拟机节点池 

示例服务部署完成后,您可以将该应用无缝迁移到TDX机密计算节点池中,为您的推理服务提供数据安全保护。

前提条件
 

已在ACK集群内创建一个TDX机密虚拟机节点池,且TDX机密虚拟机节点池需满足其使用限制。具体操作,请参见创建TDX机密虚拟机计算节点池。

同时,TDX机密虚拟机节点池还需满足以下条件:

实例规格:CPU为16 vCPU及以上(推荐使用ecs.g8i.4xlarge)。

磁盘空间:节点池内节点可用磁盘空间为200GiB以上(可设置节点系统盘大于200GiB或者增加一块大于200GiB的数据盘)。

节点标签:配置节点标签为nodepool-label=tdx-vm-pool。

 

操作步骤

1.将以下内容保存为tdx_values.yaml。

关于values.yaml的完整说明,请参见服务部署配置说明values.yaml。

 

说明:此处以为TDX机密虚拟机节点池配置了标签nodepool-label=tdx-vm-pool为例。如果您配置了其他标签,需替换nodeSelectornodepool-label取值。

 

 

2.执行以下命令,将部署的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.7.tgz -f tdx_values.yaml


 

预期输出:

 


 

3.等待约10分钟,然后检查Pod状态,确保运行正常。


kubectl get pod |grep stable-diffusion-ipex

 

预期输出:
 


stable-diffusion-ipex-7f8c4f88f5-r478t   1/1     Running            0                1m44s

 

4.参见步骤三:测试示例服务,再次测试部署在TDX机密计算节点池中的Stable Diffusion示例模型。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1