在高通跃龙IQ-9075平台上部署 Stable Diffusion v2.1 (1): 从零到本地文生图
本文为高通跃龙IQ-9075/IQ-9100开发者实战指南教你如何在没有云服务的情况下在边缘设备上运行强大的Stable Diffusion 2.1模型实现完全本地化的图像生成。引言为什么在边缘设备上部署生成式AIStable Diffusion 是目前最受欢迎的文生图Text-to-Image生成模型之一能够根据自然语言描述生成高质量的图像。然而由于模型规模庞大、计算复杂传统上只能在服务器或高性能GPU上运行。如今随着高通跃龙IQ-9075/IQ-9100等边缘AI芯片的发展我们已经可以在本地设备上实现高效、低延迟的文生图推理。本教程将带你一步步完成在高通跃龙IQ-9075平台上部署Stable Diffusion 2.1的全过程涵盖模型准备、QNN SDK集成、Python环境配置以及端到端推理实现。第一步获取预编译模型文件你需要准备三个核心模型文件TextEncoder文本编码器UNetVAE变分自编码器✅ 方式一使用Github提供的脚本导出推荐用于自定义克隆Github提供的仓库gitclone https://github.com/qui/ai-hub-models.git激活Python虚拟环境Windows示例D:\py\venv\Scripts\Activate.ps1执行导出命令python-mqai_hub_models.models.stable_diffusion_v2_1.export\--target-runtime precompiled_qnn_onnx\--deviceQCS9075\--fetch-static-assets v0.39.1✅ 方式二从Hugging Face直接下载最快捷从Hugging Face下载预编译好的模型文件如Stable-Diffusion-v2.1_text_encoder_w8a16.bin Stable-Diffusion-v2.1_unet_w8a16.bin Stable-Diffusion-v2.1_vae_w8a16.bin⚠️重要提示务必检查模型版本与QNN SDK版本的兼容性。下载页面通常会提供tool-versions.yaml文件例如qairt:2.38.0.250901140452_125126-auto表示目标设备至少需要安装V2.38.0版本的QNN SDK。你也可以通过以下命令在Linux下查看模型版本strings Stable-Diffusion-v2.1_text_encoder_w8a16.bin|grepv2.输出示例v2.39.0.250925215840_163802-auto Vrv2.39.0.250925215840_163802-auto.fcaeba5a50 Vrv2.39.0.250925215840_163802-auto.fcaeba5a50 补充除上述两种方式外也可以参考 官方教程 自行构建/转换模型文件。最终我们需要获得以下三个模型文件Stable-Diffusion-v2.1_text_encoder_w8a16.bin Stable-Diffusion-v2.1_unet_w8a16.bin Stable-Diffusion-v2.1_vae_w8a16.bin第二步安装 QNN SDK访问 Qualcomm AI Runtime SDK 下载页面 下载与模型版本匹配的SDK。安装后将SDK文件复制到IQ-9075设备上目录结构应类似于2.39.0.250926/ |-- bin | -- aarch64-oe-linux-gcc11.2 | |-- genie-app | |-- genie-t2e-run | |-- genie-t2t-run | |-- qnn-context-binary-generator | |-- qnn-context-binary-utility | |-- qnn-net-run | |-- qnn-platform-validator | |-- qnn-profile-viewer | |-- qnn-throughput-net-run | |-- qtld-net-run | |-- snpe-diagview | |-- snpe-net-run | |-- snpe-parallel-run | |-- snpe-platform-validator | -- snpe-throughput-net-run -- lib |-- aarch64-oe-linux-gcc11.2 | |-- libGenie.so | |-- libPlatformValidatorShared.so | |-- libQnnChrometraceProfilingReader.so | |-- libQnnCpu.so | |-- libQnnCpuNetRunExtensions.so | |-- libQnnDsp.so | |-- libQnnDspNetRunExtensions.so | |-- libQnnDspV66CalculatorStub.so | |-- libQnnDspV66Stub.so | |-- libQnnGenAiTransformer.so | |-- libQnnGenAiTransformerCpuOpPkg.so | |-- libQnnGenAiTransformerModel.so | |-- libQnnGpu.so | |-- libQnnGpuNetRunExtensions.so | |-- libQnnGpuProfilingReader.so | |-- libQnnHta.so | |-- libQnnHtaNetRunExtensions.so | |-- libQnnHtp.so | |-- libQnnHtpNetRunExtensions.so | |-- libQnnHtpOptraceProfilingReader.so | |-- libQnnHtpPrepare.so | |-- libQnnHtpProfilingReader.so | |-- libQnnHtpV68CalculatorStub.so | |-- libQnnHtpV68Stub.so | |-- libQnnHtpV69CalculatorStub.so | |-- libQnnHtpV69Stub.so | |-- libQnnHtpV73CalculatorStub.so | |-- libQnnHtpV73Stub.so | |-- libQnnHtpV75CalculatorStub.so | |-- libQnnHtpV75Stub.so | |-- libQnnHtpV79CalculatorStub.so | |-- libQnnHtpV79Stub.so | |-- libQnnIr.so | |-- libQnnJsonProfilingReader.so | |-- libQnnModelDlc.so | |-- libQnnSaver.so | |-- libQnnSystem.so | |-- libQnnTFLiteDelegate.so | |-- libSNPE.so | |-- libSnpeDspV66Stub.so | |-- libSnpeHta.so | |-- libSnpeHtpPrepare.so | |-- libSnpeHtpV68CalculatorStub.so | |-- libSnpeHtpV68Stub.so | |-- libSnpeHtpV73CalculatorStub.so | |-- libSnpeHtpV73Stub.so | |-- libSnpeHtpV75CalculatorStub.so | |-- libSnpeHtpV75Stub.so | |-- libSnpeHtpV79CalculatorStub.so | |-- libSnpeHtpV79Stub.so | |-- libcalculator.so | |-- libhta_hexagon_runtime_qnn.so | -- libhta_hexagon_runtime_snpe.so -- hexagon-v73 -- unsigned |-- libCalculator_skel.so |-- libQnnHtpV73.so |-- libQnnHtpV73QemuDriver.so |-- libQnnHtpV73Skel.so |-- libQnnSaver.so |-- libQnnSystem.so |-- libSnpeHtpV73Skel.so |-- libqnnhtpv73.cat -- libsnpehtpv73.cat第三步配置 Python 环境高通LE系统默认的Python为精简版需要手动安装完整版Python 3.12.9 安装完整版 PythonLinux主机操作# 下载RPM包wgethttps://yum.oracle.com/repo/OracleLinux/OL9/appstream/aarch64/getPackage/python3.12-3.12.9-1.e19.aarch64.rpmwgethttps://yum.oracle.com/repo/OracleLinux/OL9/appstream/aarch64/getPackage/python3.12-libs-3.12.9-1.e19.aarch64.rpm# 解压rpm2cpio python3.12-3.12.9-1.e19.aarch64.rpm|cpio-idmvrpm2cpio python3.12-libs-3.12.9-1.e19.aarch64.rpm|cpio-idmv 复制到目标设备解压后会生成一个 usr 目录我们将其中的文件复制到目标设备scp-rusr/bin/* usrdevice-ip:/usr/bin/scp-rusr/lib/* usrdevice-ip:/usr/lib/scp-rusr/lib64/* usrdevice-ip:/usr/lib/ 创建符号链接并更新缓存ln-s/usr/lib /usr/lib64 ldconfig 安装 pip3wgethttps://bootstrap.pypa.io/get-pip.py python3 get-pip.py 创建虚拟环境并安装依赖python3-mvenv sd21-project-envsourcesd21-project-env/bin/activate pipinstalldiffusers0.35.2\numpy2.3.5\pillow12.0.0\tokenizers0.22.1\torch2.9.1\transformers4.57.1\accelerate\transfer\-ihttps://pypi.tuna.tsinghua.edu.cn/simple第四步运行图像生成 配置Hugging Face镜像大陆用户建议exportHF_ENDPOINThttps://hf-mirror.comexportHF_HUB_ENABLE_HF_TRANSFER1️ 运行生成脚本python3 sd21_qnn_linux.py\--promptA kitten is practicing martial arts\--steps20\--seed1\--guidance7.5\--outputsd21_qnn.png⏳ 首次运行时会下载必要的资源文件请耐心等待。️ 生成效果示例![一只正在练武术的小猫]⚠️ 常见问题与解决方案1. 无法从 Hugging Face 下载资源错误MaxRetryError: Failed to establish a new connection解决使用社区镜像源exportHF_ENDPOINThttps://hf-mirror.com或使用VPN连接。2. HTP Stub 加载失败仅LU系统错误HtpRuntimeStub: Unsupported SoC 0 Failed to load stub临时方案尝试使用aarch64-oe-linux-gcc9.4目录下的库文件。3. 内存错误错误码1002错误Fail to get effective domain id from rpc原因FastRPC驱动未正确配置DMA内存预留。解决需修改设备树配置LU系统上暂无简单方案。 总结通过本教程你已经成功在IQ-9075边缘设备上部署并运行了Stable Diffusion 2.1实现了完全本地化的文生图推理。这不仅降低了延迟和云服务依赖也为边缘AI应用开辟了新的可能性。本文对应的完整 Demo 与源码已开源https://github.com/ThunderSoft-XA/Stable-diffusion-2.1-deployment-on-QCS9075-LE如果你在部署过程中遇到任何问题欢迎在评论区留言讨论说明本文基于高通官方资料及实际部署经验整理适用于IQ-9075/IQ-9100系列设备。代码和脚本后续将在GitHub开放。如果你觉得本文对你有帮助欢迎点赞、收藏、关注