Transcript
00:00:00这是第一代树莓派 (Raspberry Pi),发布于 2014 年。
00:00:05它配备了 700 MHz 单核处理器和 512 MB 内存。
00:00:12按现代标准来看,这基本上就是一个计算器。
00:00:16但今天,我们要看看是否能挑战这台有 12 年历史的硬件的
00:00:21绝对极限,即在上面本地运行大型语言模型。
00:00:26在本视频中,我将向你展示哪种微型模型可以在树莓派上运行,
00:00:30我们会观察它的表现,我还会教你如何安装所有必要的依赖项,
00:00:35这样你就可以亲自尝试了。
00:00:37这会非常有趣,让我们开始吧。
00:00:40老实说,我原本不认为能找到一个
00:00:47精简到足以适配这种架构的模型。
00:00:49但经过一番挖掘,我确实找到了一个候选者。
00:00:52它就是 Falcon H1 Tiny。
00:00:54这是一个极其紧凑的模型,仅有 9000 万个参数。
00:00:59它由阿布扎比的技术创新研究所 (TII) 开发,
00:01:03专门用于探索语言建模的极端下限。
00:01:08但他们是怎么把模型做得这么小的?
00:01:10背后是否有某种技术“秘方”?
00:01:13其实不然。
00:01:14他们基本上使用的是与 IBM 旗下的
00:01:19微型 Granite 4 模型相同的混合 Transformer 加 Mamba 架构。
00:01:24关于那个我也做过视频,感兴趣的可以去看看。
00:01:27但重点在这里。
00:01:28为了成功将此模型挤入内存,我们必须讨论量化。
00:01:33Falcon 模型有 2-bit、4-bit 和 8-bit 版本。
00:01:38你可能会想尝试超精简的 IQ 或重要性量化。
00:01:43但麻烦在于:
00:01:45这些较新的方法依赖于复杂的位操作,
00:01:49需要现代 CPU 指令集才能高效运行。
00:01:52但在我们树莓派上那块老旧的 ARMv6 芯片上,这行不通。
00:01:57所以我们只能选择老牌的 Q4 模型,
00:02:01它是我们这种场景下的黄金标准。
00:02:04它使用了一种中等规模的传统量化方法,
00:02:07树莓派的处理器确实能够处理而不会卡死。
00:02:11它在保持逻辑完整的同时,为我们提供了最佳的“每兆字节智能比”。
00:02:17但在第一代树莓派上运行这个模型绝非易事。
00:02:22由于该派使用的是 ARMv6 架构,
00:02:26它缺少几乎所有 AI 库都依赖的现代 NEON 指令。
00:02:31好在有 llama.cpp,我们可以用它来进行推理。
00:02:36但为了实现这一点,我们必须专门针对 ARMv6 编译其二进制文件。
00:02:42如果你尝试直接在派上编译,
00:02:45编译器可能需要 18 个小时才能完成。
00:02:49前提是它没有先因为内存不足错误而崩溃。
00:02:53所以为了绕过这一点,我们得动点脑筋。
00:02:56我们需要先在笔记本电脑上使用 dockcross 交叉编译这些二进制文件,
00:03:02专门针对启用了 VFP 数学单元的 ARMv6 指令集,
00:03:08然后通过 SSH 复制过去,这样我们就能直接开始推理了。
00:03:13这就是我们现在要做的事情。
00:03:15首先,我们需要使用 Raspberry Pi Imager 将最精简的操作系统烧录到派中。
00:03:22对于一块只有 512MB 内存的主板,每一兆都至关重要。
00:03:28所以我选择了 32 位版本的 Raspberry Pi OS Lite,
00:03:32因为它没有桌面界面,且闲置时的内存占用仅为
00:03:38标准系统的一小部分,几乎能把所有的 RAM 都留给模型运行。
00:03:44还有个重点,记得使用高级设置
00:03:47预先配置好 Wi-Fi 并启用 SSH。
00:03:51因为在这些旧板子上,远程管理要容易得多,
00:03:55这样你就不必忍受迟钝的本地终端了。
00:03:58现在,派启动并成功 SSH 进入后,我们需要解决 ARMv6 的问题。
00:04:05如果我们尝试在这里编译 llama.cpp,
00:04:08派真的会花上一天半的时间在处理头文件上。
00:04:13所以,我们将在普通的笔记本电脑上完成,以加快计算速度并节省时间。
00:04:18让我们克隆 llama.cpp 的源代码并创建一个专门的构建
00:04:23目录,我们将在这里存放要在树莓派上使用的构建版本。
00:04:28现在又有一个问题。
00:04:29我的 Mac 使用的是 ARMv8(64 位版本),而不是 32 位的 ARMv6。
00:04:37它们的指令集不同。
00:04:40所以为了专门为派编译二进制文件,我们需要使用 dockcross,
00:04:45这是一个运行在 Mac 上的交叉编译器工具链,
00:04:48但生成的二进制文件是专门针对派的老旧架构的。
00:04:53接下来,我们需要配置构建。
00:04:55这里必须非常精确。
00:04:58我们需要传递一些特定的标志。
00:05:00首先,我们需要关闭共享库 (shared libs) 以创建一个单一的可移植二进制文件。
00:05:05然后必须关闭 NEON,因为我们的派缺少那些现代数学指令。
00:05:10我们还需要禁用 OpenMP,以保持尽可能精简的内存占用。
00:05:15我们实际上是在剥离所有现代“奢侈品”,
00:05:18以确保二进制文件与我们老旧的派主板兼容。
00:05:22现在如果我们点击构建,大约两分钟后,我们就会得到一个
00:05:26完整编译并优化的 llama completion 二进制文件,可以复制到派上了。
00:05:31现在我将使用 SSH 通过网络直接连接到我的派,
00:05:35在派上创建一个新目录,然后使用 SCP 将我们自定义构建的二进制文件复制过去。
00:05:42最后还有一件事要做。
00:05:44让我们下载 Falcon 的 2-bit、4-bit 和 8-bit 传统量化模型,
00:05:50因为我们将依次测试所有的模型。
00:05:53然后通过网络将它们逐个复制到派的 models 文件夹中。
00:05:58现在最有趣的部分来了。
00:05:59让我们回到派上,执行我们的第一次推理测试。
00:06:03我们将从压缩最厉害的 2-bit 量化模型开始。
00:06:07在这里我们需要运行这条长命令。
00:06:10我在这里做的基本上是给它一个简单的提示词:
00:06:13“Hello, how are you?” 并将输出限制在 32 个 token。
00:06:18我们指定只使用一个线程,因为,嗯,我们也只有这一个。
00:06:22我们还将上下文大小保持在极小的 128 个 token,以节省每一字节的 RAM。
00:06:29但这里最重要的标志是 no M map。
00:06:32通常 llama.cpp 使用内存映射 (mmap) 来加载模型,这在高端 GPU 上很棒,
00:06:38但对我们的派来说是一场噩梦。
00:06:41在一个只有 512MB 内存的 32 位系统上,
00:06:45如果 mmap 找不到连续的地址空间块,就会失败。
00:06:50因此,通过禁用它,我们强迫模型直接加载到堆 (heap) 中,
00:06:55让我们对有限的内存有更稳定的控制。
00:06:58话虽如此,让我们运行命令吧。
00:07:00出来了,我们的第一批 token。
00:07:03我们可以看到,2-bit 版本运行得非常吃力。
00:07:08首先,它处理一个 token 大约需要三秒钟,
00:07:14而在旧款的树莓派板子上,这确实是意料之中的。
00:07:18但更重要的是,回答完全是胡言乱语。
00:07:21在一个 9000 万参数的模型上,权重被压缩得太厉害,
00:07:25以至于语言逻辑基本上崩溃了。
00:07:28它几乎不连贯,但从技术上讲,它确实在运行。
00:07:32现在让我们看看换成 4-bit 模型会发生什么。
00:07:35看!现在我们得到了一个连贯的问候回复。
00:07:40所以这是成功的。
00:07:42我们现在有一个真实的 AI 模型在派上本地运行,
00:07:47并能对我们的提示词做出逻辑回应。
00:07:49太棒了!
00:07:50现在让我们更进一步。
00:07:53看看派能不能处理 8-bit 模型。
00:07:56这次我要问它一些更智能的问题,
00:07:59比如阿尔巴尼亚的首都是哪里?
00:08:02嗯,这个回答是错的,因为阿尔巴尼亚的首都是地拉那,
00:08:08这显然在事实层面上是不正确的。
00:08:10但如果我问比利时的首都是哪里,它的回答是正确的。
00:08:15这向我们展示了一些非常有趣的东西。
00:08:17看来 9000 万参数的极限压缩是有代价的。
00:08:22它可能拥有关于较大、较知名国家的准确知识,
00:08:26但缺乏关于冷门国家以及可能较为冷门的话题的知识。
00:08:31这就是知识的本质。
00:08:33在这 9000 万个参数中,所能容纳的知识量是有限的。
00:08:38尽管如此,结果还是超级酷。
00:08:41这证实了确实存在足够小、
00:08:46而且足够精简,可以在一台有 12 年历史的树莓派上运行。
00:08:50它快吗?
00:08:51完全不快。
00:08:52它精确吗?
00:08:53可能并不精确。
00:08:54你应该在生产环境中使用它吗?
00:08:55大概不应该。
00:08:57除非你想造一个非常非常非常慢的机器人。
00:09:02但最重要的是,现在我们知道这在理论上是可能的。
00:09:06所以,这基本上就是我在这段视频中想要证明的一切。
00:09:09老实说,这次实验非常有趣。
00:09:13以上就是全部内容,各位。
00:09:14这就是 Falcon H1 Tiny 模型。
00:09:17大概是目前市面上最小的 AI 模型了。
00:09:20现在我们知道了,它们确实小到可以在第一代树莓派上运行,
00:09:25这超级酷。
00:09:27我简直停不下来想感叹这件事有多酷。
00:09:30虽然实际应用起来没什么用,但还是很酷。
00:09:35大家如果有任何有趣的想法、
00:09:37评论或关于刚才所见的见解,请告诉我。
00:09:40在下方的评论区留言吧。
00:09:42各位,如果你喜欢这类技术解析,
00:09:45请一定要狂点视频下方的点赞按钮。
00:09:49也不要忘记订阅我们的频道。
00:09:51我是来自 Better Stack 的 Andris,我们下期视频再见。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video