返回

文章详情

展示HN:NanoEuler - 从零开始的纯C/CUDA的GPT-2规模模型

Hacker News2026年6月28日 19:38

一个完全从零开始用C/CUDA构建的GPT-2级语言模型——不使用PyTorch,没有自动求导,没有机器学习库。前向和后向传播由手动编写和验证,整个训练管道都在这个仓库中:手动编写的字节级BPE分词器,基于书籍和网络语料库的预训练,以及监督微调为聊天模型(计划使用RLHF/DPO)。它在CPU上运行(libm + OpenMP)作为一个小示范模型,并且完整的从零开始的CUDA引擎——cuBLAS的矩阵乘法,手动编写的FlashAttention,通过完整模型的梯度检查验证在CPU参考上——在单个RTX 4070上训练一个约116M参数的模型。状态与诚实。这是一个研究/教育的工件,公然构建。在大约116M参数的情况下,训练于单个消费GPU的,它是一个文本生成器,具有GPT-2-small的精神:流利的英语,没有现实世界知识。它不是一个有效的助手——聊天模型展示了预训练→SFT管道端到端地工作,它不是一个有用的聊天机器人。这个项目的重点是从零开始的工程和完整的、可理解的训练管道。执行 make check # 验证后向传播(梯度检查,双精度)执行 make # 构建训练二进制 ./nanoeuler train # 训练小型示范模型(约0.76M参数) ./nanoeuler train big # 训练大模型(约10M参数;针对GPU设计) ./nanoeuler chat # REPL:键入提示,模型继续它 为什么叫“Euler”?一个残差块计算 x = x + f(x) 将其视为数值积分的一步。前向-欧拉法通过 x(t+Δt) = x(t) + Δt · f(x(t)) 前进一个常微分方程 dx/dt = f(x)。以步长 Δt = 1 这是确切的残差更新。因此,深度残差网络是一个离散化的ODE:深度是积分时间,每一层将隐藏状态向前积分一步欧拉步骤。这是神经ODE等工作的背后观点(ResNet是连续流的欧拉离散化)。该项目的名称源于莱昂哈德·欧拉,他给了我们这个积分方法。示例输出 一个来自约116M模型的示例,经过书籍+网络语料库上的部分预训练运行(提示:Alessandro eat a):Alessandro eat a icing textile: 由仆人满意,以保持您的体重 [使用加热的、合作的年轻人参与度量过程中,其中等级被授权并包含静态。一些州的律师能够插入......内容没有意义,但注意它自学到的:真实的语法、长短句,以及从网络数据中获得的百科全书式的注册。这是一个训练在单个GPU上的小模型的预期行为——流畅的外观,肤浅的内容。更多的训练和(远)更多的数据提高流利度;世界知识需要规模,该项目并不假装拥有。架构 仅解码器的变换器,具有当前模型所共有的构建块:RMSNorm(预归一化,无偏差)应用于查询和键的旋转位置嵌入(RoPE) SwiGLU前向:下(silu(gate(x))* up(x)) 分组查询注意力(GQA):查询头共享一组较小的键/值头 多标记预测(MTP):K输出头预测下一个K个标记;辅助头改善学习的表示并实现推测解码。生成使用头0。无处有偏差。字节级BPE分词器,手动编写,采用GPT-2风格的预分词(一个前导空格附加到以下单词,所以空格不会作为独立的标记被浪费)。合并是在语料库的样本上学习的;GPU模型使用4096标记的词汇表(约3.4字节/标记,英文)。每个块是 x = x + attn(rmsnorm(x)),后跟 x = x + swiglu(rmsnorm(x))。残差连接 x = x + f(x) 是对 ODE dx/dt = f(x) 的前向-欧拉方法的一步,因此命名,以及对莱昂哈德·欧拉的致意。配置: 维度q/kv头 层 上下文 词汇 参数 小(CPU,nanoeuler.c) 128 4 / 2 4 128 512 ~1.05M GPU管道(cuda/,run_train) 768 12 / 4 16 512 4096 ~116M CPU小模型在12核上训练几个小时,是一个自包含的展示。约116M的GPU模型是真正的管道:它在书籍+网络混合上进行预训练,然后微调为聊天模型(见下文)。头大小为64(768/12),适合FlashAttention内核。验证后向传播 手动编写的反向传播很容易微妙地出错,因此每个解析梯度都与中心有限差分进行比较。检查以双精度运行,因此浮点取消不会隐藏正确的梯度:$ make check tok:最大相对误差 1.02e-04 qkvw:最大相对误差 7.20e-07 gatew:最大相对误差 6.86e-08 ... 最大相对误差:1.02e-04 >>> 后向OK(误差 < 1e-2) 每个参数张量都已检查,包括RoPE、SwiGLU、GQA和MTP的较不明显的后向传播。构建和性能 make使用 -O3 -march=native -ffast-math -fopenmp构建。矩阵乘法和注意力使用OpenMP并行化。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡