本地语言模型(LLM)的使用正在逐渐成为一种趋势。如今,越来越多的人开始尝试在个人电脑或系统上运行这些模型,而将语言模型部署在云端服务器上的方式正逐渐被边缘化。Binh Pham(宾·范)就是一个很好的例子。他通过实验,将树莓派零(Raspberry Pi Zero)改造成了一个小型USB驱动器,使其能够在本地运行语言模型,且无需任何额外设备。这一项目的成功主要得益于llama.cpp和llamafile。这两者是一套指令集和软件包的组合,旨在为用户提供轻量级的离线聊天机器人体验。
然而,树莓派零已经问世八年,硬件性能相对有限,因此将llama.cpp安装到树莓派零上并非易事。首先,Pham将设备连接到USB接口,并为其3D打印了一个外壳。但随后,由于树莓派零W的内存限制仅为512MB,项目变得更加复杂。在将llama.cpp构建到设备上后,程序无法编译成功。此前,也无人尝试在树莓派零或树莓派一代上构建llama.cpp。
问题的根源在于树莓派零的CPU采用的是ARMv6架构。为了绕过这一限制,Pham不得不深入研究,将llama.cpp的ARMv8指令集转换为适合树莓派零的版本,并移除所有基于现代硬件的优化或注释。
在完成了对llama.cpp源代码的修改后,Pham开始着手让USB驱动器的软件部分正常工作。随后,他将注意力转向提升软件体验的流畅性。该语言模型的核心是将文本文件提交给模型,这些文件作为主要提示。因此,Pham构建了一个实现,可以根据文本提示生成故事,并将生成的输出以完整填充的文件形式返回。
在将标记限制设置为64后,Pham用多个模型进行了几项基准测试,模型大小从15M到136M不等。测试结果显示,Tiny15M模型的每个标记速度为223毫秒,而较大的Lamini-T5-Flan-77M模型的每个标记速度为2.5秒,SmolLM2-136M模型的每个标记速度为2.2秒。这些标记速度表明,该设备在许多实际应用中运行速度过慢。尽管这是一个有趣的项目,但在旧的、轻量级硬件上运行本地语言模型可能并无太多实际用途。相反,您可能更倾向于使用更复杂的模型,例如在树莓派5上运行Deepseek。