ansigpt:基于 C89 的 microGPT 极简实现
Lobsters AI2026/02/25 06:59机翻/自动摘要/自动分类
2 阅读
内容评分
技术含量
8/10
营销水分
2/10
摘要
ansigpt 是一个完全遵循 C89 标准的 microGPT 实现,代码极简、零依赖,可在几乎所有 ANSI C 编译器上编译运行。项目提供模型加载、BPE 分词和文本生成示例,单线程推理速度约 30‑45 token/s,适合作为教学或嵌入式实验平台。虽仅支持前向推理且缺乏文档,但展示了 LLM 推理的底层实现细节。
正文
ansigpt 是一个用 ANSI C(C89)编写的 microGPT 实现,旨在展示在最小化语言特性和依赖的前提下,如何运行一个完整的自回归语言模型。项目代码全部遵循 C89 标准,避免了任何 C99 以上的特性(如变长数组、复合字面量),因此可以在几乎所有支持 ANSI C 的编译器上编译,包括老旧的嵌入式交叉编译链。
关键特性
- 极简代码基:核心实现约 1.2k 行(不含注释),全部放在单个
gpt.c文件中。 - 零外部依赖:仅使用标准库函数(
stdio.h、stdlib.h、math.h),不依赖 BLAS、OpenBLAS、Eigen 等数值库。 - 可移植性:在 Linux、macOS、Windows(MSVC、MinGW)以及多数嵌入式平台(ARM、MIPS)上均可直接编译。
- 模型兼容:支持读取 HuggingFace 格式的 GPT‑2‑style 权重(
.bin),并提供一个简易的模型转换脚本(Python)将 PyTorch 权重转为原始二进制。 - 推理示例:提供
run.c示例,演示如何加载模型、进行 化(基于 BPE)并生成文本。
使用方式
# 克隆仓库
git clone https://github.com/ansigpt/ansigpt.git
cd ansigpt
# 编译(gcc 示例)
make
# 运行示例,使用已转换的模型文件
./ansigpt_demo model.bin "Hello, world"
性能概览
- 在 x86‑64 机器上,单线程推理速度约为 30 token/s(FP32),相当于原始 GPT‑2 小模型的 1/4 左右。
- 通过手动展开矩阵乘法循环并开启
-O3 -march=native编译选项,可提升至 45 token/s。 - 受限于缺乏 SIMD 加速,GPU 加速不可用,适合作为教学或嵌入式实验平台。
局限与未来工作
- 仅实现前向推理,未提供训练或功能。
- 采用浮点
float,精度受限;计划在后续加入float16/bfloat16支持。 - 代码注释和文档仍在完善中,当前 README 只覆盖编译与运行流程。
ansigpt 通过最原始的 C 语言特性展示了 推理的底层实现细节,为想要深入理解 计算图的开发者提供了一个可直接编译、易于修改的实验平台。