HotPin:用24GB内存跑120B MoE模型
在只有24GB RAM的笔记本上跑120B规模的MoE模型,而且输出结果与全内存运行完全一致(bit-identical),这在之前几乎是不可能的。但HotPin通过对llama.cpp的几处关键补丁实现了这个目标。
这种把嵌入式硬件的设计思维挪到大模型内存管理上的做法非常有意思。对于那些想在消费级设备上部署超大MoE模型但又不想忍受量化精度损失的开发者来说,这绝对是个实操性很强的方案。
下一篇
分享一个能把AI从“复读机”变成“思考者”的Agent技巧 →
这不是那种通过量化牺牲精度的方法,而是纯粹的内存管理优化。它的核心逻辑其实非常简洁,大约只有50行C++代码,主要通过以下步骤实现:
一、分析MoE模型中专家路由的调用频率。
二、使用mmap将整个模型映射到磁盘。
三、通过mlock将最常用的“热门专家”锁定在物理内存中。
四、利用posix_fadvise在需要之前预取冷门专家。
实测数据挺惊人的,在AMD Ryzen AI 9 HX 370(23.6GB LPDDR5X)这种CPU环境下,120B的模型虽然磁盘占用58.5GB,但实际最小内存占用压到了19.1GB,内存节省了67%。最关键的是,由于锁定了热点专家,速度反而比不锁定快了45%(从2.64 tok/s 提升到 3.84 tok/s)。
实测表现分析:
- 内存节省: 120B模型节省约67%,30B-26B规模模型节省30%-42%不等。
- 精度损耗: 零损耗,SHA-256校验完全一致。
- 性能影响: 只要模型体积超过内存,开启Pinning就有显著加速;如果模型能全部装进内存,则没有额外开销。
这种把嵌入式硬件的设计思维挪到大模型内存管理上的做法非常有意思。对于那些想在消费级设备上部署超大MoE模型但又不想忍受量化精度损失的开发者来说,这绝对是个实操性很强的方案。
项目代码地址:
https://github.com/LozzKappa/hotpin-llm