AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型
发布日期:2024-04-15 21:11:32 浏览次数: 3095 来源:苏坡爱豆



如今,“AI手机”是一个趋势,集成AI的手机功能更多,娱乐性更强。目前小米、vivo均已经宣称在他们的新旗舰版手机上集成了LLM,不过具体效果我还没有体验过。那我们是否可以不换新手机,在自己原来的手机上部署LLM呢?

在本文中,我将展示如何在一部 Android 手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型,在所有测试中,所有模型都将在本地运行,不需要云 API 或付费。


Termux

第一个组件是 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

第一个引入的项目是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.CPP

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_USERNAMEKAGGLE_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+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询