微信扫码
与创始人交个朋友
我要投稿
如今,“AI手机”是一个趋势,集成AI的手机功能更多,娱乐性更强。目前小米、vivo均已经宣称在他们的新旗舰版手机上集成了LLM,不过具体效果我还没有体验过。那我们是否可以不换新手机,在自己原来的手机上部署LLM呢?
在本文中,我将展示如何在一部 Android 手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型,在所有测试中,所有模型都将在本地运行,不需要云 API 或付费。
第一个组件是 Termux[1],这是一个成熟的 Linux 终端,为 Android 应用制作。它是免费的,不需要root访问权限。Termux 可以从 Google Play[2] 下载,但在撰写本文时,该版本已经很旧了,并且 Termux 中的“pkg update”命令不再起作用。较新版本在 F-Droid[3] 网站上以 APK 形式提供,建议下载该较新版本。当 Termux 安装在安卓手机上时,我们可以运行它并在手机上看到一个标准的 Linux 命令行界面:
理论上讲,我们可以直接在手机上输入所有命令,但是在小键盘上打字很不方便。所以我们选择通过pkg update的方法,安装 SSH:
pkg pkg upgrade pkg install openssh
之后,我们可以在 Termux 中启动 SSH程序。获取用户名并设置 SSH 密码:
sshd passwd ...
现在,我们可以使用任何 SSH 客户端连接到手机(包括我们的电脑):
ssh - u0_a461.168.100.101
在这里,8022 是默认的 Termux SSH 端口,“u0_a461”是我们从“whoami”命令中获取的用户名,“192.168.100.101”是本地 Wi-Fi 网络中手机的 IP 地址。连接完成后,我们就可以测试不同的 LLM。下面显示的所有命令都通过手机上的 SSH 执行。
第一个引入的项目是Llama.CPP[4],它非常适合在不同的硬件上测试 LLM。Llama.CPP几乎可以在任何地方工作——CPU、CUDA 或 Apple 芯片上。原始Llama.CPP是用 C++ 编写的,但我将使用 Python 库,它更容易使用。安装所需的软件包和库:
pkg install tur-repo libopenblas libandroid-execinfo ninja binutils pkg install python3 python-numpy build-essential cmake clang git pip3 install llama-cpp-python huggingface-hub
对于第一次测试,使用 LLaMA 7B 模型,从huggingface上下载它:
huggingface-cli download TheBloke/Llama--B-Chat-GGUF llama--b-chat.Q4_K_M.gguf ---dir . ---dir--symlinks False
载入模型并调用它做出回复:
llama_cpp Llama llm = Llama(model_path=, n_gpu_layers=, n_ctx=, echo=) question = () template = stream = llm(template, stream=, max_tokens=, temperature=) output stream: (output[][][], end=)
这里,n_gpu_layers这个参数设置为 0,因为在安卓手机中,我们没有 GPU。在手机上运行代码之前,我在 Google Colab中预估了LLaMA 7B运行需要消耗的内存:资源消耗大约2.5G左右
从资源消耗的问题上,LLaMA 7B几乎可以在每部具有 4-6 GB RAM 的手机上运行。下一个大问题是速度,我很担心LLaMA 7B在手机上的运行效率,但在手机上运行之后,它的回复速度并不慢!这是一个未经剪辑的视频,显示了真实速度:
Llama.CPP对内存利用做了优化:它不会在 RAM 中加载完整LLM:我们甚至可以在智能手机上运行 70B 模型(其文件大小约为 40 GB!相同答案的推理时间约为 15 分钟)(作为参考,GPT 3.5 模型有 175B 参数)。这是非常惊人的,因为我们一直认为这样的LLM推理需要大量的GPU集群。
现在,让我们测试另一个模型:Gemma 。
Gemma 是目前(2024.3.9之前)最新的大型语言模型之一;它由 Google 于 2024 年 2 月推出。这个模型很有意思:
据谷歌称,Gemma 型号为其尺寸提供了最先进的性能。例如,在 MMLU(大规模多任务语言理解)基准测试中,Gemma 7B 优于 LLaMA2 13B(64.3 vs 54.8 分),而 Gemma 2B 模型仅比 LLaMA 7B 稍差(42.3 vs 45.3 分)。
与 7B 型号相比,2B 型号的推理速度应该快得多,这对移动设备至关重要。
Gemini 的许可证允许作为商业用途,Gemma.CPP客户端是用 C++ 编写的。这允许移动开发人员在 Android Studio 或 XCode 中将其构建为库,并在智能手机应用程序中使用此模型。
与 LLaMA 一样,我将在安卓手机上使用 Termux 控制台。首先,我们需要下载并安装Gemma.CPP:
pkg install wget cmake git clang python3 wget https://github.com/google/gemma.cpp/archive/refs/tags/v0.1.0.tar.gz tar -xvzf v0.1.0.tar.gz gemma.cpp-0.1.0 build cmake .. make -j4 gemma ../../
要访问模型,我们需要登录 Kaggle,转到模型页面(Gemma | Kaggle[5]),并接受许可协议,可以手动将模型文件复制到智能手机,但 Kagglehub Python 库提供了一种更方便的方法:
首先,安装软件包kagglehub :
pip3 install packaging kagglehub
接下来,下载模型,并在智能手机上运行它:
import , kagglehub .environ[] = .environ[] = model_path = kagglehub.model_download() (, model_path)
KAGGLE_USERNAME和KAGGLE_KEY参数可以Kagge 设置选项中生成,是免费的。下载完成后,我们将得到路径,类似于“/data/data/com.termux/.../gemmaCpp/2b-it-sfp/2”。
现在,制作一个运行推理的 shell 脚本:
model_pathdatacom.termuxhomekagglehubgooglegemmaCpp gemma.cpp.gemma model 2bit tokenizer 2bitsfp.sbs
最后,运行脚本。输出如下所示:
它确实比 LLaMA 7B快,结果也较为准确。7B 和 2B 型号LLM的 RAM 消耗分别为 9.9 GB 和 4.1 GB。
我们测试了Llama.CPP和Gemma.CPP开源项目,并能够在 Android 智能手机上运行 2B、7B 甚至 70B 参数的dayu模型。
在目前(2024年),即使是千元机也有大约 8 GB 的 RAM 和 256 GB 的存储空间,因此 2 GB的LLM几乎可以在每部现代的手机上运行,而不需要是顶配手机。
从开发的角度来看,Llama.CPP 和 Gemma.CPP 项目都是用 C++ 编写的,没有外部依赖关系,并且可以使用 Android 或 iOS 应用程序进行本机编译,这对于demo演示、项目的快速上线都是非常友好的。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-05-28
2024-04-12
2024-04-25
2024-05-14
2024-08-13
2024-07-18
2024-05-06