本篇文章聊聊,在 Android 手机上简单运行 AI 大模型的方法,来体验英文语言模型(Llama2 7B、Mistral 7B、RedPajama 3B、Google Gemma 2B、Microsoft PHI 2B);中文语言模型(面壁 MiniCPM、多模态模型);Stable Diffusion。
从去年下半年开始,各种手机和芯片厂商都开始宣称自己的产品能够本地运行大模型。
但是直到前几天,高通才正式在 HuggingFace 上传了“高通版本”的 Stable Diffusion[1]。而目前一众厂商,有一个是一个,都还在“内测或内测审核”,给本来清清楚楚简简单单的模型运行,遮上了一层厚厚的纱。
不过,这里有一点限制,如果你是来自中国的开发者,在申请使用高通 SDK 的时候,需要通过额外的 “DPLCheck”,确保你不是“实体清单”从业人员。所以更“原生的测试”,我会在后面的文章再聊,本篇文章就聊聊轻松一些的玩法吧。
因为国内购买到的大多数手机,目前在手机解锁(更换更方便的操作系统)和获取 Root 权限(完善模型原生运行环境)方面都有比较多的限制。
所以,本文先介绍两种不需要解除 BL 锁换操作系统,不需要获取 Root 权限的方案。
准备工作主要包含两部分:模型应用程序,和运行模型的设备(手机)。
我们在不进行相对麻烦的 Android 准备环境改变的前提下,可以借助下面三个开源项目,来体验英文语言模型(Llama2 7B、Mistral 7B、RedPajama 3B、Google Gemma 2B、Microsoft PHI 2B);中文语言模型(面壁 MiniCPM、多模态模型);Stable Diffusion。
•mlc-ai/mlc-llm[2](支持运行英文模型)•使用介绍:https://llm.mlc.ai/docs/deploy/android.html•程序下载:https://github.com/mlc-ai/binary-mlc-llm-libs/releases/download/Android/mlc-chat.apk•OpenBMB/mlc-MiniCPM[3] (支持运行中文模型)•项目 fork 自上面的开源项目,使用方式一致。•程序下载:程序还在迭代,去面壁模型交流群里伸手吧 :D•ShiftHackZ/Stable-Diffusion-Android[4] 或 ZTMIDGO/Android-Stable-diffusion-ONNX[5](支持运行 SD)•两个项目都是通过调用 OnnxRuntime 来运行 ONNX 格式的 SD 模型(/feature/diffusion[6])。前者支持的模型基本都是量化后的 1GB 左右的风格模型(/docs/models.json[7]),后者暂时只支持了 Chilloutmix。•程序下载:Google Play[8] 或 F-Droid[9]
在我们完成程序安装包的下载之后,就可以准备模型的运行设备啦。
想要有一个相对好的模型使用体验,我们需要有能够运行 AI 模型的手机。
2 月份,我回收了掉了一台 8 Gen 1(小米 12 Pro)、一台 8 Gen 2(一加 11)。然后,分别购置了两台 8 Gen 3 手机(一加 12 和 红米 K70 Pro)。
搭载“新芯片”的手机
在本篇文章中出镜的是:K70 Pro(24G 内存版本)。
用来折腾的机器:K70 Pro
虽然从骁龙 865 开始的手机都具备运行模型应用的能力,但是过早的芯片计算能力太过孱弱,模型运行主要都集中在 CPU,跑个图片需要太长时间,没有折腾的意义。
手机 SoC 信息概览
我个人建议使用骁龙 8 Gen 1 之后的芯片,如:8 Gen 2 和 8 Gen 3 ,包括各种“改版”。不推荐 8 Gen 1 的原因是因为这代手机正常使用都会出现烫手,第三代的芯片的纸面性能比它高出了一倍,不论是出于体验还是其他因素考量,还是避开它吧。
如果你不熟悉命令行,可以跳过这个部分。但如果你愿意学习这部分,在本地的模型应用安装,后续的 Android 手机调试方面,ADB(Android Debug Bridge[10])能够带来非常大的效率提升,包括:安装应用,快速上传本地模型到手机等等。
不同操作系统的 ADB 安装方法并不一致,你可以参考这篇 XDA Developer 的帖子[11],来完成适合你操作系统的方案。
如果你是 macOS 用户,我推荐你在安装完毕 HomeBrew 之后,直接使用下面的命令行完成 ADB 的安装,会比上面的帖子更简单:
brew install android-platform-tools
在完成程序安装后,打开手机的 “USB 调试” 和 “USB 安装”。
手机开发者选项,USB 相关设置
接着,将手机和电脑通过数据线连在一起后,执行 adb devices
可以验证工具是否能够正常运行:
# adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
8a408458 unauthorized
➜ speedup adb devices
List of devices attached
8a408458 device
只要 List of devices attached
后面有内容,就说明手机和电脑的连接正常,可以通过工具来进行操作啦。
我们首先需要将应用安装到手机设备上,使用 ADB 的话,我们可以借助 adb install
命令,反之就需要想办法传输应用到手机上啦:
# adb install /Users/soulteary/Downloads/安装包名称.apk
Performing Streamed Install
Success
安装完毕,我们在手机上找到我们安装后的软件(根据你的安装情况,选择性安装就行)。
在桌面找到模型应用
我们打开 MLC Chat 或 Mini CPM 的应用后,能够看到模型列表,点击下载,等待模型完成下载即可。
在桌面找到模型应用
这里有两个注意事项:
第一个是,MLC Chat 下载的模型可能会遇到网络问题,我们可以通过手动下载模型(所有模型一共 12G),然后将模型上传到安卓手机的指定位置,来规避网络问题:
adb push ./Llama-2-7b-chat-hf-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/
adb push ./Mistral-7B-Instruct-v0.2-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/
adb push ./RedPajama-INCITE-Chat-3B-v1-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/
adb push ./gemma-2b-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/
adb push ./phi-2-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/
第二个是,面壁的 MiniCPM 程序使用了比较早的 MLC Chat,所以在下载模型(5.4G)的时候,需要下载完毕一个模型,退出程序,在进行下一个模型的下载,避免程序报错。
当然,你也可以用上面的方法,提前下载模型,然后上传到指定位置:
adb push ./MiniCPM /storage/emulated/0/Android/data/com.modelbest.minicpm/files/
adb push ./MiniCPM-V /storage/emulated/0/Android/data/com.modelbest.minicpm/files/
因为本文的重点不是能力测试,所以就简单的玩玩好啦。先来看看 Mistral 7B 4位量化版本的效果:尝试问问它如何学习 Python。
Mistral 7B:如何学 Python
好像回答的还不错,运行效率是 7 token/s。接下来,我们来看看 Gemma 2B 的相同问题表现:
Gemma 2B:如何学 Python
Gemma 因为“身材优势”,运行起来达到了 11 token/s。最后,我们来看看 PHI 2B 的表现吧:
PHI:如何学 Python
只能说相比前两者,回复质量差异比较大。数学相关的测试,简单测试的结果也是类似上面,晚一些把结果贴知乎的帖子里。感兴趣可以追更。
先看看语言模型的效果,MiniCPM 跑起来差不多在 8~13 token/s。
MiniCPM 语言模型测试
和之前知乎帖子中提到的一样,不太记得 “CEO” 是谁,好的是没有“思想钢印”,不好的是,知识能力确实还有待加强。不过,这不就正好适合搭配外部知识库来做内容生成了嘛。
接下来,我们来看看多模态模型:
MiniCPM-V 多模态模型测试
我上传了一张“开工利是”红包图,然后问模型图里有啥,然后进行了简单的三轮对话,可以看到回答的还凑乎。当然,实际测试的时候,可能它会回答出意料之外的事情,如何结合业务数据,在小参数模型做 finetune,让回答准确度提高,应该是今年端侧多模态小模型需要折腾的主要课题之一了。
图片模型的下载和初始化类似上面的语言模型,如果你的网络能够直接下载,就不需要折腾,反之就手动下载模型,通过 ADB 传输到手机指定的位置吧。
两款模型应用的初始化稍有不同,SDAI 相对全自动(上文代码中有默认路径和模型):
SDAI 安卓应用初始化
另外一款在上传模型之后,我们需要手动指定一下相关模型文件和配置文件:
配置模型路径
图片生成,和网页版没有太大差别,输入 “Step”、“Cfg”、“正向提示词”、“负面提示词”,点击生成,等待图片完成推理即可。SDAI 相比另外一个应用多一个“画廊”,能够将你生成的图片都展示出来。
SDAI 应用使用界面
不过,在实际测试的过程中,量化并转换为 ONNX 的 SD 模型,哪怕保持和原版模型相同参数,输出的结果也有一些明显的劣化差异,反到是不如简化参数,然后将 SEED 留空,让模型“开盲盒”了。
手机 Stable Diffusion 生成图片
好在,手机侧使用模型生成图片的时间并不久,最慢不过一两分钟(和步数多少、分辨率大小有关),手机也不是特别烫,连续生成也不过温热而已。
好啦,这篇文章就先聊到这里。下一篇相关的文章里,我们来聊聊在手机原生环境中直接运行模型。
希望我的手机权限、SDK 申请之路顺利吧。
--EOF
引用链接
[1]
“高通版本”的 Stable Diffusion: https://huggingface.co/qualcomm/Stable-Diffusion
[2]
mlc-ai/mlc-llm: https://github.com/mlc-ai/mlc-llm
[3]
OpenBMB/mlc-MiniCPM: https://github.com/OpenBMB/mlc-MiniCPM
[4]
ShiftHackZ/Stable-Diffusion-Android: https://github.com/ShiftHackZ/Stable-Diffusion-Android
[5]
ZTMIDGO/Android-Stable-diffusion-ONNX: https://github.com/ZTMIDGO/Android-Stable-diffusion-ONNX
[6]
/feature/diffusion: https://github.com/ShiftHackZ/Stable-Diffusion-Android/tree/master/feature/diffusion/src/main/java/com/shifthackz/aisdv1/feature/diffusion
[7]
/docs/models.json: https://github.com/ShiftHackZ/Stable-Diffusion-Android/blob/master/docs/models.json
[8]
Google Play: https://play.google.com/store/apps/details?id=com.shifthackz.aisdv1.app
[9]
F-Droid: https://f-droid.org/zh_Hans/packages/com.shifthackz.aisdv1.app.foss/
[10]
Android Debug Bridge: https://developer.android.com/tools/adb
[11]
这篇 XDA Developer 的帖子: https://www.xda-developers.com/install-adb-windows-macos-linux/