前言
近年来,大语言模型(LLM)发展迅猛,像 OpenAI 的 ChatGPT 备受关注。以往在本地运行 LLM,要么需要能跑 CUDA 的 GPU,要么得是配备大量内存的 Apple Silicon Mac,硬件门槛较高。但如今,嵌入式微控制器用的边缘 LLM 模块不断涌现,为我们带来了新玩法。本文就来分享如何利用 M5Stack 公司推出的信用卡大小且带键盘的计算机 Cardputer,与能运行本地 LLM 的 ModuleLLM 相结合,实现 “在手掌大小设备上运行本地 LLM” 的神奇操作。先给大家看看运行效果
一、准备工作
(一)ModuleLLM
ModuleLLM 是本次实现的关键硬件之一,是专门用于运行 LLM 的模块。不过获取它目前有点难度,国内正规代理店 Switch Science 和 M5Stack 官方 Store 都已售罄。我在 Aliexpress 好不容易抢到了最后一个。据推测,春节过后可能会恢复量产,预计 3 月左右库存会有所补充。要是等不及,也可以尝试联系那些冲动购买但不太会用的朋友,说不定能 “捡漏” 入手。购买链接:https://www.switch-science.com/products/10034
(二)Cardputer
Cardputer 同样不可或缺,它的库存最近已经恢复,获取相对容易些。购买链接:https://www.switch-science.com/products/9277
二、硬件拆解
(一)ModuleLLM 拆解
ModuleLLM 到手后,需要先从框架中取出。使用螺丝刀拧下四个螺丝,就能轻松将其分离。
(二)Cardputer 拆解
Cardputer 的拆解需要更细心些。它内置了一个较大的电池,是用双面胶固定的,拆解时要小心地慢慢剥离,千万不能用力过猛使电池弯曲,以免引发危险。另外,Cardputer 上面的黑色部件也要一并取下。
然后,适当地用力切削,将 ModuleLLM 收纳在壳体内。
后面也用刀具切开,让引脚(M.BUS)露出来。因为短路不好,所以用聚酰亚胺胶带或醋酸胶带等进行绝缘吧。
完成后的样子
三、硬件连接
(一)连接方式选择
ModuleLLM 与 Cardputer 之间的通信,可以通过 UART 或 TCP(10001)实现,本次教程选用 UART 方式。
(二)具体连接引脚
Cardputer 侧使用 GROVE 端子,具体引脚为 G1、G2、 +5V、GND;ModuleLLM 侧对应连接 UART 的引脚以及 +5V 和 GND。实际操作中,我选择将它们直接焊接到电路板上,但肯定还有更好的连接方法,大家可以一起探索。下面用表格更清晰地展示连接关系:
Cardputer 侧 (GROVE) | ModuleLLM 侧 (M.BUS) |
---|---|
G (黑) | GND |
5V (红) | 5V |
G2 (黄) | UART(Tx) |
G1 (白) | UART(Rx) |
连接完成后,为防止短路,需要用 Kapton 胶带或醋酸酯胶带等对连接部位进行绝缘处理。
四、代码编写
代码部分无需从头开始编写,借助官方的示例代码进行改造即可快速实现功能。我们需要将以下两个代码仓库的示例代码进行融合:
- M5Module-LLM/examples/SerialTextAssistant/SerialTextAssistant.ino at main · m5stack/M5Module-LLM · GitHub
- M5Cardputer/examples/Basic/keyboard/inputText/inputText.ino at master · m5stack/M5Cardputer · GitHub
在代码中,还需要指定 UART 的 TX、RX 的 GPIO,代码如下:
Serial2.begin(115200, SERIAL_8N1, 1, 2);
如果想要实现按键输入时发出声音的效果,也可以在代码中添加相应功能。
五、总结
通过上述步骤,我们成功在手掌大小的设备上实现了本地 LLM 的运行。这个组合不仅有趣,还为我们探索 LLM 的应用提供了新的思路和方向。后续大家可以在此基础上,进一步开发更多好玩的功能。希望本文对各位技术爱好者有所帮助,要是在实践过程中有任何问题,欢迎在评论区留言交流!