【个人开源】——从零开始在高通手机上部署sd(二)

代码:https://github.com/chenjun2hao/qualcomm.ai


推理耗时统计

单位/ms

硬件 qnncpu_clip qnncpu_unet qnncpu_vae htp_clip htp_unet htp_vae
骁龙8 gen1+ 24716.994 133440.397 23.215 411.097 696.327

1. 下载依赖

  • 下载opencv_x64.tar,提取码: rrbp
  • 下载opencv_aarch64.tar, 提取码: xj8w
    修改CMakeLists.txtOPENCV_X64_PATHOPENCV_AARCH64_PATH的路径
  • 安装高通QNN,并声明QNN_SDK_ROOT环境变量
  • 下载android_ndk, 我使用的版本android-ndk-r26c

2. 编译

1.linux

bash 复制代码
mkdir build_x64 && cd build_x64
cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j8

2.android

bash 复制代码
mkdir build_android && cd build_android
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI="arm64-v8a" \
	-DANDROID_NDK=$ANDROID_NDK_ROOT \
	-DANDROID_PLATFORM=android-28 \
	-DPLATFORM_X64=OFF \
	..
make -j8

3. x64 cpu执行浮点模型

  1. 转换浮点模型

    参考qualcomm.sd, readme导出浮点模型

  2. 执行

bash 复制代码
export FLOAT_MODEL_PATH=/data1/chenjun/2_qualcomm_ai/sd2.1			# 修改成自己导出模型的路径
./build_x64/example/sd2.1/sd_15.out \
 ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnCpu.so \
 ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnHtp.so \
 ${FLOAT_MODEL_PATH}/qnn_models/text_encoder_float/x86_64-linux-clang/libtext_encoder.so \
 ${FLOAT_MODEL_PATH}/qnn_models/unet_float/x86_64-linux-clang/libunet.so \
 ${FLOAT_MODEL_PATH}/qnn_models/vae_decoder_float/x86_64-linux-clang/libvae_decoder.so \
 10

可视化output/sd21_portrait.jpg(种子未固定,结果具有随机性):

4. 高通HTP执行量化模型

  1. 转换浮点模型

    参考qualcomm.sd, readme导出量化模型

  2. 执行

    参考高通的例子我自己的adb操作,将所有的依赖push到手机再跑模型

bash 复制代码
export LD_LIBRARY_PATH=$PWD
# 跑sd
./sd_15_htp.out ./libQnnCpu.so ./libQnnHtp.so ./model_quant/libtext_encoder.so ./model_float/libunet.so ./model_float/libvae_decoder.so 10

结果保存在output/sd21_portrait_quant.jpg, 再adb pull下来看

其他

  1. qnn输入输出dataformat都是NHWC
  2. qnn 2.14.0.230828 cpu不支持量化的模型推理,需要用htp的后端
  3. qnn 2.26.0.240827 cpu也不支持量化模型的推理,composeGraphs的时候报错
相关推荐
wulechun13 天前
打造你的专属机器宠物:Py-Apple低成本四足机器人开源项目深度解析与全流程DIY实战指南
智能手机
2601_9547064913 天前
云手机技术详解+Python实战调用|2026高稳云手机平台推荐
开发语言·python·智能手机
百度搜知知学社13 天前
贝格手机罗盘2.8版:精准导航与功能升级全解析
智能手机·功能升级·手机罗盘·导航应用·版本解析
xsc-xyc13 天前
用 Tailscale + Syncthing 实现手机、电脑与 NAS 的跨网络文件同步
linux·网络·网络安全·智能手机·电脑
wulechun13 天前
打造全栈人工智能知识图谱:深入解析Ai-Learn开源学习路线与实战资源导航指南
智能手机
wulechun13 天前
从深度研究到全能执行:深度解析字节跳动DeerFlow开源超级智能体框架的架构原理与实战部署指南
智能手机
老刘说AI14 天前
类Sora模型:解锁动态视觉艺术的密码
人工智能·stable diffusion·架构·embedding
python-码博士14 天前
Stable Diffusion 3 / FLUX 类模型中的 Flow Matching:怎么用、怎么调、怎么避坑
stable diffusion
想你依然心痛14 天前
手机远程控制电脑教程:安卓iOS远程桌面推荐、免费工具配置与远程办公技巧
android·智能手机·电脑
开开心心_Every14 天前
近200个工具的电脑故障修复合集
linux·运维·服务器·leetcode·智能手机·电脑·模拟退火算法