您可以在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为例。如果您配置了其他标签,需替换nodeSelector中nodepool-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示例模型。