Llama2推理引擎仅1356字节x86汇编实现
「开发者用1356字节x86实模式汇编实现完整Llama2推理引擎,可直接从磁盘启动并运行260K参数模型,展示极致代码压缩技术。」
近日,一个名为SectorLlama的开源项目在Hacker News上引发广泛关注。该项目由开发者rdmsr创建,其核心亮点在于:用仅1356字节的x86实模式汇编代码,实现了一个完整的Llama2推理引擎。这个引擎可以直接从磁盘引导启动,加载量化后的模型,并在任何操作系统加载之前生成文本。
该项目目前支持运行stories260K模型——一个基于儿童故事训练的小型语言模型,拥有260K参数、5层结构、8个注意力头,以及512个token的词表。虽然模型规模极小,但SectorLlama证明了在极端有限的代码空间内,依然可以完成完整的Transformer前向传播过程。
从技术实现上看,SectorLlama的启动扇区会直接从磁盘将模型数据加载到高内存区域,然后对每个token执行完整的Transformer前向传播。为了将整个推理引擎压缩到如此小的体积,开发者采用了多项优化技巧:
首先,项目包含一个Python脚本(quantize.py),负责将模型打包成自定义二进制格式,这种格式专为最小化解码开销而设计。权重被量化为int8,并采用全局absmax缩放因子。exp和silu激活函数的查找表被预先计算并直接嵌入到汇编代码中,避免了运行时计算。此外,Q/K/V和gate/up权重矩阵被融合在一起,使得汇编代码只需调用一次矩阵乘法,而不是三次。
在内存管理方面,CPU被切换到“unreal mode”(非实模式),以便KV缓存能够获得足够的内存空间。此前KV缓存曾使用int8量化以最小化内存占用,但为了追求极致的代码压缩(golfing),这一量化被移除。
目前,SectorLlama的采样方式仅支持贪婪argmax。开发者表示,理论上还有空间加入更复杂的采样技术,但当前目标是在最小字节数内实现功能。代码被刻意写得尽可能压缩,因此性能和精度并非最优。模型架构和提示词也是硬编码的。
开发者指出,理论上可以修改代码来加载更大的模型(如stories15M),但这需要切换到保护模式(或可能使用unreal mode)。项目目前欢迎汇编高手贡献代码,进一步缩小二进制体积。目标是在不“作弊”的前提下,展示在最少字节数内能实现什么。作弊行为包括:自解压技巧、将推理逻辑移到Python脚本中。
SectorLlama不仅是一个技术演示,更是对极致代码压缩和底层系统编程的一次探索。它展示了在几乎没有操作系统支持的环境中,如何用最少的资源运行现代神经网络推理。对于AI开发者、汇编语言爱好者以及嵌入式系统工程师来说,这是一个极具启发性的开源项目。
来源:Heooo AI工具导航