XiaoMi / StableDiffusionOnDevice

本项目是一个通过文字生成图片的项目,基于开源模型Stable Diffusion V1.5生成可以在手机的CPU和NPU上运行的模型,包括其配套的模型运行框架。
MIT License
80 stars 17 forks source link

Stable Diffusion On Device

If you are familiar with English, you can read English Version

介绍

License

本项目是一个通过文字生成图片的项目,基于开源模型Stable Diffusion V1.5生成可以在手机的CPU和NPU上运行的模型,包括其配套的模型运行框架。

你可以尝试使用以下端侧部署框架运行Stable Diffusion模型。

drawing drawing drawing

这个project中包含了两个分支

NPU分支

NPU分支主要使用嵌入式神经网络处理器(NPU)进行计算,可以在小米13系列和小米14系列以及其他符合平台要求的机器上进行上使用。分支默认是在米13系列上使用,如果需要切换到小米14系列上使用本框架,需要在CMakeLists.txt中修改DL_MODE为2即可。

CPU分支

CPU分支采用中央处理器(CPU)进行计算,可以在符合系统要求的任意手机上工作。你可以自由选择模型推理步数,种子数,以及生成图像的尺寸,从而调整图片生成的效果。

安装须知:

  1. 进入 $ROOT/app/src/main/cpp,运行opencv.sh安装opencv库
  2. 进入 $ROOT/app/src/main/cpp/boost,在boost.sh中将$NDK_ROOT替换成合适的ndk路径(如android-ndk-r25c),运行boost.sh安装boost库
  3. 进入 $ROOT/app/src/main/assets/stable_diffusion,按照README.md安装高通库文件
  4. 按照下述模型下载中要求对应平台的模型

模型下载

Huggingface上下载模型放入下述目录

QNN分支:

ONNX分支:

未量化模型地址:

系统要求

SDK NDK CMAKE DEVICE PLATFORM
33 26.0.10792818 3.18.1 Qualcomm 8 Gen 2/8 Gen 3

性能

Device Platform Processing Unit Units of Memory Model Size(GB) Memory Request(GB) Image Resolution Inference Time(s)
Xiaomi 13/Pro 8Gen2 NPU INT8 1.10 1.5 512 9.4
XiaoMi 14/Pro 8Gen3 NPU INT8 1.10 1.5 512 4.6
Xiaomi 13/Pro 8Gen2 CPU FLOAT16 1.93 12 256 134
XiaoMi 14/Pro 8Gen3 CPU FLOAT16 1.93 12 256 103

注意事项:

模型量化

小米SD采用训练后量化(PTQ)将Float32的模型转换为INT8数据类型的量化模型,将模型大小缩减到了约$\frac{1}{4}$的大小,模型大小约为1.1GB。

通过收集高精度校准数据和优化量化方法方法对模型进行量化:

PTQ能够在不牺牲SD大模型性能的前提下,大幅度降低模型的存储和计算需求,从而提高了模型在资源受限环境下的可用性。

模型部署

相比于CPU方案,小米SD将量化后模型通过QNN框架部署在高通的NPU上,充分利用了NPU的并行计算能力,让深度学习中的矩阵运算和卷积运算等高密度的算子可以利用到芯片层的硬件加速,从而达到降低功耗,提升计算效率的目的。

License

MIT-License