当前位置: 首页 > article >正文

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

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

请添加图片描述
请添加图片描述

推理耗时统计

单位/ms

硬件qnncpu_clipqnncpu_unetqnncpu_vaehtp_cliphtp_unethtp_vae
骁龙8 gen1+24716.994133440.39723.215411.097696.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

mkdir build_x64 && cd build_x64
cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j8

2.android

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. 执行

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(种子未固定,结果具有随机性):

diffusers pipe结果

4. 高通HTP执行量化模型

  1. 转换浮点模型
    参考qualcomm.sd, readme导出量化模型

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

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的时候报错

http://www.kler.cn/a/559825.html

相关文章:

  • 纷析云开源版- Vue2-增加字典存储到localStorage
  • 【Python爬虫(60)】解锁社交媒体数据宝藏:Python爬虫实战攻略
  • buuctf-[极客大挑战 2019]LoveSQL
  • 调试无痛入手
  • 蓝桥杯试题:小明的彩灯(差分 前缀和)
  • Linux系统移植之Uboot启动流程
  • “国补”带火手机换新,出售旧手机应如何保护个人信息安全
  • 鸿蒙学习-
  • Http升级为Https - 开发/测试服环境
  • 基于物联网的家庭版防疫面罩设计与实现(论文+源码)
  • μEMU部署测试(论文复现)
  • 整理好的java面试八大常用算法
  • 宠物智能可穿戴产品调研报告
  • QT开发:事件循环与处理机制的概念和流程概括性总结
  • 详解Tomcat下载安装以及IDEA配置Tomcat(2023最新)
  • Spring Boot中如何使用Thymeleaf模板引擎
  • npm使用了代理,但是代理软件已经关闭导致创建失败
  • 使用 AIStor 和 OpenSearch 增强搜索功能
  • 基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)
  • 高清下载油管视频到本地