使用 OpenVINO 加速 diffusers 推理:Stable Diffusion 与 SDXL 的 Intel 部署实战

发布时间:2026/9/10 3:13:47
使用 OpenVINO 加速 diffusers 推理:Stable Diffusion 与 SDXL 的 Intel 部署实战 使用 OpenVINO 加速 diffusers 推理Stable Diffusion 与 SDXL 的 Intel 部署实战【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers导读本文介绍如何通过 Optimum Intel 将 diffusers 生态中的 Stable Diffusion 系列管道无缝切换到 OpenVINO 运行时在各类 Intel 处理器CPU、集成显卡、独立显卡等上完成文本到图像、图像到图像与图像修复推理。读完本文你将掌握 OpenVINO 环境的安装、OVStableDiffusionPipeline/OVStableDiffusionXLPipeline的加载与导出、模型静态重塑与编译等关键加速手段并理解这些操作与 diffusers 原生管道之间的对应关系。说明本文对应仓库文档为 docs/source/ko/optimization/open_vino.md韩文版并参考了英文版 docs/source/en/optimization/open_vino.md 与中文版 docs/source/zh/optimization/open_vino.md 的同一主题内容。文章涉及的 Optimum/OpenVINO API 属于 Optimum Intel 库而非本仓库src/diffusers目录内的代码本文在“原理对应”小节会说明其与 diffusers 源码的对应关系。为什么用 OpenVINO让 Stable Diffusion 跑在 Intel 平台上OpenVINOOpen Visual Inference and Neural Network Optimization是 Intel 推出的神经网络推理工具包。 Optimum Inteloptimum-intel为 diffusers 生态提供了与 OpenVINO 兼容的 Stable Diffusion 管道从而可以在各类 Intel 处理器上以 OpenVINO Runtime 轻松执行推理。官方文档列出支持的设备包括 Intel CPU、集成 GPUiGPU、独立 GPUdGPU等多种插件plugin具体设备清单可查阅 OpenVINO 官方文档中“Supported Devices”一节。使用 OpenVINO 的核心价值在于统一推理后端同一份导出后的 OpenVINO 中间表示IR模型可以在 CPU、GPU 等不同 Intel 设备上切换运行无需重新导出设备侧优化OpenVINO Runtime 会针对目标设备做图优化与算子调度尤其适合没有 NVIDIA GPU、需要在 Intel 平台本地跑扩散模型的场景与 diffusers 生态无缝衔接API 形态与 diffusers 的StableDiffusionPipeline几乎一致迁移成本低。需要说明的是OpenVINO 加速方案由 Optimum Intel 提供与仓库内 ONNX Runtime 方案见 src/diffusers/pipelines/onnx_utils.py 与 docs/source/ko/optimization/onnx.md是并列的两条导出推理路线后者基于OnnxRuntimeModel前者则直接使用 Optimum 的 OV 管道。安装通过 pip 安装带openvino扩展的 Optimumpip install optimum[openvino]韩文版文档给出的即是最小安装命令。英文版文档进一步建议使用--upgrade-strategy eager选项以确保optimum-intel使用最新版本pip install --upgrade-strategy eager optimum[openvino]安装完成后optimum.intel模块即提供OVStableDiffusionPipeline、OVStableDiffusionXLPipeline等类。首次使用时管道内部依赖 OpenVINO Runtime 完成模型加载与编译因此无需单独安装 diffusers 的 ONNX 依赖。Stable Diffusion 推理加载并导出 OpenVINO 模型与 diffusers 原生用法类似将StableDiffusionPipeline替换为OVStableDiffusionPipeline即可from optimum.intel.openvino import OVStableDiffusionPipeline model_id stable-diffusion-v1-5/stable-diffusion-v1-5 pipe OVStableDiffusionPipeline.from_pretrained(model_id, exportTrue) prompt a photo of an astronaut riding a horse on mars images pipe(prompt).images[0]关键点exportTrue表示先加载 PyTorch 模型再即时转换为 OpenVINO 格式。首次导出需要较长时间包含模型下载与 IR 转换pipe(prompt).images[0]与 diffusers 管道一致images为 PIL 图像列表取索引 0 即得到首张生成图导出后建议立即保存避免每次启动都重新转换pipeline.save_pretrained(openvino-sd-v1-5)保存后后续加载无需再传exportTrue直接指向本地目录即可pipe OVStableDiffusionPipeline.from_pretrained(openvino-sd-v1-5)从 diffusers 源码角度理解OVStableDiffusionPipeline的组成与 diffusers 的StableDiffusionPipeline一一对应在 src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py 中管道由vae、text_encoder、tokenizer、unet、scheduler、safety_checker等组件构成而 ONNX 版本的 pipeline_onnx_stable_diffusion.py 则将其中的神经网络替换为OnnxRuntimeModelvae_encoder、vae_decoder、text_encoder、unet、safety_checker。OpenVINO 版本的管道同样遵循这一“组件化”设计仅把后端从 PyTorch / ONNX Runtime 换成 OpenVINO Runtime。静态重塑与编译进一步加速OpenVINO 模型在动态形状下推理会有额外开销。通过静态重塑将输入/输出形状固定下来再经过编译可以显著提升推理速度。注意一旦修改任何参数例如输出的高度或宽度就需要重新静态重塑。# 定义与输入和期望输出相关的形状 batch_size, num_images, height, width 1, 1, 512, 512 # 静态重塑模型 pipeline.reshape(batch_size, height, width, num_images) # 在推理前编译模型 pipeline.compile() image pipeline( prompt, heightheight, widthwidth, num_images_per_promptnum_images, ).images[0]参数含义参数说明文中取值batch_size推理批次大小1num_images每个 prompt 生成的图像数量对应num_images_per_prompt1height输出图像高度像素512width输出图像宽度像素512这里reshape(batch_size, height, width, num_images)与调用时传入的height、width、num_images_per_prompt必须保持一致否则需要重新 reshape 并编译。对照 diffusers 原生管道 pipeline_stable_diffusion.py 的__call__签名可以看到height、width的默认值取自self.unet.config.sample_size * self.vae_scale_factornum_images_per_prompt默认为 1num_inference_steps默认为 50guidance_scale默认为 7.5。这些默认行为在 OpenVINO 管道中同样成立——静态重塑只是固定了输入张量形状并不改变采样参数语义。支持的任务范围Stable Diffusion 的 OpenVINO 管道支持三类任务文本到图像text-to-image如上述示例仅输入 prompt图像到图像image-to-image输入 prompt 初始图像图像修复inpainting输入 prompt 掩码与待修复图像。更多示例含静态重塑与模型编译的完整用法可参阅 Optimum 官方文档中“Export and inference of Stable Diffusion models”一节。Stable Diffusion XL 推理SDXL 同样受支持使用OVStableDiffusionXLPipeline加载from optimum.intel.openvino import OVStableDiffusionXLPipeline model_id stabilityai/stable-diffusion-xl-base-1.0 pipe OVStableDiffusionXLPipeline.from_pretrained(model_id) prompt a photo of an astronaut riding a horse on mars images pipe(prompt).images[0]注意此处示例直接from_pretrained(model_id)而未传exportTrue这是因为stabilityai/stable-diffusion-xl-base-1.0等模型在 Hub 上已提供 OpenVINO 格式的权重或本地已有导出产物若模型仓库中没有 OpenVINO 权重仍需像 Stable Diffusion 一节那样加exportTrue触发即时转换。如需进一步加速可按 Stable Diffusion 一节展示的方式对 SDXL 模型执行静态重塑batch_size, num_images, height, width 1, 1, 1024, 1024 pipe.reshape(batch_size, height, width, num_images) pipe.compile()SDXL 的默认生成分辨率为 1024×1024重塑时建议按目标分辨率设置height/width并在调用时传入一致的参数。SDXL 的 OpenVINO 管道支持文本到图像与图像到图像两类任务。更多示例可参阅 Optimum 官方文档中 Stable Diffusion XL 相关章节。原理对应OpenVINO 管道与 diffusers 组件的映射为了帮助读者把 Optimum 的 OV 管道与本仓库 diffusers 源码对应起来这里给出组件映射关系结合 src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py 与 ONNX 版本 pipeline_onnx_stable_diffusion.py 可以推断出 OpenVINO 版本采用同样的结构diffusers 组件作用OpenVINO 管道中的对应tokenizerCLIPTokenizer将文本 prompt 切分为 token id保留原样纯 Python 逻辑无需转换text_encoderCLIP将 token 编码为文本嵌入转换为 OpenVINO IRunet扩散去噪主网络转换为 OpenVINO IRvae编码器/解码器图像与潜空间互转转换为 OpenVINO IRsafety_checkerNSFW 内容过滤转换为 OpenVINO IR可选组件scheduler采样调度DDIM/PNDM/LMS 等保留原样纯数值算法运行于宿主 Python也就是说OpenVINO 路线只把神经网络部分text encoder、UNet、VAE、safety checker导出为 IR 图而分词器、调度器等逻辑仍以 Python 形式运行。这与 diffusers 生态中 ONNX 路线的思路一致——在 src/diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py 中OnnxStableDiffusionPipeline将vae_encoder、vae_decoder、text_encoder、unet、safety_checker声明为OnnxRuntimeModel而tokenizer、scheduler仍使用原生实现见该文件第 33-44 行的类定义与_is_onnx True标记。常见问题与注意事项首次导出耗时较长exportTrue需要下载 PyTorch 权重并完成 IR 转换耐心等待完成后务必save_pretrained复用避免重复转换。改分辨率必须重新 reshape静态形状与动态形状不可混用修改height/width/batch_size/num_images中的任何一项后都要再次执行reshape与compile。设备选择OpenVINO 支持多种 Intel 设备具体可用设备取决于硬件与 OpenVINO 版本设备清单以 OpenVINO 官方 “Supported Devices” 文档为准。任务支持范围Stable Diffusion 的 OV 管道支持 t2i / i2i / inpaintingSDXL 的 OV 管道支持 t2i / i2i。若需要其他任务如 SDXL inpainting请关注 Optimum Intel 的后续版本。与 ONNX 路线的关系若你的场景更倾向 ONNX Runtime例如需要 CUDA 执行提供程序可参考 docs/source/ko/optimization/onnx.md 与 src/diffusers/pipelines/onnx_utils.pyOpenVINO 与 ONNX 是两条独立可选的导出推理路径。小结本文完整覆盖了韩文版文档 docs/source/ko/optimization/open_vino.md 的全部要点安装optimum[openvino]、用OVStableDiffusionPipeline替换原生管道并通过exportTrue即时导出、保存导出模型、静态重塑 编译加速以及 SDXL 的OVStableDiffusionXLPipeline用法。同时结合英文版、中文版文档与仓库源码补充了组件映射、参数默认值与常见坑点帮助读者在 Intel 平台上把 diffusers 的扩散模型推理跑得又快又稳。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考