3

使用搭载骁龙 8 Gen 3 的安卓手机运行 AI 大模型

 6 months ago
source link: https://soulteary.com/2024/02/29/run-large-ai-models-on-android-phones-with-snapdragon-8-gen-3.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用搭载骁龙 8 Gen 3 的安卓手机运行 AI 大模型

2024年02月29日阅读Markdown格式6286字13分钟阅读

本篇文章聊聊,在 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

用来折腾的机器:K70 Pro

虽然从骁龙 865 开始的手机都具备运行模型应用的能力,但是过早的芯片计算能力太过孱弱,模型运行主要都集中在 CPU,跑个图片需要太长时间,没有折腾的意义。

手机 SoC 信息概览
手机 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 相关设置
手机开发者选项,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

Mistral 7B:如何学 Python

好像回答的还不错,运行效率是 7 token/s。接下来,我们来看看 Gemma 2B 的相同问题表现:

Gemma 2B:如何学 Python
Gemma 2B:如何学 Python

Gemma 因为“身材优势”,运行起来达到了 11 token/s。最后,我们来看看 PHI 2B 的表现吧:

PHI:如何学 Python
PHI:如何学 Python

只能说相比前两者,回复质量差异比较大。数学相关的测试,简单测试的结果也是类似上面,晚一些把结果贴知乎的帖子里。感兴趣可以追更。

中文语言模型和多模态模型使用

先看看语言模型的效果,MiniCPM 跑起来差不多在 8~13 token/s。

MiniCPM 语言模型测试

MiniCPM 语言模型测试

和之前知乎帖子中提到的一样,不太记得 “CEO” 是谁,好的是没有“思想钢印”,不好的是,知识能力确实还有待加强。不过,这不就正好适合搭配外部知识库来做内容生成了嘛。

接下来,我们来看看多模态模型:

MiniCPM-V 多模态模型测试
MiniCPM-V 多模态模型测试

我上传了一张“开工利是”红包图,然后问模型图里有啥,然后进行了简单的三轮对话,可以看到回答的还凑乎。当然,实际测试的时候,可能它会回答出意料之外的事情,如何结合业务数据,在小参数模型做 finetune,让回答准确度提高,应该是今年端侧多模态小模型需要折腾的主要课题之一了。

图片模型初始化和使用

图片模型的下载和初始化类似上面的语言模型,如果你的网络能够直接下载,就不需要折腾,反之就手动下载模型,通过 ADB 传输到手机指定的位置吧。

两款模型应用的初始化稍有不同,SDAI 相对全自动(上文代码中有默认路径和模型):

SDAI 安卓应用初始化
SDAI 安卓应用初始化

另外一款在上传模型之后,我们需要手动指定一下相关模型文件和配置文件:

配置模型路径
配置模型路径

图片生成,和网页版没有太大差别,输入 “Step”、“Cfg”、“正向提示词”、“负面提示词”,点击生成,等待图片完成推理即可。SDAI 相比另外一个应用多一个“画廊”,能够将你生成的图片都展示出来。

SDAI 应用使用界面
SDAI 应用使用界面

不过,在实际测试的过程中,量化并转换为 ONNX 的 SD 模型,哪怕保持和原版模型相同参数,输出的结果也有一些明显的劣化差异,反到是不如简化参数,然后将 SEED 留空,让模型“开盲盒”了。

手机 Stable Diffusion 生成图片
手机 Stable Diffusion 生成图片

好在,手机侧使用模型生成图片的时间并不久,最慢不过一两分钟(和步数多少、分辨率大小有关),手机也不是特别烫,连续生成也不过温热而已。

好啦,这篇文章就先聊到这里。下一篇相关的文章里,我们来聊聊在手机原生环境中直接运行模型。

希望我的手机权限、SDK 申请之路顺利吧。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK