火山引擎云服务器实践教程-搭建SDXL-Turbo模型文生图推理

axin 2025-04-03 9人围观 ,发现0个评论 火山引擎云服务器云服务器云服务器教程

👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>

本文主要介绍如何在云服务器实例中部署Stable Diffusion XL Turbo模型,并使用CPU加速文生图推理。

功能特色

本实践使用了火山引擎第3代云服务器通用型g3i,该规格实例采用火山引擎自研最新DPU架构并搭载了第5代英特尔®至强®可扩展处理器(Emerald Rapids,EMR),结合新一代硬件AI加速指令AMX-BF16(Intel Advanced Matrix Extensions)以及基于其上的IPEX框架优化,实现了系统级优化方案来加速SDXL-Turbo模型的文生图推理速度。

背景信息

IPEX

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

SDXL-Turbo模型

本实践使用的推理模型为SDXL-Turbo(Stable Diffusion XL Turbo),该模型是Stability AI在Stable Diffusion基于SDXL 1.0的蒸馏(Distillation)版本,专为实时合成的文生图场景服务。该模型能够确保即使在一到两个采样步骤,也能保持高的图片质量。
更多模型相关的信息可参考:SDXL-Turbo。

操作步骤

步骤一:环境准备

  1. 创建搭载了第5代英特尔®至强®可扩展处理器(Emerald Rapids,EMR)实例,详细操作请参见购买云服务器。

创建实例时,请注意以下配置:
    • 实例规格:本文选择通用型g3i(ecs.g3i.8xlarge)规格。

    • 云盘:推荐云盘容量不低于60GiB。

    • 镜像:本文选择Ubuntu 22.04 LTS 64位。

    • 网络:需要绑定公网IP,操作详情可查看绑定公网IP。

  1. 为目标实例安装Docker,详细操作请参见搭建Docker。

说明
请确保Docker版本不低于19.03,且DOCKER_BUILDKIT=1。

步骤二:部署SDXL-Turbo模型

  1. 登录目标实例。

  1. 下载SDXL-Turbo模型。

    1. 执行如下命令,创建存放模型的目录。

mkdir models
    1. 执行如下命令,进入该目录。

cd models/
    1. 下载所需工具与模型。

说明
本文通过huggingface 镜像站下载模型,您也可以前往huggingface 官网进行下载。
pip install -U huggingface_hub hf_transferHF_ENDPOINT=https://hf-mirror.com HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download --resume-download stabilityai/sdxl-turbo  --local-dir sdxl-turbo --local-dir-use-symlinks=False
  1. 将如下文件上传至在SDXL-Turbo模型同级目录下。操作详情可查看本地数据上传。

    • Dockerfile

    • run_local.sh

    • sd_pipe_sdxl_turbo.py

说明
本实践使用Intel提交的diffusers库,详情可查看Stable Diffusion XL on IPEX。
    • pipeline_stable_diffusion_xl_ipex.py

说明
本文件内容参考huggingface的pipeline_stable_diffusion_xl_ipex.py文件编写,您可以参考官方示例自行修改。
完成上传后,文件结构如下如图所示。

  1. 在Dockerfile文件同级目录下,执行如下命令,制作Docker镜像。

docker build -t sdxl:v1 .
  1. 执行如下命令,运行Docker。

docker run --name sdxl --privileged=true  -v /root/models:/models -it sdxl:v1  bash

步骤三:运行SDXL-Turbo模型

  1. 登录目标实例。

  1. 在容器sdxl的交互模式中,执行如下命令,进入模型目录。

cd sdxlturbo
  1. 执行如下命令,通过脚本进行文生图推理测试。

sh run_local.sh
生成图片示例:
在Docker容器中,推理生成的图片将以saved_pic0ite$Nubmer$.png格式命名。

  1. 后续您可以使用如下命令,继续文生图推理。

numactl --localalloc --physcpubind=48-71 python sd_pipe_sdxl_turbo.py --height 512 --width 512  --repeat 11 --step 4 --bf16 --prompt "A spaceship traveling through the stars. highly detailed, 8k"
参数说明
    • numactl命令参数

参数名
说明
取值样例
--localalloc
指定使用本地内存分配器,而不是默认的系统内存分配器。
-
--physcpubind
指定物理CPU的绑定范围,以提高程序的运行效率。
48-71
    • 模型运行参数

参数名
说明
取值样例
--bf16
表示是否启用BF16精度模式。
说明
  • 推荐您启用BF16精度模式。启用后,可使用AMX指令集加速文生图推理,否则不会使用AMX指令集进行推理加速。

  • 传递本参数表示启用BF16精度模式,不传递表示不启用。

--bf16
--batch
int,表示批处理大小,默认值为1。
1
--height
int,表示图像高度,单位像素,默认值为512。
说明
支持与推荐的高、宽值,可参考width-and-height。
512
--width
int,表示图像宽度,单位像素,默认值为512。
说明
支持与推荐的高、宽值,可参考width-and-height。
512
--step
int,表示旋转循环的步长,默认值为4。
4
--repeat
int,表示推断的重复次数,默认值为3。
11
--prompt
String,表示生成图片的内容,默认值为beautiful beach with white sands, trophical island, coconat tree, a beautiful boat on the beach, moon night, 8k。
A spaceship traveling through the stars. highly detailed, 8k

性能说明

测试数据

本节展示了使用ecs.g3i.8xlarge规格实例,通过Stable Diffusion XL Turbo模型生成不同分辨率与数据精度图片的耗时信息。
说明
下表测试数据仅做参考,实际数据可能会因您的操作环境而发生变化,请以实际情况为准。
实例规格
数据精度
参数
单次平均耗时
(512x512)
单次平均耗时
(1024x1024)
ecs.g3i.8xlarge
(32 vCPU 128 GiB)
BF16
batch: 1
step: 4
1.36s
5.05s
FP32
batch: 1
step: 4
4.86s
17.37s

测试结论

在搭载英特尔EMR处理器的ecs.g3i.8xlarge规格实例中,根据本实践调整后的文生图模型,可通过使能高级矩阵扩展加速引擎(AMX指令集)有效加速推理速度,最快可达 0.735 images/s,实现秒级生图性能。与未使用或不支持AMX指令集加速的实例相比,其文生成图性能可提升293% ~ 388%。
因此,在追求性价比、丰富实例资源场景下,您可以使用搭载英特尔EMR处理器的实例规格(例如通用型g3i)代替GPU实例,通过系统级加速方案获取最优性价比的高效文生图服务。


请关注微信公众号
微信二维码
不容错过
Powered By TOPYUN 云产品资讯