本篇文章聊聊,在 Android 手机上简单运行 AI 大模型的方法,来体验英文语言模型(Llama2 7B、Mistral 7B、RedPajama 3B、Google Gemma 2B、Microsoft PHI 2B);中文语言模型(面壁 MiniCPM、多模态模型);Stable Diffusion。

写在前面

从去年下半年开始,各种手机和芯片厂商都开始宣称自己的产品能够本地运行大模型。

但是直到前几天,高通才正式在 HuggingFace 上传了“高通版本”的 Stable Diffusion。而目前一众厂商,有一个是一个,都还在“内测或内测审核”,给本来清清楚楚简简单单的模型运行,遮上了一层厚厚的纱。

不过,这里有一点限制,如果你是来自中国的开发者,在申请使用高通 SDK 的时候,需要通过额外的 “DPLCheck”,确保你不是“实体清单”从业人员。所以更“原生的测试”,我会在后面的文章再聊,本篇文章就聊聊轻松一些的玩法吧。

因为国内购买到的大多数手机,目前在手机解锁(更换更方便的操作系统)和获取 Root 权限(完善模型原生运行环境)方面都有比较多的限制。

所以,本文先介绍两种不需要解除 BL 锁换操作系统,不需要获取 Root 权限的方案。

准备工作

准备工作主要包含两部分:模型应用程序,和运行模型的设备(手机)。

模型应用程序

我们在不进行相对麻烦的 Android 准备环境改变的前提下,可以借助下面三个开源项目,来体验英文语言模型(Llama2 7B、Mistral 7B、RedPajama 3B、Google Gemma 2B、Microsoft PHI 2B);中文语言模型(面壁 MiniCPM、多模态模型);Stable Diffusion。

在我们完成程序安装包的下载之后,就可以准备模型的运行设备啦。

运行设备:手机

想要有一个相对好的模型使用体验,我们需要有能够运行 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 的原因是因为这代手机正常使用都会出现烫手,第三代的芯片的纸面性能比它高出了一倍,不论是出于体验还是其他因素考量,还是避开它吧。

额外的工具:安卓调试工具(ADB)

如果你不熟悉命令行,可以跳过这个部分。但如果你愿意学习这部分,在本地的模型应用安装,后续的 Android 手机调试方面,ADB(Android Debug Bridge)能够带来非常大的效率提升,包括:安装应用,快速上传本地模型到手机等等。

不同操作系统的 ADB 安装方法并不一致,你可以参考这篇 XDA Developer 的帖子,来完成适合你操作系统的方案。

如果你是 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 和 MiniCPM

我们打开 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