链载Ai

标题: 手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型 [打印本页]

作者: 链载Ai    时间: 昨天 09:29
标题: 手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">如今,“AI手机”是一个趋势,集成AI的手机功能更多,娱乐性更强。目前小米、vivo均已经宣称在他们的新旗舰版手机上集成了LLM,不过具体效果我还没有体验过。那我们是否可以不换新手机,在自己原来的手机上部署LLM呢?

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-top: 10px;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">在本文中,我将展示如何在一部 Android 手机上运行 LLaMA 和 Gemma(Google发布的LLM)大语言模型,在所有测试中,所有模型都将在本地运行,不需要云 API 或付费。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-top: 10px;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 20px;font-weight: bold;margin-top: 40px;margin-right: auto;margin-bottom: 40px;width: fit-content;text-align: left;color: rgb(63, 63, 63);">Termux

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-top: 10px;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">第一个组件是Termux[1],这是一个成熟的 Linux 终端,为 Android 应用制作。它是免费的,不需要root访问权限。Termux 可以从Google Play[2]下载,但在撰写本文时,该版本已经很旧了,并且 Termux 中的“pkg update”命令不再起作用。较新版本在F-Droid[3]网站上以 APK 形式提供,建议下载该较新版本。当 Termux 安装在安卓手机上时,我们可以运行它并在手机上看到一个标准的 Linux 命令行界面:

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-top: 10px;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">理论上讲,我们可以直接在手机上输入所有命令,但是在小键盘上打字很不方便。所以我们选择通过pkg update的方法,安装 SSH:

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;">pkg
pkgupgrade
pkginstallopenssh

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-top: 10px;margin-bottom: 10px;letter-spacing: 0.1em;white-space: pre-line;color: rgb(63, 63, 63);font-size: 15px;">之后,我们可以在 Termux 中启动 SSH程序。获取用户名并设置 SSH 密码:

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;">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 库,它更容易使用。安装所需的软件包和库:

pkginstalltur-repolibopenblaslibandroid-execinfoninjabinutils
pkginstallpython3python-numpybuild-essentialcmakeclanggit
pip3installllama-cpp-pythonhuggingface-hub

对于第一次测试,使用LLaMA 7B模型,从huggingface上下载它:

huggingface-clidownloadTheBloke/Llama--B-Chat-GGUFllama--b-chat.Q4_K_M.gguf---dir.---dir--symlinksFalse

载入模型并调用它做出回复:

llama_cppLlama


llm=Llama(model_path=,
n_gpu_layers=,
n_ctx=,
echo=)

question=()
template=

stream=llm(template,stream=,max_tokens=,temperature=)
outputstream:
(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 月推出。这个模型很有意思:

与 LLaMA 一样,我将在安卓手机上使用 Termux 控制台。首先,我们需要下载并安装Gemma.CPP:

pkginstallwgetcmakegitclangpython3
wgethttps://github.com/google/gemma.cpp/archive/refs/tags/v0.1.0.tar.gz
tar-xvzfv0.1.0.tar.gz
gemma.cpp-0.1.0
build
cmake..
make-j4gemma
../../

要访问模型,我们需要登录 Kaggle,转到模型页面(Gemma | Kaggle[5]),并接受许可协议,可以手动将模型文件复制到智能手机,但 Kagglehub Python 库提供了一种更方便的方法:

首先,安装软件包kagglehub :

pip3installpackagingkagglehub

接下来,下载模型,并在智能手机上运行它:

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.gemmamodel2bittokenizer2bitsfp.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演示、项目的快速上线都是非常友好的。








欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5