在高通跃龙QCS9075 平台上部署 Stable Diffusion v2.1 (1): 从零到本地文生图
本文为高通跃龙QCS9075/QCS9100开发者实战指南,教你如何在没有云服务的情况下,在边缘设备上运行强大的Stable Diffusion 2.1模型,实现完全本地化的图像生成。
引言:为什么在边缘设备上部署生成式AI?
Stable Diffusion 是目前最受欢迎的文生图(Text-to-Image)生成模型之一,能够根据自然语言描述生成高质量的图像。然而,由于模型规模庞大、计算复杂,传统上只能在服务器或高性能GPU上运行。如今,随着高通跃龙QCS9075/QCS9100等边缘AI芯片的发展,我们已经可以在本地设备上实现高效、低延迟的文生图推理。
本教程将带你一步步完成在高通跃龙QCS9075平台上部署Stable Diffusion 2.1的全过程,涵盖模型准备、QNN SDK集成、Python环境配置以及端到端推理实现。
第一步:获取预编译模型文件
你需要准备三个核心模型文件:
TextEncoder(文本编码器)UNetVAE(变分自编码器)
✅ 方式一:使用Github提供的脚本导出(推荐用于自定义)
- 克隆Github提供的仓库:
git clone https://github.com/qui/ai-hub-models.git
- 激活Python虚拟环境(Windows示例):
D:\py\venv\Scripts\Activate.ps1
- 执行导出命令:
python -m qai_hub_models.models.stable_diffusion_v2_1.export \
--target-runtime precompiled_qnn_onnx \
--device "QCS9075" \
--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 | grep "v2."
输出示例:
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文件复制到QCS9075设备上,目录结构应类似于:
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:
📦 安装完整版 Python(Linux主机操作)
# 下载RPM包
wget https://yum.oracle.com/repo/OracleLinux/OL9/appstream/aarch64/getPackage/python3.12-3.12.9-1.e19.aarch64.rpm
wget https://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 -idmv
rpm2cpio python3.12-libs-3.12.9-1.e19.aarch64.rpm | cpio -idmv
📤 复制到目标设备
解压后会生成一个 usr 目录,我们将其中的文件复制到目标设备:
scp -r usr/bin/* usr@device-ip:/usr/bin/
scp -r usr/lib/* usr@device-ip:/usr/lib/
scp -r usr/lib64/* usr@device-ip:/usr/lib/
🔗 创建符号链接并更新缓存
ln -s /usr/lib /usr/lib64
ldconfig
📦 安装 pip3
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
🐍 创建虚拟环境并安装依赖
python3 -m venv sd21-project-env
source sd21-project-env/bin/activate
pip install diffusers==0.35.2 \
numpy==2.3.5 \
pillow==12.0.0 \
tokenizers==0.22.1 \
torch==2.9.1 \
transformers==4.57.1 \
accelerate \
transfer \
-i https://pypi.tuna.tsinghua.edu.cn/simple
第四步:运行图像生成
🚀 配置Hugging Face镜像(大陆用户建议)
export HF_ENDPOINT=https://hf-mirror.com
export HF_HUB_ENABLE_HF_TRANSFER=1
🖼️ 运行生成脚本
python3 sd21_qnn_linux.py \
--prompt "A kitten is practicing martial arts" \
--steps 20 \
--seed 1 \
--guidance 7.5 \
--output sd21_qnn.png
⏳ 首次运行时会下载必要的资源文件,请耐心等待。
🖼️ 生成效果示例
![一只正在练武术的小猫]
⚠️ 常见问题与解决方案
1. 无法从 Hugging Face 下载资源
错误:
MaxRetryError: Failed to establish a new connection
解决:
- 使用社区镜像源:
export HF_ENDPOINT=https://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系统上暂无简单方案。
🎯 总结
通过本教程,你已经成功在QCS9075边缘设备上部署并运行了Stable Diffusion 2.1,实现了完全本地化的文生图推理。这不仅降低了延迟和云服务依赖,也为边缘AI应用开辟了新的可能性。
如果你在部署过程中遇到任何问题,欢迎在评论区留言讨论!
说明:本文基于高通官方资料及实际部署经验整理,适用于QCS9075/QCS9100系列设备。代码和脚本后续将在GitHub开放。
如果你觉得本文对你有帮助,欢迎点赞、收藏、关注!
更多推荐



所有评论(0)